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

package gw

import (
	fmt "fmt"
	common "github.com/brocaar/chirpstack-api/go/v3/common"
	proto "github.com/golang/protobuf/proto"
	duration "github.com/golang/protobuf/ptypes/duration"
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	math "math"
)

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

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

type DownlinkTiming int32

const (
	// Send the downlink immediately.
	DownlinkTiming_IMMEDIATELY DownlinkTiming = 0
	// Send downlink at the given delay (based on provided context).
	DownlinkTiming_DELAY DownlinkTiming = 1
	// Send at given GPS epoch value.
	DownlinkTiming_GPS_EPOCH DownlinkTiming = 2
)

var DownlinkTiming_name = map[int32]string{
	0: "IMMEDIATELY",
	1: "DELAY",
	2: "GPS_EPOCH",
}

var DownlinkTiming_value = map[string]int32{
	"IMMEDIATELY": 0,
	"DELAY":       1,
	"GPS_EPOCH":   2,
}

func (x DownlinkTiming) String() string {
	return proto.EnumName(DownlinkTiming_name, int32(x))
}

func (DownlinkTiming) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{0}
}

type FineTimestampType int32

const (
	// No fine-timestamp available.
	FineTimestampType_NONE FineTimestampType = 0
	// Encrypted fine-timestamp.
	FineTimestampType_ENCRYPTED FineTimestampType = 1
	// Plain fine-timestamp.
	FineTimestampType_PLAIN FineTimestampType = 2
)

var FineTimestampType_name = map[int32]string{
	0: "NONE",
	1: "ENCRYPTED",
	2: "PLAIN",
}

var FineTimestampType_value = map[string]int32{
	"NONE":      0,
	"ENCRYPTED": 1,
	"PLAIN":     2,
}

func (x FineTimestampType) String() string {
	return proto.EnumName(FineTimestampType_name, int32(x))
}

func (FineTimestampType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{1}
}

type CRCStatus int32

const (
	// No CRC.
	CRCStatus_NO_CRC CRCStatus = 0
	// Bad CRC.
	CRCStatus_BAD_CRC CRCStatus = 1
	// CRC OK.
	CRCStatus_CRC_OK CRCStatus = 2
)

var CRCStatus_name = map[int32]string{
	0: "NO_CRC",
	1: "BAD_CRC",
	2: "CRC_OK",
}

var CRCStatus_value = map[string]int32{
	"NO_CRC":  0,
	"BAD_CRC": 1,
	"CRC_OK":  2,
}

func (x CRCStatus) String() string {
	return proto.EnumName(CRCStatus_name, int32(x))
}

func (CRCStatus) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{2}
}

type TxAckStatus int32

const (
	// Ignored (when a previous item was already emitted).
	TxAckStatus_IGNORED TxAckStatus = 0
	// Packet has been programmed for downlink.
	TxAckStatus_OK TxAckStatus = 1
	// Rejected because it was already too late to program this packet for downlink.
	TxAckStatus_TOO_LATE TxAckStatus = 2
	// Rejected because downlink packet timestamp is too much in advance.
	TxAckStatus_TOO_EARLY TxAckStatus = 3
	// Rejected because there was already a packet programmed in requested timeframe.
	TxAckStatus_COLLISION_PACKET TxAckStatus = 4
	// Rejected because there was already a beacon planned in requested timeframe.
	TxAckStatus_COLLISION_BEACON TxAckStatus = 5
	// Rejected because requested frequency is not supported by TX RF chain.
	TxAckStatus_TX_FREQ TxAckStatus = 6
	// Rejected because requested power is not supported by gateway.
	TxAckStatus_TX_POWER TxAckStatus = 7
	// Rejected because GPS is unlocked, so GPS timestamp cannot be used.
	TxAckStatus_GPS_UNLOCKED TxAckStatus = 8
	// Downlink queue is full.
	TxAckStatus_QUEUE_FULL TxAckStatus = 9
	// Internal error.
	TxAckStatus_INTERNAL_ERROR TxAckStatus = 10
)

var TxAckStatus_name = map[int32]string{
	0:  "IGNORED",
	1:  "OK",
	2:  "TOO_LATE",
	3:  "TOO_EARLY",
	4:  "COLLISION_PACKET",
	5:  "COLLISION_BEACON",
	6:  "TX_FREQ",
	7:  "TX_POWER",
	8:  "GPS_UNLOCKED",
	9:  "QUEUE_FULL",
	10: "INTERNAL_ERROR",
}

var TxAckStatus_value = map[string]int32{
	"IGNORED":          0,
	"OK":               1,
	"TOO_LATE":         2,
	"TOO_EARLY":        3,
	"COLLISION_PACKET": 4,
	"COLLISION_BEACON": 5,
	"TX_FREQ":          6,
	"TX_POWER":         7,
	"GPS_UNLOCKED":     8,
	"QUEUE_FULL":       9,
	"INTERNAL_ERROR":   10,
}

func (x TxAckStatus) String() string {
	return proto.EnumName(TxAckStatus_name, int32(x))
}

func (TxAckStatus) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{3}
}

type ConnState_State int32

const (
	ConnState_OFFLINE ConnState_State = 0
	ConnState_ONLINE  ConnState_State = 1
)

var ConnState_State_name = map[int32]string{
	0: "OFFLINE",
	1: "ONLINE",
}

var ConnState_State_value = map[string]int32{
	"OFFLINE": 0,
	"ONLINE":  1,
}

func (x ConnState_State) String() string {
	return proto.EnumName(ConnState_State_name, int32(x))
}

func (ConnState_State) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{28, 0}
}

type Modulation struct {
	// Types that are valid to be assigned to Parameters:
	//	*Modulation_Lora
	//	*Modulation_Fsk
	//	*Modulation_LrFhss
	Parameters           isModulation_Parameters `protobuf_oneof:"parameters"`
	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
	XXX_unrecognized     []byte                  `json:"-"`
	XXX_sizecache        int32                   `json:"-"`
}

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

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

var xxx_messageInfo_Modulation proto.InternalMessageInfo

type isModulation_Parameters interface {
	isModulation_Parameters()
}

type Modulation_Lora struct {
	Lora *LoRaModulationInfo `protobuf:"bytes,3,opt,name=lora,json=loRa,proto3,oneof"`
}

type Modulation_Fsk struct {
	Fsk *FSKModulationInfo `protobuf:"bytes,4,opt,name=fsk,proto3,oneof"`
}

type Modulation_LrFhss struct {
	LrFhss *LRFHSSModulationInfo `protobuf:"bytes,5,opt,name=lr_fhss,json=lrFHSS,proto3,oneof"`
}

func (*Modulation_Lora) isModulation_Parameters() {}

func (*Modulation_Fsk) isModulation_Parameters() {}

func (*Modulation_LrFhss) isModulation_Parameters() {}

func (m *Modulation) GetParameters() isModulation_Parameters {
	if m != nil {
		return m.Parameters
	}
	return nil
}

func (m *Modulation) GetLora() *LoRaModulationInfo {
	if x, ok := m.GetParameters().(*Modulation_Lora); ok {
		return x.Lora
	}
	return nil
}

func (m *Modulation) GetFsk() *FSKModulationInfo {
	if x, ok := m.GetParameters().(*Modulation_Fsk); ok {
		return x.Fsk
	}
	return nil
}

func (m *Modulation) GetLrFhss() *LRFHSSModulationInfo {
	if x, ok := m.GetParameters().(*Modulation_LrFhss); ok {
		return x.LrFhss
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Modulation) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Modulation_Lora)(nil),
		(*Modulation_Fsk)(nil),
		(*Modulation_LrFhss)(nil),
	}
}

type UplinkTXInfo struct {
	// Frequency (Hz).
	Frequency uint32 `protobuf:"varint,1,opt,name=frequency,proto3" json:"frequency,omitempty"`
	// Modulation.
	Modulation common.Modulation `protobuf:"varint,2,opt,name=modulation,proto3,enum=common.Modulation" json:"modulation,omitempty"`
	// Types that are valid to be assigned to ModulationInfo:
	//	*UplinkTXInfo_LoraModulationInfo
	//	*UplinkTXInfo_FskModulationInfo
	//	*UplinkTXInfo_LrFhssModulationInfo
	ModulationInfo       isUplinkTXInfo_ModulationInfo `protobuf_oneof:"modulation_info"`
	XXX_NoUnkeyedLiteral struct{}                      `json:"-"`
	XXX_unrecognized     []byte                        `json:"-"`
	XXX_sizecache        int32                         `json:"-"`
}

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

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

