blob: 2c243e5d492bc263279cc29fad024436a2de372e [file] [log] [blame]
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: test_platform/suite_scheduler/analytics.proto
package suite_scheduler
import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
timestamp "github.com/golang/protobuf/ptypes/timestamp"
api "go.chromium.org/chromiumos/infra/proto/go/chromite/api"
chromiumos "go.chromium.org/chromiumos/infra/proto/go/chromiumos"
device "go.chromium.org/chromiumos/infra/proto/go/device"
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 BranchFilter_Channel int32
const (
BranchFilter_BRANCH_REF_NOT_SET BranchFilter_Channel = 0
BranchFilter_MASTER BranchFilter_Channel = 1
BranchFilter_DEV BranchFilter_Channel = 2
BranchFilter_BETA BranchFilter_Channel = 3
BranchFilter_STABLE BranchFilter_Channel = 4
)
var BranchFilter_Channel_name = map[int32]string{
0: "BRANCH_REF_NOT_SET",
1: "MASTER",
2: "DEV",
3: "BETA",
4: "STABLE",
}
var BranchFilter_Channel_value = map[string]int32{
"BRANCH_REF_NOT_SET": 0,
"MASTER": 1,
"DEV": 2,
"BETA": 3,
"STABLE": 4,
}
func (x BranchFilter_Channel) String() string {
return proto.EnumName(BranchFilter_Channel_name, int32(x))
}
func (BranchFilter_Channel) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_c98de5d5bbf67507, []int{2, 0}
}
type BranchFilter_Operator int32
const (
BranchFilter_UNDEFINED BranchFilter_Operator = 0
BranchFilter_EQ BranchFilter_Operator = 1
BranchFilter_GE BranchFilter_Operator = 2
BranchFilter_LE BranchFilter_Operator = 3
)
var BranchFilter_Operator_name = map[int32]string{
0: "UNDEFINED",
1: "EQ",
2: "GE",
3: "LE",
}
var BranchFilter_Operator_value = map[string]int32{
"UNDEFINED": 0,
"EQ": 1,
"GE": 2,
"LE": 3,
}
func (x BranchFilter_Operator) String() string {
return proto.EnumName(BranchFilter_Operator_name, int32(x))
}
func (BranchFilter_Operator) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_c98de5d5bbf67507, []int{2, 1}
}
// The build information queried from BuildBucket DB.
type BuildInfo struct {
// The name of the build target (a.k.a. board name), e.g., "gale", "eve".
BuildTarget *chromiumos.BuildTarget `protobuf:"bytes,1,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
// The milestone number (e.g. 73).
Milestone uint32 `protobuf:"varint,2,opt,name=milestone,proto3" json:"milestone,omitempty"`
// The chrome os version (e.g. "12240.0.0" or "").
ChromeOsVersion string `protobuf:"bytes,3,opt,name=chrome_os_version,json=chromeOsVersion,proto3" json:"chrome_os_version,omitempty"`
// Build type with the board name as the prefix, e.g.
// "RELEASE" or "FIRMWARE".
Type chromiumos.Branch_BranchType `protobuf:"varint,4,opt,name=type,proto3,enum=chromiumos.Branch_BranchType" json:"type,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *BuildInfo) Reset() { *m = BuildInfo{} }
func (m *BuildInfo) String() string { return proto.CompactTextString(m) }
func (*BuildInfo) ProtoMessage() {}
func (*BuildInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_c98de5d5bbf67507, []int{0}
}
func (m *BuildInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BuildInfo.Unmarshal(m, b)
}
func (m *BuildInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_BuildInfo.Marshal(b, m, deterministic)
}
func (m *BuildInfo) XXX_Merge(src proto.Message) {
xxx_messageInfo_BuildInfo.Merge(m, src)
}
func (m *BuildInfo) XXX_Size() int {
return xxx_messageInfo_BuildInfo.Size(m)
}
func (m *BuildInfo) XXX_DiscardUnknown() {
xxx_messageInfo_BuildInfo.DiscardUnknown(m)
}
var xxx_messageInfo_BuildInfo proto.InternalMessageInfo
func (m *BuildInfo) GetBuildTarget() *chromiumos.BuildTarget {
if m != nil {
return m.BuildTarget
}
return nil
}
func (m *BuildInfo) GetMilestone() uint32 {
if m != nil {
return m.Milestone
}
return 0
}
func (m *BuildInfo) GetChromeOsVersion() string {
if m != nil {
return m.ChromeOsVersion
}
return ""
}
func (m *BuildInfo) GetType() chromiumos.Branch_BranchType {
if m != nil {
return m.Type
}
return chromiumos.Branch_UNSPECIFIED
}
// The firmware build information queried from BuildBucket DB.
type FirmwareBuildInfo struct {
// Board name.
BuildTarget *chromiumos.BuildTarget `protobuf:"bytes,1,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
// Build type, "RELEASE" or "FIRMWARE". Each has different form of
// artifacts.
Type chromiumos.Branch_BranchType `protobuf:"varint,2,opt,name=type,proto3,enum=chromiumos.Branch_BranchType" json:"type,omitempty"`
// Relative path to the artifact file, e.g.
// "firmware-board-12345.67.B-firmwarebranch/RFoo-1.0.0-b1e234567/board"
// for firmware type or "board-release/R81-12766.0.0" for release type.
Artifact *api.Artifact `protobuf:"bytes,3,opt,name=artifact,proto3" json:"artifact,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *FirmwareBuildInfo) Reset() { *m = FirmwareBuildInfo{} }
func (m *FirmwareBuildInfo) String() string { return proto.CompactTextString(m) }
func (*FirmwareBuildInfo) ProtoMessage() {}
func (*FirmwareBuildInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_c98de5d5bbf67507, []int{1}
}
func (m *FirmwareBuildInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FirmwareBuildInfo.Unmarshal(m, b)
}
func (m *FirmwareBuildInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_FirmwareBuildInfo.Marshal(b, m, deterministic)
}
func (m *FirmwareBuildInfo) XXX_Merge(src proto.Message) {
xxx_messageInfo_FirmwareBuildInfo.Merge(m, src)
}
func (m *FirmwareBuildInfo) XXX_Size() int {
return xxx_messageInfo_FirmwareBuildInfo.Size(m)
}
func (m *FirmwareBuildInfo) XXX_DiscardUnknown() {
xxx_messageInfo_FirmwareBuildInfo.DiscardUnknown(m)
}
var xxx_messageInfo_FirmwareBuildInfo proto.InternalMessageInfo
func (m *FirmwareBuildInfo) GetBuildTarget() *chromiumos.BuildTarget {
if m != nil {
return m.BuildTarget
}
return nil
}
func (m *FirmwareBuildInfo) GetType() chromiumos.Branch_BranchType {
if m != nil {
return m.Type
}
return chromiumos.Branch_UNSPECIFIED
}
func (m *FirmwareBuildInfo) GetArtifact() *api.Artifact {
if m != nil {
return m.Artifact
}
return nil
}
// BranchFilter is a combination of channel, operator and
// lag, e.g. a filter of the form ">=tot-2" is stated as
// { channel = MASTER; operator = GE; lag = 2; };
// a filter of "==tot" is translated to
// { channel = MASTER; operator = EQ; lag = 0; }.
type BranchFilter struct {
Channel BranchFilter_Channel `protobuf:"varint,1,opt,name=channel,proto3,enum=test_platform.suite_scheduler.BranchFilter_Channel" json:"channel,omitempty"`
Operator BranchFilter_Operator `protobuf:"varint,2,opt,name=operator,proto3,enum=test_platform.suite_scheduler.BranchFilter_Operator" json:"operator,omitempty"`
// Number of minor versions behind tip-of-tree on channel.
Lag int32 `protobuf:"varint,3,opt,name=lag,proto3" json:"lag,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *BranchFilter) Reset() { *m = BranchFilter{} }
func (m *BranchFilter) String() string { return proto.CompactTextString(m) }
func (*BranchFilter) ProtoMessage() {}
func (*BranchFilter) Descriptor() ([]byte, []int) {
return fileDescriptor_c98de5d5bbf67507, []int{2}
}
func (m *BranchFilter) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BranchFilter.Unmarshal(m, b)
}
func (m *BranchFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_BranchFilter.Marshal(b, m, deterministic)
}
func (m *BranchFilter) XXX_Merge(src proto.Message) {
xxx_messageInfo_BranchFilter.Merge(m, src)
}
func (m *BranchFilter) XXX_Size() int {
return xxx_messageInfo_BranchFilter.Size(m)
}
func (m *BranchFilter) XXX_DiscardUnknown() {
xxx_messageInfo_BranchFilter.DiscardUnknown(m)
}
var xxx_messageInfo_BranchFilter proto.InternalMessageInfo
func (m *BranchFilter) GetChannel() BranchFilter_Channel {
if m != nil {
return m.Channel
}
return BranchFilter_BRANCH_REF_NOT_SET
}
func (m *BranchFilter) GetOperator() BranchFilter_Operator {
if m != nil {
return m.Operator
}
return BranchFilter_UNDEFINED
}
func (m *BranchFilter) GetLag() int32 {
if m != nil {
return m.Lag
}
return 0
}
// BuildFilters defines on which build to run a suite test.
type BuildFilters struct {
// If true, use the relax_builds.
OnlyHwtestSanityRequired bool `protobuf:"varint,1,opt,name=only_hwtest_sanity_required,json=onlyHwtestSanityRequired,proto3" json:"only_hwtest_sanity_required,omitempty"`
// BranchFilter defines the target branch of the new build.
// Note, the final result is "AND" of each single filter.
BranchFilters []*BranchFilter `protobuf:"bytes,2,rep,name=branch_filters,json=branchFilters,proto3" json:"branch_filters,omitempty"`
// The firmware build type, e.g., "RELEASE" or "FIRMWARE". Note,
// in suite scheduler, "cros" = "RELEASE".
FirmwareRoBuildSpec chromiumos.Branch_BranchType `protobuf:"varint,3,opt,name=firmware_ro_build_spec,json=firmwareRoBuildSpec,proto3,enum=chromiumos.Branch_BranchType" json:"firmware_ro_build_spec,omitempty"`
FirmwareRwBuildSpec chromiumos.Branch_BranchType `protobuf:"varint,4,opt,name=firmware_rw_build_spec,json=firmwareRwBuildSpec,proto3,enum=chromiumos.Branch_BranchType" json:"firmware_rw_build_spec,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *BuildFilters) Reset() { *m = BuildFilters{} }
func (m *BuildFilters) String() string { return proto.CompactTextString(m) }
func (*BuildFilters) ProtoMessage() {}
func (*BuildFilters) Descriptor() ([]byte, []int) {
return fileDescriptor_c98de5d5bbf67507, []int{3}
}
func (m *BuildFilters) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BuildFilters.Unmarshal(m, b)
}
func (m *BuildFilters) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_BuildFilters.Marshal(b, m, deterministic)
}
func (m *BuildFilters) XXX_Merge(src proto.Message) {
xxx_messageInfo_BuildFilters.Merge(m, src)
}
func (m *BuildFilters) XXX_Size() int {
return xxx_messageInfo_BuildFilters.Size(m)
}
func (m *BuildFilters) XXX_DiscardUnknown() {
xxx_messageInfo_BuildFilters.DiscardUnknown(m)
}
var xxx_messageInfo_BuildFilters proto.InternalMessageInfo
func (m *BuildFilters) GetOnlyHwtestSanityRequired() bool {
if m != nil {
return m.OnlyHwtestSanityRequired
}
return false
}
func (m *BuildFilters) GetBranchFilters() []*BranchFilter {
if m != nil {
return m.BranchFilters
}
return nil
}
func (m *BuildFilters) GetFirmwareRoBuildSpec() chromiumos.Branch_BranchType {
if m != nil {
return m.FirmwareRoBuildSpec
}
return chromiumos.Branch_UNSPECIFIED
}
func (m *BuildFilters) GetFirmwareRwBuildSpec() chromiumos.Branch_BranchType {
if m != nil {
return m.FirmwareRwBuildSpec
}
return chromiumos.Branch_UNSPECIFIED
}
// ScheduleJobTrigger defines the trigger to kick off a suite test.
type ScheduleJobTrigger struct {
// Types that are valid to be assigned to Trigger:
// *ScheduleJobTrigger_Weekly
// *ScheduleJobTrigger_Nightly
// *ScheduleJobTrigger_Interval
Trigger isScheduleJobTrigger_Trigger `protobuf_oneof:"trigger"`
BuildFilters *BuildFilters `protobuf:"bytes,4,opt,name=build_filters,json=buildFilters,proto3" json:"build_filters,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ScheduleJobTrigger) Reset() { *m = ScheduleJobTrigger{} }
func (m *ScheduleJobTrigger) String() string { return proto.CompactTextString(m) }
func (*ScheduleJobTrigger) ProtoMessage() {}
func (*ScheduleJobTrigger) Descriptor() ([]byte, []int) {
return fileDescriptor_c98de5d5bbf67507, []int{4}
}
func (m *ScheduleJobTrigger) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ScheduleJobTrigger.Unmarshal(m, b)
}
func (m *ScheduleJobTrigger) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ScheduleJobTrigger.Marshal(b, m, deterministic)
}
func (m *ScheduleJobTrigger) XXX_Merge(src proto.Message) {
xxx_messageInfo_ScheduleJobTrigger.Merge(m, src)
}
func (m *ScheduleJobTrigger) XXX_Size() int {
return xxx_messageInfo_ScheduleJobTrigger.Size(m)
}
func (m *ScheduleJobTrigger) XXX_DiscardUnknown() {
xxx_messageInfo_ScheduleJobTrigger.DiscardUnknown(m)
}
var xxx_messageInfo_ScheduleJobTrigger proto.InternalMessageInfo
type isScheduleJobTrigger_Trigger interface {
isScheduleJobTrigger_Trigger()
}
type ScheduleJobTrigger_Weekly struct {
Weekly *ScheduleJobTrigger_WeeklyTrigger `protobuf:"bytes,1,opt,name=weekly,proto3,oneof"`
}
type ScheduleJobTrigger_Nightly struct {
Nightly *ScheduleJobTrigger_NightlyTrigger `protobuf:"bytes,2,opt,name=nightly,proto3,oneof"`
}
type ScheduleJobTrigger_Interval struct {
Interval *ScheduleJobTrigger_IntervalTrigger `protobuf:"bytes,3,opt,name=interval,proto3,oneof"`
}
func (*ScheduleJobTrigger_Weekly) isScheduleJobTrigger_Trigger() {}
func (*ScheduleJobTrigger_Nightly) isScheduleJobTrigger_Trigger() {}
func (*ScheduleJobTrigger_Interval) isScheduleJobTrigger_Trigger() {}
func (m *ScheduleJobTrigger) GetTrigger() isScheduleJobTrigger_Trigger {
if m != nil {
return m.Trigger
}
return nil
}
func (m *ScheduleJobTrigger) GetWeekly() *ScheduleJobTrigger_WeeklyTrigger {
if x, ok := m.GetTrigger().(*ScheduleJobTrigger_Weekly); ok {
return x.Weekly
}
return nil
}
func (m *ScheduleJobTrigger) GetNightly() *ScheduleJobTrigger_NightlyTrigger {
if x, ok := m.GetTrigger().(*ScheduleJobTrigger_Nightly); ok {
return x.Nightly
}
return nil
}
func (m *ScheduleJobTrigger) GetInterval() *ScheduleJobTrigger_IntervalTrigger {
if x, ok := m.GetTrigger().(*ScheduleJobTrigger_Interval); ok {
return x.Interval
}
return nil
}
func (m *ScheduleJobTrigger) GetBuildFilters() *BuildFilters {
if m != nil {
return m.BuildFilters
}
return nil
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*ScheduleJobTrigger) XXX_OneofWrappers() []interface{} {
return []interface{}{
(*ScheduleJobTrigger_Weekly)(nil),
(*ScheduleJobTrigger_Nightly)(nil),
(*ScheduleJobTrigger_Interval)(nil),
}
}
// WeeklyTrigger is for the suite test running every week.
// "day" is from 0 to 6.
type ScheduleJobTrigger_WeeklyTrigger struct {
Day uint32 `protobuf:"varint,1,opt,name=day,proto3" json:"day,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ScheduleJobTrigger_WeeklyTrigger) Reset() { *m = ScheduleJobTrigger_WeeklyTrigger{} }
func (m *ScheduleJobTrigger_WeeklyTrigger) String() string { return proto.CompactTextString(m) }
func (*ScheduleJobTrigger_WeeklyTrigger) ProtoMessage() {}
func (*ScheduleJobTrigger_WeeklyTrigger) Descriptor() ([]byte, []int) {
return fileDescriptor_c98de5d5bbf67507, []int{4, 0}
}
func (m *ScheduleJobTrigger_WeeklyTrigger) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ScheduleJobTrigger_WeeklyTrigger.Unmarshal(m, b)
}
func (m *ScheduleJobTrigger_WeeklyTrigger) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ScheduleJobTrigger_WeeklyTrigger.Marshal(b, m, deterministic)
}
func (m *ScheduleJobTrigger_WeeklyTrigger) XXX_Merge(src proto.Message) {
xxx_messageInfo_ScheduleJobTrigger_WeeklyTrigger.Merge(m, src)
}
func (m *ScheduleJobTrigger_WeeklyTrigger) XXX_Size() int {
return xxx_messageInfo_ScheduleJobTrigger_WeeklyTrigger.Size(m)
}
func (m *ScheduleJobTrigger_WeeklyTrigger) XXX_DiscardUnknown() {
xxx_messageInfo_ScheduleJobTrigger_WeeklyTrigger.DiscardUnknown(m)
}
var xxx_messageInfo_ScheduleJobTrigger_WeeklyTrigger proto.InternalMessageInfo
func (m *ScheduleJobTrigger_WeeklyTrigger) GetDay() uint32 {
if m != nil {
return m.Day
}
return 0
}
// NightlyTrigger is for the suite test running every day.
// "hour" is from 0 to 23.
type ScheduleJobTrigger_NightlyTrigger struct {
Hour uint32 `protobuf:"varint,1,opt,name=hour,proto3" json:"hour,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ScheduleJobTrigger_NightlyTrigger) Reset() { *m = ScheduleJobTrigger_NightlyTrigger{} }
func (m *ScheduleJobTrigger_NightlyTrigger) String() string { return proto.CompactTextString(m) }
func (*ScheduleJobTrigger_NightlyTrigger) ProtoMessage() {}
func (*ScheduleJobTrigger_NightlyTrigger) Descriptor() ([]byte, []int) {
return fileDescriptor_c98de5d5bbf67507, []int{4, 1}
}
func (m *ScheduleJobTrigger_NightlyTrigger) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ScheduleJobTrigger_NightlyTrigger.Unmarshal(m, b)
}
func (m *ScheduleJobTrigger_NightlyTrigger) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ScheduleJobTrigger_NightlyTrigger.Marshal(b, m, deterministic)
}
func (m *ScheduleJobTrigger_NightlyTrigger) XXX_Merge(src proto.Message) {
xxx_messageInfo_ScheduleJobTrigger_NightlyTrigger.Merge(m, src)
}
func (m *ScheduleJobTrigger_NightlyTrigger) XXX_Size() int {
return xxx_messageInfo_ScheduleJobTrigger_NightlyTrigger.Size(m)
}
func (m *ScheduleJobTrigger_NightlyTrigger) XXX_DiscardUnknown() {
xxx_messageInfo_ScheduleJobTrigger_NightlyTrigger.DiscardUnknown(m)
}
var xxx_messageInfo_ScheduleJobTrigger_NightlyTrigger proto.InternalMessageInfo
func (m *ScheduleJobTrigger_NightlyTrigger) GetHour() uint32 {
if m != nil {
return m.Hour
}
return 0
}
// IntervalTrigger is for the suite test running every N times the
// scheduler operates.
type ScheduleJobTrigger_IntervalTrigger struct {
// pause represents the number of times scheduler skips this job
// once the job completed. If pause is zero, we pick this job
// whenever scheduler is kicked off.
Pause uint32 `protobuf:"varint,1,opt,name=pause,proto3" json:"pause,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ScheduleJobTrigger_IntervalTrigger) Reset() { *m = ScheduleJobTrigger_IntervalTrigger{} }
func (m *ScheduleJobTrigger_IntervalTrigger) String() string { return proto.CompactTextString(m) }
func (*ScheduleJobTrigger_IntervalTrigger) ProtoMessage() {}
func (*ScheduleJobTrigger_IntervalTrigger) Descriptor() ([]byte, []int) {
return fileDescriptor_c98de5d5bbf67507, []int{4, 2}
}
func (m *ScheduleJobTrigger_IntervalTrigger) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ScheduleJobTrigger_IntervalTrigger.Unmarshal(m, b)
}
func (m *ScheduleJobTrigger_IntervalTrigger) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ScheduleJobTrigger_IntervalTrigger.Marshal(b, m, deterministic)
}
func (m *ScheduleJobTrigger_IntervalTrigger) XXX_Merge(src proto.Message) {
xxx_messageInfo_ScheduleJobTrigger_IntervalTrigger.Merge(m, src)
}
func (m *ScheduleJobTrigger_IntervalTrigger) XXX_Size() int {
return xxx_messageInfo_ScheduleJobTrigger_IntervalTrigger.Size(m)
}
func (m *ScheduleJobTrigger_IntervalTrigger) XXX_DiscardUnknown() {
xxx_messageInfo_ScheduleJobTrigger_IntervalTrigger.DiscardUnknown(m)
}
var xxx_messageInfo_ScheduleJobTrigger_IntervalTrigger proto.InternalMessageInfo
func (m *ScheduleJobTrigger_IntervalTrigger) GetPause() uint32 {
if m != nil {
return m.Pause
}
return 0
}
// ScheduleJob represents the schedule result for a specific board
// and model.
type ScheduleJob struct {
// Model.
Model *device.ModelId `protobuf:"bytes,1,opt,name=model,proto3" json:"model,omitempty"`
// Board.
BuildTarget *chromiumos.BuildTarget `protobuf:"bytes,2,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
// Types that are valid to be assigned to Result:
// *ScheduleJob_QueuedTaskId
// *ScheduleJob_Justification
Result isScheduleJob_Result `protobuf_oneof:"result"`
// Result generated time in UTC.
GeneratedTime *timestamp.Timestamp `protobuf:"bytes,5,opt,name=generated_time,json=generatedTime,proto3" json:"generated_time,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ScheduleJob) Reset() { *m = ScheduleJob{} }
func (m *ScheduleJob) String() string { return proto.CompactTextString(m) }
func (*ScheduleJob) ProtoMessage() {}
func (*ScheduleJob) Descriptor() ([]byte, []int) {
return fileDescriptor_c98de5d5bbf67507, []int{5}
}
func (m *ScheduleJob) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ScheduleJob.Unmarshal(m, b)
}
func (m *ScheduleJob) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ScheduleJob.Marshal(b, m, deterministic)
}
func (m *ScheduleJob) XXX_Merge(src proto.Message) {
xxx_messageInfo_ScheduleJob.Merge(m, src)
}
func (m *ScheduleJob) XXX_Size() int {
return xxx_messageInfo_ScheduleJob.Size(m)
}
func (m *ScheduleJob) XXX_DiscardUnknown() {
xxx_messageInfo_ScheduleJob.DiscardUnknown(m)
}
var xxx_messageInfo_ScheduleJob proto.InternalMessageInfo
func (m *ScheduleJob) GetModel() *device.ModelId {
if m != nil {
return m.Model
}
return nil
}
func (m *ScheduleJob) GetBuildTarget() *chromiumos.BuildTarget {
if m != nil {
return m.BuildTarget
}
return nil
}
type isScheduleJob_Result interface {
isScheduleJob_Result()
}
type ScheduleJob_QueuedTaskId struct {
QueuedTaskId string `protobuf:"bytes,3,opt,name=queued_task_id,json=queuedTaskId,proto3,oneof"`
}
type ScheduleJob_Justification struct {
Justification string `protobuf:"bytes,4,opt,name=justification,proto3,oneof"`
}
func (*ScheduleJob_QueuedTaskId) isScheduleJob_Result() {}
func (*ScheduleJob_Justification) isScheduleJob_Result() {}
func (m *ScheduleJob) GetResult() isScheduleJob_Result {
if m != nil {
return m.Result
}
return nil
}
func (m *ScheduleJob) GetQueuedTaskId() string {
if x, ok := m.GetResult().(*ScheduleJob_QueuedTaskId); ok {
return x.QueuedTaskId
}
return ""
}
func (m *ScheduleJob) GetJustification() string {
if x, ok := m.GetResult().(*ScheduleJob_Justification); ok {
return x.Justification
}
return ""
}
func (m *ScheduleJob) GetGeneratedTime() *timestamp.Timestamp {
if m != nil {
return m.GeneratedTime
}
return nil
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*ScheduleJob) XXX_OneofWrappers() []interface{} {
return []interface{}{
(*ScheduleJob_QueuedTaskId)(nil),
(*ScheduleJob_Justification)(nil),
}
}
// ScheduleJobSection represents a schedule request configured in
// suite_scheduler.ini. Varying boards and models, a job section can
// have multiple suite tests scheduled.
type ScheduleJobSection struct {
// job_name is the name of a schedule request defined in config,
// e.g. “CrosAVAnalysis”.
JobName string `protobuf:"bytes,1,opt,name=job_name,json=jobName,proto3" json:"job_name,omitempty"`
// Trigger to run jobs under this section.
ScheduleJobTrigger *ScheduleJobTrigger `protobuf:"bytes,2,opt,name=schedule_job_trigger,json=scheduleJobTrigger,proto3" json:"schedule_job_trigger,omitempty"`
// Specific models to run this suite.
Models []*device.ModelId `protobuf:"bytes,3,rep,name=models,proto3" json:"models,omitempty"`
// Specific boards to run this suite.
BuildTargets []*chromiumos.BuildTarget `protobuf:"bytes,4,rep,name=build_targets,json=buildTargets,proto3" json:"build_targets,omitempty"`
MatchedBuilds []*ScheduleJobSection_MatchedBuild `protobuf:"bytes,5,rep,name=matched_builds,json=matchedBuilds,proto3" json:"matched_builds,omitempty"`
// Jobs in this section.
ScheduleJobs []*ScheduleJob `protobuf:"bytes,6,rep,name=schedule_jobs,json=scheduleJobs,proto3" json:"schedule_jobs,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ScheduleJobSection) Reset() { *m = ScheduleJobSection{} }
func (m *ScheduleJobSection) String() string { return proto.CompactTextString(m) }
func (*ScheduleJobSection) ProtoMessage() {}
func (*ScheduleJobSection) Descriptor() ([]byte, []int) {
return fileDescriptor_c98de5d5bbf67507, []int{6}
}
func (m *ScheduleJobSection) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ScheduleJobSection.Unmarshal(m, b)
}
func (m *ScheduleJobSection) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ScheduleJobSection.Marshal(b, m, deterministic)
}
func (m *ScheduleJobSection) XXX_Merge(src proto.Message) {
xxx_messageInfo_ScheduleJobSection.Merge(m, src)
}
func (m *ScheduleJobSection) XXX_Size() int {
return xxx_messageInfo_ScheduleJobSection.Size(m)
}
func (m *ScheduleJobSection) XXX_DiscardUnknown() {
xxx_messageInfo_ScheduleJobSection.DiscardUnknown(m)
}
var xxx_messageInfo_ScheduleJobSection proto.InternalMessageInfo
func (m *ScheduleJobSection) GetJobName() string {
if m != nil {
return m.JobName
}
return ""
}
func (m *ScheduleJobSection) GetScheduleJobTrigger() *ScheduleJobTrigger {
if m != nil {
return m.ScheduleJobTrigger
}
return nil
}
func (m *ScheduleJobSection) GetModels() []*device.ModelId {
if m != nil {
return m.Models
}
return nil
}
func (m *ScheduleJobSection) GetBuildTargets() []*chromiumos.BuildTarget {
if m != nil {
return m.BuildTargets
}
return nil
}
func (m *ScheduleJobSection) GetMatchedBuilds() []*ScheduleJobSection_MatchedBuild {
if m != nil {
return m.MatchedBuilds
}
return nil
}
func (m *ScheduleJobSection) GetScheduleJobs() []*ScheduleJob {
if m != nil {
return m.ScheduleJobs
}
return nil
}
// The build matched with this job section on BuildTarget and BuildFilters.
type ScheduleJobSection_MatchedBuild struct {
// Types that are valid to be assigned to CrosBuild:
// *ScheduleJobSection_MatchedBuild_ReleaseBuild
// *ScheduleJobSection_MatchedBuild_RelaxBuild
// *ScheduleJobSection_MatchedBuild_FirmwareRoBuild
// *ScheduleJobSection_MatchedBuild_FirmwareRwBuild
CrosBuild isScheduleJobSection_MatchedBuild_CrosBuild `protobuf_oneof:"cros_build"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ScheduleJobSection_MatchedBuild) Reset() { *m = ScheduleJobSection_MatchedBuild{} }
func (m *ScheduleJobSection_MatchedBuild) String() string { return proto.CompactTextString(m) }
func (*ScheduleJobSection_MatchedBuild) ProtoMessage() {}
func (*ScheduleJobSection_MatchedBuild) Descriptor() ([]byte, []int) {
return fileDescriptor_c98de5d5bbf67507, []int{6, 0}
}
func (m *ScheduleJobSection_MatchedBuild) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ScheduleJobSection_MatchedBuild.Unmarshal(m, b)
}
func (m *ScheduleJobSection_MatchedBuild) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ScheduleJobSection_MatchedBuild.Marshal(b, m, deterministic)
}
func (m *ScheduleJobSection_MatchedBuild) XXX_Merge(src proto.Message) {
xxx_messageInfo_ScheduleJobSection_MatchedBuild.Merge(m, src)
}
func (m *ScheduleJobSection_MatchedBuild) XXX_Size() int {
return xxx_messageInfo_ScheduleJobSection_MatchedBuild.Size(m)
}
func (m *ScheduleJobSection_MatchedBuild) XXX_DiscardUnknown() {
xxx_messageInfo_ScheduleJobSection_MatchedBuild.DiscardUnknown(m)
}
var xxx_messageInfo_ScheduleJobSection_MatchedBuild proto.InternalMessageInfo
type isScheduleJobSection_MatchedBuild_CrosBuild interface {
isScheduleJobSection_MatchedBuild_CrosBuild()
}
type ScheduleJobSection_MatchedBuild_ReleaseBuild struct {
ReleaseBuild *BuildInfo `protobuf:"bytes,1,opt,name=release_build,json=releaseBuild,proto3,oneof"`
}
type ScheduleJobSection_MatchedBuild_RelaxBuild struct {
RelaxBuild *BuildInfo `protobuf:"bytes,2,opt,name=relax_build,json=relaxBuild,proto3,oneof"`
}
type ScheduleJobSection_MatchedBuild_FirmwareRoBuild struct {
FirmwareRoBuild *FirmwareBuildInfo `protobuf:"bytes,3,opt,name=firmware_ro_build,json=firmwareRoBuild,proto3,oneof"`
}
type ScheduleJobSection_MatchedBuild_FirmwareRwBuild struct {
FirmwareRwBuild *FirmwareBuildInfo `protobuf:"bytes,4,opt,name=firmware_rw_build,json=firmwareRwBuild,proto3,oneof"`
}
func (*ScheduleJobSection_MatchedBuild_ReleaseBuild) isScheduleJobSection_MatchedBuild_CrosBuild() {}
func (*ScheduleJobSection_MatchedBuild_RelaxBuild) isScheduleJobSection_MatchedBuild_CrosBuild() {}
func (*ScheduleJobSection_MatchedBuild_FirmwareRoBuild) isScheduleJobSection_MatchedBuild_CrosBuild() {
}
func (*ScheduleJobSection_MatchedBuild_FirmwareRwBuild) isScheduleJobSection_MatchedBuild_CrosBuild() {
}
func (m *ScheduleJobSection_MatchedBuild) GetCrosBuild() isScheduleJobSection_MatchedBuild_CrosBuild {
if m != nil {
return m.CrosBuild
}
return nil
}
func (m *ScheduleJobSection_MatchedBuild) GetReleaseBuild() *BuildInfo {
if x, ok := m.GetCrosBuild().(*ScheduleJobSection_MatchedBuild_ReleaseBuild); ok {
return x.ReleaseBuild
}
return nil
}
func (m *ScheduleJobSection_MatchedBuild) GetRelaxBuild() *BuildInfo {
if x, ok := m.GetCrosBuild().(*ScheduleJobSection_MatchedBuild_RelaxBuild); ok {
return x.RelaxBuild
}
return nil
}
func (m *ScheduleJobSection_MatchedBuild) GetFirmwareRoBuild() *FirmwareBuildInfo {
if x, ok := m.GetCrosBuild().(*ScheduleJobSection_MatchedBuild_FirmwareRoBuild); ok {
return x.FirmwareRoBuild
}
return nil
}
func (m *ScheduleJobSection_MatchedBuild) GetFirmwareRwBuild() *FirmwareBuildInfo {
if x, ok := m.GetCrosBuild().(*ScheduleJobSection_MatchedBuild_FirmwareRwBuild); ok {
return x.FirmwareRwBuild
}
return nil
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*ScheduleJobSection_MatchedBuild) XXX_OneofWrappers() []interface{} {
return []interface{}{
(*ScheduleJobSection_MatchedBuild_ReleaseBuild)(nil),
(*ScheduleJobSection_MatchedBuild_RelaxBuild)(nil),
(*ScheduleJobSection_MatchedBuild_FirmwareRoBuild)(nil),
(*ScheduleJobSection_MatchedBuild_FirmwareRwBuild)(nil),
}
}
// The response received from cros_test_platform.
type ExecutionResponse struct {
// build id used in cros_test_platform.
CtpBuildId string `protobuf:"bytes,1,opt,name=ctp_build_id,json=ctpBuildId,proto3" json:"ctp_build_id,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ExecutionResponse) Reset() { *m = ExecutionResponse{} }
func (m *ExecutionResponse) String() string { return proto.CompactTextString(m) }
func (*ExecutionResponse) ProtoMessage() {}
func (*ExecutionResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_c98de5d5bbf67507, []int{7}
}
func (m *ExecutionResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ExecutionResponse.Unmarshal(m, b)
}
func (m *ExecutionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ExecutionResponse.Marshal(b, m, deterministic)
}
func (m *ExecutionResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_ExecutionResponse.Merge(m, src)
}
func (m *ExecutionResponse) XXX_Size() int {
return xxx_messageInfo_ExecutionResponse.Size(m)
}
func (m *ExecutionResponse) XXX_DiscardUnknown() {
xxx_messageInfo_ExecutionResponse.DiscardUnknown(m)
}
var xxx_messageInfo_ExecutionResponse proto.InternalMessageInfo
func (m *ExecutionResponse) GetCtpBuildId() string {
if m != nil {
return m.CtpBuildId
}
return ""
}
// The error message received from cros_test_platform.
type ExecutionError struct {
ErrorMessage string `protobuf:"bytes,1,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ExecutionError) Reset() { *m = ExecutionError{} }
func (m *ExecutionError) String() string { return proto.CompactTextString(m) }
func (*ExecutionError) ProtoMessage() {}
func (*ExecutionError) Descriptor() ([]byte, []int) {
return fileDescriptor_c98de5d5bbf67507, []int{8}
}
func (m *ExecutionError) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ExecutionError.Unmarshal(m, b)
}
func (m *ExecutionError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ExecutionError.Marshal(b, m, deterministic)
}
func (m *ExecutionError) XXX_Merge(src proto.Message) {
xxx_messageInfo_ExecutionError.Merge(m, src)
}
func (m *ExecutionError) XXX_Size() int {
return xxx_messageInfo_ExecutionError.Size(m)
}
func (m *ExecutionError) XXX_DiscardUnknown() {
xxx_messageInfo_ExecutionError.DiscardUnknown(m)
}
var xxx_messageInfo_ExecutionError proto.InternalMessageInfo
func (m *ExecutionError) GetErrorMessage() string {
if m != nil {
return m.ErrorMessage
}
return ""
}
// ExecutionTask bridges suite scheduler and cros_test_platform. With it,
// we could track the execution reuslt for a scheduled test.
type ExecutionTask struct {
// The ID used in JobResult, to track suite's execution.
QueuedTaskId string `protobuf:"bytes,1,opt,name=queued_task_id,json=queuedTaskId,proto3" json:"queued_task_id,omitempty"`
// The scheduling result from cros_test_platform, either a build id
// error message.
//
// Types that are valid to be assigned to Result:
// *ExecutionTask_Response
// *ExecutionTask_Error
Result isExecutionTask_Result `protobuf_oneof:"result"`
// Request sent time in UTC.
RequestSent *timestamp.Timestamp `protobuf:"bytes,4,opt,name=request_sent,json=requestSent,proto3" json:"request_sent,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ExecutionTask) Reset() { *m = ExecutionTask{} }
func (m *ExecutionTask) String() string { return proto.CompactTextString(m) }
func (*ExecutionTask) ProtoMessage() {}
func (*ExecutionTask) Descriptor() ([]byte, []int) {
return fileDescriptor_c98de5d5bbf67507, []int{9}
}
func (m *ExecutionTask) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ExecutionTask.Unmarshal(m, b)
}
func (m *ExecutionTask) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ExecutionTask.Marshal(b, m, deterministic)
}
func (m *ExecutionTask) XXX_Merge(src proto.Message) {
xxx_messageInfo_ExecutionTask.Merge(m, src)
}
func (m *ExecutionTask) XXX_Size() int {
return xxx_messageInfo_ExecutionTask.Size(m)
}
func (m *ExecutionTask) XXX_DiscardUnknown() {
xxx_messageInfo_ExecutionTask.DiscardUnknown(m)
}
var xxx_messageInfo_ExecutionTask proto.InternalMessageInfo
func (m *ExecutionTask) GetQueuedTaskId() string {
if m != nil {
return m.QueuedTaskId
}
return ""
}
type isExecutionTask_Result interface {
isExecutionTask_Result()
}
type ExecutionTask_Response struct {
Response *ExecutionResponse `protobuf:"bytes,2,opt,name=response,proto3,oneof"`
}
type ExecutionTask_Error struct {
Error *ExecutionError `protobuf:"bytes,3,opt,name=error,proto3,oneof"`
}
func (*ExecutionTask_Response) isExecutionTask_Result() {}
func (*ExecutionTask_Error) isExecutionTask_Result() {}
func (m *ExecutionTask) GetResult() isExecutionTask_Result {
if m != nil {
return m.Result
}
return nil
}
func (m *ExecutionTask) GetResponse() *ExecutionResponse {
if x, ok := m.GetResult().(*ExecutionTask_Response); ok {
return x.Response
}
return nil
}
func (m *ExecutionTask) GetError() *ExecutionError {
if x, ok := m.GetResult().(*ExecutionTask_Error); ok {
return x.Error
}
return nil
}
func (m *ExecutionTask) GetRequestSent() *timestamp.Timestamp {
if m != nil {
return m.RequestSent
}
return nil
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*ExecutionTask) XXX_OneofWrappers() []interface{} {
return []interface{}{
(*ExecutionTask_Response)(nil),
(*ExecutionTask_Error)(nil),
}
}
func init() {
proto.RegisterEnum("test_platform.suite_scheduler.BranchFilter_Channel", BranchFilter_Channel_name, BranchFilter_Channel_value)
proto.RegisterEnum("test_platform.suite_scheduler.BranchFilter_Operator", BranchFilter_Operator_name, BranchFilter_Operator_value)
proto.RegisterType((*BuildInfo)(nil), "test_platform.suite_scheduler.BuildInfo")
proto.RegisterType((*FirmwareBuildInfo)(nil), "test_platform.suite_scheduler.FirmwareBuildInfo")
proto.RegisterType((*BranchFilter)(nil), "test_platform.suite_scheduler.BranchFilter")
proto.RegisterType((*BuildFilters)(nil), "test_platform.suite_scheduler.BuildFilters")
proto.RegisterType((*ScheduleJobTrigger)(nil), "test_platform.suite_scheduler.ScheduleJobTrigger")
proto.RegisterType((*ScheduleJobTrigger_WeeklyTrigger)(nil), "test_platform.suite_scheduler.ScheduleJobTrigger.WeeklyTrigger")
proto.RegisterType((*ScheduleJobTrigger_NightlyTrigger)(nil), "test_platform.suite_scheduler.ScheduleJobTrigger.NightlyTrigger")
proto.RegisterType((*ScheduleJobTrigger_IntervalTrigger)(nil), "test_platform.suite_scheduler.ScheduleJobTrigger.IntervalTrigger")
proto.RegisterType((*ScheduleJob)(nil), "test_platform.suite_scheduler.ScheduleJob")
proto.RegisterType((*ScheduleJobSection)(nil), "test_platform.suite_scheduler.ScheduleJobSection")
proto.RegisterType((*ScheduleJobSection_MatchedBuild)(nil), "test_platform.suite_scheduler.ScheduleJobSection.MatchedBuild")
proto.RegisterType((*ExecutionResponse)(nil), "test_platform.suite_scheduler.ExecutionResponse")
proto.RegisterType((*ExecutionError)(nil), "test_platform.suite_scheduler.ExecutionError")
proto.RegisterType((*ExecutionTask)(nil), "test_platform.suite_scheduler.ExecutionTask")
}
func init() {
proto.RegisterFile("test_platform/suite_scheduler/analytics.proto", fileDescriptor_c98de5d5bbf67507)
}
var fileDescriptor_c98de5d5bbf67507 = []byte{
// 1267 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xdb, 0x6e, 0x1b, 0xc5,
0x1b, 0x8f, 0x0f, 0x71, 0x9c, 0xcf, 0x87, 0x38, 0xf3, 0xef, 0xbf, 0x35, 0xa1, 0x15, 0xc1, 0x94,
0x36, 0x2a, 0xea, 0x9a, 0xa6, 0x70, 0x83, 0x28, 0x60, 0xb7, 0x9b, 0x26, 0xd0, 0x38, 0x65, 0x6c,
0x8a, 0x40, 0x88, 0xd5, 0x78, 0x3d, 0xb6, 0xb7, 0xdd, 0xdd, 0xd9, 0xce, 0x8c, 0x9b, 0xfa, 0x21,
0xb8, 0xe4, 0x3d, 0xb8, 0xe2, 0x01, 0x10, 0x37, 0xbc, 0x12, 0x12, 0x12, 0x9a, 0xc3, 0x3a, 0x76,
0x8d, 0x92, 0x58, 0x70, 0xb5, 0x3b, 0xdf, 0xe1, 0xf7, 0xcd, 0x77, 0xde, 0x85, 0xbb, 0x92, 0x0a,
0xe9, 0x25, 0x21, 0x91, 0x43, 0xc6, 0xa3, 0xa6, 0x98, 0x04, 0x92, 0x7a, 0xc2, 0x1f, 0xd3, 0xc1,
0x24, 0xa4, 0xbc, 0x49, 0x62, 0x12, 0x4e, 0x65, 0xe0, 0x0b, 0x27, 0xe1, 0x4c, 0x32, 0x74, 0x63,
0x41, 0xdc, 0x79, 0x43, 0x7c, 0xe7, 0xba, 0x3f, 0xe6, 0x2c, 0x0a, 0x24, 0x6d, 0x92, 0x24, 0x68,
0x12, 0x2e, 0x83, 0x21, 0xf1, 0xa5, 0x55, 0xde, 0xb9, 0x66, 0xb8, 0x93, 0x88, 0x89, 0xa6, 0xcf,
0xa2, 0x88, 0xc5, 0xff, 0xc0, 0xe8, 0x73, 0x12, 0xfb, 0x63, 0xcb, 0xf8, 0xff, 0x80, 0xbe, 0x0a,
0x7c, 0xda, 0x8c, 0xd8, 0x80, 0x86, 0x5e, 0x30, 0xb0, 0xe4, 0x77, 0x46, 0x8c, 0x8d, 0x42, 0xda,
0xd4, 0xa7, 0xfe, 0x64, 0xd8, 0x94, 0x41, 0x44, 0x85, 0x24, 0x51, 0x62, 0x04, 0x1a, 0xbf, 0x67,
0x60, 0xb3, 0x3d, 0x09, 0xc2, 0xc1, 0x51, 0x3c, 0x64, 0xe8, 0x13, 0x28, 0xf7, 0xd5, 0xc1, 0x93,
0x84, 0x8f, 0xa8, 0xac, 0x67, 0x76, 0x33, 0x7b, 0xa5, 0xfd, 0x6b, 0xce, 0x99, 0x55, 0x47, 0x0b,
0xf7, 0x34, 0x1b, 0x97, 0xfa, 0x67, 0x07, 0x74, 0x1d, 0x36, 0xa3, 0x20, 0xa4, 0x42, 0xb2, 0x98,
0xd6, 0xb3, 0xbb, 0x99, 0xbd, 0x0a, 0x3e, 0x23, 0xa0, 0x3b, 0xb0, 0xad, 0x41, 0xa8, 0xc7, 0x84,
0xf7, 0x8a, 0x72, 0x11, 0xb0, 0xb8, 0x9e, 0xdb, 0xcd, 0xec, 0x6d, 0xe2, 0x2d, 0xc3, 0x38, 0x11,
0xcf, 0x0c, 0x19, 0xdd, 0x83, 0xbc, 0x9c, 0x26, 0xb4, 0x9e, 0xdf, 0xcd, 0xec, 0x55, 0xf7, 0x6f,
0x2c, 0x58, 0x37, 0x3e, 0x9b, 0x47, 0x6f, 0x9a, 0x50, 0xac, 0x45, 0x1b, 0xbf, 0x66, 0x60, 0xfb,
0x20, 0xe0, 0xd1, 0x29, 0xe1, 0xf4, 0xbf, 0x71, 0x27, 0xbd, 0x44, 0xf6, 0xd2, 0x97, 0x40, 0xfb,
0x50, 0x4c, 0x13, 0xa9, 0x5d, 0x2b, 0xed, 0x5f, 0x75, 0xd2, 0x34, 0x3b, 0x24, 0x09, 0x9c, 0x96,
0xe5, 0xe2, 0x99, 0x5c, 0xe3, 0xb7, 0x2c, 0x94, 0x0d, 0xd0, 0x41, 0x10, 0x4a, 0xca, 0xd1, 0x31,
0x6c, 0xf8, 0x63, 0x12, 0xc7, 0x34, 0xd4, 0xd7, 0xad, 0xee, 0xdf, 0x77, 0xce, 0xad, 0x24, 0x67,
0x5e, 0xdb, 0x79, 0x68, 0x54, 0x71, 0x8a, 0x81, 0x9e, 0x42, 0x91, 0x25, 0x94, 0x13, 0xc9, 0xb8,
0x75, 0xe5, 0xa3, 0x55, 0xf0, 0x4e, 0xac, 0x2e, 0x9e, 0xa1, 0xa0, 0x1a, 0xe4, 0x42, 0x32, 0xd2,
0x0e, 0xae, 0x63, 0xf5, 0xda, 0x78, 0x02, 0x1b, 0xd6, 0x2e, 0xba, 0x0a, 0xa8, 0x8d, 0x5b, 0x9d,
0x87, 0x87, 0x1e, 0x76, 0x0f, 0xbc, 0xce, 0x49, 0xcf, 0xeb, 0xba, 0xbd, 0xda, 0x1a, 0x02, 0x28,
0x1c, 0xb7, 0xba, 0x3d, 0x17, 0xd7, 0x32, 0x68, 0x03, 0x72, 0x8f, 0xdc, 0x67, 0xb5, 0x2c, 0x2a,
0x42, 0xbe, 0xed, 0xf6, 0x5a, 0xb5, 0x9c, 0x62, 0x77, 0x7b, 0xad, 0xf6, 0x13, 0xb7, 0x96, 0x6f,
0xdc, 0x83, 0x62, 0x6a, 0x15, 0x55, 0x60, 0xf3, 0x9b, 0xce, 0x23, 0xf7, 0xe0, 0xa8, 0xe3, 0x3e,
0xaa, 0xad, 0xa1, 0x02, 0x64, 0xdd, 0xaf, 0x6b, 0x19, 0xf5, 0x7c, 0xec, 0xd6, 0xb2, 0xea, 0xf9,
0xc4, 0xad, 0xe5, 0x1a, 0x7f, 0xa8, 0x20, 0xaa, 0xdc, 0x99, 0x5b, 0x0b, 0xf4, 0x00, 0xde, 0x66,
0x71, 0x38, 0xf5, 0xc6, 0xa7, 0xda, 0x57, 0x41, 0xe2, 0x40, 0x4e, 0x3d, 0x4e, 0x5f, 0x4e, 0x02,
0x4e, 0x07, 0x3a, 0xb0, 0x45, 0x5c, 0x57, 0x22, 0x87, 0x5a, 0xa2, 0xab, 0x05, 0xb0, 0xe5, 0x23,
0x0c, 0x55, 0xd3, 0x5c, 0xde, 0xd0, 0x00, 0xd6, 0xb3, 0xbb, 0xb9, 0xbd, 0xd2, 0xfe, 0x07, 0x2b,
0x84, 0x0e, 0x57, 0xfa, 0x73, 0x27, 0x81, 0x30, 0x5c, 0x1d, 0xda, 0x02, 0xf5, 0x38, 0xf3, 0x4c,
0x5d, 0x8a, 0x84, 0xfa, 0x3a, 0x92, 0x17, 0x56, 0xd8, 0xff, 0x52, 0x65, 0xcc, 0xb4, 0xa7, 0xdd,
0x84, 0xfa, 0x8b, 0x98, 0xa7, 0xf3, 0x98, 0xf9, 0xd5, 0x30, 0x4f, 0x67, 0x98, 0x8d, 0xbf, 0x72,
0x80, 0xba, 0xd6, 0xa3, 0x2f, 0x59, 0xbf, 0xc7, 0x83, 0xd1, 0x88, 0x72, 0xf4, 0x1d, 0x14, 0x4e,
0x29, 0x7d, 0x11, 0x4e, 0x6d, 0x13, 0x7d, 0x7e, 0x41, 0x28, 0x96, 0x21, 0x9c, 0x6f, 0xb5, 0xbe,
0x3d, 0x1d, 0xae, 0x61, 0x0b, 0x88, 0x7e, 0x80, 0x8d, 0x38, 0x18, 0x8d, 0x65, 0x38, 0xd5, 0x15,
0x5a, 0xda, 0xff, 0x62, 0x75, 0xec, 0x8e, 0x01, 0x38, 0x03, 0x4f, 0x21, 0x91, 0x07, 0xc5, 0x20,
0x96, 0x94, 0xbf, 0x22, 0xa1, 0x6d, 0xca, 0xd6, 0xea, 0xf0, 0x47, 0x16, 0xe1, 0x0c, 0x7f, 0x06,
0x8a, 0x9e, 0x42, 0xc5, 0x04, 0x3e, 0xad, 0x95, 0xbc, 0xb6, 0x72, 0x61, 0xad, 0xcc, 0xd5, 0x2b,
0x36, 0x63, 0xca, 0x9e, 0x76, 0xde, 0x85, 0xca, 0x42, 0xac, 0x54, 0xcb, 0x0d, 0x88, 0x89, 0x7c,
0x05, 0xab, 0xd7, 0x9d, 0x9b, 0x50, 0x5d, 0x74, 0x19, 0x21, 0xc8, 0x8f, 0xd9, 0x84, 0x5b, 0x21,
0xfd, 0xbe, 0x73, 0x1b, 0xb6, 0xde, 0xb8, 0x39, 0xba, 0x02, 0xeb, 0x09, 0x99, 0x08, 0x6a, 0xe5,
0xcc, 0xa1, 0xbd, 0x09, 0x1b, 0xd2, 0x08, 0x34, 0x7e, 0xca, 0x42, 0x69, 0x2e, 0x02, 0xe8, 0x7d,
0x58, 0xd7, 0x3b, 0xc5, 0xe6, 0x7d, 0xcb, 0x31, 0x8b, 0xc6, 0x39, 0x56, 0xc4, 0xa3, 0x01, 0x36,
0xdc, 0xa5, 0x51, 0x9b, 0x5d, 0x61, 0xd4, 0xde, 0x82, 0xea, 0xcb, 0x09, 0x9d, 0x50, 0xa5, 0x2c,
0x5e, 0x78, 0xc1, 0xc0, 0x2c, 0x86, 0xc3, 0x35, 0x5c, 0x36, 0xf4, 0x1e, 0x11, 0x2f, 0x8e, 0x06,
0xe8, 0x16, 0x54, 0x9e, 0x4f, 0x84, 0x0c, 0x86, 0x81, 0x4f, 0xa4, 0xda, 0x1f, 0x79, 0x2b, 0xb6,
0x48, 0x46, 0x2d, 0xa8, 0x8e, 0x68, 0xac, 0x46, 0x88, 0x82, 0x0c, 0x22, 0x5a, 0x5f, 0xd7, 0xb7,
0xd9, 0x71, 0xcc, 0x36, 0x74, 0xd2, 0x6d, 0xe8, 0xf4, 0xd2, 0x6d, 0x88, 0x2b, 0x33, 0x0d, 0x45,
0x6b, 0x17, 0xa1, 0xc0, 0xa9, 0x98, 0x84, 0xb2, 0xf1, 0x4b, 0x61, 0xa1, 0x1f, 0xba, 0xd4, 0xd7,
0x36, 0xde, 0x82, 0xe2, 0x73, 0xd6, 0xf7, 0x62, 0x12, 0x99, 0x50, 0x6e, 0xe2, 0x8d, 0xe7, 0xac,
0xdf, 0x21, 0x11, 0x45, 0x3e, 0x5c, 0x49, 0xd3, 0xec, 0x29, 0x19, 0x1b, 0x59, 0x1b, 0x92, 0x7b,
0x2b, 0x57, 0x1f, 0x46, 0x62, 0xb9, 0x1f, 0x6f, 0x43, 0x41, 0x07, 0x5e, 0xd4, 0x73, 0x7a, 0x34,
0x2d, 0xe5, 0xc5, 0xb2, 0xd1, 0xa7, 0x69, 0x79, 0x9a, 0xc4, 0xa8, 0xf2, 0xcc, 0x9d, 0x97, 0x99,
0xf2, 0x5c, 0x66, 0x04, 0xa2, 0x50, 0x8d, 0x88, 0x54, 0xe6, 0xcd, 0x74, 0x11, 0xf5, 0x75, 0xad,
0xfe, 0xd9, 0xe5, 0xbd, 0xb0, 0x11, 0x73, 0x8e, 0x0d, 0x8e, 0xb6, 0x85, 0x2b, 0xd1, 0xdc, 0x49,
0xa0, 0x13, 0xa8, 0xcc, 0x87, 0x4c, 0xd4, 0x0b, 0xda, 0xca, 0x9d, 0xcb, 0x5b, 0xc1, 0xe5, 0xb9,
0x20, 0x89, 0x9d, 0x3f, 0xb3, 0x50, 0x9e, 0x37, 0xa8, 0x2c, 0x70, 0x1a, 0x52, 0x22, 0xa8, 0x71,
0xc4, 0x96, 0xf3, 0xde, 0x65, 0xba, 0x54, 0x7d, 0x4b, 0xa8, 0x62, 0xb4, 0x00, 0x06, 0xf0, 0x2b,
0x28, 0x71, 0x1a, 0x92, 0xd7, 0x16, 0x2e, 0xbb, 0x32, 0x1c, 0x68, 0x75, 0x03, 0xf6, 0x23, 0x6c,
0x2f, 0x2d, 0x07, 0x3b, 0xad, 0x3e, 0xbc, 0x00, 0x72, 0xe9, 0xab, 0xe7, 0x70, 0x0d, 0x6f, 0xbd,
0xb1, 0x2c, 0x16, 0xf1, 0xed, 0xa2, 0xb0, 0x73, 0xea, 0xdf, 0xe1, 0x9b, 0xc5, 0xd1, 0x2e, 0x03,
0xf8, 0x9c, 0x09, 0x03, 0xdc, 0xf8, 0x18, 0xb6, 0xdd, 0xd7, 0xd4, 0x9f, 0xa8, 0xb4, 0x63, 0x2a,
0x12, 0x16, 0x0b, 0x8a, 0x76, 0xa1, 0xec, 0xcb, 0xc4, 0xee, 0xa8, 0x60, 0x60, 0x9b, 0x06, 0x7c,
0x99, 0x18, 0x64, 0xa5, 0x56, 0x9d, 0xa9, 0xb9, 0x9c, 0x33, 0x8e, 0xde, 0x83, 0x0a, 0x55, 0x2f,
0x5e, 0x44, 0x85, 0x20, 0xa3, 0xb4, 0xd3, 0xca, 0x9a, 0x78, 0x6c, 0x68, 0x8d, 0x9f, 0xb3, 0x50,
0x99, 0xe9, 0xa9, 0x49, 0x81, 0x6e, 0x2e, 0xcd, 0x13, 0xab, 0xb7, 0x30, 0x4d, 0x3a, 0x50, 0xe4,
0xf6, 0x72, 0x36, 0x7b, 0x17, 0x85, 0x62, 0xc9, 0x29, 0xb5, 0x07, 0x52, 0x0c, 0xe4, 0xc2, 0xba,
0xbe, 0x97, 0xcd, 0xdb, 0xdd, 0xcb, 0x82, 0x69, 0x57, 0x0f, 0xd7, 0xb0, 0xd1, 0x46, 0x0f, 0xa0,
0xac, 0xbe, 0x53, 0xf4, 0x67, 0x0b, 0x8d, 0xa5, 0xcd, 0xd2, 0x79, 0xa3, 0xab, 0x64, 0xe5, 0xbb,
0x34, 0x96, 0x67, 0x83, 0xab, 0x7d, 0xf4, 0xfd, 0xe3, 0x11, 0x9b, 0x75, 0xb9, 0xc3, 0xf8, 0xa8,
0x39, 0xf7, 0xf3, 0x10, 0xc4, 0x43, 0x4e, 0xcc, 0x6f, 0x41, 0x73, 0xc4, 0x9a, 0xe7, 0xfe, 0xdb,
0xf4, 0x0b, 0x5a, 0xee, 0xfe, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x50, 0x83, 0xd6, 0xb8, 0x03,
0x0d, 0x00, 0x00,
}