// Code generated by protoc-gen-go. DO NOT EDIT.
// source: recipes/fuchsia.proto

// "from PB.recipe_modules.infra.fuchsia import Fuchsia"

package recipes

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

// Fuchsia fully describes how to execute a Fuchsia CI/CQ task:
//
//  * How to fetch the Fuchsia sources.
//  * How to build Fuchsia.
//  * How to test Fuchsia.
//  * How to archive and log outputs to various places.
//
// See the fuchsia.py recipe for full documentation on task execution.
//
// TODO(IN-1102):
//
// * Improve the docs of the fields in this message, since this is the User
//   facing API for the recipe.
// * Use Enums instead of strings where appropriate once we have starlark and
//   support for human-readable constant values. Enums are just int literals in
//   textprotos.
type Fuchsia struct {
	// (required) How to obtain the Fuchsia build inputs. See Checkout docs.
	Checkout *Fuchsia_Checkout `protobuf:"bytes,1,opt,name=checkout,proto3" json:"checkout,omitempty"`
	// (required) How to build Fuchsia. See Build docs.
	Build *Fuchsia_Build `protobuf:"bytes,2,opt,name=build,proto3" json:"build,omitempty"`
	// How to test Fuchsia. See Test docs.
	Test *Fuchsia_Test `protobuf:"bytes,3,opt,name=test,proto3" json:"test,omitempty"`
	// The GCS bucket to upload results to.
	GcsBucket            string   `protobuf:"bytes,4,opt,name=gcs_bucket,json=gcsBucket,proto3" json:"gcs_bucket,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_Fuchsia proto.InternalMessageInfo

func (m *Fuchsia) GetCheckout() *Fuchsia_Checkout {
	if m != nil {
		return m.Checkout
	}
	return nil
}

func (m *Fuchsia) GetBuild() *Fuchsia_Build {
	if m != nil {
		return m.Build
	}
	return nil
}

func (m *Fuchsia) GetTest() *Fuchsia_Test {
	if m != nil {
		return m.Test
	}
	return nil
}

func (m *Fuchsia) GetGcsBucket() string {
	if m != nil {
		return m.GcsBucket
	}
	return ""
}

// Describes how to fetch the Fuchsia build inputs.
type Fuchsia_Checkout struct {
	// Jiri <package> atttribute values indicating additional packages to fetch
	// from the input manifest. By default, packages with attribute tags are
	// skipped unless one or more of the attribute values are specified here.
	Attributes []string `protobuf:"bytes,1,rep,name=attributes,proto3" json:"attributes,omitempty"`
	// Whether to checkout from a Jiri snapshot.
	UseSnapshot bool `protobuf:"varint,2,opt,name=use_snapshot,json=useSnapshot,proto3" json:"use_snapshot,omitempty"`
	// The name of the manifest to import from the integration repository.
	Manifest string `protobuf:"bytes,4,opt,name=manifest,proto3" json:"manifest,omitempty"`
	// Jiri remote manifest project,
	//
	// TODO(IN-1102): This should always be "integration" and is redundant
	// because we can select the proper integration repo using the build input.
	// Delete this in favor of a hard-coded constant since this value will only
	// ever change if we completely restructure our CI/CD model or rename the
	// integration repo, and thus this recipe.
	Project string `protobuf:"bytes,6,opt,name=project,proto3" json:"project,omitempty"`
	// The remote integration manifest repository.
	Remote               string   `protobuf:"bytes,7,opt,name=remote,proto3" json:"remote,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_Fuchsia_Checkout proto.InternalMessageInfo

func (m *Fuchsia_Checkout) GetAttributes() []string {
	if m != nil {
		return m.Attributes
	}
	return nil
}

func (m *Fuchsia_Checkout) GetUseSnapshot() bool {
	if m != nil {
		return m.UseSnapshot
	}
	return false
}

func (m *Fuchsia_Checkout) GetManifest() string {
	if m != nil {
		return m.Manifest
	}
	return ""
}

func (m *Fuchsia_Checkout) GetProject() string {
	if m != nil {
		return m.Project
	}
	return ""
}

func (m *Fuchsia_Checkout) GetRemote() string {
	if m != nil {
		return m.Remote
	}
	return ""
}

// Describes how to build Fuchsia.
type Fuchsia_Build struct {
	// The build type
	BuildType string `protobuf:"bytes,1,opt,name=build_type,json=buildType,proto3" json:"build_type,omitempty"`
	// Board to build
	Board string `protobuf:"bytes,2,opt,name=board,proto3" json:"board,omitempty"`
	// GCS bucket for uploading debug symbols.
	DebugSymbolBucket string `protobuf:"bytes,3,opt,name=debug_symbol_bucket,json=debugSymbolBucket,proto3" json:"debug_symbol_bucket,omitempty"`
	// Tags of environments on which the testsharder will key
	EnvironmentTags []string `protobuf:"bytes,4,rep,name=environment_tags,json=environmentTags,proto3" json:"environment_tags,omitempty"`
	// Whether to exclude images during the build.
	ExcludeImages bool `protobuf:"varint,5,opt,name=exclude_images,json=excludeImages,proto3" json:"exclude_images,omitempty"`
	// Extra args to pass to GN.
	GnArgs []string `protobuf:"bytes,6,rep,name=gn_args,json=gnArgs,proto3" json:"gn_args,omitempty"`
	// Whether to generate and upload breakpad symbols as part of this build.
	IncludeBreakpadSymbols bool `protobuf:"varint,7,opt,name=include_breakpad_symbols,json=includeBreakpadSymbols,proto3" json:"include_breakpad_symbols,omitempty"`
	// Whether to build and upload an archive of debug binaries.
	IncludeSymbolArchive bool `protobuf:"varint,8,opt,name=include_symbol_archive,json=includeSymbolArchive,proto3" json:"include_symbol_archive,omitempty"`
	// Extra targets to pass to Ninja.
	NinjaTargets []string `protobuf:"bytes,9,rep,name=ninja_targets,json=ninjaTargets,proto3" json:"ninja_targets,omitempty"`
	// A list of Fuchsia packages to build.
	Packages []string `protobuf:"bytes,10,rep,name=packages,proto3" json:"packages,omitempty"`
	// The product to build.
	Product string `protobuf:"bytes,11,opt,name=product,proto3" json:"product,omitempty"`
	// Whether to run any tests.
	RunTests bool `protobuf:"varint,12,opt,name=run_tests,json=runTests,proto3" json:"run_tests,omitempty"`
	// The target architecture. One of x64 or arm64.
	Target string `protobuf:"bytes,13,opt,name=target,proto3" json:"target,omitempty"`
	// Packages to build and add to the universe set
	UniversePackages []string `protobuf:"bytes,14,rep,name=universe_packages,json=universePackages,proto3" json:"universe_packages,omitempty"`
	// --variant arguments to GN in `select_variant`
	Variants []string `protobuf:"bytes,15,rep,name=variants,proto3" json:"variants,omitempty"`
	// Additional args to pass to zircon build using standard FOO=bar syntax.
	ZirconArgs           []string `protobuf:"bytes,16,rep,name=zircon_args,json=zirconArgs,proto3" json:"zircon_args,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_Fuchsia_Build proto.InternalMessageInfo

func (m *Fuchsia_Build) GetBuildType() string {
	if m != nil {
		return m.BuildType
	}
	return ""
}

func (m *Fuchsia_Build) GetBoard() string {
	if m != nil {
		return m.Board
	}
	return ""
}

func (m *Fuchsia_Build) GetDebugSymbolBucket() string {
	if m != nil {
		return m.DebugSymbolBucket
	}
	return ""
}

func (m *Fuchsia_Build) GetEnvironmentTags() []string {
	if m != nil {
		return m.EnvironmentTags
	}
	return nil
}

func (m *Fuchsia_Build) GetExcludeImages() bool {
	if m != nil {
		return m.ExcludeImages
	}
	return false
}

func (m *Fuchsia_Build) GetGnArgs() []string {
	if m != nil {
		return m.GnArgs
	}
	return nil
}

func (m *Fuchsia_Build) GetIncludeBreakpadSymbols() bool {
	if m != nil {
		return m.IncludeBreakpadSymbols
	}
	return false
}

func (m *Fuchsia_Build) GetIncludeSymbolArchive() bool {
	if m != nil {
		return m.IncludeSymbolArchive
	}
	return false
}

func (m *Fuchsia_Build) GetNinjaTargets() []string {
	if m != nil {
		return m.NinjaTargets
	}
	return nil
}

func (m *Fuchsia_Build) GetPackages() []string {
	if m != nil {
		return m.Packages
	}
	return nil
}

func (m *Fuchsia_Build) GetProduct() string {
	if m != nil {
		return m.Product
	}
	return ""
}

func (m *Fuchsia_Build) GetRunTests() bool {
	if m != nil {
		return m.RunTests
	}
	return false
}

func (m *Fuchsia_Build) GetTarget() string {
	if m != nil {
		return m.Target
	}
	return ""
}

func (m *Fuchsia_Build) GetUniversePackages() []string {
	if m != nil {
		return m.UniversePackages
	}
	return nil
}

func (m *Fuchsia_Build) GetVariants() []string {
	if m != nil {
		return m.Variants
	}
	return nil
}

func (m *Fuchsia_Build) GetZirconArgs() []string {
	if m != nil {
		return m.ZirconArgs
	}
	return nil
}

// Describes how to test Fuchsia.
type Fuchsia_Test struct {
	// The type of device to execute tests on, if the value is
	// ot QEMU it will be passed to Swarming as the device_type
	// dimension.
	DeviceType string `protobuf:"bytes,1,opt,name=device_type,json=deviceType,proto3" json:"device_type,omitempty"`
	// Whether to pave images the device for testing. (Ignored if
	// device_type == QEMU)
	Pave bool `protobuf:"varint,2,opt,name=pave,proto3" json:"pave,omitempty"`
	// Swarming pool from which a test task will be drawn
	Pool string `protobuf:"bytes,3,opt,name=pool,proto3" json:"pool,omitempty"`
	// Shell-quoted string to add to the runtests commandline
	RuntestsArgs string `protobuf:"bytes,4,opt,name=runtests_args,json=runtestsArgs,proto3" json:"runtests_args,omitempty"`
	// Whether any plaintext needs to be supplied to the tests
	RequiresSecrets bool `protobuf:"varint,5,opt,name=requires_secrets,json=requiresSecrets,proto3" json:"requires_secrets,omitempty"`
	// How long to wait for Swarming to find a bot on which to test
	SwarmingExpirationTimeoutSecs int32 `protobuf:"varint,6,opt,name=swarming_expiration_timeout_secs,json=swarmingExpirationTimeoutSecs,proto3" json:"swarming_expiration_timeout_secs,omitempty"`
	// How long to wait (in seconds) before killing the test
	// swarming task if there\'s no output being produced
	SwarmingIoTimeoutSecs int32 `protobuf:"varint,7,opt,name=swarming_io_timeout_secs,json=swarmingIoTimeoutSecs,proto3" json:"swarming_io_timeout_secs,omitempty"`
	// Whether to run tests as shards.
	TestInShards bool `protobuf:"varint,8,opt,name=test_in_shards,json=testInShards,proto3" json:"test_in_shards,omitempty"`
	// How long to wait until timing out on tests.
	TimeoutSecs          int32    `protobuf:"varint,9,opt,name=timeout_secs,json=timeoutSecs,proto3" json:"timeout_secs,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_Fuchsia_Test proto.InternalMessageInfo

func (m *Fuchsia_Test) GetDeviceType() string {
	if m != nil {
		return m.DeviceType
	}
	return ""
}

func (m *Fuchsia_Test) GetPave() bool {
	if m != nil {
		return m.Pave
	}
	return false
}

func (m *Fuchsia_Test) GetPool() string {
	if m != nil {
		return m.Pool
	}
	return ""
}

func (m *Fuchsia_Test) GetRuntestsArgs() string {
	if m != nil {
		return m.RuntestsArgs
	}
	return ""
}

func (m *Fuchsia_Test) GetRequiresSecrets() bool {
	if m != nil {
		return m.RequiresSecrets
	}
	return false
}

func (m *Fuchsia_Test) GetSwarmingExpirationTimeoutSecs() int32 {
	if m != nil {
		return m.SwarmingExpirationTimeoutSecs
	}
	return 0
}

func (m *Fuchsia_Test) GetSwarmingIoTimeoutSecs() int32 {
	if m != nil {
		return m.SwarmingIoTimeoutSecs
	}
	return 0
}

func (m *Fuchsia_Test) GetTestInShards() bool {
	if m != nil {
		return m.TestInShards
	}
	return false
}

func (m *Fuchsia_Test) GetTimeoutSecs() int32 {
	if m != nil {
		return m.TimeoutSecs
	}
	return 0
}

func init() {
	proto.RegisterType((*Fuchsia)(nil), "recipe_modules.infra.fuchsia.Fuchsia")
	proto.RegisterType((*Fuchsia_Checkout)(nil), "recipe_modules.infra.fuchsia.Fuchsia.Checkout")
	proto.RegisterType((*Fuchsia_Build)(nil), "recipe_modules.infra.fuchsia.Fuchsia.Build")
	proto.RegisterType((*Fuchsia_Test)(nil), "recipe_modules.infra.fuchsia.Fuchsia.Test")
}

func init() { proto.RegisterFile("recipes/fuchsia.proto", fileDescriptor_eb93a9da76a97780) }

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