var xxx_messageInfo_UplinkTXInfo proto.InternalMessageInfo

func (m *UplinkTXInfo) GetFrequency() uint32 {
	if m != nil {
		return m.Frequency
	}
	return 0
}

func (m *UplinkTXInfo) GetModulation() common.Modulation {
	if m != nil {
		return m.Modulation
	}
	return common.Modulation_LORA
}

type isUplinkTXInfo_ModulationInfo interface {
	isUplinkTXInfo_ModulationInfo()
}

type UplinkTXInfo_LoraModulationInfo struct {
	LoraModulationInfo *LoRaModulationInfo `protobuf:"bytes,3,opt,name=lora_modulation_info,json=loRaModulationInfo,proto3,oneof"`
}

type UplinkTXInfo_FskModulationInfo struct {
	FskModulationInfo *FSKModulationInfo `protobuf:"bytes,4,opt,name=fsk_modulation_info,json=fskModulationInfo,proto3,oneof"`
}

type UplinkTXInfo_LrFhssModulationInfo struct {
	LrFhssModulationInfo *LRFHSSModulationInfo `protobuf:"bytes,5,opt,name=lr_fhss_modulation_info,json=lrFHSSModulationInfo,proto3,oneof"`
}

func (*UplinkTXInfo_LoraModulationInfo) isUplinkTXInfo_ModulationInfo() {}

func (*UplinkTXInfo_FskModulationInfo) isUplinkTXInfo_ModulationInfo() {}

func (*UplinkTXInfo_LrFhssModulationInfo) isUplinkTXInfo_ModulationInfo() {}

func (m *UplinkTXInfo) GetModulationInfo() isUplinkTXInfo_ModulationInfo {
	if m != nil {
		return m.ModulationInfo
	}
	return nil
}

func (m *UplinkTXInfo) GetLoraModulationInfo() *LoRaModulationInfo {
	if x, ok := m.GetModulationInfo().(*UplinkTXInfo_LoraModulationInfo); ok {
		return x.LoraModulationInfo
	}
	return nil
}

func (m *UplinkTXInfo) GetFskModulationInfo() *FSKModulationInfo {
	if x, ok := m.GetModulationInfo().(*UplinkTXInfo_FskModulationInfo); ok {
		return x.FskModulationInfo
	}
	return nil
}

func (m *UplinkTXInfo) GetLrFhssModulationInfo() *LRFHSSModulationInfo {
	if x, ok := m.GetModulationInfo().(*UplinkTXInfo_LrFhssModulationInfo); ok {
		return x.LrFhssModulationInfo
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*UplinkTXInfo) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*UplinkTXInfo_LoraModulationInfo)(nil),
		(*UplinkTXInfo_FskModulationInfo)(nil),
		(*UplinkTXInfo_LrFhssModulationInfo)(nil),
	}
}

type LoRaModulationInfo struct {
	// Bandwidth.
	Bandwidth uint32 `protobuf:"varint,1,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"`
	// Speading-factor.
	SpreadingFactor uint32 `protobuf:"varint,2,opt,name=spreading_factor,json=spreadingFactor,proto3" json:"spreading_factor,omitempty"`
	// Code-rate.
	CodeRate string `protobuf:"bytes,3,opt,name=code_rate,json=codeRate,proto3" json:"code_rate,omitempty"`
	// Polarization inversion.
	PolarizationInversion bool     `protobuf:"varint,4,opt,name=polarization_inversion,json=polarizationInversion,proto3" json:"polarization_inversion,omitempty"`
	XXX_NoUnkeyedLiteral  struct{} `json:"-"`
	XXX_unrecognized      []byte   `json:"-"`
	XXX_sizecache         int32    `json:"-"`
}

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

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

var xxx_messageInfo_LoRaModulationInfo proto.InternalMessageInfo

func (m *LoRaModulationInfo) GetBandwidth() uint32 {
	if m != nil {
		return m.Bandwidth
	}
	return 0
}

func (m *LoRaModulationInfo) GetSpreadingFactor() uint32 {
	if m != nil {
		return m.SpreadingFactor
	}
	return 0
}

func (m *LoRaModulationInfo) GetCodeRate() string {
	if m != nil {
		return m.CodeRate
	}
	return ""
}

func (m *LoRaModulationInfo) GetPolarizationInversion() bool {
	if m != nil {
		return m.PolarizationInversion
	}
	return false
}

type FSKModulationInfo struct {
	// Frequency deviation.
	FrequencyDeviation uint32 `protobuf:"varint,1,opt,name=frequency_deviation,json=frequencyDeviation,proto3" json:"frequency_deviation,omitempty"`
	// FSK datarate (bits / sec).
	Datarate             uint32   `protobuf:"varint,2,opt,name=datarate,proto3" json:"datarate,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_FSKModulationInfo proto.InternalMessageInfo

func (m *FSKModulationInfo) GetFrequencyDeviation() uint32 {
	if m != nil {
		return m.FrequencyDeviation
	}
	return 0
}

func (m *FSKModulationInfo) GetDatarate() uint32 {
	if m != nil {
		return m.Datarate
	}
	return 0
}

type LRFHSSModulationInfo struct {
	// Operating channel width (OCW) in Hz.
	OperatingChannelWidth uint32 `protobuf:"varint,1,opt,name=operating_channel_width,json=operatingChannelWidth,proto3" json:"operating_channel_width,omitempty"`
	// Code-rate.
	CodeRate string `protobuf:"bytes,2,opt,name=code_rate,json=codeRate,proto3" json:"code_rate,omitempty"`
	// Hopping grid number of steps.
	GridSteps            uint32   `protobuf:"varint,3,opt,name=grid_steps,json=gridSteps,proto3" json:"grid_steps,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_LRFHSSModulationInfo proto.InternalMessageInfo

func (m *LRFHSSModulationInfo) GetOperatingChannelWidth() uint32 {
	if m != nil {
		return m.OperatingChannelWidth
	}
	return 0
}

func (m *LRFHSSModulationInfo) GetCodeRate() string {
	if m != nil {
		return m.CodeRate
	}
	return ""
}

func (m *LRFHSSModulationInfo) GetGridSteps() uint32 {
	if m != nil {
		return m.GridSteps
	}
	return 0
}

type EncryptedFineTimestamp struct {
	// AES key index used for encrypting the fine timestamp.
	AesKeyIndex uint32 `protobuf:"varint,1,opt,name=aes_key_index,json=aesKeyIndex,proto3" json:"aes_key_index,omitempty"`
	// Encrypted 'main' fine-timestamp (ns precision part of the timestamp).
	EncryptedNs []byte `protobuf:"bytes,2,opt,name=encrypted_ns,json=encryptedNS,proto3" json:"encrypted_ns,omitempty"`
	// FPGA ID.
	FpgaId               []byte   `protobuf:"bytes,3,opt,name=fpga_id,json=fpgaID,proto3" json:"fpga_id,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_EncryptedFineTimestamp proto.InternalMessageInfo

func (m *EncryptedFineTimestamp) GetAesKeyIndex() uint32 {
	if m != nil {
		return m.AesKeyIndex
	}
	return 0
}

func (m *EncryptedFineTimestamp) GetEncryptedNs() []byte {
	if m != nil {
		return m.EncryptedNs
	}
	return nil
}

func (m *EncryptedFineTimestamp) GetFpgaId() []byte {
	if m != nil {
		return m.FpgaId
	}
	return nil
}

type PlainFineTimestamp struct {
	// Full timestamp.
	Time                 *timestamp.Timestamp `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

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

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

var xxx_messageInfo_PlainFineTimestamp proto.InternalMessageInfo

func (m *PlainFineTimestamp) GetTime() *timestamp.Timestamp {
	if m != nil {
		return m.Time
	}
	return nil
}

type GatewayStats struct {
	// Gateway ID.
	GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayID,proto3" json:"gateway_id,omitempty"`
	// Gateway IP.
	Ip string `protobuf:"bytes,9,opt,name=ip,proto3" json:"ip,omitempty"`
	// Gateway time.
	Time *timestamp.Timestamp `protobuf:"bytes,2,opt,name=time,proto3" json:"time,omitempty"`
	// Gateway location.
	Location *common.Location `protobuf:"bytes,3,opt,name=location,proto3" json:"location,omitempty"`
	// Gateway configuration version (this maps to the config_version sent
	// by LoRa Server to the gateway).
	ConfigVersion string `protobuf:"bytes,4,opt,name=config_version,json=configVersion,proto3" json:"config_version,omitempty"`
	// Number of radio packets received.
	RxPacketsReceived uint32 `protobuf:"varint,5,opt,name=rx_packets_received,json=rxPacketsReceived,proto3" json:"rx_packets_received,omitempty"`
	// Number of radio packets received with valid PHY CRC.
	RxPacketsReceivedOk uint32 `protobuf:"varint,6,opt,name=rx_packets_received_ok,json=rxPacketsReceivedOK,proto3" json:"rx_packets_received_ok,omitempty"`
	// Number of downlink packets received for transmission.
	TxPacketsReceived uint32 `protobuf:"varint,7,opt,name=tx_packets_received,json=txPacketsReceived,proto3" json:"tx_packets_received,omitempty"`
	// Number of downlink packets emitted.
	TxPacketsEmitted uint32 `protobuf:"varint,8,opt,name=tx_packets_emitted,json=txPacketsEmitted,proto3" json:"tx_packets_emitted,omitempty"`
	// Additional gateway meta-data.
	MetaData map[string]string `protobuf:"bytes,10,rep,name=meta_data,json=metaData,proto3" json:"meta_data,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	// Stats ID (UUID).
	// Unique identifier for the gateway stats.
	StatsId []byte `protobuf:"bytes,11,opt,name=stats_id,json=statsID,proto3" json:"stats_id,omitempty"`
	// Tx packets per frequency.
	TxPacketsPerFrequency map[uint32]uint32 `protobuf:"bytes,12,rep,name=tx_packets_per_frequency,json=txPacketsPerFrequency,proto3" json:"tx_packets_per_frequency,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
	// Rx packets per frequency.
	RxPacketsPerFrequency map[uint32]uint32 `protobuf:"bytes,13,rep,name=rx_packets_per_frequency,json=rxPacketsPerFrequency,proto3" json:"rx_packets_per_frequency,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
	// Tx packets per modulation parameters.
	TxPacketsPerModulation []*PerModulationCount `protobuf:"bytes,14,rep,name=tx_packets_per_modulation,json=txPacketsPerModulation,proto3" json:"tx_packets_per_modulation,omitempty"`
	// Rx packets per modulation parameters.
	RxPacketsPerModulation []*PerModulationCount `protobuf:"bytes,15,rep,name=rx_packets_per_modulation,json=rxPacketsPerModulation,proto3" json:"rx_packets_per_modulation,omitempty"`
	// Tx packets per status.
	TxPacketsPerStatus   map[string]uint32 `protobuf:"bytes,16,rep,name=tx_packets_per_status,json=txPacketsPerStatus,proto3" json:"tx_packets_per_status,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

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

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

var xxx_messageInfo_GatewayStats proto.InternalMessageInfo

func (m *GatewayStats) GetGatewayId() []byte {
	if m != nil {
		return m.GatewayId
	}
	return nil
}

func (m *GatewayStats) GetIp() string {
	if m != nil {
		return m.Ip
	}
	return ""
}

func (m *GatewayStats) GetTime() *timestamp.Timestamp {
	if m != nil {
		return m.Time
	}
	return nil
}

func (m *GatewayStats) GetLocation() *common.Location {
	if m != nil {
		return m.Location
	}
	return nil
}

func (m *GatewayStats) GetConfigVersion() string {
	if m != nil {
		return m.ConfigVersion
	}
	return ""
}

func (m *GatewayStats) GetRxPacketsReceived() uint32 {
	if m != nil {
		return m.RxPacketsReceived
	}
	return 0
}

func (m *GatewayStats) GetRxPacketsReceivedOk() uint32 {
	if m != nil {
		return m.RxPacketsReceivedOk
	}
	return 0
}

func (m *GatewayStats) GetTxPacketsReceived() uint32 {
	if m != nil {
		return m.TxPacketsReceived
	}
	return 0
}

func (m *GatewayStats) GetTxPacketsEmitted() uint32 {
	if m != nil {
		return m.TxPacketsEmitted
	}
	return 0
}

func (m *GatewayStats) GetMetaData() map[string]string {
	if m != nil {
		return m.MetaData
	}
	return nil
}

func (m *GatewayStats) GetStatsId() []byte {
	if m != nil {
		return m.StatsId
	}
	return nil
}

func (m *GatewayStats) GetTxPacketsPerFrequency() map[uint32]uint32 {
	if m != nil {
		return m.TxPacketsPerFrequency
	}
	return nil
}

func (m *GatewayStats) GetRxPacketsPerFrequency() map[uint32]uint32 {
	if m != nil {
		return m.RxPacketsPerFrequency
	}
	return nil
}

func (m *GatewayStats) GetTxPacketsPerModulation() []*PerModulationCount {
	if m != nil {
		return m.TxPacketsPerModulation
	}
	return nil
}

func (m *GatewayStats) GetRxPacketsPerModulation() []*PerModulationCount {
	if m != nil {
		return m.RxPacketsPerModulation
	}
	return nil
}

func (m *GatewayStats) GetTxPacketsPerStatus() map[string]uint32 {
	if m != nil {
		return m.TxPacketsPerStatus
	}
	return nil
}

type PerModulationCount struct {
	// Modulation.
	Modulation *Modulation `protobuf:"bytes,1,opt,name=modulation,proto3" json:"modulation,omitempty"`
	// Count.
	Count                uint32   `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_PerModulationCount proto.InternalMessageInfo

func (m *PerModulationCount) GetModulation() *Modulation {
	if m != nil {
		return m.Modulation
	}
	return nil
}

func (m *PerModulationCount) GetCount() uint32 {
	if m != nil {
		return m.Count
	}
	return 0
}

type UplinkRXInfo struct {
	// Gateway ID.
	GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayID,proto3" json:"gateway_id,omitempty"`
	// RX time (only set when the gateway has a GPS module).
	Time *timestamp.Timestamp `protobuf:"bytes,2,opt,name=time,proto3" json:"time,omitempty"`
	// RX time since GPS epoch (only set when the gateway has a GPS module).
	TimeSinceGpsEpoch *duration.Duration `protobuf:"bytes,3,opt,name=time_since_gps_epoch,json=timeSinceGPSEpoch,proto3" json:"time_since_gps_epoch,omitempty"`
	// RSSI.
	Rssi int32 `protobuf:"varint,5,opt,name=rssi,proto3" json:"rssi,omitempty"`
	// LoRa SNR.
	LoraSnr float64 `protobuf:"fixed64,6,opt,name=lora_snr,json=loRaSNR,proto3" json:"lora_snr,omitempty"`
	// Channel.
	Channel uint32 `protobuf:"varint,7,opt,name=channel,proto3" json:"channel,omitempty"`
	// RF Chain.
	RfChain uint32 `protobuf:"varint,8,opt,name=rf_chain,json=rfChain,proto3" json:"rf_chain,omitempty"`
	// Board.
	Board uint32 `protobuf:"varint,9,opt,name=board,proto3" json:"board,omitempty"`
	// Antenna.
	Antenna uint32 `protobuf:"varint,10,opt,name=antenna,proto3" json:"antenna,omitempty"`
	// Location.
	Location *common.Location `protobuf:"bytes,11,opt,name=location,proto3" json:"location,omitempty"`
	// Fine-timestamp type.
	FineTimestampType FineTimestampType `protobuf:"varint,12,opt,name=fine_timestamp_type,json=fineTimestampType,proto3,enum=gw.FineTimestampType" json:"fine_timestamp_type,omitempty"`
	// Fine-timestamp data.
	//
	// Types that are valid to be assigned to FineTimestamp:
	//	*UplinkRXInfo_EncryptedFineTimestamp
	//	*UplinkRXInfo_PlainFineTimestamp
	FineTimestamp isUplinkRXInfo_FineTimestamp `protobuf_oneof:"fine_timestamp"`
	// Gateway specific context.
	Context []byte `protobuf:"bytes,15,opt,name=context,proto3" json:"context,omitempty"`
	// Uplink ID (UUID bytes).
	// Unique and random ID which can be used to correlate the uplink across multiple logs.
	UplinkId []byte `protobuf:"bytes,16,opt,name=uplink_id,json=uplinkID,proto3" json:"uplink_id,omitempty"`
	// CRC status.
	CrcStatus            CRCStatus `protobuf:"varint,17,opt,name=crc_status,json=crcStatus,proto3,enum=gw.CRCStatus" json:"crc_status,omitempty"`
	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
	XXX_unrecognized     []byte    `json:"-"`
	XXX_sizecache        int32     `json:"-"`
}

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

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

var xxx_messageInfo_UplinkRXInfo proto.InternalMessageInfo

func (m *UplinkRXInfo) GetGatewayId() []byte {
	if m != nil {
		return m.GatewayId
	}
	return nil
}

func (m *UplinkRXInfo) GetTime() *timestamp.Timestamp {
	if m != nil {
		return m.Time
	}
	return nil
}

func (m *UplinkRXInfo) GetTimeSinceGpsEpoch() *duration.Duration {
	if m != nil {
		return m.TimeSinceGpsEpoch
	}
	return nil
}

func (m *UplinkRXInfo) GetRssi() int32 {
	if m != nil {
		return m.Rssi
	}
	return 0
}

func (m *UplinkRXInfo) GetLoraSnr() float64 {
	if m != nil {
		return m.LoraSnr
	}
	return 0
}

func (m *UplinkRXInfo) GetChannel() uint32 {
	if m != nil {
		return m.Channel
	}
	return 0
}

func (m *UplinkRXInfo) GetRfChain() uint32 {
	if m != nil {
		return m.RfChain
	}
	return 0
}

func (m *UplinkRXInfo) GetBoard() uint32 {
	if m != nil {
		return m.Board
	}
	return 0
}

func (m *UplinkRXInfo) GetAntenna() uint32 {
	if m != nil {
		return m.Antenna
	}
	return 0
}

func (m *UplinkRXInfo) GetLocation() *common.Location {
	if m != nil {
		return m.Location
	}
	return nil
}

func (m *UplinkRXInfo) GetFineTimestampType() FineTimestampType {
	if m != nil {
		return m.FineTimestampType
	}
	return FineTimestampType_NONE
}

type isUplinkRXInfo_FineTimestamp interface {
	isUplinkRXInfo_FineTimestamp()
}

type UplinkRXInfo_EncryptedFineTimestamp struct {
	EncryptedFineTimestamp *EncryptedFineTimestamp `protobuf:"bytes,13,opt,name=encrypted_fine_timestamp,json=encryptedFineTimestamp,proto3,oneof"`
}

type UplinkRXInfo_PlainFineTimestamp struct {
	PlainFineTimestamp *PlainFineTimestamp `protobuf:"bytes,14,opt,name=plain_fine_timestamp,json=plainFineTimestamp,proto3,oneof"`
}

func (*UplinkRXInfo_EncryptedFineTimestamp) isUplinkRXInfo_FineTimestamp() {}

func (*UplinkRXInfo_PlainFineTimestamp) isUplinkRXInfo_FineTimestamp() {}

func (m *UplinkRXInfo) GetFineTimestamp() isUplinkRXInfo_FineTimestamp {
	if m != nil {
		return m.FineTimestamp
	}
	return nil
}

func (m *UplinkRXInfo) GetEncryptedFineTimestamp() *EncryptedFineTimestamp {
	if x, ok := m.GetFineTimestamp().(*UplinkRXInfo_EncryptedFineTimestamp); ok {
		return x.EncryptedFineTimestamp
	}
	return nil
}

func (m *UplinkRXInfo) GetPlainFineTimestamp() *PlainFineTimestamp {
	if x, ok := m.GetFineTimestamp().(*UplinkRXInfo_PlainFineTimestamp); ok {
		return x.PlainFineTimestamp
	}
	return nil
}

func (m *UplinkRXInfo) GetContext() []byte {
	if m != nil {
		return m.Context
	}
	return nil
}

func (m *UplinkRXInfo) GetUplinkId() []byte {
	if m != nil {
		return m.UplinkId
	}
	return nil
}

func (m *UplinkRXInfo) GetCrcStatus() CRCStatus {
	if m != nil {
		return m.CrcStatus
	}
	return CRCStatus_NO_CRC
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*UplinkRXInfo) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*UplinkRXInfo_EncryptedFineTimestamp)(nil),
		(*UplinkRXInfo_PlainFineTimestamp)(nil),
	}
}

type DownlinkTXInfo struct {
	// Gateway ID.
	// Deprecated: replaced by gateway_id in DownlinkFrame.
	GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayID,proto3" json:"gateway_id,omitempty"`
	// TX frequency (in Hz).
	Frequency uint32 `protobuf:"varint,5,opt,name=frequency,proto3" json:"frequency,omitempty"`
	// TX power (in dBm).
	Power int32 `protobuf:"varint,6,opt,name=power,proto3" json:"power,omitempty"`
	// Modulation.
	Modulation common.Modulation `protobuf:"varint,7,opt,name=modulation,proto3,enum=common.Modulation" json:"modulation,omitempty"`
	// Types that are valid to be assigned to ModulationInfo:
	//	*DownlinkTXInfo_LoraModulationInfo
	//	*DownlinkTXInfo_FskModulationInfo
	ModulationInfo isDownlinkTXInfo_ModulationInfo `protobuf_oneof:"modulation_info"`
	// The board identifier for emitting the frame.
	Board uint32 `protobuf:"varint,10,opt,name=board,proto3" json:"board,omitempty"`
	// The antenna identifier for emitting the frame.
	Antenna uint32 `protobuf:"varint,11,opt,name=antenna,proto3" json:"antenna,omitempty"`
	// Timing defines the downlink timing to use.
	Timing DownlinkTiming `protobuf:"varint,12,opt,name=timing,proto3,enum=gw.DownlinkTiming" json:"timing,omitempty"`
	// Types that are valid to be assigned to TimingInfo:
	//	*DownlinkTXInfo_ImmediatelyTimingInfo
	//	*DownlinkTXInfo_DelayTimingInfo
	//	*DownlinkTXInfo_GpsEpochTimingInfo
	TimingInfo isDownlinkTXInfo_TimingInfo `protobuf_oneof:"timing_info"`
	// Gateway specific context.
	// In case of a Class-A downlink, this contains a copy of the uplink context.
	Context              []byte   `protobuf:"bytes,16,opt,name=context,proto3" json:"context,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_DownlinkTXInfo proto.InternalMessageInfo

func (m *DownlinkTXInfo) GetGatewayId() []byte {
	if m != nil {
		return m.GatewayId
	}
	return nil
}

func (m *DownlinkTXInfo) GetFrequency() uint32 {
	if m != nil {
		return m.Frequency
	}
	return 0
}

func (m *DownlinkTXInfo) GetPower() int32 {
	if m != nil {
		return m.Power
	}
	return 0
}

func (m *DownlinkTXInfo) GetModulation() common.Modulation {
	if m != nil {
		return m.Modulation
	}
	return common.Modulation_LORA
}

type isDownlinkTXInfo_ModulationInfo interface {
	isDownlinkTXInfo_ModulationInfo()
}

type DownlinkTXInfo_LoraModulationInfo struct {
	LoraModulationInfo *LoRaModulationInfo `protobuf:"bytes,8,opt,name=lora_modulation_info,json=loRaModulationInfo,proto3,oneof"`
}

type DownlinkTXInfo_FskModulationInfo struct {
	FskModulationInfo *FSKModulationInfo `protobuf:"bytes,9,opt,name=fsk_modulation_info,json=fskModulationInfo,proto3,oneof"`
}

func (*DownlinkTXInfo_LoraModulationInfo) isDownlinkTXInfo_ModulationInfo() {}

func (*DownlinkTXInfo_FskModulationInfo) isDownlinkTXInfo_ModulationInfo() {}

func (m *DownlinkTXInfo) GetModulationInfo() isDownlinkTXInfo_ModulationInfo {
	if m != nil {
		return m.ModulationInfo
	}
	return nil
}

func (m *DownlinkTXInfo) GetLoraModulationInfo() *LoRaModulationInfo {
	if x, ok := m.GetModulationInfo().(*DownlinkTXInfo_LoraModulationInfo); ok {
		return x.LoraModulationInfo
	}
	return nil
}

func (m *DownlinkTXInfo) GetFskModulationInfo() *FSKModulationInfo {
	if x, ok := m.GetModulationInfo().(*DownlinkTXInfo_FskModulationInfo); ok {
		return x.FskModulationInfo
	}
	return nil
}

func (m *DownlinkTXInfo) GetBoard() uint32 {
	if m != nil {
		return m.Board
	}
	return 0
}

func (m *DownlinkTXInfo) GetAntenna() uint32 {
	if m != nil {
		return m.Antenna
	}
	return 0
}

func (m *DownlinkTXInfo) GetTiming() DownlinkTiming {
	if m != nil {
		return m.Timing
	}
	return DownlinkTiming_IMMEDIATELY
}

type isDownlinkTXInfo_TimingInfo interface {
	isDownlinkTXInfo_TimingInfo()
}

type DownlinkTXInfo_ImmediatelyTimingInfo struct {
	ImmediatelyTimingInfo *ImmediatelyTimingInfo `protobuf:"bytes,13,opt,name=immediately_timing_info,json=immediatelyTimingInfo,proto3,oneof"`
}

type DownlinkTXInfo_DelayTimingInfo struct {
	DelayTimingInfo *DelayTimingInfo `protobuf:"bytes,14,opt,name=delay_timing_info,json=delayTimingInfo,proto3,oneof"`
}

type DownlinkTXInfo_GpsEpochTimingInfo struct {
	GpsEpochTimingInfo *GPSEpochTimingInfo `protobuf:"bytes,15,opt,name=gps_epoch_timing_info,json=gpsEpochTimingInfo,proto3,oneof"`
}

func (*DownlinkTXInfo_ImmediatelyTimingInfo) isDownlinkTXInfo_TimingInfo() {}

func (*DownlinkTXInfo_DelayTimingInfo) isDownlinkTXInfo_TimingInfo() {}

func (*DownlinkTXInfo_GpsEpochTimingInfo) isDownlinkTXInfo_TimingInfo() {}

func (m *DownlinkTXInfo) GetTimingInfo() isDownlinkTXInfo_TimingInfo {
	if m != nil {
		return m.TimingInfo
	}
	return nil
}

func (m *DownlinkTXInfo) GetImmediatelyTimingInfo() *ImmediatelyTimingInfo {
	if x, ok := m.GetTimingInfo().(*DownlinkTXInfo_ImmediatelyTimingInfo); ok {
		return x.ImmediatelyTimingInfo
	}
	return nil
}

func (m *DownlinkTXInfo) GetDelayTimingInfo() *DelayTimingInfo {
	if x, ok := m.GetTimingInfo().(*DownlinkTXInfo_DelayTimingInfo); ok {
		return x.DelayTimingInfo
	}
	return nil
}

func (m *DownlinkTXInfo) GetGpsEpochTimingInfo() *GPSEpochTimingInfo {
	if x, ok := m.GetTimingInfo().(*DownlinkTXInfo_GpsEpochTimingInfo); ok {
		return x.GpsEpochTimingInfo
	}
	return nil
}

func (m *DownlinkTXInfo) GetContext() []byte {
	if m != nil {
		return m.Context
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*DownlinkTXInfo) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*DownlinkTXInfo_LoraModulationInfo)(nil),
		(*DownlinkTXInfo_FskModulationInfo)(nil),
		(*DownlinkTXInfo_ImmediatelyTimingInfo)(nil),
		(*DownlinkTXInfo_DelayTimingInfo)(nil),
		(*DownlinkTXInfo_GpsEpochTimingInfo)(nil),
	}
}

type ImmediatelyTimingInfo struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_ImmediatelyTimingInfo proto.InternalMessageInfo

type DelayTimingInfo struct {
	// Delay (duration).
	// The delay will be added to the gateway internal timing, provided by the context object.
	Delay                *duration.Duration `protobuf:"bytes,1,opt,name=delay,proto3" json:"delay,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *DelayTimingInfo) Reset()         { *m = DelayTimingInfo{} }
func (m *DelayTimingInfo) String() string { return proto.CompactTextString(m) }
func (*DelayTimingInfo) ProtoMessage()    {}
func (*DelayTimingInfo) Descriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{12}
}

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

var xxx_messageInfo_DelayTimingInfo proto.InternalMessageInfo

func (m *DelayTimingInfo) GetDelay() *duration.Duration {
	if m != nil {
		return m.Delay
	}
	return nil
}

type GPSEpochTimingInfo struct {
	// Duration since GPS Epoch.
	TimeSinceGpsEpoch    *duration.Duration `protobuf:"bytes,1,opt,name=time_since_gps_epoch,json=timeSinceGPSEpoch,proto3" json:"time_since_gps_epoch,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *GPSEpochTimingInfo) Reset()         { *m = GPSEpochTimingInfo{} }
func (m *GPSEpochTimingInfo) String() string { return proto.CompactTextString(m) }
func (*GPSEpochTimingInfo) ProtoMessage()    {}
func (*GPSEpochTimingInfo) Descriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{13}
}

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

var xxx_messageInfo_GPSEpochTimingInfo proto.InternalMessageInfo

func (m *GPSEpochTimingInfo) GetTimeSinceGpsEpoch() *duration.Duration {
	if m != nil {
		return m.TimeSinceGpsEpoch
	}
	return nil
}

type UplinkFrame struct {
	// PHYPayload.
	PhyPayload []byte `protobuf:"bytes,1,opt,name=phy_payload,json=phyPayload,proto3" json:"phy_payload,omitempty"`
	// TX meta-data.
	TxInfo *UplinkTXInfo `protobuf:"bytes,2,opt,name=tx_info,json=txInfo,proto3" json:"tx_info,omitempty"`
	// RX meta-data.
	RxInfo               *UplinkRXInfo `protobuf:"bytes,3,opt,name=rx_info,json=rxInfo,proto3" json:"rx_info,omitempty"`
	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
	XXX_unrecognized     []byte        `json:"-"`
	XXX_sizecache        int32         `json:"-"`
}

func (m *UplinkFrame) Reset()         { *m = UplinkFrame{} }
func (m *UplinkFrame) String() string { return proto.CompactTextString(m) }
func (*UplinkFrame) ProtoMessage()    {}
func (*UplinkFrame) Descriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{14}
}

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

var xxx_messageInfo_UplinkFrame proto.InternalMessageInfo

func (m *UplinkFrame) GetPhyPayload() []byte {
	if m != nil {
		return m.PhyPayload
	}
	return nil
}

func (m *UplinkFrame) GetTxInfo() *UplinkTXInfo {
	if m != nil {
		return m.TxInfo
	}
	return nil
}

func (m *UplinkFrame) GetRxInfo() *UplinkRXInfo {
	if m != nil {
		return m.RxInfo
	}
	return nil
}

type UplinkFrameSet struct {
	// PHYPayload.
	PhyPayload []byte `protobuf:"bytes,1,opt,name=phy_payload,json=phyPayload,proto3" json:"phy_payload,omitempty"`
	// TX meta-data.
	TxInfo *UplinkTXInfo `protobuf:"bytes,2,opt,name=tx_info,json=txInfo,proto3" json:"tx_info,omitempty"`
	// RX meta-data set.
	RxInfo               []*UplinkRXInfo `protobuf:"bytes,3,rep,name=rx_info,json=rxInfo,proto3" json:"rx_info,omitempty"`
	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
	XXX_unrecognized     []byte          `json:"-"`
	XXX_sizecache        int32           `json:"-"`
}

func (m *UplinkFrameSet) Reset()         { *m = UplinkFrameSet{} }
func (m *UplinkFrameSet) String() string { return proto.CompactTextString(m) }
func (*UplinkFrameSet) ProtoMessage()    {}
func (*UplinkFrameSet) Descriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{15}
}

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

var xxx_messageInfo_UplinkFrameSet proto.InternalMessageInfo

func (m *UplinkFrameSet) GetPhyPayload() []byte {
	if m != nil {
		return m.PhyPayload
	}
	return nil
}

func (m *UplinkFrameSet) GetTxInfo() *UplinkTXInfo {
	if m != nil {
		return m.TxInfo
	}
	return nil
}

func (m *UplinkFrameSet) GetRxInfo() []*UplinkRXInfo {
	if m != nil {
		return m.RxInfo
	}
	return nil
}

type DownlinkFrame struct {
	// PHYPayload.
	// Deprecated: replaced by items.
	PhyPayload []byte `protobuf:"bytes,1,opt,name=phy_payload,json=phyPayload,proto3" json:"phy_payload,omitempty"`
	// TX meta-data.
	// Deprecated: replaced by items.
	TxInfo *DownlinkTXInfo `protobuf:"bytes,2,opt,name=tx_info,json=txInfo,proto3" json:"tx_info,omitempty"`
	// Token (uint16 value).
	// Deprecated: replaced by downlink_id.
	Token uint32 `protobuf:"varint,3,opt,name=token,proto3" json:"token,omitempty"`
	// Downlink ID (UUID).
	DownlinkId []byte `protobuf:"bytes,4,opt,name=downlink_id,json=downlinkID,proto3" json:"downlink_id,omitempty"`
	// Downlink frame items.
	// This makes it possible to send multiple downlink opportunities to the
	// gateway at once (e.g. RX1 and RX2 in LoRaWAN). The first item has the
	// highest priority, the last the lowest. The gateway will emit at most
	// one item.
	Items []*DownlinkFrameItem `protobuf:"bytes,5,rep,name=items,proto3" json:"items,omitempty"`
	// Gateway ID.
	GatewayId            []byte   `protobuf:"bytes,6,opt,name=gateway_id,json=gatewayID,proto3" json:"gateway_id,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *DownlinkFrame) Reset()         { *m = DownlinkFrame{} }
func (m *DownlinkFrame) String() string { return proto.CompactTextString(m) }
func (*DownlinkFrame) ProtoMessage()    {}
func (*DownlinkFrame) Descriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{16}
}

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

var xxx_messageInfo_DownlinkFrame proto.InternalMessageInfo

func (m *DownlinkFrame) GetPhyPayload() []byte {
	if m != nil {
		return m.PhyPayload
	}
	return nil
}

func (m *DownlinkFrame) GetTxInfo() *DownlinkTXInfo {
	if m != nil {
		return m.TxInfo
	}
	return nil
}

func (m *DownlinkFrame) GetToken() uint32 {
	if m != nil {
		return m.Token
	}
	return 0
}

func (m *DownlinkFrame) GetDownlinkId() []byte {
	if m != nil {
		return m.DownlinkId
	}
	return nil
}

func (m *DownlinkFrame) GetItems() []*DownlinkFrameItem {
	if m != nil {
		return m.Items
	}
	return nil
}

func (m *DownlinkFrame) GetGatewayId() []byte {
	if m != nil {
		return m.GatewayId
	}
	return nil
}

type DownlinkFrameItem struct {
	// PHYPayload.
	PhyPayload []byte `protobuf:"bytes,1,opt,name=phy_payload,json=phyPayload,proto3" json:"phy_payload,omitempty"`
	// TX meta-data.
	TxInfo               *DownlinkTXInfo `protobuf:"bytes,2,opt,name=tx_info,json=txInfo,proto3" json:"tx_info,omitempty"`
	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
	XXX_unrecognized     []byte          `json:"-"`
	XXX_sizecache        int32           `json:"-"`
}

func (m *DownlinkFrameItem) Reset()         { *m = DownlinkFrameItem{} }
func (m *DownlinkFrameItem) String() string { return proto.CompactTextString(m) }
func (*DownlinkFrameItem) ProtoMessage()    {}
func (*DownlinkFrameItem) Descriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{17}
}

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

var xxx_messageInfo_DownlinkFrameItem proto.InternalMessageInfo

func (m *DownlinkFrameItem) GetPhyPayload() []byte {
	if m != nil {
		return m.PhyPayload
	}
	return nil
}

func (m *DownlinkFrameItem) GetTxInfo() *DownlinkTXInfo {
	if m != nil {
		return m.TxInfo
	}
	return nil
}

type DownlinkTXAck struct {
	// Gateway ID.
	GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayID,proto3" json:"gateway_id,omitempty"`
	// Token (uint16 value).
	// Deprecated: replaced by downlink_id.
	Token uint32 `protobuf:"varint,2,opt,name=token,proto3" json:"token,omitempty"`
	// Error.
	// Deprecated: replaced by items.
	Error string `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"`
	// Downlink ID (UUID).
	DownlinkId []byte `protobuf:"bytes,4,opt,name=downlink_id,json=downlinkID,proto3" json:"downlink_id,omitempty"`
	// Downlink frame items.
	// This list has the same length as the request and indicates which
	// downlink frame has been emitted of the requested list (or why it failed).
	// Note that at most one item has a positive acknowledgement.
	Items                []*DownlinkTXAckItem `protobuf:"bytes,5,rep,name=items,proto3" json:"items,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *DownlinkTXAck) Reset()         { *m = DownlinkTXAck{} }
func (m *DownlinkTXAck) String() string { return proto.CompactTextString(m) }
func (*DownlinkTXAck) ProtoMessage()    {}
func (*DownlinkTXAck) Descriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{18}
}

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

var xxx_messageInfo_DownlinkTXAck proto.InternalMessageInfo

func (m *DownlinkTXAck) GetGatewayId() []byte {
	if m != nil {
		return m.GatewayId
	}
	return nil
}

func (m *DownlinkTXAck) GetToken() uint32 {
	if m != nil {
		return m.Token
	}
	return 0
}

func (m *DownlinkTXAck) GetError() string {
	if m != nil {
		return m.Error
	}
	return ""
}

func (m *DownlinkTXAck) GetDownlinkId() []byte {
	if m != nil {
		return m.DownlinkId
	}
	return nil
}

func (m *DownlinkTXAck) GetItems() []*DownlinkTXAckItem {
	if m != nil {
		return m.Items
	}
	return nil
}

type DownlinkTXAckItem struct {
	// The Ack status of this item.
	Status               TxAckStatus `protobuf:"varint,1,opt,name=status,proto3,enum=gw.TxAckStatus" json:"status,omitempty"`
	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
	XXX_unrecognized     []byte      `json:"-"`
	XXX_sizecache        int32       `json:"-"`
}

func (m *DownlinkTXAckItem) Reset()         { *m = DownlinkTXAckItem{} }
func (m *DownlinkTXAckItem) String() string { return proto.CompactTextString(m) }
func (*DownlinkTXAckItem) ProtoMessage()    {}
func (*DownlinkTXAckItem) Descriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{19}
}

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

var xxx_messageInfo_DownlinkTXAckItem proto.InternalMessageInfo

func (m *DownlinkTXAckItem) GetStatus() TxAckStatus {
	if m != nil {
		return m.Status
	}
	return TxAckStatus_IGNORED
}

type GatewayConfiguration struct {
	// Gateway ID.
	GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayID,proto3" json:"gateway_id,omitempty"`
	// Configuration version.
	Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
	// Channels.
	Channels []*ChannelConfiguration `protobuf:"bytes,3,rep,name=channels,proto3" json:"channels,omitempty"`
	// Stats interval.
	StatsInterval        *duration.Duration `protobuf:"bytes,4,opt,name=stats_interval,json=statsInterval,proto3" json:"stats_interval,omitempty"`
	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
	XXX_unrecognized     []byte             `json:"-"`
	XXX_sizecache        int32              `json:"-"`
}

func (m *GatewayConfiguration) Reset()         { *m = GatewayConfiguration{} }
func (m *GatewayConfiguration) String() string { return proto.CompactTextString(m) }
func (*GatewayConfiguration) ProtoMessage()    {}
func (*GatewayConfiguration) Descriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{20}
}

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

var xxx_messageInfo_GatewayConfiguration proto.InternalMessageInfo

func (m *GatewayConfiguration) GetGatewayId() []byte {
	if m != nil {
		return m.GatewayId
	}
	return nil
}

func (m *GatewayConfiguration) GetVersion() string {
	if m != nil {
		return m.Version
	}
	return ""
}

func (m *GatewayConfiguration) GetChannels() []*ChannelConfiguration {
	if m != nil {
		return m.Channels
	}
	return nil
}

func (m *GatewayConfiguration) GetStatsInterval() *duration.Duration {
	if m != nil {
		return m.StatsInterval
	}
	return nil
}

type ChannelConfiguration struct {
	// Frequency (Hz).
	Frequency uint32 `protobuf:"varint,1,opt,name=frequency,proto3" json:"frequency,omitempty"`
	// Channel modulation.
	Modulation common.Modulation `protobuf:"varint,2,opt,name=modulation,proto3,enum=common.Modulation" json:"modulation,omitempty"`
	// Types that are valid to be assigned to ModulationConfig:
	//	*ChannelConfiguration_LoraModulationConfig
	//	*ChannelConfiguration_FskModulationConfig
	ModulationConfig isChannelConfiguration_ModulationConfig `protobuf_oneof:"modulation_config"`
	// Board index.
	Board uint32 `protobuf:"varint,5,opt,name=board,proto3" json:"board,omitempty"`
	// Demodulator index (of the given board).
	Demodulator          uint32   `protobuf:"varint,6,opt,name=demodulator,proto3" json:"demodulator,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ChannelConfiguration) Reset()         { *m = ChannelConfiguration{} }
func (m *ChannelConfiguration) String() string { return proto.CompactTextString(m) }
func (*ChannelConfiguration) ProtoMessage()    {}
func (*ChannelConfiguration) Descriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{21}
}

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

var xxx_messageInfo_ChannelConfiguration proto.InternalMessageInfo

func (m *ChannelConfiguration) GetFrequency() uint32 {
	if m != nil {
		return m.Frequency
	}
	return 0
}

func (m *ChannelConfiguration) GetModulation() common.Modulation {
	if m != nil {
		return m.Modulation
	}
	return common.Modulation_LORA
}

type isChannelConfiguration_ModulationConfig interface {
	isChannelConfiguration_ModulationConfig()
}

type ChannelConfiguration_LoraModulationConfig struct {
	LoraModulationConfig *LoRaModulationConfig `protobuf:"bytes,3,opt,name=lora_modulation_config,json=loRaModulationConfig,proto3,oneof"`
}

type ChannelConfiguration_FskModulationConfig struct {
	FskModulationConfig *FSKModulationConfig `protobuf:"bytes,4,opt,name=fsk_modulation_config,json=fskModulationConfig,proto3,oneof"`
}

func (*ChannelConfiguration_LoraModulationConfig) isChannelConfiguration_ModulationConfig() {}

func (*ChannelConfiguration_FskModulationConfig) isChannelConfiguration_ModulationConfig() {}

func (m *ChannelConfiguration) GetModulationConfig() isChannelConfiguration_ModulationConfig {
	if m != nil {
		return m.ModulationConfig
	}
	return nil
}

func (m *ChannelConfiguration) GetLoraModulationConfig() *LoRaModulationConfig {
	if x, ok := m.GetModulationConfig().(*ChannelConfiguration_LoraModulationConfig); ok {
		return x.LoraModulationConfig
	}
	return nil
}

func (m *ChannelConfiguration) GetFskModulationConfig() *FSKModulationConfig {
	if x, ok := m.GetModulationConfig().(*ChannelConfiguration_FskModulationConfig); ok {
		return x.FskModulationConfig
	}
	return nil
}

func (m *ChannelConfiguration) GetBoard() uint32 {
	if m != nil {
		return m.Board
	}
	return 0
}

func (m *ChannelConfiguration) GetDemodulator() uint32 {
	if m != nil {
		return m.Demodulator
	}
	return 0
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*ChannelConfiguration) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*ChannelConfiguration_LoraModulationConfig)(nil),
		(*ChannelConfiguration_FskModulationConfig)(nil),
	}
}

type LoRaModulationConfig struct {
	// Bandwidth.
	Bandwidth uint32 `protobuf:"varint,1,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"`
	// Spreading-factors.
	SpreadingFactors     []uint32 `protobuf:"varint,2,rep,packed,name=spreading_factors,json=spreadingFactors,proto3" json:"spreading_factors,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *LoRaModulationConfig) Reset()         { *m = LoRaModulationConfig{} }
func (m *LoRaModulationConfig) String() string { return proto.CompactTextString(m) }
func (*LoRaModulationConfig) ProtoMessage()    {}
func (*LoRaModulationConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{22}
}

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

var xxx_messageInfo_LoRaModulationConfig proto.InternalMessageInfo

func (m *LoRaModulationConfig) GetBandwidth() uint32 {
	if m != nil {
		return m.Bandwidth
	}
	return 0
}

func (m *LoRaModulationConfig) GetSpreadingFactors() []uint32 {
	if m != nil {
		return m.SpreadingFactors
	}
	return nil
}

type FSKModulationConfig struct {
	// Bandwidth.
	Bandwidth uint32 `protobuf:"varint,1,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"`
	// Bitrate.
	Bitrate              uint32   `protobuf:"varint,2,opt,name=bitrate,proto3" json:"bitrate,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *FSKModulationConfig) Reset()         { *m = FSKModulationConfig{} }
func (m *FSKModulationConfig) String() string { return proto.CompactTextString(m) }
func (*FSKModulationConfig) ProtoMessage()    {}
func (*FSKModulationConfig) Descriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{23}
}

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

var xxx_messageInfo_FSKModulationConfig proto.InternalMessageInfo

func (m *FSKModulationConfig) GetBandwidth() uint32 {
	if m != nil {
		return m.Bandwidth
	}
	return 0
}

func (m *FSKModulationConfig) GetBitrate() uint32 {
	if m != nil {
		return m.Bitrate
	}
	return 0
}

type GatewayCommandExecRequest struct {
	// Gateway ID.
	GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayID,proto3" json:"gateway_id,omitempty"`
	// Command to execute.
	// This command must be pre-configured in the LoRa Gateway Bridge configuration.
	Command string `protobuf:"bytes,2,opt,name=command,proto3" json:"command,omitempty"`
	// Execution request ID (UUID).
	// The same token will be returned when the execution of the command has
	// completed.
	ExecId []byte `protobuf:"bytes,3,opt,name=ExecId,json=execID,proto3" json:"ExecId,omitempty"`
	// Standard input.
	Stdin []byte `protobuf:"bytes,4,opt,name=stdin,proto3" json:"stdin,omitempty"`
	// Environment variables.
	Environment          map[string]string `protobuf:"bytes,5,rep,name=environment,proto3" json:"environment,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

func (m *GatewayCommandExecRequest) Reset()         { *m = GatewayCommandExecRequest{} }
func (m *GatewayCommandExecRequest) String() string { return proto.CompactTextString(m) }
func (*GatewayCommandExecRequest) ProtoMessage()    {}
func (*GatewayCommandExecRequest) Descriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{24}
}

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

var xxx_messageInfo_GatewayCommandExecRequest proto.InternalMessageInfo

func (m *GatewayCommandExecRequest) GetGatewayId() []byte {
	if m != nil {
		return m.GatewayId
	}
	return nil
}

func (m *GatewayCommandExecRequest) GetCommand() string {
	if m != nil {
		return m.Command
	}
	return ""
}

func (m *GatewayCommandExecRequest) GetExecId() []byte {
	if m != nil {
		return m.ExecId
	}
	return nil
}

func (m *GatewayCommandExecRequest) GetStdin() []byte {
	if m != nil {
		return m.Stdin
	}
	return nil
}

func (m *GatewayCommandExecRequest) GetEnvironment() map[string]string {
	if m != nil {
		return m.Environment
	}
	return nil
}

type GatewayCommandExecResponse struct {
	// Gateway ID.
	GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayID,proto3" json:"gateway_id,omitempty"`
	// Execution request ID (UUID).
	ExecId []byte `protobuf:"bytes,2,opt,name=exec_id,json=execID,proto3" json:"exec_id,omitempty"`
	// Standard output.
	Stdout []byte `protobuf:"bytes,3,opt,name=stdout,proto3" json:"stdout,omitempty"`
	// Standard error.
	Stderr []byte `protobuf:"bytes,4,opt,name=stderr,proto3" json:"stderr,omitempty"`
	// Error message.
	Error                string   `protobuf:"bytes,5,opt,name=error,proto3" json:"error,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *GatewayCommandExecResponse) Reset()         { *m = GatewayCommandExecResponse{} }
func (m *GatewayCommandExecResponse) String() string { return proto.CompactTextString(m) }
func (*GatewayCommandExecResponse) ProtoMessage()    {}
func (*GatewayCommandExecResponse) Descriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{25}
}

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

var xxx_messageInfo_GatewayCommandExecResponse proto.InternalMessageInfo

func (m *GatewayCommandExecResponse) GetGatewayId() []byte {
	if m != nil {
		return m.GatewayId
	}
	return nil
}

func (m *GatewayCommandExecResponse) GetExecId() []byte {
	if m != nil {
		return m.ExecId
	}
	return nil
}

func (m *GatewayCommandExecResponse) GetStdout() []byte {
	if m != nil {
		return m.Stdout
	}
	return nil
}

func (m *GatewayCommandExecResponse) GetStderr() []byte {
	if m != nil {
		return m.Stderr
	}
	return nil
}

func (m *GatewayCommandExecResponse) GetError() string {
	if m != nil {
		return m.Error
	}
	return ""
}

// RawPacketForwarderEvent contains a raw packet-forwarder event.
// It can be used to access packet-forwarder features that are not (fully)
// integrated with the ChirpStack Gateway Bridge.
type RawPacketForwarderEvent struct {
	// Gateway ID.
	GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayID,proto3" json:"gateway_id,omitempty"`
	// Raw ID (UUID).
	RawId []byte `protobuf:"bytes,2,opt,name=raw_id,json=rawID,proto3" json:"raw_id,omitempty"`
	// Payload contains the raw payload.
	Payload              []byte   `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RawPacketForwarderEvent) Reset()         { *m = RawPacketForwarderEvent{} }
func (m *RawPacketForwarderEvent) String() string { return proto.CompactTextString(m) }
func (*RawPacketForwarderEvent) ProtoMessage()    {}
func (*RawPacketForwarderEvent) Descriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{26}
}

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

var xxx_messageInfo_RawPacketForwarderEvent proto.InternalMessageInfo

func (m *RawPacketForwarderEvent) GetGatewayId() []byte {
	if m != nil {
		return m.GatewayId
	}
	return nil
}

func (m *RawPacketForwarderEvent) GetRawId() []byte {
	if m != nil {
		return m.RawId
	}
	return nil
}

func (m *RawPacketForwarderEvent) GetPayload() []byte {
	if m != nil {
		return m.Payload
	}
	return nil
}

// RawPacketForwarderEvent contains a raw packet-forwarder command.
// It can be used to access packet-forwarder features that are not (fully)
// integrated with the ChirpStack Gateway Bridge.
type RawPacketForwarderCommand struct {
	// Gateway ID.
	GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayID,proto3" json:"gateway_id,omitempty"`
	// Raw ID (UUID).
	RawId []byte `protobuf:"bytes,2,opt,name=raw_id,json=rawID,proto3" json:"raw_id,omitempty"`
	// Payload contains the raw payload.
	Payload              []byte   `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RawPacketForwarderCommand) Reset()         { *m = RawPacketForwarderCommand{} }
func (m *RawPacketForwarderCommand) String() string { return proto.CompactTextString(m) }
func (*RawPacketForwarderCommand) ProtoMessage()    {}
func (*RawPacketForwarderCommand) Descriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{27}
}

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

var xxx_messageInfo_RawPacketForwarderCommand proto.InternalMessageInfo

func (m *RawPacketForwarderCommand) GetGatewayId() []byte {
	if m != nil {
		return m.GatewayId
	}
	return nil
}

func (m *RawPacketForwarderCommand) GetRawId() []byte {
	if m != nil {
		return m.RawId
	}
	return nil
}

func (m *RawPacketForwarderCommand) GetPayload() []byte {
	if m != nil {
		return m.Payload
	}
	return nil
}

// ConnState contains the connection state of a gateway.
type ConnState struct {
	// Gateway ID.
	GatewayId            []byte          `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayID,proto3" json:"gateway_id,omitempty"`
	State                ConnState_State `protobuf:"varint,2,opt,name=state,proto3,enum=gw.ConnState_State" json:"state,omitempty"`
	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
	XXX_unrecognized     []byte          `json:"-"`
	XXX_sizecache        int32           `json:"-"`
}

func (m *ConnState) Reset()         { *m = ConnState{} }
func (m *ConnState) String() string { return proto.CompactTextString(m) }
func (*ConnState) ProtoMessage()    {}
func (*ConnState) Descriptor() ([]byte, []int) {
	return fileDescriptor_b93a753e2b32e8e7, []int{28}
}

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

var xxx_messageInfo_ConnState proto.InternalMessageInfo

func (m *ConnState) GetGatewayId() []byte {
	if m != nil {
		return m.GatewayId
	}
	return nil
}

func (m *ConnState) GetState() ConnState_State {
	if m != nil {
		return m.State
	}
	return ConnState_OFFLINE
}

func init() {
	proto.RegisterEnum("gw.DownlinkTiming", DownlinkTiming_name, DownlinkTiming_value)
	proto.RegisterEnum("gw.FineTimestampType", FineTimestampType_name, FineTimestampType_value)
	proto.RegisterEnum("gw.CRCStatus", CRCStatus_name, CRCStatus_value)
	proto.RegisterEnum("gw.TxAckStatus", TxAckStatus_name, TxAckStatus_value)
	proto.RegisterEnum("gw.ConnState_State", ConnState_State_name, ConnState_State_value)
	proto.RegisterType((*Modulation)(nil), "gw.Modulation")
	proto.RegisterType((*UplinkTXInfo)(nil), "gw.UplinkTXInfo")
	proto.RegisterType((*LoRaModulationInfo)(nil), "gw.LoRaModulationInfo")
	proto.RegisterType((*FSKModulationInfo)(nil), "gw.FSKModulationInfo")
	proto.RegisterType((*LRFHSSModulationInfo)(nil), "gw.LRFHSSModulationInfo")
	proto.RegisterType((*EncryptedFineTimestamp)(nil), "gw.EncryptedFineTimestamp")
	proto.RegisterType((*PlainFineTimestamp)(nil), "gw.PlainFineTimestamp")
	proto.RegisterType((*GatewayStats)(nil), "gw.GatewayStats")
	proto.RegisterMapType((map[string]string)(nil), "gw.GatewayStats.MetaDataEntry")
	proto.RegisterMapType((map[uint32]uint32)(nil), "gw.GatewayStats.RxPacketsPerFrequencyEntry")
	proto.RegisterMapType((map[uint32]uint32)(nil), "gw.GatewayStats.TxPacketsPerFrequencyEntry")
	proto.RegisterMapType((map[string]uint32)(nil), "gw.GatewayStats.TxPacketsPerStatusEntry")
	proto.RegisterType((*PerModulationCount)(nil), "gw.PerModulationCount")
	proto.RegisterType((*UplinkRXInfo)(nil), "gw.UplinkRXInfo")
	proto.RegisterType((*DownlinkTXInfo)(nil), "gw.DownlinkTXInfo")
	proto.RegisterType((*ImmediatelyTimingInfo)(nil), "gw.ImmediatelyTimingInfo")
	proto.RegisterType((*DelayTimingInfo)(nil), "gw.DelayTimingInfo")
	proto.RegisterType((*GPSEpochTimingInfo)(nil), "gw.GPSEpochTimingInfo")
	proto.RegisterType((*UplinkFrame)(nil), "gw.UplinkFrame")
	proto.RegisterType((*UplinkFrameSet)(nil), "gw.UplinkFrameSet")
	proto.RegisterType((*DownlinkFrame)(nil), "gw.DownlinkFrame")
	proto.RegisterType((*DownlinkFrameItem)(nil), "gw.DownlinkFrameItem")
	proto.RegisterType((*DownlinkTXAck)(nil), "gw.DownlinkTXAck")
	proto.RegisterType((*DownlinkTXAckItem)(nil), "gw.DownlinkTXAckItem")
	proto.RegisterType((*GatewayConfiguration)(nil), "gw.GatewayConfiguration")
	proto.RegisterType((*ChannelConfiguration)(nil), "gw.ChannelConfiguration")
	proto.RegisterType((*LoRaModulationConfig)(nil), "gw.LoRaModulationConfig")
	proto.RegisterType((*FSKModulationConfig)(nil), "gw.FSKModulationConfig")
	proto.RegisterType((*GatewayCommandExecRequest)(nil), "gw.GatewayCommandExecRequest")
	proto.RegisterMapType((map[string]string)(nil), "gw.GatewayCommandExecRequest.EnvironmentEntry")
	proto.RegisterType((*GatewayCommandExecResponse)(nil), "gw.GatewayCommandExecResponse")
	proto.RegisterType((*RawPacketForwarderEvent)(nil), "gw.RawPacketForwarderEvent")
	proto.RegisterType((*RawPacketForwarderCommand)(nil), "gw.RawPacketForwarderCommand")
	proto.RegisterType((*ConnState)(nil), "gw.ConnState")
}

func init() {
	proto.RegisterFile("gw/gw.proto", fileDescriptor_b93a753e2b32e8e7)
}

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