matrix-bridge-meshtastic/meshtastic/protobufs/mesh.pb.go

5015 lines
194 KiB
Go
Raw Normal View History

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.28.1
// protoc v3.21.12
// source: protobufs/mesh.proto
package protobufs
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// Note: these enum names must EXACTLY match the string used in the device
// bin/build-all.sh script.
// Because they will be used to find firmware filenames in the android app for OTA updates.
// To match the old style filenames, _ is converted to -, p is converted to .
type HardwareModel int32
const (
// TODO: REPLACE
HardwareModel_UNSET HardwareModel = 0
// TODO: REPLACE
HardwareModel_TLORA_V2 HardwareModel = 1
// TODO: REPLACE
HardwareModel_TLORA_V1 HardwareModel = 2
// TODO: REPLACE
HardwareModel_TLORA_V2_1_1P6 HardwareModel = 3
// TODO: REPLACE
HardwareModel_TBEAM HardwareModel = 4
// The original heltec WiFi_Lora_32_V2, which had battery voltage sensing hooked to GPIO 13
// (see HELTEC_V2 for the new version).
HardwareModel_HELTEC_V2_0 HardwareModel = 5
// TODO: REPLACE
HardwareModel_TBEAM_V0P7 HardwareModel = 6
// TODO: REPLACE
HardwareModel_T_ECHO HardwareModel = 7
// TODO: REPLACE
HardwareModel_TLORA_V1_1P3 HardwareModel = 8
// TODO: REPLACE
HardwareModel_RAK4631 HardwareModel = 9
// The new version of the heltec WiFi_Lora_32_V2 board that has battery sensing hooked to GPIO 37.
// Sadly they did not update anything on the silkscreen to identify this board
HardwareModel_HELTEC_V2_1 HardwareModel = 10
// Ancient heltec WiFi_Lora_32 board
HardwareModel_HELTEC_V1 HardwareModel = 11
// New T-BEAM with ESP32-S3 CPU
HardwareModel_LILYGO_TBEAM_S3_CORE HardwareModel = 12
// RAK WisBlock ESP32 core: https://docs.rakwireless.com/Product-Categories/WisBlock/RAK11200/Overview/
HardwareModel_RAK11200 HardwareModel = 13
// B&Q Consulting Nano Edition G1: https://uniteng.com/wiki/doku.php?id=meshtastic:nano
HardwareModel_NANO_G1 HardwareModel = 14
// TODO: REPLACE
HardwareModel_TLORA_V2_1_1P8 HardwareModel = 15
// TODO: REPLACE
HardwareModel_TLORA_T3_S3 HardwareModel = 16
// B&Q Consulting Nano G1 Explorer: https://wiki.uniteng.com/en/meshtastic/nano-g1-explorer
HardwareModel_NANO_G1_EXPLORER HardwareModel = 17
// B&Q Consulting Nano G2 Ultra: https://wiki.uniteng.com/en/meshtastic/nano-g2-ultra
HardwareModel_NANO_G2_ULTRA HardwareModel = 18
// LoRAType device: https://loratype.org/
HardwareModel_LORA_TYPE HardwareModel = 19
// wiphone https://www.wiphone.io/
HardwareModel_WIPHONE HardwareModel = 20
// WIO Tracker WM1110 family from Seeed Studio. Includes wio-1110-tracker and wio-1110-sdk
HardwareModel_WIO_WM1110 HardwareModel = 21
// RAK2560 Solar base station based on RAK4630
HardwareModel_RAK2560 HardwareModel = 22
// Heltec HRU-3601: https://heltec.org/project/hru-3601/
HardwareModel_HELTEC_HRU_3601 HardwareModel = 23
// Heltec Wireless Bridge
HardwareModel_HELTEC_WIRELESS_BRIDGE HardwareModel = 24
// B&Q Consulting Station Edition G1: https://uniteng.com/wiki/doku.php?id=meshtastic:station
HardwareModel_STATION_G1 HardwareModel = 25
// RAK11310 (RP2040 + SX1262)
HardwareModel_RAK11310 HardwareModel = 26
// Makerfabs SenseLoRA Receiver (RP2040 + RFM96)
HardwareModel_SENSELORA_RP2040 HardwareModel = 27
// Makerfabs SenseLoRA Industrial Monitor (ESP32-S3 + RFM96)
HardwareModel_SENSELORA_S3 HardwareModel = 28
// Canary Radio Company - CanaryOne: https://canaryradio.io/products/canaryone
HardwareModel_CANARYONE HardwareModel = 29
// Waveshare RP2040 LoRa - https://www.waveshare.com/rp2040-lora.htm
HardwareModel_RP2040_LORA HardwareModel = 30
// B&Q Consulting Station G2: https://wiki.uniteng.com/en/meshtastic/station-g2
HardwareModel_STATION_G2 HardwareModel = 31
// ---------------------------------------------------------------------------
// Less common/prototype boards listed here (needs one more byte over the air)
// ---------------------------------------------------------------------------
HardwareModel_LORA_RELAY_V1 HardwareModel = 32
// TODO: REPLACE
HardwareModel_NRF52840DK HardwareModel = 33
// TODO: REPLACE
HardwareModel_PPR HardwareModel = 34
// TODO: REPLACE
HardwareModel_GENIEBLOCKS HardwareModel = 35
// TODO: REPLACE
HardwareModel_NRF52_UNKNOWN HardwareModel = 36
// TODO: REPLACE
HardwareModel_PORTDUINO HardwareModel = 37
// The simulator built into the android app
HardwareModel_ANDROID_SIM HardwareModel = 38
// Custom DIY device based on @NanoVHF schematics: https://github.com/NanoVHF/Meshtastic-DIY/tree/main/Schematics
HardwareModel_DIY_V1 HardwareModel = 39
// nRF52840 Dongle : https://www.nordicsemi.com/Products/Development-hardware/nrf52840-dongle/
HardwareModel_NRF52840_PCA10059 HardwareModel = 40
// Custom Disaster Radio esp32 v3 device https://github.com/sudomesh/disaster-radio/tree/master/hardware/board_esp32_v3
HardwareModel_DR_DEV HardwareModel = 41
// M5 esp32 based MCU modules with enclosure, TFT and LORA Shields. All Variants (Basic, Core, Fire, Core2, CoreS3, Paper) https://m5stack.com/
HardwareModel_M5STACK HardwareModel = 42
// New Heltec LoRA32 with ESP32-S3 CPU
HardwareModel_HELTEC_V3 HardwareModel = 43
// New Heltec Wireless Stick Lite with ESP32-S3 CPU
HardwareModel_HELTEC_WSL_V3 HardwareModel = 44
// New BETAFPV ELRS Micro TX Module 2.4G with ESP32 CPU
HardwareModel_BETAFPV_2400_TX HardwareModel = 45
// BetaFPV ExpressLRS "Nano" TX Module 900MHz with ESP32 CPU
HardwareModel_BETAFPV_900_NANO_TX HardwareModel = 46
// Raspberry Pi Pico (W) with Waveshare SX1262 LoRa Node Module
HardwareModel_RPI_PICO HardwareModel = 47
// Heltec Wireless Tracker with ESP32-S3 CPU, built-in GPS, and TFT
// Newer V1.1, version is written on the PCB near the display.
HardwareModel_HELTEC_WIRELESS_TRACKER HardwareModel = 48
// Heltec Wireless Paper with ESP32-S3 CPU and E-Ink display
HardwareModel_HELTEC_WIRELESS_PAPER HardwareModel = 49
// LilyGo T-Deck with ESP32-S3 CPU, Keyboard and IPS display
HardwareModel_T_DECK HardwareModel = 50
// LilyGo T-Watch S3 with ESP32-S3 CPU and IPS display
HardwareModel_T_WATCH_S3 HardwareModel = 51
// Bobricius Picomputer with ESP32-S3 CPU, Keyboard and IPS display
HardwareModel_PICOMPUTER_S3 HardwareModel = 52
// Heltec HT-CT62 with ESP32-C3 CPU and SX1262 LoRa
HardwareModel_HELTEC_HT62 HardwareModel = 53
// EBYTE SPI LoRa module and ESP32-S3
HardwareModel_EBYTE_ESP32_S3 HardwareModel = 54
// Waveshare ESP32-S3-PICO with PICO LoRa HAT and 2.9inch e-Ink
HardwareModel_ESP32_S3_PICO HardwareModel = 55
// CircuitMess Chatter 2 LLCC68 Lora Module and ESP32 Wroom
// Lora module can be swapped out for a Heltec RA-62 which is "almost" pin compatible
// with one cut and one jumper Meshtastic works
HardwareModel_CHATTER_2 HardwareModel = 56
// Heltec Wireless Paper, With ESP32-S3 CPU and E-Ink display
// Older "V1.0" Variant, has no "version sticker"
// E-Ink model is DEPG0213BNS800
// Tab on the screen protector is RED
// Flex connector marking is FPC-7528B
HardwareModel_HELTEC_WIRELESS_PAPER_V1_0 HardwareModel = 57
// Heltec Wireless Tracker with ESP32-S3 CPU, built-in GPS, and TFT
// Older "V1.0" Variant
HardwareModel_HELTEC_WIRELESS_TRACKER_V1_0 HardwareModel = 58
// unPhone with ESP32-S3, TFT touchscreen, LSM6DS3TR-C accelerometer and gyroscope
HardwareModel_UNPHONE HardwareModel = 59
// Teledatics TD-LORAC NRF52840 based M.2 LoRA module
// Compatible with the TD-WRLS development board
HardwareModel_TD_LORAC HardwareModel = 60
// CDEBYTE EoRa-S3 board using their own MM modules, clone of LILYGO T3S3
HardwareModel_CDEBYTE_EORA_S3 HardwareModel = 61
// TWC_MESH_V4
// Adafruit NRF52840 feather express with SX1262, SSD1306 OLED and NEO6M GPS
HardwareModel_TWC_MESH_V4 HardwareModel = 62
// NRF52_PROMICRO_DIY
// Promicro NRF52840 with SX1262/LLCC68, SSD1306 OLED and NEO6M GPS
HardwareModel_NRF52_PROMICRO_DIY HardwareModel = 63
// RadioMaster 900 Bandit Nano, https://www.radiomasterrc.com/products/bandit-nano-expresslrs-rf-module
// ESP32-D0WDQ6 With SX1276/SKY66122, SSD1306 OLED and No GPS
HardwareModel_RADIOMASTER_900_BANDIT_NANO HardwareModel = 64
// Heltec Capsule Sensor V3 with ESP32-S3 CPU, Portable LoRa device that can replace GNSS modules or sensors
HardwareModel_HELTEC_CAPSULE_SENSOR_V3 HardwareModel = 65
// Heltec Vision Master T190 with ESP32-S3 CPU, and a 1.90 inch TFT display
HardwareModel_HELTEC_VISION_MASTER_T190 HardwareModel = 66
// Heltec Vision Master E213 with ESP32-S3 CPU, and a 2.13 inch E-Ink display
HardwareModel_HELTEC_VISION_MASTER_E213 HardwareModel = 67
// Heltec Vision Master E290 with ESP32-S3 CPU, and a 2.9 inch E-Ink display
HardwareModel_HELTEC_VISION_MASTER_E290 HardwareModel = 68
// Heltec Mesh Node T114 board with nRF52840 CPU, and a 1.14 inch TFT display, Ultimate low-power design,
// specifically adapted for the Meshtatic project
HardwareModel_HELTEC_MESH_NODE_T114 HardwareModel = 69
// Sensecap Indicator from Seeed Studio. ESP32-S3 device with TFT and RP2040 coprocessor
HardwareModel_SENSECAP_INDICATOR HardwareModel = 70
// Seeed studio T1000-E tracker card. NRF52840 w/ LR1110 radio, GPS, button, buzzer, and sensors.
HardwareModel_TRACKER_T1000_E HardwareModel = 71
// RAK3172 STM32WLE5 Module (https://store.rakwireless.com/products/wisduo-lpwan-module-rak3172)
HardwareModel_RAK3172 HardwareModel = 72
// Seeed Studio Wio-E5 (either mini or Dev kit) using STM32WL chip.
HardwareModel_WIO_E5 HardwareModel = 73
// RadioMaster 900 Bandit, https://www.radiomasterrc.com/products/bandit-expresslrs-rf-module
// SSD1306 OLED and No GPS
HardwareModel_RADIOMASTER_900_BANDIT HardwareModel = 74
// Minewsemi ME25LS01 (ME25LE01_V1.0). NRF52840 w/ LR1110 radio, buttons and leds and pins.
HardwareModel_ME25LS01_4Y10TD HardwareModel = 75
// RP2040_FEATHER_RFM95
// Adafruit Feather RP2040 with RFM95 LoRa Radio RFM95 with SX1272, SSD1306 OLED
// https://www.adafruit.com/product/5714
// https://www.adafruit.com/product/326
// https://www.adafruit.com/product/938
//
// ^^^ short A0 to switch to I2C address 0x3C
HardwareModel_RP2040_FEATHER_RFM95 HardwareModel = 76
// M5 esp32 based MCU modules with enclosure, TFT and LORA Shields. All Variants (Basic, Core, Fire, Core2, CoreS3, Paper) https://m5stack.com/
HardwareModel_M5STACK_COREBASIC HardwareModel = 77
HardwareModel_M5STACK_CORE2 HardwareModel = 78
// Pico2 with Waveshare Hat, same as Pico
HardwareModel_RPI_PICO2 HardwareModel = 79
// M5 esp32 based MCU modules with enclosure, TFT and LORA Shields. All Variants (Basic, Core, Fire, Core2, CoreS3, Paper) https://m5stack.com/
HardwareModel_M5STACK_CORES3 HardwareModel = 80
// Seeed XIAO S3 DK
HardwareModel_SEEED_XIAO_S3 HardwareModel = 81
// Nordic nRF52840+Semtech SX1262 LoRa BLE Combo Module. nRF52840+SX1262 MS24SF1
HardwareModel_MS24SF1 HardwareModel = 82
// Lilygo TLora-C6 with the new ESP32-C6 MCU
HardwareModel_TLORA_C6 HardwareModel = 83
// ------------------------------------------------------------------------------------------------------------------------------------------
// Reserved ID For developing private Ports. These will show up in live traffic sparsely, so we can use a high number. Keep it within 8 bits.
// ------------------------------------------------------------------------------------------------------------------------------------------
HardwareModel_PRIVATE_HW HardwareModel = 255
)
// Enum value maps for HardwareModel.
var (
HardwareModel_name = map[int32]string{
0: "UNSET",
1: "TLORA_V2",
2: "TLORA_V1",
3: "TLORA_V2_1_1P6",
4: "TBEAM",
5: "HELTEC_V2_0",
6: "TBEAM_V0P7",
7: "T_ECHO",
8: "TLORA_V1_1P3",
9: "RAK4631",
10: "HELTEC_V2_1",
11: "HELTEC_V1",
12: "LILYGO_TBEAM_S3_CORE",
13: "RAK11200",
14: "NANO_G1",
15: "TLORA_V2_1_1P8",
16: "TLORA_T3_S3",
17: "NANO_G1_EXPLORER",
18: "NANO_G2_ULTRA",
19: "LORA_TYPE",
20: "WIPHONE",
21: "WIO_WM1110",
22: "RAK2560",
23: "HELTEC_HRU_3601",
24: "HELTEC_WIRELESS_BRIDGE",
25: "STATION_G1",
26: "RAK11310",
27: "SENSELORA_RP2040",
28: "SENSELORA_S3",
29: "CANARYONE",
30: "RP2040_LORA",
31: "STATION_G2",
32: "LORA_RELAY_V1",
33: "NRF52840DK",
34: "PPR",
35: "GENIEBLOCKS",
36: "NRF52_UNKNOWN",
37: "PORTDUINO",
38: "ANDROID_SIM",
39: "DIY_V1",
40: "NRF52840_PCA10059",
41: "DR_DEV",
42: "M5STACK",
43: "HELTEC_V3",
44: "HELTEC_WSL_V3",
45: "BETAFPV_2400_TX",
46: "BETAFPV_900_NANO_TX",
47: "RPI_PICO",
48: "HELTEC_WIRELESS_TRACKER",
49: "HELTEC_WIRELESS_PAPER",
50: "T_DECK",
51: "T_WATCH_S3",
52: "PICOMPUTER_S3",
53: "HELTEC_HT62",
54: "EBYTE_ESP32_S3",
55: "ESP32_S3_PICO",
56: "CHATTER_2",
57: "HELTEC_WIRELESS_PAPER_V1_0",
58: "HELTEC_WIRELESS_TRACKER_V1_0",
59: "UNPHONE",
60: "TD_LORAC",
61: "CDEBYTE_EORA_S3",
62: "TWC_MESH_V4",
63: "NRF52_PROMICRO_DIY",
64: "RADIOMASTER_900_BANDIT_NANO",
65: "HELTEC_CAPSULE_SENSOR_V3",
66: "HELTEC_VISION_MASTER_T190",
67: "HELTEC_VISION_MASTER_E213",
68: "HELTEC_VISION_MASTER_E290",
69: "HELTEC_MESH_NODE_T114",
70: "SENSECAP_INDICATOR",
71: "TRACKER_T1000_E",
72: "RAK3172",
73: "WIO_E5",
74: "RADIOMASTER_900_BANDIT",
75: "ME25LS01_4Y10TD",
76: "RP2040_FEATHER_RFM95",
77: "M5STACK_COREBASIC",
78: "M5STACK_CORE2",
79: "RPI_PICO2",
80: "M5STACK_CORES3",
81: "SEEED_XIAO_S3",
82: "MS24SF1",
83: "TLORA_C6",
255: "PRIVATE_HW",
}
HardwareModel_value = map[string]int32{
"UNSET": 0,
"TLORA_V2": 1,
"TLORA_V1": 2,
"TLORA_V2_1_1P6": 3,
"TBEAM": 4,
"HELTEC_V2_0": 5,
"TBEAM_V0P7": 6,
"T_ECHO": 7,
"TLORA_V1_1P3": 8,
"RAK4631": 9,
"HELTEC_V2_1": 10,
"HELTEC_V1": 11,
"LILYGO_TBEAM_S3_CORE": 12,
"RAK11200": 13,
"NANO_G1": 14,
"TLORA_V2_1_1P8": 15,
"TLORA_T3_S3": 16,
"NANO_G1_EXPLORER": 17,
"NANO_G2_ULTRA": 18,
"LORA_TYPE": 19,
"WIPHONE": 20,
"WIO_WM1110": 21,
"RAK2560": 22,
"HELTEC_HRU_3601": 23,
"HELTEC_WIRELESS_BRIDGE": 24,
"STATION_G1": 25,
"RAK11310": 26,
"SENSELORA_RP2040": 27,
"SENSELORA_S3": 28,
"CANARYONE": 29,
"RP2040_LORA": 30,
"STATION_G2": 31,
"LORA_RELAY_V1": 32,
"NRF52840DK": 33,
"PPR": 34,
"GENIEBLOCKS": 35,
"NRF52_UNKNOWN": 36,
"PORTDUINO": 37,
"ANDROID_SIM": 38,
"DIY_V1": 39,
"NRF52840_PCA10059": 40,
"DR_DEV": 41,
"M5STACK": 42,
"HELTEC_V3": 43,
"HELTEC_WSL_V3": 44,
"BETAFPV_2400_TX": 45,
"BETAFPV_900_NANO_TX": 46,
"RPI_PICO": 47,
"HELTEC_WIRELESS_TRACKER": 48,
"HELTEC_WIRELESS_PAPER": 49,
"T_DECK": 50,
"T_WATCH_S3": 51,
"PICOMPUTER_S3": 52,
"HELTEC_HT62": 53,
"EBYTE_ESP32_S3": 54,
"ESP32_S3_PICO": 55,
"CHATTER_2": 56,
"HELTEC_WIRELESS_PAPER_V1_0": 57,
"HELTEC_WIRELESS_TRACKER_V1_0": 58,
"UNPHONE": 59,
"TD_LORAC": 60,
"CDEBYTE_EORA_S3": 61,
"TWC_MESH_V4": 62,
"NRF52_PROMICRO_DIY": 63,
"RADIOMASTER_900_BANDIT_NANO": 64,
"HELTEC_CAPSULE_SENSOR_V3": 65,
"HELTEC_VISION_MASTER_T190": 66,
"HELTEC_VISION_MASTER_E213": 67,
"HELTEC_VISION_MASTER_E290": 68,
"HELTEC_MESH_NODE_T114": 69,
"SENSECAP_INDICATOR": 70,
"TRACKER_T1000_E": 71,
"RAK3172": 72,
"WIO_E5": 73,
"RADIOMASTER_900_BANDIT": 74,
"ME25LS01_4Y10TD": 75,
"RP2040_FEATHER_RFM95": 76,
"M5STACK_COREBASIC": 77,
"M5STACK_CORE2": 78,
"RPI_PICO2": 79,
"M5STACK_CORES3": 80,
"SEEED_XIAO_S3": 81,
"MS24SF1": 82,
"TLORA_C6": 83,
"PRIVATE_HW": 255,
}
)
func (x HardwareModel) Enum() *HardwareModel {
p := new(HardwareModel)
*p = x
return p
}
func (x HardwareModel) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (HardwareModel) Descriptor() protoreflect.EnumDescriptor {
return file_protobufs_mesh_proto_enumTypes[0].Descriptor()
}
func (HardwareModel) Type() protoreflect.EnumType {
return &file_protobufs_mesh_proto_enumTypes[0]
}
func (x HardwareModel) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use HardwareModel.Descriptor instead.
func (HardwareModel) EnumDescriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{0}
}
// Shared constants between device and phone
type Constants int32
const (
// First enum must be zero, and we are just using this enum to
// pass int constants between two very different environments
Constants_ZERO Constants = 0
// From mesh.options
// note: this payload length is ONLY the bytes that are sent inside of the Data protobuf (excluding protobuf overhead). The 16 byte header is
// outside of this envelope
Constants_DATA_PAYLOAD_LEN Constants = 237
)
// Enum value maps for Constants.
var (
Constants_name = map[int32]string{
0: "ZERO",
237: "DATA_PAYLOAD_LEN",
}
Constants_value = map[string]int32{
"ZERO": 0,
"DATA_PAYLOAD_LEN": 237,
}
)
func (x Constants) Enum() *Constants {
p := new(Constants)
*p = x
return p
}
func (x Constants) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (Constants) Descriptor() protoreflect.EnumDescriptor {
return file_protobufs_mesh_proto_enumTypes[1].Descriptor()
}
func (Constants) Type() protoreflect.EnumType {
return &file_protobufs_mesh_proto_enumTypes[1]
}
func (x Constants) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use Constants.Descriptor instead.
func (Constants) EnumDescriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{1}
}
// Error codes for critical errors
// The device might report these fault codes on the screen.
// If you encounter a fault code, please post on the meshtastic.discourse.group
// and we'll try to help.
type CriticalErrorCode int32
const (
// TODO: REPLACE
CriticalErrorCode_NONE CriticalErrorCode = 0
// A software bug was detected while trying to send lora
CriticalErrorCode_TX_WATCHDOG CriticalErrorCode = 1
// A software bug was detected on entry to sleep
CriticalErrorCode_SLEEP_ENTER_WAIT CriticalErrorCode = 2
// No Lora radio hardware could be found
CriticalErrorCode_NO_RADIO CriticalErrorCode = 3
// Not normally used
CriticalErrorCode_UNSPECIFIED CriticalErrorCode = 4
// We failed while configuring a UBlox GPS
CriticalErrorCode_UBLOX_UNIT_FAILED CriticalErrorCode = 5
// This board was expected to have a power management chip and it is missing or broken
CriticalErrorCode_NO_AXP192 CriticalErrorCode = 6
// The channel tried to set a radio setting which is not supported by this chipset,
// radio comms settings are now undefined.
CriticalErrorCode_INVALID_RADIO_SETTING CriticalErrorCode = 7
// Radio transmit hardware failure. We sent data to the radio chip, but it didn't
// reply with an interrupt.
CriticalErrorCode_TRANSMIT_FAILED CriticalErrorCode = 8
// We detected that the main CPU voltage dropped below the minimum acceptable value
CriticalErrorCode_BROWNOUT CriticalErrorCode = 9
// Selftest of SX1262 radio chip failed
CriticalErrorCode_SX1262_FAILURE CriticalErrorCode = 10
// A (likely software but possibly hardware) failure was detected while trying to send packets.
// If this occurs on your board, please post in the forum so that we can ask you to collect some information to allow fixing this bug
CriticalErrorCode_RADIO_SPI_BUG CriticalErrorCode = 11
// Corruption was detected on the flash filesystem but we were able to repair things.
// If you see this failure in the field please post in the forum because we are interested in seeing if this is occurring in the field.
CriticalErrorCode_FLASH_CORRUPTION_RECOVERABLE CriticalErrorCode = 12
// Corruption was detected on the flash filesystem but we were unable to repair things.
// NOTE: Your node will probably need to be reconfigured the next time it reboots (it will lose the region code etc...)
// If you see this failure in the field please post in the forum because we are interested in seeing if this is occurring in the field.
CriticalErrorCode_FLASH_CORRUPTION_UNRECOVERABLE CriticalErrorCode = 13
)
// Enum value maps for CriticalErrorCode.
var (
CriticalErrorCode_name = map[int32]string{
0: "NONE",
1: "TX_WATCHDOG",
2: "SLEEP_ENTER_WAIT",
3: "NO_RADIO",
4: "UNSPECIFIED",
5: "UBLOX_UNIT_FAILED",
6: "NO_AXP192",
7: "INVALID_RADIO_SETTING",
8: "TRANSMIT_FAILED",
9: "BROWNOUT",
10: "SX1262_FAILURE",
11: "RADIO_SPI_BUG",
12: "FLASH_CORRUPTION_RECOVERABLE",
13: "FLASH_CORRUPTION_UNRECOVERABLE",
}
CriticalErrorCode_value = map[string]int32{
"NONE": 0,
"TX_WATCHDOG": 1,
"SLEEP_ENTER_WAIT": 2,
"NO_RADIO": 3,
"UNSPECIFIED": 4,
"UBLOX_UNIT_FAILED": 5,
"NO_AXP192": 6,
"INVALID_RADIO_SETTING": 7,
"TRANSMIT_FAILED": 8,
"BROWNOUT": 9,
"SX1262_FAILURE": 10,
"RADIO_SPI_BUG": 11,
"FLASH_CORRUPTION_RECOVERABLE": 12,
"FLASH_CORRUPTION_UNRECOVERABLE": 13,
}
)
func (x CriticalErrorCode) Enum() *CriticalErrorCode {
p := new(CriticalErrorCode)
*p = x
return p
}
func (x CriticalErrorCode) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (CriticalErrorCode) Descriptor() protoreflect.EnumDescriptor {
return file_protobufs_mesh_proto_enumTypes[2].Descriptor()
}
func (CriticalErrorCode) Type() protoreflect.EnumType {
return &file_protobufs_mesh_proto_enumTypes[2]
}
func (x CriticalErrorCode) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use CriticalErrorCode.Descriptor instead.
func (CriticalErrorCode) EnumDescriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{2}
}
// How the location was acquired: manual, onboard GPS, external (EUD) GPS
type Position_LocSource int32
const (
// TODO: REPLACE
Position_LOC_UNSET Position_LocSource = 0
// TODO: REPLACE
Position_LOC_MANUAL Position_LocSource = 1
// TODO: REPLACE
Position_LOC_INTERNAL Position_LocSource = 2
// TODO: REPLACE
Position_LOC_EXTERNAL Position_LocSource = 3
)
// Enum value maps for Position_LocSource.
var (
Position_LocSource_name = map[int32]string{
0: "LOC_UNSET",
1: "LOC_MANUAL",
2: "LOC_INTERNAL",
3: "LOC_EXTERNAL",
}
Position_LocSource_value = map[string]int32{
"LOC_UNSET": 0,
"LOC_MANUAL": 1,
"LOC_INTERNAL": 2,
"LOC_EXTERNAL": 3,
}
)
func (x Position_LocSource) Enum() *Position_LocSource {
p := new(Position_LocSource)
*p = x
return p
}
func (x Position_LocSource) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (Position_LocSource) Descriptor() protoreflect.EnumDescriptor {
return file_protobufs_mesh_proto_enumTypes[3].Descriptor()
}
func (Position_LocSource) Type() protoreflect.EnumType {
return &file_protobufs_mesh_proto_enumTypes[3]
}
func (x Position_LocSource) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use Position_LocSource.Descriptor instead.
func (Position_LocSource) EnumDescriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{0, 0}
}
// How the altitude was acquired: manual, GPS int/ext, etc
// Default: same as location_source if present
type Position_AltSource int32
const (
// TODO: REPLACE
Position_ALT_UNSET Position_AltSource = 0
// TODO: REPLACE
Position_ALT_MANUAL Position_AltSource = 1
// TODO: REPLACE
Position_ALT_INTERNAL Position_AltSource = 2
// TODO: REPLACE
Position_ALT_EXTERNAL Position_AltSource = 3
// TODO: REPLACE
Position_ALT_BAROMETRIC Position_AltSource = 4
)
// Enum value maps for Position_AltSource.
var (
Position_AltSource_name = map[int32]string{
0: "ALT_UNSET",
1: "ALT_MANUAL",
2: "ALT_INTERNAL",
3: "ALT_EXTERNAL",
4: "ALT_BAROMETRIC",
}
Position_AltSource_value = map[string]int32{
"ALT_UNSET": 0,
"ALT_MANUAL": 1,
"ALT_INTERNAL": 2,
"ALT_EXTERNAL": 3,
"ALT_BAROMETRIC": 4,
}
)
func (x Position_AltSource) Enum() *Position_AltSource {
p := new(Position_AltSource)
*p = x
return p
}
func (x Position_AltSource) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (Position_AltSource) Descriptor() protoreflect.EnumDescriptor {
return file_protobufs_mesh_proto_enumTypes[4].Descriptor()
}
func (Position_AltSource) Type() protoreflect.EnumType {
return &file_protobufs_mesh_proto_enumTypes[4]
}
func (x Position_AltSource) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use Position_AltSource.Descriptor instead.
func (Position_AltSource) EnumDescriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{0, 1}
}
// A failure in delivering a message (usually used for routing control messages, but might be provided in addition to ack.fail_id to provide
// details on the type of failure).
type Routing_Error int32
const (
// This message is not a failure
Routing_NONE Routing_Error = 0
// Our node doesn't have a route to the requested destination anymore.
Routing_NO_ROUTE Routing_Error = 1
// We received a nak while trying to forward on your behalf
Routing_GOT_NAK Routing_Error = 2
// TODO: REPLACE
Routing_TIMEOUT Routing_Error = 3
// No suitable interface could be found for delivering this packet
Routing_NO_INTERFACE Routing_Error = 4
// We reached the max retransmission count (typically for naive flood routing)
Routing_MAX_RETRANSMIT Routing_Error = 5
// No suitable channel was found for sending this packet (i.e. was requested channel index disabled?)
Routing_NO_CHANNEL Routing_Error = 6
// The packet was too big for sending (exceeds interface MTU after encoding)
Routing_TOO_LARGE Routing_Error = 7
// The request had want_response set, the request reached the destination node, but no service on that node wants to send a response
// (possibly due to bad channel permissions)
Routing_NO_RESPONSE Routing_Error = 8
// Cannot send currently because duty cycle regulations will be violated.
Routing_DUTY_CYCLE_LIMIT Routing_Error = 9
// The application layer service on the remote node received your request, but considered your request somehow invalid
Routing_BAD_REQUEST Routing_Error = 32
// The application layer service on the remote node received your request, but considered your request not authorized
// (i.e you did not send the request on the required bound channel)
Routing_NOT_AUTHORIZED Routing_Error = 33
// The client specified a PKI transport, but the node was unable to send the packet using PKI (and did not send the message at all)
Routing_PKI_FAILED Routing_Error = 34
// The receiving node does not have a Public Key to decode with
Routing_PKI_UNKNOWN_PUBKEY Routing_Error = 35
// Admin packet otherwise checks out, but uses a bogus or expired session key
Routing_ADMIN_BAD_SESSION_KEY Routing_Error = 36
// Admin packet sent using PKC, but not from a public key on the admin key list
Routing_ADMIN_PUBLIC_KEY_UNAUTHORIZED Routing_Error = 37
)
// Enum value maps for Routing_Error.
var (
Routing_Error_name = map[int32]string{
0: "NONE",
1: "NO_ROUTE",
2: "GOT_NAK",
3: "TIMEOUT",
4: "NO_INTERFACE",
5: "MAX_RETRANSMIT",
6: "NO_CHANNEL",
7: "TOO_LARGE",
8: "NO_RESPONSE",
9: "DUTY_CYCLE_LIMIT",
32: "BAD_REQUEST",
33: "NOT_AUTHORIZED",
34: "PKI_FAILED",
35: "PKI_UNKNOWN_PUBKEY",
36: "ADMIN_BAD_SESSION_KEY",
37: "ADMIN_PUBLIC_KEY_UNAUTHORIZED",
}
Routing_Error_value = map[string]int32{
"NONE": 0,
"NO_ROUTE": 1,
"GOT_NAK": 2,
"TIMEOUT": 3,
"NO_INTERFACE": 4,
"MAX_RETRANSMIT": 5,
"NO_CHANNEL": 6,
"TOO_LARGE": 7,
"NO_RESPONSE": 8,
"DUTY_CYCLE_LIMIT": 9,
"BAD_REQUEST": 32,
"NOT_AUTHORIZED": 33,
"PKI_FAILED": 34,
"PKI_UNKNOWN_PUBKEY": 35,
"ADMIN_BAD_SESSION_KEY": 36,
"ADMIN_PUBLIC_KEY_UNAUTHORIZED": 37,
}
)
func (x Routing_Error) Enum() *Routing_Error {
p := new(Routing_Error)
*p = x
return p
}
func (x Routing_Error) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (Routing_Error) Descriptor() protoreflect.EnumDescriptor {
return file_protobufs_mesh_proto_enumTypes[5].Descriptor()
}
func (Routing_Error) Type() protoreflect.EnumType {
return &file_protobufs_mesh_proto_enumTypes[5]
}
func (x Routing_Error) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use Routing_Error.Descriptor instead.
func (Routing_Error) EnumDescriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{3, 0}
}
// The priority of this message for sending.
// Higher priorities are sent first (when managing the transmit queue).
// This field is never sent over the air, it is only used internally inside of a local device node.
// API clients (either on the local node or connected directly to the node)
// can set this parameter if necessary.
// (values must be <= 127 to keep protobuf field to one byte in size.
// Detailed background on this field:
// I noticed a funny side effect of lora being so slow: Usually when making
// a protocol there isnt much need to use message priority to change the order
// of transmission (because interfaces are fairly fast).
// But for lora where packets can take a few seconds each, it is very important
// to make sure that critical packets are sent ASAP.
// In the case of meshtastic that means we want to send protocol acks as soon as possible
// (to prevent unneeded retransmissions), we want routing messages to be sent next,
// then messages marked as reliable and finally 'background' packets like periodic position updates.
// So I bit the bullet and implemented a new (internal - not sent over the air)
// field in MeshPacket called 'priority'.
// And the transmission queue in the router object is now a priority queue.
type MeshPacket_Priority int32
const (
// Treated as Priority.DEFAULT
MeshPacket_UNSET MeshPacket_Priority = 0
// TODO: REPLACE
MeshPacket_MIN MeshPacket_Priority = 1
// Background position updates are sent with very low priority -
// if the link is super congested they might not go out at all
MeshPacket_BACKGROUND MeshPacket_Priority = 10
// This priority is used for most messages that don't have a priority set
MeshPacket_DEFAULT MeshPacket_Priority = 64
// If priority is unset but the message is marked as want_ack,
// assume it is important and use a slightly higher priority
MeshPacket_RELIABLE MeshPacket_Priority = 70
// If priority is unset but the packet is a response to a request, we want it to get there relatively quickly.
// Furthermore, responses stop relaying packets directed to a node early.
MeshPacket_RESPONSE MeshPacket_Priority = 80
// Higher priority for specific message types (portnums) to distinguish between other reliable packets.
MeshPacket_HIGH MeshPacket_Priority = 100
// Ack/naks are sent with very high priority to ensure that retransmission
// stops as soon as possible
MeshPacket_ACK MeshPacket_Priority = 120
// TODO: REPLACE
MeshPacket_MAX MeshPacket_Priority = 127
)
// Enum value maps for MeshPacket_Priority.
var (
MeshPacket_Priority_name = map[int32]string{
0: "UNSET",
1: "MIN",
10: "BACKGROUND",
64: "DEFAULT",
70: "RELIABLE",
80: "RESPONSE",
100: "HIGH",
120: "ACK",
127: "MAX",
}
MeshPacket_Priority_value = map[string]int32{
"UNSET": 0,
"MIN": 1,
"BACKGROUND": 10,
"DEFAULT": 64,
"RELIABLE": 70,
"RESPONSE": 80,
"HIGH": 100,
"ACK": 120,
"MAX": 127,
}
)
func (x MeshPacket_Priority) Enum() *MeshPacket_Priority {
p := new(MeshPacket_Priority)
*p = x
return p
}
func (x MeshPacket_Priority) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (MeshPacket_Priority) Descriptor() protoreflect.EnumDescriptor {
return file_protobufs_mesh_proto_enumTypes[6].Descriptor()
}
func (MeshPacket_Priority) Type() protoreflect.EnumType {
return &file_protobufs_mesh_proto_enumTypes[6]
}
func (x MeshPacket_Priority) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use MeshPacket_Priority.Descriptor instead.
func (MeshPacket_Priority) EnumDescriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{7, 0}
}
// Identify if this is a delayed packet
type MeshPacket_Delayed int32
const (
// If unset, the message is being sent in real time.
MeshPacket_NO_DELAY MeshPacket_Delayed = 0
// The message is delayed and was originally a broadcast
MeshPacket_DELAYED_BROADCAST MeshPacket_Delayed = 1
// The message is delayed and was originally a direct message
MeshPacket_DELAYED_DIRECT MeshPacket_Delayed = 2
)
// Enum value maps for MeshPacket_Delayed.
var (
MeshPacket_Delayed_name = map[int32]string{
0: "NO_DELAY",
1: "DELAYED_BROADCAST",
2: "DELAYED_DIRECT",
}
MeshPacket_Delayed_value = map[string]int32{
"NO_DELAY": 0,
"DELAYED_BROADCAST": 1,
"DELAYED_DIRECT": 2,
}
)
func (x MeshPacket_Delayed) Enum() *MeshPacket_Delayed {
p := new(MeshPacket_Delayed)
*p = x
return p
}
func (x MeshPacket_Delayed) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (MeshPacket_Delayed) Descriptor() protoreflect.EnumDescriptor {
return file_protobufs_mesh_proto_enumTypes[7].Descriptor()
}
func (MeshPacket_Delayed) Type() protoreflect.EnumType {
return &file_protobufs_mesh_proto_enumTypes[7]
}
func (x MeshPacket_Delayed) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use MeshPacket_Delayed.Descriptor instead.
func (MeshPacket_Delayed) EnumDescriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{7, 1}
}
// Log levels, chosen to match python logging conventions.
type LogRecord_Level int32
const (
// Log levels, chosen to match python logging conventions.
LogRecord_UNSET LogRecord_Level = 0
// Log levels, chosen to match python logging conventions.
LogRecord_CRITICAL LogRecord_Level = 50
// Log levels, chosen to match python logging conventions.
LogRecord_ERROR LogRecord_Level = 40
// Log levels, chosen to match python logging conventions.
LogRecord_WARNING LogRecord_Level = 30
// Log levels, chosen to match python logging conventions.
LogRecord_INFO LogRecord_Level = 20
// Log levels, chosen to match python logging conventions.
LogRecord_DEBUG LogRecord_Level = 10
// Log levels, chosen to match python logging conventions.
LogRecord_TRACE LogRecord_Level = 5
)
// Enum value maps for LogRecord_Level.
var (
LogRecord_Level_name = map[int32]string{
0: "UNSET",
50: "CRITICAL",
40: "ERROR",
30: "WARNING",
20: "INFO",
10: "DEBUG",
5: "TRACE",
}
LogRecord_Level_value = map[string]int32{
"UNSET": 0,
"CRITICAL": 50,
"ERROR": 40,
"WARNING": 30,
"INFO": 20,
"DEBUG": 10,
"TRACE": 5,
}
)
func (x LogRecord_Level) Enum() *LogRecord_Level {
p := new(LogRecord_Level)
*p = x
return p
}
func (x LogRecord_Level) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (LogRecord_Level) Descriptor() protoreflect.EnumDescriptor {
return file_protobufs_mesh_proto_enumTypes[8].Descriptor()
}
func (LogRecord_Level) Type() protoreflect.EnumType {
return &file_protobufs_mesh_proto_enumTypes[8]
}
func (x LogRecord_Level) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use LogRecord_Level.Descriptor instead.
func (LogRecord_Level) EnumDescriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{10, 0}
}
// a gps position
type Position struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The new preferred location encoding, multiply by 1e-7 to get degrees
// in floating point
LatitudeI *int32 `protobuf:"fixed32,1,opt,name=latitude_i,json=latitudeI,proto3,oneof" json:"latitude_i,omitempty"`
// TODO: REPLACE
LongitudeI *int32 `protobuf:"fixed32,2,opt,name=longitude_i,json=longitudeI,proto3,oneof" json:"longitude_i,omitempty"`
// In meters above MSL (but see issue #359)
Altitude *int32 `protobuf:"varint,3,opt,name=altitude,proto3,oneof" json:"altitude,omitempty"`
// This is usually not sent over the mesh (to save space), but it is sent
// from the phone so that the local device can set its time if it is sent over
// the mesh (because there are devices on the mesh without GPS or RTC).
// seconds since 1970
Time uint32 `protobuf:"fixed32,4,opt,name=time,proto3" json:"time,omitempty"`
// TODO: REPLACE
LocationSource Position_LocSource `protobuf:"varint,5,opt,name=location_source,json=locationSource,proto3,enum=meshtastic.Position_LocSource" json:"location_source,omitempty"`
// TODO: REPLACE
AltitudeSource Position_AltSource `protobuf:"varint,6,opt,name=altitude_source,json=altitudeSource,proto3,enum=meshtastic.Position_AltSource" json:"altitude_source,omitempty"`
// Positional timestamp (actual timestamp of GPS solution) in integer epoch seconds
Timestamp uint32 `protobuf:"fixed32,7,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
// Pos. timestamp milliseconds adjustment (rarely available or required)
TimestampMillisAdjust int32 `protobuf:"varint,8,opt,name=timestamp_millis_adjust,json=timestampMillisAdjust,proto3" json:"timestamp_millis_adjust,omitempty"`
// HAE altitude in meters - can be used instead of MSL altitude
AltitudeHae *int32 `protobuf:"zigzag32,9,opt,name=altitude_hae,json=altitudeHae,proto3,oneof" json:"altitude_hae,omitempty"`
// Geoidal separation in meters
AltitudeGeoidalSeparation *int32 `protobuf:"zigzag32,10,opt,name=altitude_geoidal_separation,json=altitudeGeoidalSeparation,proto3,oneof" json:"altitude_geoidal_separation,omitempty"`
// Horizontal, Vertical and Position Dilution of Precision, in 1/100 units
// - PDOP is sufficient for most cases
// - for higher precision scenarios, HDOP and VDOP can be used instead,
// in which case PDOP becomes redundant (PDOP=sqrt(HDOP^2 + VDOP^2))
//
// TODO: REMOVE/INTEGRATE
PDOP uint32 `protobuf:"varint,11,opt,name=PDOP,proto3" json:"PDOP,omitempty"`
// TODO: REPLACE
HDOP uint32 `protobuf:"varint,12,opt,name=HDOP,proto3" json:"HDOP,omitempty"`
// TODO: REPLACE
VDOP uint32 `protobuf:"varint,13,opt,name=VDOP,proto3" json:"VDOP,omitempty"`
// GPS accuracy (a hardware specific constant) in mm
//
// multiplied with DOP to calculate positional accuracy
//
// Default: "'bout three meters-ish" :)
GpsAccuracy uint32 `protobuf:"varint,14,opt,name=gps_accuracy,json=gpsAccuracy,proto3" json:"gps_accuracy,omitempty"`
// Ground speed in m/s and True North TRACK in 1/100 degrees
// Clarification of terms:
// - "track" is the direction of motion (measured in horizontal plane)
// - "heading" is where the fuselage points (measured in horizontal plane)
// - "yaw" indicates a relative rotation about the vertical axis
// TODO: REMOVE/INTEGRATE
GroundSpeed *uint32 `protobuf:"varint,15,opt,name=ground_speed,json=groundSpeed,proto3,oneof" json:"ground_speed,omitempty"`
// TODO: REPLACE
GroundTrack *uint32 `protobuf:"varint,16,opt,name=ground_track,json=groundTrack,proto3,oneof" json:"ground_track,omitempty"`
// GPS fix quality (from NMEA GxGGA statement or similar)
FixQuality uint32 `protobuf:"varint,17,opt,name=fix_quality,json=fixQuality,proto3" json:"fix_quality,omitempty"`
// GPS fix type 2D/3D (from NMEA GxGSA statement)
FixType uint32 `protobuf:"varint,18,opt,name=fix_type,json=fixType,proto3" json:"fix_type,omitempty"`
// GPS "Satellites in View" number
SatsInView uint32 `protobuf:"varint,19,opt,name=sats_in_view,json=satsInView,proto3" json:"sats_in_view,omitempty"`
// Sensor ID - in case multiple positioning sensors are being used
SensorId uint32 `protobuf:"varint,20,opt,name=sensor_id,json=sensorId,proto3" json:"sensor_id,omitempty"`
// Estimated/expected time (in seconds) until next update:
// - if we update at fixed intervals of X seconds, use X
// - if we update at dynamic intervals (based on relative movement etc),
// but "AT LEAST every Y seconds", use Y
NextUpdate uint32 `protobuf:"varint,21,opt,name=next_update,json=nextUpdate,proto3" json:"next_update,omitempty"`
// A sequence number, incremented with each Position message to help
//
// detect lost updates if needed
SeqNumber uint32 `protobuf:"varint,22,opt,name=seq_number,json=seqNumber,proto3" json:"seq_number,omitempty"`
// Indicates the bits of precision set by the sending node
PrecisionBits uint32 `protobuf:"varint,23,opt,name=precision_bits,json=precisionBits,proto3" json:"precision_bits,omitempty"`
}
func (x *Position) Reset() {
*x = Position{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Position) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Position) ProtoMessage() {}
func (x *Position) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Position.ProtoReflect.Descriptor instead.
func (*Position) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{0}
}
func (x *Position) GetLatitudeI() int32 {
if x != nil && x.LatitudeI != nil {
return *x.LatitudeI
}
return 0
}
func (x *Position) GetLongitudeI() int32 {
if x != nil && x.LongitudeI != nil {
return *x.LongitudeI
}
return 0
}
func (x *Position) GetAltitude() int32 {
if x != nil && x.Altitude != nil {
return *x.Altitude
}
return 0
}
func (x *Position) GetTime() uint32 {
if x != nil {
return x.Time
}
return 0
}
func (x *Position) GetLocationSource() Position_LocSource {
if x != nil {
return x.LocationSource
}
return Position_LOC_UNSET
}
func (x *Position) GetAltitudeSource() Position_AltSource {
if x != nil {
return x.AltitudeSource
}
return Position_ALT_UNSET
}
func (x *Position) GetTimestamp() uint32 {
if x != nil {
return x.Timestamp
}
return 0
}
func (x *Position) GetTimestampMillisAdjust() int32 {
if x != nil {
return x.TimestampMillisAdjust
}
return 0
}
func (x *Position) GetAltitudeHae() int32 {
if x != nil && x.AltitudeHae != nil {
return *x.AltitudeHae
}
return 0
}
func (x *Position) GetAltitudeGeoidalSeparation() int32 {
if x != nil && x.AltitudeGeoidalSeparation != nil {
return *x.AltitudeGeoidalSeparation
}
return 0
}
func (x *Position) GetPDOP() uint32 {
if x != nil {
return x.PDOP
}
return 0
}
func (x *Position) GetHDOP() uint32 {
if x != nil {
return x.HDOP
}
return 0
}
func (x *Position) GetVDOP() uint32 {
if x != nil {
return x.VDOP
}
return 0
}
func (x *Position) GetGpsAccuracy() uint32 {
if x != nil {
return x.GpsAccuracy
}
return 0
}
func (x *Position) GetGroundSpeed() uint32 {
if x != nil && x.GroundSpeed != nil {
return *x.GroundSpeed
}
return 0
}
func (x *Position) GetGroundTrack() uint32 {
if x != nil && x.GroundTrack != nil {
return *x.GroundTrack
}
return 0
}
func (x *Position) GetFixQuality() uint32 {
if x != nil {
return x.FixQuality
}
return 0
}
func (x *Position) GetFixType() uint32 {
if x != nil {
return x.FixType
}
return 0
}
func (x *Position) GetSatsInView() uint32 {
if x != nil {
return x.SatsInView
}
return 0
}
func (x *Position) GetSensorId() uint32 {
if x != nil {
return x.SensorId
}
return 0
}
func (x *Position) GetNextUpdate() uint32 {
if x != nil {
return x.NextUpdate
}
return 0
}
func (x *Position) GetSeqNumber() uint32 {
if x != nil {
return x.SeqNumber
}
return 0
}
func (x *Position) GetPrecisionBits() uint32 {
if x != nil {
return x.PrecisionBits
}
return 0
}
// Broadcast when a newly powered mesh node wants to find a node num it can use
// Sent from the phone over bluetooth to set the user id for the owner of this node.
// Also sent from nodes to each other when a new node signs on (so all clients can have this info)
// The algorithm is as follows:
// when a node starts up, it broadcasts their user and the normal flow is for all
// other nodes to reply with their User as well (so the new node can build its nodedb)
// If a node ever receives a User (not just the first broadcast) message where
// the sender node number equals our node number, that indicates a collision has
// occurred and the following steps should happen:
// If the receiving node (that was already in the mesh)'s macaddr is LOWER than the
// new User who just tried to sign in: it gets to keep its nodenum.
// We send a broadcast message of OUR User (we use a broadcast so that the other node can
// receive our message, considering we have the same id - it also serves to let
// observers correct their nodedb) - this case is rare so it should be okay.
// If any node receives a User where the macaddr is GTE than their local macaddr,
// they have been vetoed and should pick a new random nodenum (filtering against
// whatever it knows about the nodedb) and rebroadcast their User.
// A few nodenums are reserved and will never be requested:
// 0xff - broadcast
// 0 through 3 - for future use
type User struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// A globally unique ID string for this user.
// In the case of Signal that would mean +16504442323, for the default macaddr derived id it would be !<8 hexidecimal bytes>.
// Note: app developers are encouraged to also use the following standard
// node IDs "^all" (for broadcast), "^local" (for the locally connected node)
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
// A full name for this user, i.e. "Kevin Hester"
LongName string `protobuf:"bytes,2,opt,name=long_name,json=longName,proto3" json:"long_name,omitempty"`
// A VERY short name, ideally two characters.
// Suitable for a tiny OLED screen
ShortName string `protobuf:"bytes,3,opt,name=short_name,json=shortName,proto3" json:"short_name,omitempty"`
// Deprecated in Meshtastic 2.1.x
// This is the addr of the radio.
// Not populated by the phone, but added by the esp32 when broadcasting
//
// Deprecated: Do not use.
Macaddr []byte `protobuf:"bytes,4,opt,name=macaddr,proto3" json:"macaddr,omitempty"`
// TBEAM, HELTEC, etc...
// Starting in 1.2.11 moved to hw_model enum in the NodeInfo object.
// Apps will still need the string here for older builds
// (so OTA update can find the right image), but if the enum is available it will be used instead.
HwModel HardwareModel `protobuf:"varint,5,opt,name=hw_model,json=hwModel,proto3,enum=meshtastic.HardwareModel" json:"hw_model,omitempty"`
// In some regions Ham radio operators have different bandwidth limitations than others.
// If this user is a licensed operator, set this flag.
// Also, "long_name" should be their licence number.
IsLicensed bool `protobuf:"varint,6,opt,name=is_licensed,json=isLicensed,proto3" json:"is_licensed,omitempty"`
// Indicates that the user's role in the mesh
Role Config_DeviceConfig_Role `protobuf:"varint,7,opt,name=role,proto3,enum=meshtastic.Config_DeviceConfig_Role" json:"role,omitempty"`
// The public key of the user's device.
// This is sent out to other nodes on the mesh to allow them to compute a shared secret key.
PublicKey []byte `protobuf:"bytes,8,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"`
}
func (x *User) Reset() {
*x = User{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *User) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*User) ProtoMessage() {}
func (x *User) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use User.ProtoReflect.Descriptor instead.
func (*User) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{1}
}
func (x *User) GetId() string {
if x != nil {
return x.Id
}
return ""
}
func (x *User) GetLongName() string {
if x != nil {
return x.LongName
}
return ""
}
func (x *User) GetShortName() string {
if x != nil {
return x.ShortName
}
return ""
}
// Deprecated: Do not use.
func (x *User) GetMacaddr() []byte {
if x != nil {
return x.Macaddr
}
return nil
}
func (x *User) GetHwModel() HardwareModel {
if x != nil {
return x.HwModel
}
return HardwareModel_UNSET
}
func (x *User) GetIsLicensed() bool {
if x != nil {
return x.IsLicensed
}
return false
}
func (x *User) GetRole() Config_DeviceConfig_Role {
if x != nil {
return x.Role
}
return Config_DeviceConfig_CLIENT
}
func (x *User) GetPublicKey() []byte {
if x != nil {
return x.PublicKey
}
return nil
}
// A message used in a traceroute
type RouteDiscovery struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The list of nodenums this packet has visited so far to the destination.
Route []uint32 `protobuf:"fixed32,1,rep,packed,name=route,proto3" json:"route,omitempty"`
// The list of SNRs (in dB, scaled by 4) in the route towards the destination.
SnrTowards []int32 `protobuf:"varint,2,rep,packed,name=snr_towards,json=snrTowards,proto3" json:"snr_towards,omitempty"`
// The list of nodenums the packet has visited on the way back from the destination.
RouteBack []uint32 `protobuf:"fixed32,3,rep,packed,name=route_back,json=routeBack,proto3" json:"route_back,omitempty"`
// The list of SNRs (in dB, scaled by 4) in the route back from the destination.
SnrBack []int32 `protobuf:"varint,4,rep,packed,name=snr_back,json=snrBack,proto3" json:"snr_back,omitempty"`
}
func (x *RouteDiscovery) Reset() {
*x = RouteDiscovery{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RouteDiscovery) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RouteDiscovery) ProtoMessage() {}
func (x *RouteDiscovery) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RouteDiscovery.ProtoReflect.Descriptor instead.
func (*RouteDiscovery) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{2}
}
func (x *RouteDiscovery) GetRoute() []uint32 {
if x != nil {
return x.Route
}
return nil
}
func (x *RouteDiscovery) GetSnrTowards() []int32 {
if x != nil {
return x.SnrTowards
}
return nil
}
func (x *RouteDiscovery) GetRouteBack() []uint32 {
if x != nil {
return x.RouteBack
}
return nil
}
func (x *RouteDiscovery) GetSnrBack() []int32 {
if x != nil {
return x.SnrBack
}
return nil
}
// A Routing control Data packet handled by the routing module
type Routing struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Types that are assignable to Variant:
//
// *Routing_RouteRequest
// *Routing_RouteReply
// *Routing_ErrorReason
Variant isRouting_Variant `protobuf_oneof:"variant"`
}
func (x *Routing) Reset() {
*x = Routing{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Routing) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Routing) ProtoMessage() {}
func (x *Routing) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Routing.ProtoReflect.Descriptor instead.
func (*Routing) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{3}
}
func (m *Routing) GetVariant() isRouting_Variant {
if m != nil {
return m.Variant
}
return nil
}
func (x *Routing) GetRouteRequest() *RouteDiscovery {
if x, ok := x.GetVariant().(*Routing_RouteRequest); ok {
return x.RouteRequest
}
return nil
}
func (x *Routing) GetRouteReply() *RouteDiscovery {
if x, ok := x.GetVariant().(*Routing_RouteReply); ok {
return x.RouteReply
}
return nil
}
func (x *Routing) GetErrorReason() Routing_Error {
if x, ok := x.GetVariant().(*Routing_ErrorReason); ok {
return x.ErrorReason
}
return Routing_NONE
}
type isRouting_Variant interface {
isRouting_Variant()
}
type Routing_RouteRequest struct {
// A route request going from the requester
RouteRequest *RouteDiscovery `protobuf:"bytes,1,opt,name=route_request,json=routeRequest,proto3,oneof"`
}
type Routing_RouteReply struct {
// A route reply
RouteReply *RouteDiscovery `protobuf:"bytes,2,opt,name=route_reply,json=routeReply,proto3,oneof"`
}
type Routing_ErrorReason struct {
// A failure in delivering a message (usually used for routing control messages, but might be provided
// in addition to ack.fail_id to provide details on the type of failure).
ErrorReason Routing_Error `protobuf:"varint,3,opt,name=error_reason,json=errorReason,proto3,enum=meshtastic.Routing_Error,oneof"`
}
func (*Routing_RouteRequest) isRouting_Variant() {}
func (*Routing_RouteReply) isRouting_Variant() {}
func (*Routing_ErrorReason) isRouting_Variant() {}
// (Formerly called SubPacket)
// The payload portion fo a packet, this is the actual bytes that are sent
// inside a radio packet (because from/to are broken out by the comms library)
type Data struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Formerly named typ and of type Type
Portnum PortNum `protobuf:"varint,1,opt,name=portnum,proto3,enum=meshtastic.PortNum" json:"portnum,omitempty"`
// TODO: REPLACE
Payload []byte `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"`
// Not normally used, but for testing a sender can request that recipient
// responds in kind (i.e. if it received a position, it should unicast back it's position).
// Note: that if you set this on a broadcast you will receive many replies.
WantResponse bool `protobuf:"varint,3,opt,name=want_response,json=wantResponse,proto3" json:"want_response,omitempty"`
// The address of the destination node.
// This field is is filled in by the mesh radio device software, application
// layer software should never need it.
// RouteDiscovery messages _must_ populate this.
// Other message types might need to if they are doing multihop routing.
Dest uint32 `protobuf:"fixed32,4,opt,name=dest,proto3" json:"dest,omitempty"`
// The address of the original sender for this message.
// This field should _only_ be populated for reliable multihop packets (to keep
// packets small).
Source uint32 `protobuf:"fixed32,5,opt,name=source,proto3" json:"source,omitempty"`
// Only used in routing or response messages.
// Indicates the original message ID that this message is reporting failure on. (formerly called original_id)
RequestId uint32 `protobuf:"fixed32,6,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"`
// If set, this message is intened to be a reply to a previously sent message with the defined id.
ReplyId uint32 `protobuf:"fixed32,7,opt,name=reply_id,json=replyId,proto3" json:"reply_id,omitempty"`
// Defaults to false. If true, then what is in the payload should be treated as an emoji like giving
// a message a heart or poop emoji.
Emoji uint32 `protobuf:"fixed32,8,opt,name=emoji,proto3" json:"emoji,omitempty"`
// Bitfield for extra flags. First use is to indicate that user approves the packet being uploaded to MQTT.
Bitfield *uint32 `protobuf:"varint,9,opt,name=bitfield,proto3,oneof" json:"bitfield,omitempty"`
}
func (x *Data) Reset() {
*x = Data{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Data) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Data) ProtoMessage() {}
func (x *Data) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Data.ProtoReflect.Descriptor instead.
func (*Data) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{4}
}
func (x *Data) GetPortnum() PortNum {
if x != nil {
return x.Portnum
}
return PortNum_UNKNOWN_APP
}
func (x *Data) GetPayload() []byte {
if x != nil {
return x.Payload
}
return nil
}
func (x *Data) GetWantResponse() bool {
if x != nil {
return x.WantResponse
}
return false
}
func (x *Data) GetDest() uint32 {
if x != nil {
return x.Dest
}
return 0
}
func (x *Data) GetSource() uint32 {
if x != nil {
return x.Source
}
return 0
}
func (x *Data) GetRequestId() uint32 {
if x != nil {
return x.RequestId
}
return 0
}
func (x *Data) GetReplyId() uint32 {
if x != nil {
return x.ReplyId
}
return 0
}
func (x *Data) GetEmoji() uint32 {
if x != nil {
return x.Emoji
}
return 0
}
func (x *Data) GetBitfield() uint32 {
if x != nil && x.Bitfield != nil {
return *x.Bitfield
}
return 0
}
// Waypoint message, used to share arbitrary locations across the mesh
type Waypoint struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Id of the waypoint
Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
// latitude_i
LatitudeI *int32 `protobuf:"fixed32,2,opt,name=latitude_i,json=latitudeI,proto3,oneof" json:"latitude_i,omitempty"`
// longitude_i
LongitudeI *int32 `protobuf:"fixed32,3,opt,name=longitude_i,json=longitudeI,proto3,oneof" json:"longitude_i,omitempty"`
// Time the waypoint is to expire (epoch)
Expire uint32 `protobuf:"varint,4,opt,name=expire,proto3" json:"expire,omitempty"`
// If greater than zero, treat the value as a nodenum only allowing them to update the waypoint.
// If zero, the waypoint is open to be edited by any member of the mesh.
LockedTo uint32 `protobuf:"varint,5,opt,name=locked_to,json=lockedTo,proto3" json:"locked_to,omitempty"`
// Name of the waypoint - max 30 chars
Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
// Description of the waypoint - max 100 chars
Description string `protobuf:"bytes,7,opt,name=description,proto3" json:"description,omitempty"`
// Designator icon for the waypoint in the form of a unicode emoji
Icon uint32 `protobuf:"fixed32,8,opt,name=icon,proto3" json:"icon,omitempty"`
}
func (x *Waypoint) Reset() {
*x = Waypoint{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Waypoint) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Waypoint) ProtoMessage() {}
func (x *Waypoint) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Waypoint.ProtoReflect.Descriptor instead.
func (*Waypoint) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{5}
}
func (x *Waypoint) GetId() uint32 {
if x != nil {
return x.Id
}
return 0
}
func (x *Waypoint) GetLatitudeI() int32 {
if x != nil && x.LatitudeI != nil {
return *x.LatitudeI
}
return 0
}
func (x *Waypoint) GetLongitudeI() int32 {
if x != nil && x.LongitudeI != nil {
return *x.LongitudeI
}
return 0
}
func (x *Waypoint) GetExpire() uint32 {
if x != nil {
return x.Expire
}
return 0
}
func (x *Waypoint) GetLockedTo() uint32 {
if x != nil {
return x.LockedTo
}
return 0
}
func (x *Waypoint) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *Waypoint) GetDescription() string {
if x != nil {
return x.Description
}
return ""
}
func (x *Waypoint) GetIcon() uint32 {
if x != nil {
return x.Icon
}
return 0
}
// This message will be proxied over the PhoneAPI for the client to deliver to the MQTT server
type MqttClientProxyMessage struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The MQTT topic this message will be sent /received on
Topic string `protobuf:"bytes,1,opt,name=topic,proto3" json:"topic,omitempty"`
// The actual service envelope payload or text for mqtt pub / sub
//
// Types that are assignable to PayloadVariant:
//
// *MqttClientProxyMessage_Data
// *MqttClientProxyMessage_Text
PayloadVariant isMqttClientProxyMessage_PayloadVariant `protobuf_oneof:"payload_variant"`
// Whether the message should be retained (or not)
Retained bool `protobuf:"varint,4,opt,name=retained,proto3" json:"retained,omitempty"`
}
func (x *MqttClientProxyMessage) Reset() {
*x = MqttClientProxyMessage{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MqttClientProxyMessage) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MqttClientProxyMessage) ProtoMessage() {}
func (x *MqttClientProxyMessage) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MqttClientProxyMessage.ProtoReflect.Descriptor instead.
func (*MqttClientProxyMessage) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{6}
}
func (x *MqttClientProxyMessage) GetTopic() string {
if x != nil {
return x.Topic
}
return ""
}
func (m *MqttClientProxyMessage) GetPayloadVariant() isMqttClientProxyMessage_PayloadVariant {
if m != nil {
return m.PayloadVariant
}
return nil
}
func (x *MqttClientProxyMessage) GetData() []byte {
if x, ok := x.GetPayloadVariant().(*MqttClientProxyMessage_Data); ok {
return x.Data
}
return nil
}
func (x *MqttClientProxyMessage) GetText() string {
if x, ok := x.GetPayloadVariant().(*MqttClientProxyMessage_Text); ok {
return x.Text
}
return ""
}
func (x *MqttClientProxyMessage) GetRetained() bool {
if x != nil {
return x.Retained
}
return false
}
type isMqttClientProxyMessage_PayloadVariant interface {
isMqttClientProxyMessage_PayloadVariant()
}
type MqttClientProxyMessage_Data struct {
// Bytes
Data []byte `protobuf:"bytes,2,opt,name=data,proto3,oneof"`
}
type MqttClientProxyMessage_Text struct {
// Text
Text string `protobuf:"bytes,3,opt,name=text,proto3,oneof"`
}
func (*MqttClientProxyMessage_Data) isMqttClientProxyMessage_PayloadVariant() {}
func (*MqttClientProxyMessage_Text) isMqttClientProxyMessage_PayloadVariant() {}
// A packet envelope sent/received over the mesh
// only payload_variant is sent in the payload portion of the LORA packet.
// The other fields are either not sent at all, or sent in the special 16 byte LORA header.
type MeshPacket struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The sending node number.
// Note: Our crypto implementation uses this field as well.
// See [crypto](/docs/overview/encryption) for details.
From uint32 `protobuf:"fixed32,1,opt,name=from,proto3" json:"from,omitempty"`
// The (immediate) destination for this packet
To uint32 `protobuf:"fixed32,2,opt,name=to,proto3" json:"to,omitempty"`
// (Usually) If set, this indicates the index in the secondary_channels table that this packet was sent/received on.
// If unset, packet was on the primary channel.
// A particular node might know only a subset of channels in use on the mesh.
// Therefore channel_index is inherently a local concept and meaningless to send between nodes.
// Very briefly, while sending and receiving deep inside the device Router code, this field instead
// contains the 'channel hash' instead of the index.
// This 'trick' is only used while the payload_variant is an 'encrypted'.
Channel uint32 `protobuf:"varint,3,opt,name=channel,proto3" json:"channel,omitempty"`
// Types that are assignable to PayloadVariant:
//
// *MeshPacket_Decoded
// *MeshPacket_Encrypted
PayloadVariant isMeshPacket_PayloadVariant `protobuf_oneof:"payload_variant"`
// A unique ID for this packet.
// Always 0 for no-ack packets or non broadcast packets (and therefore take zero bytes of space).
// Otherwise a unique ID for this packet, useful for flooding algorithms.
// ID only needs to be unique on a _per sender_ basis, and it only
// needs to be unique for a few minutes (long enough to last for the length of
// any ACK or the completion of a mesh broadcast flood).
// Note: Our crypto implementation uses this id as well.
// See [crypto](/docs/overview/encryption) for details.
Id uint32 `protobuf:"fixed32,6,opt,name=id,proto3" json:"id,omitempty"`
// The time this message was received by the esp32 (secs since 1970).
// Note: this field is _never_ sent on the radio link itself (to save space) Times
// are typically not sent over the mesh, but they will be added to any Packet
// (chain of SubPacket) sent to the phone (so the phone can know exact time of reception)
RxTime uint32 `protobuf:"fixed32,7,opt,name=rx_time,json=rxTime,proto3" json:"rx_time,omitempty"`
// *Never* sent over the radio links.
// Set during reception to indicate the SNR of this packet.
// Used to collect statistics on current link quality.
RxSnr float32 `protobuf:"fixed32,8,opt,name=rx_snr,json=rxSnr,proto3" json:"rx_snr,omitempty"`
// If unset treated as zero (no forwarding, send to adjacent nodes only)
// if 1, allow hopping through one node, etc...
// For our usecase real world topologies probably have a max of about 3.
// This field is normally placed into a few of bits in the header.
HopLimit uint32 `protobuf:"varint,9,opt,name=hop_limit,json=hopLimit,proto3" json:"hop_limit,omitempty"`
// This packet is being sent as a reliable message, we would prefer it to arrive at the destination.
// We would like to receive a ack packet in response.
// Broadcasts messages treat this flag specially: Since acks for broadcasts would
// rapidly flood the channel, the normal ack behavior is suppressed.
// Instead, the original sender listens to see if at least one node is rebroadcasting this packet (because naive flooding algorithm).
// If it hears that the odds (given typical LoRa topologies) the odds are very high that every node should eventually receive the message.
// So FloodingRouter.cpp generates an implicit ack which is delivered to the original sender.
// If after some time we don't hear anyone rebroadcast our packet, we will timeout and retransmit, using the regular resend logic.
// Note: This flag is normally sent in a flag bit in the header when sent over the wire
WantAck bool `protobuf:"varint,10,opt,name=want_ack,json=wantAck,proto3" json:"want_ack,omitempty"`
// The priority of this message for sending.
// See MeshPacket.Priority description for more details.
Priority MeshPacket_Priority `protobuf:"varint,11,opt,name=priority,proto3,enum=meshtastic.MeshPacket_Priority" json:"priority,omitempty"`
// rssi of received packet. Only sent to phone for dispay purposes.
RxRssi int32 `protobuf:"varint,12,opt,name=rx_rssi,json=rxRssi,proto3" json:"rx_rssi,omitempty"`
// Describe if this message is delayed
//
// Deprecated: Do not use.
Delayed MeshPacket_Delayed `protobuf:"varint,13,opt,name=delayed,proto3,enum=meshtastic.MeshPacket_Delayed" json:"delayed,omitempty"`
// Describes whether this packet passed via MQTT somewhere along the path it currently took.
ViaMqtt bool `protobuf:"varint,14,opt,name=via_mqtt,json=viaMqtt,proto3" json:"via_mqtt,omitempty"`
// Hop limit with which the original packet started. Sent via LoRa using three bits in the unencrypted header.
// When receiving a packet, the difference between hop_start and hop_limit gives how many hops it traveled.
HopStart uint32 `protobuf:"varint,15,opt,name=hop_start,json=hopStart,proto3" json:"hop_start,omitempty"`
// Records the public key the packet was encrypted with, if applicable.
PublicKey []byte `protobuf:"bytes,16,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"`
// Indicates whether the packet was en/decrypted using PKI
PkiEncrypted bool `protobuf:"varint,17,opt,name=pki_encrypted,json=pkiEncrypted,proto3" json:"pki_encrypted,omitempty"`
}
func (x *MeshPacket) Reset() {
*x = MeshPacket{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MeshPacket) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MeshPacket) ProtoMessage() {}
func (x *MeshPacket) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MeshPacket.ProtoReflect.Descriptor instead.
func (*MeshPacket) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{7}
}
func (x *MeshPacket) GetFrom() uint32 {
if x != nil {
return x.From
}
return 0
}
func (x *MeshPacket) GetTo() uint32 {
if x != nil {
return x.To
}
return 0
}
func (x *MeshPacket) GetChannel() uint32 {
if x != nil {
return x.Channel
}
return 0
}
func (m *MeshPacket) GetPayloadVariant() isMeshPacket_PayloadVariant {
if m != nil {
return m.PayloadVariant
}
return nil
}
func (x *MeshPacket) GetDecoded() *Data {
if x, ok := x.GetPayloadVariant().(*MeshPacket_Decoded); ok {
return x.Decoded
}
return nil
}
func (x *MeshPacket) GetEncrypted() []byte {
if x, ok := x.GetPayloadVariant().(*MeshPacket_Encrypted); ok {
return x.Encrypted
}
return nil
}
func (x *MeshPacket) GetId() uint32 {
if x != nil {
return x.Id
}
return 0
}
func (x *MeshPacket) GetRxTime() uint32 {
if x != nil {
return x.RxTime
}
return 0
}
func (x *MeshPacket) GetRxSnr() float32 {
if x != nil {
return x.RxSnr
}
return 0
}
func (x *MeshPacket) GetHopLimit() uint32 {
if x != nil {
return x.HopLimit
}
return 0
}
func (x *MeshPacket) GetWantAck() bool {
if x != nil {
return x.WantAck
}
return false
}
func (x *MeshPacket) GetPriority() MeshPacket_Priority {
if x != nil {
return x.Priority
}
return MeshPacket_UNSET
}
func (x *MeshPacket) GetRxRssi() int32 {
if x != nil {
return x.RxRssi
}
return 0
}
// Deprecated: Do not use.
func (x *MeshPacket) GetDelayed() MeshPacket_Delayed {
if x != nil {
return x.Delayed
}
return MeshPacket_NO_DELAY
}
func (x *MeshPacket) GetViaMqtt() bool {
if x != nil {
return x.ViaMqtt
}
return false
}
func (x *MeshPacket) GetHopStart() uint32 {
if x != nil {
return x.HopStart
}
return 0
}
func (x *MeshPacket) GetPublicKey() []byte {
if x != nil {
return x.PublicKey
}
return nil
}
func (x *MeshPacket) GetPkiEncrypted() bool {
if x != nil {
return x.PkiEncrypted
}
return false
}
type isMeshPacket_PayloadVariant interface {
isMeshPacket_PayloadVariant()
}
type MeshPacket_Decoded struct {
// TODO: REPLACE
Decoded *Data `protobuf:"bytes,4,opt,name=decoded,proto3,oneof"`
}
type MeshPacket_Encrypted struct {
// TODO: REPLACE
Encrypted []byte `protobuf:"bytes,5,opt,name=encrypted,proto3,oneof"`
}
func (*MeshPacket_Decoded) isMeshPacket_PayloadVariant() {}
func (*MeshPacket_Encrypted) isMeshPacket_PayloadVariant() {}
// The bluetooth to device link:
// Old BTLE protocol docs from TODO, merge in above and make real docs...
// use protocol buffers, and NanoPB
// messages from device to phone:
// POSITION_UPDATE (..., time)
// TEXT_RECEIVED(from, text, time)
// OPAQUE_RECEIVED(from, payload, time) (for signal messages or other applications)
// messages from phone to device:
// SET_MYID(id, human readable long, human readable short) (send down the unique ID
// string used for this node, a human readable string shown for that id, and a very
// short human readable string suitable for oled screen) SEND_OPAQUE(dest, payload)
// (for signal messages or other applications) SEND_TEXT(dest, text) Get all
// nodes() (returns list of nodes, with full info, last time seen, loc, battery
// level etc) SET_CONFIG (switches device to a new set of radio params and
// preshared key, drops all existing nodes, force our node to rejoin this new group)
// Full information about a node on the mesh
type NodeInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The node number
Num uint32 `protobuf:"varint,1,opt,name=num,proto3" json:"num,omitempty"`
// The user info for this node
User *User `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"`
// This position data. Note: before 1.2.14 we would also store the last time we've heard from this node in position.time, that is no longer true.
// Position.time now indicates the last time we received a POSITION from that node.
Position *Position `protobuf:"bytes,3,opt,name=position,proto3" json:"position,omitempty"`
// Returns the Signal-to-noise ratio (SNR) of the last received message,
// as measured by the receiver. Return SNR of the last received message in dB
Snr float32 `protobuf:"fixed32,4,opt,name=snr,proto3" json:"snr,omitempty"`
// Set to indicate the last time we received a packet from this node
LastHeard uint32 `protobuf:"fixed32,5,opt,name=last_heard,json=lastHeard,proto3" json:"last_heard,omitempty"`
// The latest device metrics for the node.
DeviceMetrics *DeviceMetrics `protobuf:"bytes,6,opt,name=device_metrics,json=deviceMetrics,proto3" json:"device_metrics,omitempty"`
// local channel index we heard that node on. Only populated if its not the default channel.
Channel uint32 `protobuf:"varint,7,opt,name=channel,proto3" json:"channel,omitempty"`
// True if we witnessed the node over MQTT instead of LoRA transport
ViaMqtt bool `protobuf:"varint,8,opt,name=via_mqtt,json=viaMqtt,proto3" json:"via_mqtt,omitempty"`
// Number of hops away from us this node is (0 if adjacent)
HopsAway *uint32 `protobuf:"varint,9,opt,name=hops_away,json=hopsAway,proto3,oneof" json:"hops_away,omitempty"`
// True if node is in our favorites list
// Persists between NodeDB internal clean ups
IsFavorite bool `protobuf:"varint,10,opt,name=is_favorite,json=isFavorite,proto3" json:"is_favorite,omitempty"`
}
func (x *NodeInfo) Reset() {
*x = NodeInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *NodeInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*NodeInfo) ProtoMessage() {}
func (x *NodeInfo) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use NodeInfo.ProtoReflect.Descriptor instead.
func (*NodeInfo) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{8}
}
func (x *NodeInfo) GetNum() uint32 {
if x != nil {
return x.Num
}
return 0
}
func (x *NodeInfo) GetUser() *User {
if x != nil {
return x.User
}
return nil
}
func (x *NodeInfo) GetPosition() *Position {
if x != nil {
return x.Position
}
return nil
}
func (x *NodeInfo) GetSnr() float32 {
if x != nil {
return x.Snr
}
return 0
}
func (x *NodeInfo) GetLastHeard() uint32 {
if x != nil {
return x.LastHeard
}
return 0
}
func (x *NodeInfo) GetDeviceMetrics() *DeviceMetrics {
if x != nil {
return x.DeviceMetrics
}
return nil
}
func (x *NodeInfo) GetChannel() uint32 {
if x != nil {
return x.Channel
}
return 0
}
func (x *NodeInfo) GetViaMqtt() bool {
if x != nil {
return x.ViaMqtt
}
return false
}
func (x *NodeInfo) GetHopsAway() uint32 {
if x != nil && x.HopsAway != nil {
return *x.HopsAway
}
return 0
}
func (x *NodeInfo) GetIsFavorite() bool {
if x != nil {
return x.IsFavorite
}
return false
}
// Unique local debugging info for this node
// Note: we don't include position or the user info, because that will come in the
// Sent to the phone in response to WantNodes.
type MyNodeInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Tells the phone what our node number is, default starting value is
// lowbyte of macaddr, but it will be fixed if that is already in use
MyNodeNum uint32 `protobuf:"varint,1,opt,name=my_node_num,json=myNodeNum,proto3" json:"my_node_num,omitempty"`
// The total number of reboots this node has ever encountered
// (well - since the last time we discarded preferences)
RebootCount uint32 `protobuf:"varint,8,opt,name=reboot_count,json=rebootCount,proto3" json:"reboot_count,omitempty"`
// The minimum app version that can talk to this device.
// Phone/PC apps should compare this to their build number and if too low tell the user they must update their app
MinAppVersion uint32 `protobuf:"varint,11,opt,name=min_app_version,json=minAppVersion,proto3" json:"min_app_version,omitempty"`
// Unique hardware identifier for this device
DeviceId uint64 `protobuf:"varint,12,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
}
func (x *MyNodeInfo) Reset() {
*x = MyNodeInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MyNodeInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MyNodeInfo) ProtoMessage() {}
func (x *MyNodeInfo) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MyNodeInfo.ProtoReflect.Descriptor instead.
func (*MyNodeInfo) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{9}
}
func (x *MyNodeInfo) GetMyNodeNum() uint32 {
if x != nil {
return x.MyNodeNum
}
return 0
}
func (x *MyNodeInfo) GetRebootCount() uint32 {
if x != nil {
return x.RebootCount
}
return 0
}
func (x *MyNodeInfo) GetMinAppVersion() uint32 {
if x != nil {
return x.MinAppVersion
}
return 0
}
func (x *MyNodeInfo) GetDeviceId() uint64 {
if x != nil {
return x.DeviceId
}
return 0
}
// Debug output from the device.
// To minimize the size of records inside the device code, if a time/source/level is not set
// on the message it is assumed to be a continuation of the previously sent message.
// This allows the device code to use fixed maxlen 64 byte strings for messages,
// and then extend as needed by emitting multiple records.
type LogRecord struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Log levels, chosen to match python logging conventions.
Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
// Seconds since 1970 - or 0 for unknown/unset
Time uint32 `protobuf:"fixed32,2,opt,name=time,proto3" json:"time,omitempty"`
// Usually based on thread name - if known
Source string `protobuf:"bytes,3,opt,name=source,proto3" json:"source,omitempty"`
// Not yet set
Level LogRecord_Level `protobuf:"varint,4,opt,name=level,proto3,enum=meshtastic.LogRecord_Level" json:"level,omitempty"`
}
func (x *LogRecord) Reset() {
*x = LogRecord{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *LogRecord) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*LogRecord) ProtoMessage() {}
func (x *LogRecord) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use LogRecord.ProtoReflect.Descriptor instead.
func (*LogRecord) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{10}
}
func (x *LogRecord) GetMessage() string {
if x != nil {
return x.Message
}
return ""
}
func (x *LogRecord) GetTime() uint32 {
if x != nil {
return x.Time
}
return 0
}
func (x *LogRecord) GetSource() string {
if x != nil {
return x.Source
}
return ""
}
func (x *LogRecord) GetLevel() LogRecord_Level {
if x != nil {
return x.Level
}
return LogRecord_UNSET
}
type QueueStatus struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Last attempt to queue status, ErrorCode
Res int32 `protobuf:"varint,1,opt,name=res,proto3" json:"res,omitempty"`
// Free entries in the outgoing queue
Free uint32 `protobuf:"varint,2,opt,name=free,proto3" json:"free,omitempty"`
// Maximum entries in the outgoing queue
Maxlen uint32 `protobuf:"varint,3,opt,name=maxlen,proto3" json:"maxlen,omitempty"`
// What was mesh packet id that generated this response?
MeshPacketId uint32 `protobuf:"varint,4,opt,name=mesh_packet_id,json=meshPacketId,proto3" json:"mesh_packet_id,omitempty"`
}
func (x *QueueStatus) Reset() {
*x = QueueStatus{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *QueueStatus) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*QueueStatus) ProtoMessage() {}
func (x *QueueStatus) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[11]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use QueueStatus.ProtoReflect.Descriptor instead.
func (*QueueStatus) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{11}
}
func (x *QueueStatus) GetRes() int32 {
if x != nil {
return x.Res
}
return 0
}
func (x *QueueStatus) GetFree() uint32 {
if x != nil {
return x.Free
}
return 0
}
func (x *QueueStatus) GetMaxlen() uint32 {
if x != nil {
return x.Maxlen
}
return 0
}
func (x *QueueStatus) GetMeshPacketId() uint32 {
if x != nil {
return x.MeshPacketId
}
return 0
}
// Packets from the radio to the phone will appear on the fromRadio characteristic.
// It will support READ and NOTIFY. When a new packet arrives the device will BLE notify?
// It will sit in that descriptor until consumed by the phone,
// at which point the next item in the FIFO will be populated.
type FromRadio struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The packet id, used to allow the phone to request missing read packets from the FIFO,
// see our bluetooth docs
Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
// Log levels, chosen to match python logging conventions.
//
// Types that are assignable to PayloadVariant:
//
// *FromRadio_Packet
// *FromRadio_MyInfo
// *FromRadio_NodeInfo
// *FromRadio_Config
// *FromRadio_LogRecord
// *FromRadio_ConfigCompleteId
// *FromRadio_Rebooted
// *FromRadio_ModuleConfig
// *FromRadio_Channel
// *FromRadio_QueueStatus
// *FromRadio_XmodemPacket
// *FromRadio_Metadata
// *FromRadio_MqttClientProxyMessage
// *FromRadio_FileInfo
// *FromRadio_ClientNotification
// *FromRadio_DeviceuiConfig
PayloadVariant isFromRadio_PayloadVariant `protobuf_oneof:"payload_variant"`
}
func (x *FromRadio) Reset() {
*x = FromRadio{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *FromRadio) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*FromRadio) ProtoMessage() {}
func (x *FromRadio) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[12]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use FromRadio.ProtoReflect.Descriptor instead.
func (*FromRadio) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{12}
}
func (x *FromRadio) GetId() uint32 {
if x != nil {
return x.Id
}
return 0
}
func (m *FromRadio) GetPayloadVariant() isFromRadio_PayloadVariant {
if m != nil {
return m.PayloadVariant
}
return nil
}
func (x *FromRadio) GetPacket() *MeshPacket {
if x, ok := x.GetPayloadVariant().(*FromRadio_Packet); ok {
return x.Packet
}
return nil
}
func (x *FromRadio) GetMyInfo() *MyNodeInfo {
if x, ok := x.GetPayloadVariant().(*FromRadio_MyInfo); ok {
return x.MyInfo
}
return nil
}
func (x *FromRadio) GetNodeInfo() *NodeInfo {
if x, ok := x.GetPayloadVariant().(*FromRadio_NodeInfo); ok {
return x.NodeInfo
}
return nil
}
func (x *FromRadio) GetConfig() *Config {
if x, ok := x.GetPayloadVariant().(*FromRadio_Config); ok {
return x.Config
}
return nil
}
func (x *FromRadio) GetLogRecord() *LogRecord {
if x, ok := x.GetPayloadVariant().(*FromRadio_LogRecord); ok {
return x.LogRecord
}
return nil
}
func (x *FromRadio) GetConfigCompleteId() uint32 {
if x, ok := x.GetPayloadVariant().(*FromRadio_ConfigCompleteId); ok {
return x.ConfigCompleteId
}
return 0
}
func (x *FromRadio) GetRebooted() bool {
if x, ok := x.GetPayloadVariant().(*FromRadio_Rebooted); ok {
return x.Rebooted
}
return false
}
func (x *FromRadio) GetModuleConfig() *ModuleConfig {
if x, ok := x.GetPayloadVariant().(*FromRadio_ModuleConfig); ok {
return x.ModuleConfig
}
return nil
}
func (x *FromRadio) GetChannel() *Channel {
if x, ok := x.GetPayloadVariant().(*FromRadio_Channel); ok {
return x.Channel
}
return nil
}
func (x *FromRadio) GetQueueStatus() *QueueStatus {
if x, ok := x.GetPayloadVariant().(*FromRadio_QueueStatus); ok {
return x.QueueStatus
}
return nil
}
func (x *FromRadio) GetXmodemPacket() *XModem {
if x, ok := x.GetPayloadVariant().(*FromRadio_XmodemPacket); ok {
return x.XmodemPacket
}
return nil
}
func (x *FromRadio) GetMetadata() *DeviceMetadata {
if x, ok := x.GetPayloadVariant().(*FromRadio_Metadata); ok {
return x.Metadata
}
return nil
}
func (x *FromRadio) GetMqttClientProxyMessage() *MqttClientProxyMessage {
if x, ok := x.GetPayloadVariant().(*FromRadio_MqttClientProxyMessage); ok {
return x.MqttClientProxyMessage
}
return nil
}
func (x *FromRadio) GetFileInfo() *FileInfo {
if x, ok := x.GetPayloadVariant().(*FromRadio_FileInfo); ok {
return x.FileInfo
}
return nil
}
func (x *FromRadio) GetClientNotification() *ClientNotification {
if x, ok := x.GetPayloadVariant().(*FromRadio_ClientNotification); ok {
return x.ClientNotification
}
return nil
}
func (x *FromRadio) GetDeviceuiConfig() *DeviceUIConfig {
if x, ok := x.GetPayloadVariant().(*FromRadio_DeviceuiConfig); ok {
return x.DeviceuiConfig
}
return nil
}
type isFromRadio_PayloadVariant interface {
isFromRadio_PayloadVariant()
}
type FromRadio_Packet struct {
// Log levels, chosen to match python logging conventions.
Packet *MeshPacket `protobuf:"bytes,2,opt,name=packet,proto3,oneof"`
}
type FromRadio_MyInfo struct {
// Tells the phone what our node number is, can be -1 if we've not yet joined a mesh.
// NOTE: This ID must not change - to keep (minimal) compatibility with <1.2 version of android apps.
MyInfo *MyNodeInfo `protobuf:"bytes,3,opt,name=my_info,json=myInfo,proto3,oneof"`
}
type FromRadio_NodeInfo struct {
// One packet is sent for each node in the on radio DB
// starts over with the first node in our DB
NodeInfo *NodeInfo `protobuf:"bytes,4,opt,name=node_info,json=nodeInfo,proto3,oneof"`
}
type FromRadio_Config struct {
// Include a part of the config (was: RadioConfig radio)
Config *Config `protobuf:"bytes,5,opt,name=config,proto3,oneof"`
}
type FromRadio_LogRecord struct {
// Set to send debug console output over our protobuf stream
LogRecord *LogRecord `protobuf:"bytes,6,opt,name=log_record,json=logRecord,proto3,oneof"`
}
type FromRadio_ConfigCompleteId struct {
// Sent as true once the device has finished sending all of the responses to want_config
// recipient should check if this ID matches our original request nonce, if
// not, it means your config responses haven't started yet.
// NOTE: This ID must not change - to keep (minimal) compatibility with <1.2 version of android apps.
ConfigCompleteId uint32 `protobuf:"varint,7,opt,name=config_complete_id,json=configCompleteId,proto3,oneof"`
}
type FromRadio_Rebooted struct {
// Sent to tell clients the radio has just rebooted.
// Set to true if present.
// Not used on all transports, currently just used for the serial console.
// NOTE: This ID must not change - to keep (minimal) compatibility with <1.2 version of android apps.
Rebooted bool `protobuf:"varint,8,opt,name=rebooted,proto3,oneof"`
}
type FromRadio_ModuleConfig struct {
// Include module config
ModuleConfig *ModuleConfig `protobuf:"bytes,9,opt,name=moduleConfig,proto3,oneof"`
}
type FromRadio_Channel struct {
// One packet is sent for each channel
Channel *Channel `protobuf:"bytes,10,opt,name=channel,proto3,oneof"`
}
type FromRadio_QueueStatus struct {
// Queue status info
QueueStatus *QueueStatus `protobuf:"bytes,11,opt,name=queueStatus,proto3,oneof"`
}
type FromRadio_XmodemPacket struct {
// File Transfer Chunk
XmodemPacket *XModem `protobuf:"bytes,12,opt,name=xmodemPacket,proto3,oneof"`
}
type FromRadio_Metadata struct {
// Device metadata message
Metadata *DeviceMetadata `protobuf:"bytes,13,opt,name=metadata,proto3,oneof"`
}
type FromRadio_MqttClientProxyMessage struct {
// MQTT Client Proxy Message (device sending to client / phone for publishing to MQTT)
MqttClientProxyMessage *MqttClientProxyMessage `protobuf:"bytes,14,opt,name=mqttClientProxyMessage,proto3,oneof"`
}
type FromRadio_FileInfo struct {
// File system manifest messages
FileInfo *FileInfo `protobuf:"bytes,15,opt,name=fileInfo,proto3,oneof"`
}
type FromRadio_ClientNotification struct {
// Notification message to the client
ClientNotification *ClientNotification `protobuf:"bytes,16,opt,name=clientNotification,proto3,oneof"`
}
type FromRadio_DeviceuiConfig struct {
// Persistent data for device-ui
DeviceuiConfig *DeviceUIConfig `protobuf:"bytes,17,opt,name=deviceuiConfig,proto3,oneof"`
}
func (*FromRadio_Packet) isFromRadio_PayloadVariant() {}
func (*FromRadio_MyInfo) isFromRadio_PayloadVariant() {}
func (*FromRadio_NodeInfo) isFromRadio_PayloadVariant() {}
func (*FromRadio_Config) isFromRadio_PayloadVariant() {}
func (*FromRadio_LogRecord) isFromRadio_PayloadVariant() {}
func (*FromRadio_ConfigCompleteId) isFromRadio_PayloadVariant() {}
func (*FromRadio_Rebooted) isFromRadio_PayloadVariant() {}
func (*FromRadio_ModuleConfig) isFromRadio_PayloadVariant() {}
func (*FromRadio_Channel) isFromRadio_PayloadVariant() {}
func (*FromRadio_QueueStatus) isFromRadio_PayloadVariant() {}
func (*FromRadio_XmodemPacket) isFromRadio_PayloadVariant() {}
func (*FromRadio_Metadata) isFromRadio_PayloadVariant() {}
func (*FromRadio_MqttClientProxyMessage) isFromRadio_PayloadVariant() {}
func (*FromRadio_FileInfo) isFromRadio_PayloadVariant() {}
func (*FromRadio_ClientNotification) isFromRadio_PayloadVariant() {}
func (*FromRadio_DeviceuiConfig) isFromRadio_PayloadVariant() {}
// A notification message from the device to the client
// To be used for important messages that should to be displayed to the user
// in the form of push notifications or validation messages when saving
// invalid configuration.
type ClientNotification struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The id of the packet we're notifying in response to
ReplyId *uint32 `protobuf:"varint,1,opt,name=reply_id,json=replyId,proto3,oneof" json:"reply_id,omitempty"`
// Seconds since 1970 - or 0 for unknown/unset
Time uint32 `protobuf:"fixed32,2,opt,name=time,proto3" json:"time,omitempty"`
// The level type of notification
Level LogRecord_Level `protobuf:"varint,3,opt,name=level,proto3,enum=meshtastic.LogRecord_Level" json:"level,omitempty"`
// The message body of the notification
Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"`
}
func (x *ClientNotification) Reset() {
*x = ClientNotification{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ClientNotification) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ClientNotification) ProtoMessage() {}
func (x *ClientNotification) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[13]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ClientNotification.ProtoReflect.Descriptor instead.
func (*ClientNotification) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{13}
}
func (x *ClientNotification) GetReplyId() uint32 {
if x != nil && x.ReplyId != nil {
return *x.ReplyId
}
return 0
}
func (x *ClientNotification) GetTime() uint32 {
if x != nil {
return x.Time
}
return 0
}
func (x *ClientNotification) GetLevel() LogRecord_Level {
if x != nil {
return x.Level
}
return LogRecord_UNSET
}
func (x *ClientNotification) GetMessage() string {
if x != nil {
return x.Message
}
return ""
}
// Individual File info for the device
type FileInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The fully qualified path of the file
FileName string `protobuf:"bytes,1,opt,name=file_name,json=fileName,proto3" json:"file_name,omitempty"`
// The size of the file in bytes
SizeBytes uint32 `protobuf:"varint,2,opt,name=size_bytes,json=sizeBytes,proto3" json:"size_bytes,omitempty"`
}
func (x *FileInfo) Reset() {
*x = FileInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *FileInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*FileInfo) ProtoMessage() {}
func (x *FileInfo) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[14]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use FileInfo.ProtoReflect.Descriptor instead.
func (*FileInfo) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{14}
}
func (x *FileInfo) GetFileName() string {
if x != nil {
return x.FileName
}
return ""
}
func (x *FileInfo) GetSizeBytes() uint32 {
if x != nil {
return x.SizeBytes
}
return 0
}
// Packets/commands to the radio will be written (reliably) to the toRadio characteristic.
// Once the write completes the phone can assume it is handled.
type ToRadio struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Log levels, chosen to match python logging conventions.
//
// Types that are assignable to PayloadVariant:
//
// *ToRadio_Packet
// *ToRadio_WantConfigId
// *ToRadio_Disconnect
// *ToRadio_XmodemPacket
// *ToRadio_MqttClientProxyMessage
// *ToRadio_Heartbeat
PayloadVariant isToRadio_PayloadVariant `protobuf_oneof:"payload_variant"`
}
func (x *ToRadio) Reset() {
*x = ToRadio{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ToRadio) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ToRadio) ProtoMessage() {}
func (x *ToRadio) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[15]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ToRadio.ProtoReflect.Descriptor instead.
func (*ToRadio) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{15}
}
func (m *ToRadio) GetPayloadVariant() isToRadio_PayloadVariant {
if m != nil {
return m.PayloadVariant
}
return nil
}
func (x *ToRadio) GetPacket() *MeshPacket {
if x, ok := x.GetPayloadVariant().(*ToRadio_Packet); ok {
return x.Packet
}
return nil
}
func (x *ToRadio) GetWantConfigId() uint32 {
if x, ok := x.GetPayloadVariant().(*ToRadio_WantConfigId); ok {
return x.WantConfigId
}
return 0
}
func (x *ToRadio) GetDisconnect() bool {
if x, ok := x.GetPayloadVariant().(*ToRadio_Disconnect); ok {
return x.Disconnect
}
return false
}
func (x *ToRadio) GetXmodemPacket() *XModem {
if x, ok := x.GetPayloadVariant().(*ToRadio_XmodemPacket); ok {
return x.XmodemPacket
}
return nil
}
func (x *ToRadio) GetMqttClientProxyMessage() *MqttClientProxyMessage {
if x, ok := x.GetPayloadVariant().(*ToRadio_MqttClientProxyMessage); ok {
return x.MqttClientProxyMessage
}
return nil
}
func (x *ToRadio) GetHeartbeat() *Heartbeat {
if x, ok := x.GetPayloadVariant().(*ToRadio_Heartbeat); ok {
return x.Heartbeat
}
return nil
}
type isToRadio_PayloadVariant interface {
isToRadio_PayloadVariant()
}
type ToRadio_Packet struct {
// Send this packet on the mesh
Packet *MeshPacket `protobuf:"bytes,1,opt,name=packet,proto3,oneof"`
}
type ToRadio_WantConfigId struct {
// Phone wants radio to send full node db to the phone, This is
// typically the first packet sent to the radio when the phone gets a
// bluetooth connection. The radio will respond by sending back a
// MyNodeInfo, a owner, a radio config and a series of
// FromRadio.node_infos, and config_complete
// the integer you write into this field will be reported back in the
// config_complete_id response this allows clients to never be confused by
// a stale old partially sent config.
WantConfigId uint32 `protobuf:"varint,3,opt,name=want_config_id,json=wantConfigId,proto3,oneof"`
}
type ToRadio_Disconnect struct {
// Tell API server we are disconnecting now.
// This is useful for serial links where there is no hardware/protocol based notification that the client has dropped the link.
// (Sending this message is optional for clients)
Disconnect bool `protobuf:"varint,4,opt,name=disconnect,proto3,oneof"`
}
type ToRadio_XmodemPacket struct {
XmodemPacket *XModem `protobuf:"bytes,5,opt,name=xmodemPacket,proto3,oneof"`
}
type ToRadio_MqttClientProxyMessage struct {
// MQTT Client Proxy Message (for client / phone subscribed to MQTT sending to device)
MqttClientProxyMessage *MqttClientProxyMessage `protobuf:"bytes,6,opt,name=mqttClientProxyMessage,proto3,oneof"`
}
type ToRadio_Heartbeat struct {
// Heartbeat message (used to keep the device connection awake on serial)
Heartbeat *Heartbeat `protobuf:"bytes,7,opt,name=heartbeat,proto3,oneof"`
}
func (*ToRadio_Packet) isToRadio_PayloadVariant() {}
func (*ToRadio_WantConfigId) isToRadio_PayloadVariant() {}
func (*ToRadio_Disconnect) isToRadio_PayloadVariant() {}
func (*ToRadio_XmodemPacket) isToRadio_PayloadVariant() {}
func (*ToRadio_MqttClientProxyMessage) isToRadio_PayloadVariant() {}
func (*ToRadio_Heartbeat) isToRadio_PayloadVariant() {}
// Compressed message payload
type Compressed struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// PortNum to determine the how to handle the compressed payload.
Portnum PortNum `protobuf:"varint,1,opt,name=portnum,proto3,enum=meshtastic.PortNum" json:"portnum,omitempty"`
// Compressed data.
Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
}
func (x *Compressed) Reset() {
*x = Compressed{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Compressed) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Compressed) ProtoMessage() {}
func (x *Compressed) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[16]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Compressed.ProtoReflect.Descriptor instead.
func (*Compressed) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{16}
}
func (x *Compressed) GetPortnum() PortNum {
if x != nil {
return x.Portnum
}
return PortNum_UNKNOWN_APP
}
func (x *Compressed) GetData() []byte {
if x != nil {
return x.Data
}
return nil
}
// Full info on edges for a single node
type NeighborInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The node ID of the node sending info on its neighbors
NodeId uint32 `protobuf:"varint,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"`
// Field to pass neighbor info for the next sending cycle
LastSentById uint32 `protobuf:"varint,2,opt,name=last_sent_by_id,json=lastSentById,proto3" json:"last_sent_by_id,omitempty"`
// Broadcast interval of the represented node (in seconds)
NodeBroadcastIntervalSecs uint32 `protobuf:"varint,3,opt,name=node_broadcast_interval_secs,json=nodeBroadcastIntervalSecs,proto3" json:"node_broadcast_interval_secs,omitempty"`
// The list of out edges from this node
Neighbors []*Neighbor `protobuf:"bytes,4,rep,name=neighbors,proto3" json:"neighbors,omitempty"`
}
func (x *NeighborInfo) Reset() {
*x = NeighborInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *NeighborInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*NeighborInfo) ProtoMessage() {}
func (x *NeighborInfo) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[17]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use NeighborInfo.ProtoReflect.Descriptor instead.
func (*NeighborInfo) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{17}
}
func (x *NeighborInfo) GetNodeId() uint32 {
if x != nil {
return x.NodeId
}
return 0
}
func (x *NeighborInfo) GetLastSentById() uint32 {
if x != nil {
return x.LastSentById
}
return 0
}
func (x *NeighborInfo) GetNodeBroadcastIntervalSecs() uint32 {
if x != nil {
return x.NodeBroadcastIntervalSecs
}
return 0
}
func (x *NeighborInfo) GetNeighbors() []*Neighbor {
if x != nil {
return x.Neighbors
}
return nil
}
// A single edge in the mesh
type Neighbor struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Node ID of neighbor
NodeId uint32 `protobuf:"varint,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"`
// SNR of last heard message
Snr float32 `protobuf:"fixed32,2,opt,name=snr,proto3" json:"snr,omitempty"`
// Reception time (in secs since 1970) of last message that was last sent by this ID.
// Note: this is for local storage only and will not be sent out over the mesh.
LastRxTime uint32 `protobuf:"fixed32,3,opt,name=last_rx_time,json=lastRxTime,proto3" json:"last_rx_time,omitempty"`
// Broadcast interval of this neighbor (in seconds).
// Note: this is for local storage only and will not be sent out over the mesh.
NodeBroadcastIntervalSecs uint32 `protobuf:"varint,4,opt,name=node_broadcast_interval_secs,json=nodeBroadcastIntervalSecs,proto3" json:"node_broadcast_interval_secs,omitempty"`
}
func (x *Neighbor) Reset() {
*x = Neighbor{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Neighbor) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Neighbor) ProtoMessage() {}
func (x *Neighbor) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[18]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Neighbor.ProtoReflect.Descriptor instead.
func (*Neighbor) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{18}
}
func (x *Neighbor) GetNodeId() uint32 {
if x != nil {
return x.NodeId
}
return 0
}
func (x *Neighbor) GetSnr() float32 {
if x != nil {
return x.Snr
}
return 0
}
func (x *Neighbor) GetLastRxTime() uint32 {
if x != nil {
return x.LastRxTime
}
return 0
}
func (x *Neighbor) GetNodeBroadcastIntervalSecs() uint32 {
if x != nil {
return x.NodeBroadcastIntervalSecs
}
return 0
}
// Device metadata response
type DeviceMetadata struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Device firmware version string
FirmwareVersion string `protobuf:"bytes,1,opt,name=firmware_version,json=firmwareVersion,proto3" json:"firmware_version,omitempty"`
// Device state version
DeviceStateVersion uint32 `protobuf:"varint,2,opt,name=device_state_version,json=deviceStateVersion,proto3" json:"device_state_version,omitempty"`
// Indicates whether the device can shutdown CPU natively or via power management chip
CanShutdown bool `protobuf:"varint,3,opt,name=canShutdown,proto3" json:"canShutdown,omitempty"`
// Indicates that the device has native wifi capability
HasWifi bool `protobuf:"varint,4,opt,name=hasWifi,proto3" json:"hasWifi,omitempty"`
// Indicates that the device has native bluetooth capability
HasBluetooth bool `protobuf:"varint,5,opt,name=hasBluetooth,proto3" json:"hasBluetooth,omitempty"`
// Indicates that the device has an ethernet peripheral
HasEthernet bool `protobuf:"varint,6,opt,name=hasEthernet,proto3" json:"hasEthernet,omitempty"`
// Indicates that the device's role in the mesh
Role Config_DeviceConfig_Role `protobuf:"varint,7,opt,name=role,proto3,enum=meshtastic.Config_DeviceConfig_Role" json:"role,omitempty"`
// Indicates the device's current enabled position flags
PositionFlags uint32 `protobuf:"varint,8,opt,name=position_flags,json=positionFlags,proto3" json:"position_flags,omitempty"`
// Device hardware model
HwModel HardwareModel `protobuf:"varint,9,opt,name=hw_model,json=hwModel,proto3,enum=meshtastic.HardwareModel" json:"hw_model,omitempty"`
// Has Remote Hardware enabled
HasRemoteHardware bool `protobuf:"varint,10,opt,name=hasRemoteHardware,proto3" json:"hasRemoteHardware,omitempty"`
// Has PKC capabilities
HasPKC bool `protobuf:"varint,11,opt,name=hasPKC,proto3" json:"hasPKC,omitempty"`
}
func (x *DeviceMetadata) Reset() {
*x = DeviceMetadata{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DeviceMetadata) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DeviceMetadata) ProtoMessage() {}
func (x *DeviceMetadata) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[19]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DeviceMetadata.ProtoReflect.Descriptor instead.
func (*DeviceMetadata) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{19}
}
func (x *DeviceMetadata) GetFirmwareVersion() string {
if x != nil {
return x.FirmwareVersion
}
return ""
}
func (x *DeviceMetadata) GetDeviceStateVersion() uint32 {
if x != nil {
return x.DeviceStateVersion
}
return 0
}
func (x *DeviceMetadata) GetCanShutdown() bool {
if x != nil {
return x.CanShutdown
}
return false
}
func (x *DeviceMetadata) GetHasWifi() bool {
if x != nil {
return x.HasWifi
}
return false
}
func (x *DeviceMetadata) GetHasBluetooth() bool {
if x != nil {
return x.HasBluetooth
}
return false
}
func (x *DeviceMetadata) GetHasEthernet() bool {
if x != nil {
return x.HasEthernet
}
return false
}
func (x *DeviceMetadata) GetRole() Config_DeviceConfig_Role {
if x != nil {
return x.Role
}
return Config_DeviceConfig_CLIENT
}
func (x *DeviceMetadata) GetPositionFlags() uint32 {
if x != nil {
return x.PositionFlags
}
return 0
}
func (x *DeviceMetadata) GetHwModel() HardwareModel {
if x != nil {
return x.HwModel
}
return HardwareModel_UNSET
}
func (x *DeviceMetadata) GetHasRemoteHardware() bool {
if x != nil {
return x.HasRemoteHardware
}
return false
}
func (x *DeviceMetadata) GetHasPKC() bool {
if x != nil {
return x.HasPKC
}
return false
}
// A heartbeat message is sent to the node from the client to keep the connection alive.
// This is currently only needed to keep serial connections alive, but can be used by any PhoneAPI.
type Heartbeat struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *Heartbeat) Reset() {
*x = Heartbeat{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Heartbeat) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Heartbeat) ProtoMessage() {}
func (x *Heartbeat) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[20]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Heartbeat.ProtoReflect.Descriptor instead.
func (*Heartbeat) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{20}
}
// RemoteHardwarePins associated with a node
type NodeRemoteHardwarePin struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The node_num exposing the available gpio pin
NodeNum uint32 `protobuf:"varint,1,opt,name=node_num,json=nodeNum,proto3" json:"node_num,omitempty"`
// The the available gpio pin for usage with RemoteHardware module
Pin *RemoteHardwarePin `protobuf:"bytes,2,opt,name=pin,proto3" json:"pin,omitempty"`
}
func (x *NodeRemoteHardwarePin) Reset() {
*x = NodeRemoteHardwarePin{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *NodeRemoteHardwarePin) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*NodeRemoteHardwarePin) ProtoMessage() {}
func (x *NodeRemoteHardwarePin) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[21]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use NodeRemoteHardwarePin.ProtoReflect.Descriptor instead.
func (*NodeRemoteHardwarePin) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{21}
}
func (x *NodeRemoteHardwarePin) GetNodeNum() uint32 {
if x != nil {
return x.NodeNum
}
return 0
}
func (x *NodeRemoteHardwarePin) GetPin() *RemoteHardwarePin {
if x != nil {
return x.Pin
}
return nil
}
type ChunkedPayload struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The ID of the entire payload
PayloadId uint32 `protobuf:"varint,1,opt,name=payload_id,json=payloadId,proto3" json:"payload_id,omitempty"`
// The total number of chunks in the payload
ChunkCount uint32 `protobuf:"varint,2,opt,name=chunk_count,json=chunkCount,proto3" json:"chunk_count,omitempty"`
// The current chunk index in the total
ChunkIndex uint32 `protobuf:"varint,3,opt,name=chunk_index,json=chunkIndex,proto3" json:"chunk_index,omitempty"`
// The binary data of the current chunk
PayloadChunk []byte `protobuf:"bytes,4,opt,name=payload_chunk,json=payloadChunk,proto3" json:"payload_chunk,omitempty"`
}
func (x *ChunkedPayload) Reset() {
*x = ChunkedPayload{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[22]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ChunkedPayload) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ChunkedPayload) ProtoMessage() {}
func (x *ChunkedPayload) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[22]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ChunkedPayload.ProtoReflect.Descriptor instead.
func (*ChunkedPayload) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{22}
}
func (x *ChunkedPayload) GetPayloadId() uint32 {
if x != nil {
return x.PayloadId
}
return 0
}
func (x *ChunkedPayload) GetChunkCount() uint32 {
if x != nil {
return x.ChunkCount
}
return 0
}
func (x *ChunkedPayload) GetChunkIndex() uint32 {
if x != nil {
return x.ChunkIndex
}
return 0
}
func (x *ChunkedPayload) GetPayloadChunk() []byte {
if x != nil {
return x.PayloadChunk
}
return nil
}
// Wrapper message for broken repeated oneof support
type ResendChunks struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Chunks []uint32 `protobuf:"varint,1,rep,packed,name=chunks,proto3" json:"chunks,omitempty"`
}
func (x *ResendChunks) Reset() {
*x = ResendChunks{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[23]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ResendChunks) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ResendChunks) ProtoMessage() {}
func (x *ResendChunks) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[23]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ResendChunks.ProtoReflect.Descriptor instead.
func (*ResendChunks) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{23}
}
func (x *ResendChunks) GetChunks() []uint32 {
if x != nil {
return x.Chunks
}
return nil
}
// Responses to a ChunkedPayload request
type ChunkedPayloadResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The ID of the entire payload
PayloadId uint32 `protobuf:"varint,1,opt,name=payload_id,json=payloadId,proto3" json:"payload_id,omitempty"`
// Types that are assignable to PayloadVariant:
//
// *ChunkedPayloadResponse_RequestTransfer
// *ChunkedPayloadResponse_AcceptTransfer
// *ChunkedPayloadResponse_ResendChunks
PayloadVariant isChunkedPayloadResponse_PayloadVariant `protobuf_oneof:"payload_variant"`
}
func (x *ChunkedPayloadResponse) Reset() {
*x = ChunkedPayloadResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_protobufs_mesh_proto_msgTypes[24]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ChunkedPayloadResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ChunkedPayloadResponse) ProtoMessage() {}
func (x *ChunkedPayloadResponse) ProtoReflect() protoreflect.Message {
mi := &file_protobufs_mesh_proto_msgTypes[24]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ChunkedPayloadResponse.ProtoReflect.Descriptor instead.
func (*ChunkedPayloadResponse) Descriptor() ([]byte, []int) {
return file_protobufs_mesh_proto_rawDescGZIP(), []int{24}
}
func (x *ChunkedPayloadResponse) GetPayloadId() uint32 {
if x != nil {
return x.PayloadId
}
return 0
}
func (m *ChunkedPayloadResponse) GetPayloadVariant() isChunkedPayloadResponse_PayloadVariant {
if m != nil {
return m.PayloadVariant
}
return nil
}
func (x *ChunkedPayloadResponse) GetRequestTransfer() bool {
if x, ok := x.GetPayloadVariant().(*ChunkedPayloadResponse_RequestTransfer); ok {
return x.RequestTransfer
}
return false
}
func (x *ChunkedPayloadResponse) GetAcceptTransfer() bool {
if x, ok := x.GetPayloadVariant().(*ChunkedPayloadResponse_AcceptTransfer); ok {
return x.AcceptTransfer
}
return false
}
func (x *ChunkedPayloadResponse) GetResendChunks() *ResendChunks {
if x, ok := x.GetPayloadVariant().(*ChunkedPayloadResponse_ResendChunks); ok {
return x.ResendChunks
}
return nil
}
type isChunkedPayloadResponse_PayloadVariant interface {
isChunkedPayloadResponse_PayloadVariant()
}
type ChunkedPayloadResponse_RequestTransfer struct {
// Request to transfer chunked payload
RequestTransfer bool `protobuf:"varint,2,opt,name=request_transfer,json=requestTransfer,proto3,oneof"`
}
type ChunkedPayloadResponse_AcceptTransfer struct {
// Accept the transfer chunked payload
AcceptTransfer bool `protobuf:"varint,3,opt,name=accept_transfer,json=acceptTransfer,proto3,oneof"`
}
type ChunkedPayloadResponse_ResendChunks struct {
// Request missing indexes in the chunked payload
ResendChunks *ResendChunks `protobuf:"bytes,4,opt,name=resend_chunks,json=resendChunks,proto3,oneof"`
}
func (*ChunkedPayloadResponse_RequestTransfer) isChunkedPayloadResponse_PayloadVariant() {}
func (*ChunkedPayloadResponse_AcceptTransfer) isChunkedPayloadResponse_PayloadVariant() {}
func (*ChunkedPayloadResponse_ResendChunks) isChunkedPayloadResponse_PayloadVariant() {}
var File_protobufs_mesh_proto protoreflect.FileDescriptor
var file_protobufs_mesh_proto_rawDesc = []byte{
0x0a, 0x14, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x2f, 0x6d, 0x65, 0x73, 0x68,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74,
0x69, 0x63, 0x1a, 0x17, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x2f, 0x63, 0x68,
0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x2f, 0x6d,
0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x1a, 0x18, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x2f, 0x70, 0x6f,
0x72, 0x74, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72,
0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
0x66, 0x73, 0x2f, 0x78, 0x6d, 0x6f, 0x64, 0x65, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
0x19, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63,
0x65, 0x5f, 0x75, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa2, 0x09, 0x0a, 0x08, 0x50,
0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0a, 0x6c, 0x61, 0x74, 0x69, 0x74,
0x75, 0x64, 0x65, 0x5f, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0f, 0x48, 0x00, 0x52, 0x09, 0x6c,
0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x49, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x6c,
0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x5f, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0f,
0x48, 0x01, 0x52, 0x0a, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x49, 0x88, 0x01,
0x01, 0x12, 0x1f, 0x0a, 0x08, 0x61, 0x6c, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x03, 0x20,
0x01, 0x28, 0x05, 0x48, 0x02, 0x52, 0x08, 0x61, 0x6c, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x88,
0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x07,
0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x47, 0x0a, 0x0f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32,
0x1e, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x50, 0x6f, 0x73,
0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, 0x63, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52,
0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12,
0x47, 0x0a, 0x0f, 0x61, 0x6c, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72,
0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74,
0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41,
0x6c, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0e, 0x61, 0x6c, 0x74, 0x69, 0x74, 0x75,
0x64, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65,
0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x07, 0x52, 0x09, 0x74, 0x69, 0x6d,
0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x36, 0x0a, 0x17, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
0x61, 0x6d, 0x70, 0x5f, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x5f, 0x61, 0x64, 0x6a, 0x75, 0x73,
0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
0x6d, 0x70, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x12, 0x26,
0x0a, 0x0c, 0x61, 0x6c, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x5f, 0x68, 0x61, 0x65, 0x18, 0x09,
0x20, 0x01, 0x28, 0x11, 0x48, 0x03, 0x52, 0x0b, 0x61, 0x6c, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65,
0x48, 0x61, 0x65, 0x88, 0x01, 0x01, 0x12, 0x43, 0x0a, 0x1b, 0x61, 0x6c, 0x74, 0x69, 0x74, 0x75,
0x64, 0x65, 0x5f, 0x67, 0x65, 0x6f, 0x69, 0x64, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x70, 0x61, 0x72,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x11, 0x48, 0x04, 0x52, 0x19, 0x61,
0x6c, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x47, 0x65, 0x6f, 0x69, 0x64, 0x61, 0x6c, 0x53, 0x65,
0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x50,
0x44, 0x4f, 0x50, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x50, 0x44, 0x4f, 0x50, 0x12,
0x12, 0x0a, 0x04, 0x48, 0x44, 0x4f, 0x50, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x48,
0x44, 0x4f, 0x50, 0x12, 0x12, 0x0a, 0x04, 0x56, 0x44, 0x4f, 0x50, 0x18, 0x0d, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x04, 0x56, 0x44, 0x4f, 0x50, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x70, 0x73, 0x5f, 0x61,
0x63, 0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x67,
0x70, 0x73, 0x41, 0x63, 0x63, 0x75, 0x72, 0x61, 0x63, 0x79, 0x12, 0x26, 0x0a, 0x0c, 0x67, 0x72,
0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0d,
0x48, 0x05, 0x52, 0x0b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x70, 0x65, 0x65, 0x64, 0x88,
0x01, 0x01, 0x12, 0x26, 0x0a, 0x0c, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x72, 0x61,
0x63, 0x6b, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x06, 0x52, 0x0b, 0x67, 0x72, 0x6f, 0x75,
0x6e, 0x64, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x69,
0x78, 0x5f, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x0a, 0x66, 0x69, 0x78, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x66,
0x69, 0x78, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x66,
0x69, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0c, 0x73, 0x61, 0x74, 0x73, 0x5f, 0x69,
0x6e, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x73, 0x61,
0x74, 0x73, 0x49, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x73,
0x6f, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x73, 0x65, 0x6e,
0x73, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x75, 0x70,
0x64, 0x61, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6e, 0x65, 0x78, 0x74,
0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x71, 0x5f, 0x6e, 0x75,
0x6d, 0x62, 0x65, 0x72, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x73, 0x65, 0x71, 0x4e,
0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69,
0x6f, 0x6e, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x70,
0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x74, 0x73, 0x22, 0x4e, 0x0a, 0x09,
0x4c, 0x6f, 0x63, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x4f, 0x43,
0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x4f, 0x43, 0x5f,
0x4d, 0x41, 0x4e, 0x55, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x4c, 0x4f, 0x43, 0x5f,
0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x4c, 0x4f,
0x43, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x03, 0x22, 0x62, 0x0a, 0x09,
0x41, 0x6c, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x4c, 0x54,
0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x4c, 0x54, 0x5f,
0x4d, 0x41, 0x4e, 0x55, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x41, 0x4c, 0x54, 0x5f,
0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x41, 0x4c,
0x54, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e,
0x41, 0x4c, 0x54, 0x5f, 0x42, 0x41, 0x52, 0x4f, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x10, 0x04,
0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x5f, 0x69, 0x42,
0x0e, 0x0a, 0x0c, 0x5f, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x5f, 0x69, 0x42,
0x0b, 0x0a, 0x09, 0x5f, 0x61, 0x6c, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x42, 0x0f, 0x0a, 0x0d,
0x5f, 0x61, 0x6c, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x5f, 0x68, 0x61, 0x65, 0x42, 0x1e, 0x0a,
0x1c, 0x5f, 0x61, 0x6c, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x5f, 0x67, 0x65, 0x6f, 0x69, 0x64,
0x61, 0x6c, 0x5f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0f, 0x0a,
0x0d, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x42, 0x0f,
0x0a, 0x0d, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x22,
0xa0, 0x02, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x6e, 0x67,
0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x6e,
0x67, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x6e,
0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x6f, 0x72, 0x74,
0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x07, 0x6d, 0x61, 0x63, 0x61, 0x64, 0x64, 0x72, 0x18,
0x04, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x6d, 0x61, 0x63, 0x61, 0x64,
0x64, 0x72, 0x12, 0x34, 0x0a, 0x08, 0x68, 0x77, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x05,
0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69,
0x63, 0x2e, 0x48, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x52,
0x07, 0x68, 0x77, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x6c,
0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69,
0x73, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x64, 0x12, 0x38, 0x0a, 0x04, 0x72, 0x6f, 0x6c,
0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61,
0x73, 0x74, 0x69, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72,
0x6f, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65,
0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b,
0x65, 0x79, 0x22, 0x81, 0x01, 0x0a, 0x0e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63,
0x6f, 0x76, 0x65, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x01,
0x20, 0x03, 0x28, 0x07, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73,
0x6e, 0x72, 0x5f, 0x74, 0x6f, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05,
0x52, 0x0a, 0x73, 0x6e, 0x72, 0x54, 0x6f, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x1d, 0x0a, 0x0a,
0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x03, 0x28, 0x07,
0x52, 0x09, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x12, 0x19, 0x0a, 0x08, 0x73,
0x6e, 0x72, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x04, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x73,
0x6e, 0x72, 0x42, 0x61, 0x63, 0x6b, 0x22, 0x89, 0x04, 0x0a, 0x07, 0x52, 0x6f, 0x75, 0x74, 0x69,
0x6e, 0x67, 0x12, 0x41, 0x0a, 0x0d, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x65, 0x73, 0x68,
0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63,
0x6f, 0x76, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0c, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x0b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x72,
0x65, 0x70, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x65, 0x73,
0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x69, 0x73,
0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x52,
0x65, 0x70, 0x6c, 0x79, 0x12, 0x3e, 0x0a, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x72, 0x65,
0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x6d, 0x65, 0x73,
0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x2e,
0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65,
0x61, 0x73, 0x6f, 0x6e, 0x22, 0xb0, 0x02, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x08,
0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x4f, 0x5f, 0x52,
0x4f, 0x55, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x47, 0x4f, 0x54, 0x5f, 0x4e, 0x41,
0x4b, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x10, 0x03,
0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x46, 0x41, 0x43, 0x45,
0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x4d, 0x41, 0x58, 0x5f, 0x52, 0x45, 0x54, 0x52, 0x41, 0x4e,
0x53, 0x4d, 0x49, 0x54, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x4f, 0x5f, 0x43, 0x48, 0x41,
0x4e, 0x4e, 0x45, 0x4c, 0x10, 0x06, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x4f, 0x4f, 0x5f, 0x4c, 0x41,
0x52, 0x47, 0x45, 0x10, 0x07, 0x12, 0x0f, 0x0a, 0x0b, 0x4e, 0x4f, 0x5f, 0x52, 0x45, 0x53, 0x50,
0x4f, 0x4e, 0x53, 0x45, 0x10, 0x08, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x55, 0x54, 0x59, 0x5f, 0x43,
0x59, 0x43, 0x4c, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x10, 0x09, 0x12, 0x0f, 0x0a, 0x0b,
0x42, 0x41, 0x44, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x20, 0x12, 0x12, 0x0a,
0x0e, 0x4e, 0x4f, 0x54, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x45, 0x44, 0x10,
0x21, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x4b, 0x49, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10,
0x22, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x4b, 0x49, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e,
0x5f, 0x50, 0x55, 0x42, 0x4b, 0x45, 0x59, 0x10, 0x23, 0x12, 0x19, 0x0a, 0x15, 0x41, 0x44, 0x4d,
0x49, 0x4e, 0x5f, 0x42, 0x41, 0x44, 0x5f, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4b,
0x45, 0x59, 0x10, 0x24, 0x12, 0x21, 0x0a, 0x1d, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x50, 0x55,
0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x41, 0x55, 0x54, 0x48, 0x4f,
0x52, 0x49, 0x5a, 0x45, 0x44, 0x10, 0x25, 0x42, 0x09, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61,
0x6e, 0x74, 0x22, 0x9e, 0x02, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x07, 0x70,
0x6f, 0x72, 0x74, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x6d,
0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x4e, 0x75,
0x6d, 0x52, 0x07, 0x70, 0x6f, 0x72, 0x74, 0x6e, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61,
0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79,
0x6c, 0x6f, 0x61, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x61, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x77, 0x61, 0x6e,
0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73,
0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x07, 0x52, 0x04, 0x64, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a,
0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x07, 0x52, 0x06, 0x73,
0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x07, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x5f, 0x69, 0x64,
0x18, 0x07, 0x20, 0x01, 0x28, 0x07, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x49, 0x64, 0x12,
0x14, 0x0a, 0x05, 0x65, 0x6d, 0x6f, 0x6a, 0x69, 0x18, 0x08, 0x20, 0x01, 0x28, 0x07, 0x52, 0x05,
0x65, 0x6d, 0x6f, 0x6a, 0x69, 0x12, 0x1f, 0x0a, 0x08, 0x62, 0x69, 0x74, 0x66, 0x69, 0x65, 0x6c,
0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x08, 0x62, 0x69, 0x74, 0x66, 0x69,
0x65, 0x6c, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x62, 0x69, 0x74, 0x66, 0x69,
0x65, 0x6c, 0x64, 0x22, 0x82, 0x02, 0x0a, 0x08, 0x57, 0x61, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74,
0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64,
0x12, 0x22, 0x0a, 0x0a, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x5f, 0x69, 0x18, 0x02,
0x20, 0x01, 0x28, 0x0f, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65,
0x49, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64,
0x65, 0x5f, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0f, 0x48, 0x01, 0x52, 0x0a, 0x6c, 0x6f, 0x6e,
0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x49, 0x88, 0x01, 0x01, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78,
0x70, 0x69, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x65, 0x78, 0x70, 0x69,
0x72, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x18,
0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x54, 0x6f, 0x12,
0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x18, 0x08, 0x20,
0x01, 0x28, 0x07, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6c, 0x61,
0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x5f, 0x69, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6c, 0x6f, 0x6e,
0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x5f, 0x69, 0x22, 0x89, 0x01, 0x0a, 0x16, 0x4d, 0x71, 0x74,
0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x4d, 0x65, 0x73, 0x73,
0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x14, 0x0a, 0x04, 0x64, 0x61, 0x74,
0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12,
0x14, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52,
0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6e, 0x65,
0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6e, 0x65,
0x64, 0x42, 0x11, 0x0a, 0x0f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x76, 0x61, 0x72,
0x69, 0x61, 0x6e, 0x74, 0x22, 0xec, 0x05, 0x0a, 0x0a, 0x4d, 0x65, 0x73, 0x68, 0x50, 0x61, 0x63,
0x6b, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28,
0x07, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20,
0x01, 0x28, 0x07, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e,
0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65,
0x6c, 0x12, 0x2c, 0x0a, 0x07, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e,
0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x07, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x12,
0x1e, 0x0a, 0x09, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01,
0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x12,
0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x07, 0x52, 0x02, 0x69, 0x64, 0x12,
0x17, 0x0a, 0x07, 0x72, 0x78, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x07,
0x52, 0x06, 0x72, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x72, 0x78, 0x5f, 0x73,
0x6e, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x72, 0x78, 0x53, 0x6e, 0x72, 0x12,
0x1b, 0x0a, 0x09, 0x68, 0x6f, 0x70, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x08, 0x68, 0x6f, 0x70, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08,
0x77, 0x61, 0x6e, 0x74, 0x5f, 0x61, 0x63, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07,
0x77, 0x61, 0x6e, 0x74, 0x41, 0x63, 0x6b, 0x12, 0x3b, 0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72,
0x69, 0x74, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6d, 0x65, 0x73, 0x68,
0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x50, 0x61, 0x63, 0x6b, 0x65,
0x74, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f,
0x72, 0x69, 0x74, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x78, 0x5f, 0x72, 0x73, 0x73, 0x69, 0x18,
0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x72, 0x78, 0x52, 0x73, 0x73, 0x69, 0x12, 0x3c, 0x0a,
0x07, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e,
0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x68,
0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x42, 0x02,
0x18, 0x01, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x76,
0x69, 0x61, 0x5f, 0x6d, 0x71, 0x74, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x76,
0x69, 0x61, 0x4d, 0x71, 0x74, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x6f, 0x70, 0x5f, 0x73, 0x74,
0x61, 0x72, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x68, 0x6f, 0x70, 0x53, 0x74,
0x61, 0x72, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65,
0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b,
0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x6b, 0x69, 0x5f, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70,
0x74, 0x65, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x70, 0x6b, 0x69, 0x45, 0x6e,
0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x22, 0x73, 0x0a, 0x08, 0x50, 0x72, 0x69, 0x6f, 0x72,
0x69, 0x74, 0x79, 0x12, 0x09, 0x0a, 0x05, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x07,
0x0a, 0x03, 0x4d, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x42, 0x41, 0x43, 0x4b, 0x47,
0x52, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x0a, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55,
0x4c, 0x54, 0x10, 0x40, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x4c, 0x49, 0x41, 0x42, 0x4c, 0x45,
0x10, 0x46, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, 0x53, 0x45, 0x10, 0x50,
0x12, 0x08, 0x0a, 0x04, 0x48, 0x49, 0x47, 0x48, 0x10, 0x64, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x43,
0x4b, 0x10, 0x78, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x41, 0x58, 0x10, 0x7f, 0x22, 0x42, 0x0a, 0x07,
0x44, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x4f, 0x5f, 0x44, 0x45,
0x4c, 0x41, 0x59, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x45, 0x4c, 0x41, 0x59, 0x45, 0x44,
0x5f, 0x42, 0x52, 0x4f, 0x41, 0x44, 0x43, 0x41, 0x53, 0x54, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e,
0x44, 0x45, 0x4c, 0x41, 0x59, 0x45, 0x44, 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x10, 0x02,
0x42, 0x11, 0x0a, 0x0f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x76, 0x61, 0x72, 0x69,
0x61, 0x6e, 0x74, 0x22, 0xed, 0x02, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f,
0x12, 0x10, 0x0a, 0x03, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6e,
0x75, 0x6d, 0x12, 0x24, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x10, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x55, 0x73,
0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69,
0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x65, 0x73,
0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x6e,
0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x73, 0x6e, 0x72, 0x12, 0x1d, 0x0a, 0x0a,
0x6c, 0x61, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x07,
0x52, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72, 0x64, 0x12, 0x40, 0x0a, 0x0e, 0x64,
0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x06, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63,
0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x0d,
0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x18, 0x0a,
0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07,
0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x76, 0x69, 0x61, 0x5f, 0x6d,
0x71, 0x74, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x76, 0x69, 0x61, 0x4d, 0x71,
0x74, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x68, 0x6f, 0x70, 0x73, 0x5f, 0x61, 0x77, 0x61, 0x79, 0x18,
0x09, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x08, 0x68, 0x6f, 0x70, 0x73, 0x41, 0x77, 0x61,
0x79, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x66, 0x61, 0x76, 0x6f, 0x72,
0x69, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x46, 0x61, 0x76,
0x6f, 0x72, 0x69, 0x74, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x68, 0x6f, 0x70, 0x73, 0x5f, 0x61,
0x77, 0x61, 0x79, 0x22, 0x94, 0x01, 0x0a, 0x0a, 0x4d, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e,
0x66, 0x6f, 0x12, 0x1e, 0x0a, 0x0b, 0x6d, 0x79, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x75,
0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6d, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x4e,
0x75, 0x6d, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x5f, 0x63, 0x6f, 0x75,
0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74,
0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x69, 0x6e, 0x5f, 0x61, 0x70, 0x70,
0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d,
0x6d, 0x69, 0x6e, 0x41, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a,
0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04,
0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x22, 0xde, 0x01, 0x0a, 0x09, 0x4c,
0x6f, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73,
0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61,
0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07,
0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x31,
0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e,
0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x52, 0x65,
0x63, 0x6f, 0x72, 0x64, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65,
0x6c, 0x22, 0x58, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x55, 0x4e,
0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x52, 0x49, 0x54, 0x49, 0x43, 0x41,
0x4c, 0x10, 0x32, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x28, 0x12, 0x0b,
0x0a, 0x07, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x1e, 0x12, 0x08, 0x0a, 0x04, 0x49,
0x4e, 0x46, 0x4f, 0x10, 0x14, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x0a,
0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x05, 0x22, 0x71, 0x0a, 0x0b, 0x51,
0x75, 0x65, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65,
0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x72, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04,
0x66, 0x72, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x66, 0x72, 0x65, 0x65,
0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x6c, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x06, 0x6d, 0x61, 0x78, 0x6c, 0x65, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x68,
0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x0c, 0x6d, 0x65, 0x73, 0x68, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x22, 0xc8,
0x07, 0x0a, 0x09, 0x46, 0x72, 0x6f, 0x6d, 0x52, 0x61, 0x64, 0x69, 0x6f, 0x12, 0x0e, 0x0a, 0x02,
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x06,
0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d,
0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x50, 0x61,
0x63, 0x6b, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x31,
0x0a, 0x07, 0x6d, 0x79, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x16, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x4d, 0x79, 0x4e,
0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x79, 0x49, 0x6e, 0x66,
0x6f, 0x12, 0x33, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69,
0x63, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x08, 0x6e, 0x6f,
0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73,
0x74, 0x69, 0x63, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x12, 0x36, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x5f, 0x72, 0x65, 0x63, 0x6f,
0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74,
0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x48,
0x00, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x2e, 0x0a, 0x12,
0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f,
0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x08,
0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00,
0x52, 0x08, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x0c, 0x6d, 0x6f,
0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x18, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x4d, 0x6f,
0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x0c, 0x6d, 0x6f,
0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2f, 0x0a, 0x07, 0x63, 0x68,
0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x65,
0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c,
0x48, 0x00, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x3b, 0x0a, 0x0b, 0x71,
0x75, 0x65, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x17, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x51, 0x75,
0x65, 0x75, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x0b, 0x71, 0x75, 0x65,
0x75, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x38, 0x0a, 0x0c, 0x78, 0x6d, 0x6f, 0x64,
0x65, 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12,
0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x58, 0x4d, 0x6f, 0x64,
0x65, 0x6d, 0x48, 0x00, 0x52, 0x0c, 0x78, 0x6d, 0x6f, 0x64, 0x65, 0x6d, 0x50, 0x61, 0x63, 0x6b,
0x65, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0d,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69,
0x63, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
0x48, 0x00, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x5c, 0x0a, 0x16,
0x6d, 0x71, 0x74, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x4d,
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d,
0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x4d, 0x71, 0x74, 0x74, 0x43, 0x6c,
0x69, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
0x48, 0x00, 0x52, 0x16, 0x6d, 0x71, 0x74, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x72,
0x6f, 0x78, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x66, 0x69,
0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d,
0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e,
0x66, 0x6f, 0x48, 0x00, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x50,
0x0a, 0x12, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x65, 0x73,
0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4e, 0x6f,
0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6c,
0x69, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x12, 0x44, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x75, 0x69, 0x43, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74,
0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x55, 0x49, 0x43, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x75, 0x69,
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x11, 0x0a, 0x0f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61,
0x64, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x22, 0xa2, 0x01, 0x0a, 0x12, 0x43, 0x6c,
0x69, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x12, 0x1e, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0d, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x49, 0x64, 0x88, 0x01, 0x01,
0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x04,
0x74, 0x69, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20,
0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63,
0x2e, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c,
0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61,
0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x65, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x5f, 0x69, 0x64, 0x22, 0x46,
0x0a, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69,
0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66,
0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, 0x5f,
0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x73, 0x69, 0x7a,
0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xe7, 0x02, 0x0a, 0x07, 0x54, 0x6f, 0x52, 0x61, 0x64,
0x69, 0x6f, 0x12, 0x30, 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e,
0x4d, 0x65, 0x73, 0x68, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x70, 0x61,
0x63, 0x6b, 0x65, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x77, 0x61, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x0c,
0x77, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0a,
0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08,
0x48, 0x00, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x38,
0x0a, 0x0c, 0x78, 0x6d, 0x6f, 0x64, 0x65, 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x05,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69,
0x63, 0x2e, 0x58, 0x4d, 0x6f, 0x64, 0x65, 0x6d, 0x48, 0x00, 0x52, 0x0c, 0x78, 0x6d, 0x6f, 0x64,
0x65, 0x6d, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x5c, 0x0a, 0x16, 0x6d, 0x71, 0x74, 0x74,
0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61,
0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74,
0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x4d, 0x71, 0x74, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74,
0x50, 0x72, 0x6f, 0x78, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x16,
0x6d, 0x71, 0x74, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x4d,
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62,
0x65, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x65, 0x73, 0x68,
0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74,
0x48, 0x00, 0x52, 0x09, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x42, 0x11, 0x0a,
0x0f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74,
0x22, 0x4f, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x12, 0x2d,
0x0a, 0x07, 0x70, 0x6f, 0x72, 0x74, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32,
0x13, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x50, 0x6f, 0x72,
0x74, 0x4e, 0x75, 0x6d, 0x52, 0x07, 0x70, 0x6f, 0x72, 0x74, 0x6e, 0x75, 0x6d, 0x12, 0x12, 0x0a,
0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74,
0x61, 0x22, 0xc3, 0x01, 0x0a, 0x0c, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x49, 0x6e,
0x66, 0x6f, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0f, 0x6c,
0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x6e, 0x74, 0x42, 0x79,
0x49, 0x64, 0x12, 0x3f, 0x0a, 0x1c, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x62, 0x72, 0x6f, 0x61, 0x64,
0x63, 0x61, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x73, 0x65,
0x63, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x19, 0x6e, 0x6f, 0x64, 0x65, 0x42, 0x72,
0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x53,
0x65, 0x63, 0x73, 0x12, 0x32, 0x0a, 0x09, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x73,
0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73,
0x74, 0x69, 0x63, 0x2e, 0x4e, 0x65, 0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x52, 0x09, 0x6e, 0x65,
0x69, 0x67, 0x68, 0x62, 0x6f, 0x72, 0x73, 0x22, 0x98, 0x01, 0x0a, 0x08, 0x4e, 0x65, 0x69, 0x67,
0x68, 0x62, 0x6f, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a,
0x03, 0x73, 0x6e, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x73, 0x6e, 0x72, 0x12,
0x20, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x78, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18,
0x03, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x78, 0x54, 0x69, 0x6d,
0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63,
0x61, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x63,
0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x19, 0x6e, 0x6f, 0x64, 0x65, 0x42, 0x72, 0x6f,
0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x53, 0x65,
0x63, 0x73, 0x22, 0xcc, 0x03, 0x0a, 0x0e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x74,
0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x29, 0x0a, 0x10, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72,
0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0f, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65,
0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12,
0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69,
0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x61, 0x6e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77,
0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x63, 0x61, 0x6e, 0x53, 0x68, 0x75, 0x74,
0x64, 0x6f, 0x77, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x61, 0x73, 0x57, 0x69, 0x66, 0x69, 0x18,
0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, 0x61, 0x73, 0x57, 0x69, 0x66, 0x69, 0x12, 0x22,
0x0a, 0x0c, 0x68, 0x61, 0x73, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f, 0x74, 0x68, 0x18, 0x05,
0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x61, 0x73, 0x42, 0x6c, 0x75, 0x65, 0x74, 0x6f, 0x6f,
0x74, 0x68, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x61, 0x73, 0x45, 0x74, 0x68, 0x65, 0x72, 0x6e, 0x65,
0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x68, 0x61, 0x73, 0x45, 0x74, 0x68, 0x65,
0x72, 0x6e, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01,
0x28, 0x0e, 0x32, 0x24, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e,
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x25,
0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73,
0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x34, 0x0a, 0x08, 0x68, 0x77, 0x5f, 0x6d, 0x6f, 0x64, 0x65,
0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61,
0x73, 0x74, 0x69, 0x63, 0x2e, 0x48, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x4d, 0x6f, 0x64,
0x65, 0x6c, 0x52, 0x07, 0x68, 0x77, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x2c, 0x0a, 0x11, 0x68,
0x61, 0x73, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x48, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65,
0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x68, 0x61, 0x73, 0x52, 0x65, 0x6d, 0x6f, 0x74,
0x65, 0x48, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x61, 0x73,
0x50, 0x4b, 0x43, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x68, 0x61, 0x73, 0x50, 0x4b,
0x43, 0x22, 0x0b, 0x0a, 0x09, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x22, 0x63,
0x0a, 0x15, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x48, 0x61, 0x72, 0x64,
0x77, 0x61, 0x72, 0x65, 0x50, 0x69, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x5f,
0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x4e,
0x75, 0x6d, 0x12, 0x2f, 0x0a, 0x03, 0x70, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x1d, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x52, 0x65, 0x6d,
0x6f, 0x74, 0x65, 0x48, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x50, 0x69, 0x6e, 0x52, 0x03,
0x70, 0x69, 0x6e, 0x22, 0x96, 0x01, 0x0a, 0x0e, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x65, 0x64, 0x50,
0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61,
0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x61, 0x79, 0x6c,
0x6f, 0x61, 0x64, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x63,
0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x63, 0x68, 0x75, 0x6e,
0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f,
0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x63, 0x68, 0x75,
0x6e, 0x6b, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x61, 0x79, 0x6c, 0x6f,
0x61, 0x64, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c,
0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x27, 0x0a, 0x0d,
0x72, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x12, 0x16, 0x0a,
0x06, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x63,
0x68, 0x75, 0x6e, 0x6b, 0x73, 0x22, 0xe4, 0x01, 0x0a, 0x16, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x65,
0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x12,
0x2b, 0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73,
0x66, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x29, 0x0a, 0x0f,
0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x18,
0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x54,
0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x40, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x6e,
0x64, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19,
0x2e, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x72, 0x65, 0x73, 0x65,
0x6e, 0x64, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x72, 0x65, 0x73,
0x65, 0x6e, 0x64, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x42, 0x11, 0x0a, 0x0f, 0x70, 0x61, 0x79,
0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x2a, 0xcb, 0x0c, 0x0a,
0x0d, 0x48, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x09,
0x0a, 0x05, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x4c, 0x4f,
0x52, 0x41, 0x5f, 0x56, 0x32, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x4c, 0x4f, 0x52, 0x41,
0x5f, 0x56, 0x31, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x4c, 0x4f, 0x52, 0x41, 0x5f, 0x56,
0x32, 0x5f, 0x31, 0x5f, 0x31, 0x50, 0x36, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x42, 0x45,
0x41, 0x4d, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x48, 0x45, 0x4c, 0x54, 0x45, 0x43, 0x5f, 0x56,
0x32, 0x5f, 0x30, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x42, 0x45, 0x41, 0x4d, 0x5f, 0x56,
0x30, 0x50, 0x37, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x5f, 0x45, 0x43, 0x48, 0x4f, 0x10,
0x07, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x4c, 0x4f, 0x52, 0x41, 0x5f, 0x56, 0x31, 0x5f, 0x31, 0x50,
0x33, 0x10, 0x08, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x41, 0x4b, 0x34, 0x36, 0x33, 0x31, 0x10, 0x09,
0x12, 0x0f, 0x0a, 0x0b, 0x48, 0x45, 0x4c, 0x54, 0x45, 0x43, 0x5f, 0x56, 0x32, 0x5f, 0x31, 0x10,
0x0a, 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x45, 0x4c, 0x54, 0x45, 0x43, 0x5f, 0x56, 0x31, 0x10, 0x0b,
0x12, 0x18, 0x0a, 0x14, 0x4c, 0x49, 0x4c, 0x59, 0x47, 0x4f, 0x5f, 0x54, 0x42, 0x45, 0x41, 0x4d,
0x5f, 0x53, 0x33, 0x5f, 0x43, 0x4f, 0x52, 0x45, 0x10, 0x0c, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x41,
0x4b, 0x31, 0x31, 0x32, 0x30, 0x30, 0x10, 0x0d, 0x12, 0x0b, 0x0a, 0x07, 0x4e, 0x41, 0x4e, 0x4f,
0x5f, 0x47, 0x31, 0x10, 0x0e, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x4c, 0x4f, 0x52, 0x41, 0x5f, 0x56,
0x32, 0x5f, 0x31, 0x5f, 0x31, 0x50, 0x38, 0x10, 0x0f, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x4c, 0x4f,
0x52, 0x41, 0x5f, 0x54, 0x33, 0x5f, 0x53, 0x33, 0x10, 0x10, 0x12, 0x14, 0x0a, 0x10, 0x4e, 0x41,
0x4e, 0x4f, 0x5f, 0x47, 0x31, 0x5f, 0x45, 0x58, 0x50, 0x4c, 0x4f, 0x52, 0x45, 0x52, 0x10, 0x11,
0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x41, 0x4e, 0x4f, 0x5f, 0x47, 0x32, 0x5f, 0x55, 0x4c, 0x54, 0x52,
0x41, 0x10, 0x12, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x4f, 0x52, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45,
0x10, 0x13, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x49, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x10, 0x14, 0x12,
0x0e, 0x0a, 0x0a, 0x57, 0x49, 0x4f, 0x5f, 0x57, 0x4d, 0x31, 0x31, 0x31, 0x30, 0x10, 0x15, 0x12,
0x0b, 0x0a, 0x07, 0x52, 0x41, 0x4b, 0x32, 0x35, 0x36, 0x30, 0x10, 0x16, 0x12, 0x13, 0x0a, 0x0f,
0x48, 0x45, 0x4c, 0x54, 0x45, 0x43, 0x5f, 0x48, 0x52, 0x55, 0x5f, 0x33, 0x36, 0x30, 0x31, 0x10,
0x17, 0x12, 0x1a, 0x0a, 0x16, 0x48, 0x45, 0x4c, 0x54, 0x45, 0x43, 0x5f, 0x57, 0x49, 0x52, 0x45,
0x4c, 0x45, 0x53, 0x53, 0x5f, 0x42, 0x52, 0x49, 0x44, 0x47, 0x45, 0x10, 0x18, 0x12, 0x0e, 0x0a,
0x0a, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x47, 0x31, 0x10, 0x19, 0x12, 0x0c, 0x0a,
0x08, 0x52, 0x41, 0x4b, 0x31, 0x31, 0x33, 0x31, 0x30, 0x10, 0x1a, 0x12, 0x14, 0x0a, 0x10, 0x53,
0x45, 0x4e, 0x53, 0x45, 0x4c, 0x4f, 0x52, 0x41, 0x5f, 0x52, 0x50, 0x32, 0x30, 0x34, 0x30, 0x10,
0x1b, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x45, 0x4e, 0x53, 0x45, 0x4c, 0x4f, 0x52, 0x41, 0x5f, 0x53,
0x33, 0x10, 0x1c, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x41, 0x52, 0x59, 0x4f, 0x4e, 0x45,
0x10, 0x1d, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x50, 0x32, 0x30, 0x34, 0x30, 0x5f, 0x4c, 0x4f, 0x52,
0x41, 0x10, 0x1e, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x47,
0x32, 0x10, 0x1f, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x52, 0x41, 0x5f, 0x52, 0x45, 0x4c, 0x41,
0x59, 0x5f, 0x56, 0x31, 0x10, 0x20, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x52, 0x46, 0x35, 0x32, 0x38,
0x34, 0x30, 0x44, 0x4b, 0x10, 0x21, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x50, 0x52, 0x10, 0x22, 0x12,
0x0f, 0x0a, 0x0b, 0x47, 0x45, 0x4e, 0x49, 0x45, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x53, 0x10, 0x23,
0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x52, 0x46, 0x35, 0x32, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57,
0x4e, 0x10, 0x24, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x4f, 0x52, 0x54, 0x44, 0x55, 0x49, 0x4e, 0x4f,
0x10, 0x25, 0x12, 0x0f, 0x0a, 0x0b, 0x41, 0x4e, 0x44, 0x52, 0x4f, 0x49, 0x44, 0x5f, 0x53, 0x49,
0x4d, 0x10, 0x26, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x49, 0x59, 0x5f, 0x56, 0x31, 0x10, 0x27, 0x12,
0x15, 0x0a, 0x11, 0x4e, 0x52, 0x46, 0x35, 0x32, 0x38, 0x34, 0x30, 0x5f, 0x50, 0x43, 0x41, 0x31,
0x30, 0x30, 0x35, 0x39, 0x10, 0x28, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x52, 0x5f, 0x44, 0x45, 0x56,
0x10, 0x29, 0x12, 0x0b, 0x0a, 0x07, 0x4d, 0x35, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x10, 0x2a, 0x12,
0x0d, 0x0a, 0x09, 0x48, 0x45, 0x4c, 0x54, 0x45, 0x43, 0x5f, 0x56, 0x33, 0x10, 0x2b, 0x12, 0x11,
0x0a, 0x0d, 0x48, 0x45, 0x4c, 0x54, 0x45, 0x43, 0x5f, 0x57, 0x53, 0x4c, 0x5f, 0x56, 0x33, 0x10,
0x2c, 0x12, 0x13, 0x0a, 0x0f, 0x42, 0x45, 0x54, 0x41, 0x46, 0x50, 0x56, 0x5f, 0x32, 0x34, 0x30,
0x30, 0x5f, 0x54, 0x58, 0x10, 0x2d, 0x12, 0x17, 0x0a, 0x13, 0x42, 0x45, 0x54, 0x41, 0x46, 0x50,
0x56, 0x5f, 0x39, 0x30, 0x30, 0x5f, 0x4e, 0x41, 0x4e, 0x4f, 0x5f, 0x54, 0x58, 0x10, 0x2e, 0x12,
0x0c, 0x0a, 0x08, 0x52, 0x50, 0x49, 0x5f, 0x50, 0x49, 0x43, 0x4f, 0x10, 0x2f, 0x12, 0x1b, 0x0a,
0x17, 0x48, 0x45, 0x4c, 0x54, 0x45, 0x43, 0x5f, 0x57, 0x49, 0x52, 0x45, 0x4c, 0x45, 0x53, 0x53,
0x5f, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x45, 0x52, 0x10, 0x30, 0x12, 0x19, 0x0a, 0x15, 0x48, 0x45,
0x4c, 0x54, 0x45, 0x43, 0x5f, 0x57, 0x49, 0x52, 0x45, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x50, 0x41,
0x50, 0x45, 0x52, 0x10, 0x31, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x5f, 0x44, 0x45, 0x43, 0x4b, 0x10,
0x32, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x5f, 0x57, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x53, 0x33, 0x10,
0x33, 0x12, 0x11, 0x0a, 0x0d, 0x50, 0x49, 0x43, 0x4f, 0x4d, 0x50, 0x55, 0x54, 0x45, 0x52, 0x5f,
0x53, 0x33, 0x10, 0x34, 0x12, 0x0f, 0x0a, 0x0b, 0x48, 0x45, 0x4c, 0x54, 0x45, 0x43, 0x5f, 0x48,
0x54, 0x36, 0x32, 0x10, 0x35, 0x12, 0x12, 0x0a, 0x0e, 0x45, 0x42, 0x59, 0x54, 0x45, 0x5f, 0x45,
0x53, 0x50, 0x33, 0x32, 0x5f, 0x53, 0x33, 0x10, 0x36, 0x12, 0x11, 0x0a, 0x0d, 0x45, 0x53, 0x50,
0x33, 0x32, 0x5f, 0x53, 0x33, 0x5f, 0x50, 0x49, 0x43, 0x4f, 0x10, 0x37, 0x12, 0x0d, 0x0a, 0x09,
0x43, 0x48, 0x41, 0x54, 0x54, 0x45, 0x52, 0x5f, 0x32, 0x10, 0x38, 0x12, 0x1e, 0x0a, 0x1a, 0x48,
0x45, 0x4c, 0x54, 0x45, 0x43, 0x5f, 0x57, 0x49, 0x52, 0x45, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x50,
0x41, 0x50, 0x45, 0x52, 0x5f, 0x56, 0x31, 0x5f, 0x30, 0x10, 0x39, 0x12, 0x20, 0x0a, 0x1c, 0x48,
0x45, 0x4c, 0x54, 0x45, 0x43, 0x5f, 0x57, 0x49, 0x52, 0x45, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54,
0x52, 0x41, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x56, 0x31, 0x5f, 0x30, 0x10, 0x3a, 0x12, 0x0b, 0x0a,
0x07, 0x55, 0x4e, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x10, 0x3b, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x44,
0x5f, 0x4c, 0x4f, 0x52, 0x41, 0x43, 0x10, 0x3c, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x44, 0x45, 0x42,
0x59, 0x54, 0x45, 0x5f, 0x45, 0x4f, 0x52, 0x41, 0x5f, 0x53, 0x33, 0x10, 0x3d, 0x12, 0x0f, 0x0a,
0x0b, 0x54, 0x57, 0x43, 0x5f, 0x4d, 0x45, 0x53, 0x48, 0x5f, 0x56, 0x34, 0x10, 0x3e, 0x12, 0x16,
0x0a, 0x12, 0x4e, 0x52, 0x46, 0x35, 0x32, 0x5f, 0x50, 0x52, 0x4f, 0x4d, 0x49, 0x43, 0x52, 0x4f,
0x5f, 0x44, 0x49, 0x59, 0x10, 0x3f, 0x12, 0x1f, 0x0a, 0x1b, 0x52, 0x41, 0x44, 0x49, 0x4f, 0x4d,
0x41, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x39, 0x30, 0x30, 0x5f, 0x42, 0x41, 0x4e, 0x44, 0x49, 0x54,
0x5f, 0x4e, 0x41, 0x4e, 0x4f, 0x10, 0x40, 0x12, 0x1c, 0x0a, 0x18, 0x48, 0x45, 0x4c, 0x54, 0x45,
0x43, 0x5f, 0x43, 0x41, 0x50, 0x53, 0x55, 0x4c, 0x45, 0x5f, 0x53, 0x45, 0x4e, 0x53, 0x4f, 0x52,
0x5f, 0x56, 0x33, 0x10, 0x41, 0x12, 0x1d, 0x0a, 0x19, 0x48, 0x45, 0x4c, 0x54, 0x45, 0x43, 0x5f,
0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x41, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x31,
0x39, 0x30, 0x10, 0x42, 0x12, 0x1d, 0x0a, 0x19, 0x48, 0x45, 0x4c, 0x54, 0x45, 0x43, 0x5f, 0x56,
0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x41, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x45, 0x32, 0x31,
0x33, 0x10, 0x43, 0x12, 0x1d, 0x0a, 0x19, 0x48, 0x45, 0x4c, 0x54, 0x45, 0x43, 0x5f, 0x56, 0x49,
0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x41, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x45, 0x32, 0x39, 0x30,
0x10, 0x44, 0x12, 0x19, 0x0a, 0x15, 0x48, 0x45, 0x4c, 0x54, 0x45, 0x43, 0x5f, 0x4d, 0x45, 0x53,
0x48, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x54, 0x31, 0x31, 0x34, 0x10, 0x45, 0x12, 0x16, 0x0a,
0x12, 0x53, 0x45, 0x4e, 0x53, 0x45, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x4e, 0x44, 0x49, 0x43, 0x41,
0x54, 0x4f, 0x52, 0x10, 0x46, 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x45, 0x52,
0x5f, 0x54, 0x31, 0x30, 0x30, 0x30, 0x5f, 0x45, 0x10, 0x47, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x41,
0x4b, 0x33, 0x31, 0x37, 0x32, 0x10, 0x48, 0x12, 0x0a, 0x0a, 0x06, 0x57, 0x49, 0x4f, 0x5f, 0x45,
0x35, 0x10, 0x49, 0x12, 0x1a, 0x0a, 0x16, 0x52, 0x41, 0x44, 0x49, 0x4f, 0x4d, 0x41, 0x53, 0x54,
0x45, 0x52, 0x5f, 0x39, 0x30, 0x30, 0x5f, 0x42, 0x41, 0x4e, 0x44, 0x49, 0x54, 0x10, 0x4a, 0x12,
0x13, 0x0a, 0x0f, 0x4d, 0x45, 0x32, 0x35, 0x4c, 0x53, 0x30, 0x31, 0x5f, 0x34, 0x59, 0x31, 0x30,
0x54, 0x44, 0x10, 0x4b, 0x12, 0x18, 0x0a, 0x14, 0x52, 0x50, 0x32, 0x30, 0x34, 0x30, 0x5f, 0x46,
0x45, 0x41, 0x54, 0x48, 0x45, 0x52, 0x5f, 0x52, 0x46, 0x4d, 0x39, 0x35, 0x10, 0x4c, 0x12, 0x15,
0x0a, 0x11, 0x4d, 0x35, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x43, 0x4f, 0x52, 0x45, 0x42, 0x41,
0x53, 0x49, 0x43, 0x10, 0x4d, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x35, 0x53, 0x54, 0x41, 0x43, 0x4b,
0x5f, 0x43, 0x4f, 0x52, 0x45, 0x32, 0x10, 0x4e, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x50, 0x49, 0x5f,
0x50, 0x49, 0x43, 0x4f, 0x32, 0x10, 0x4f, 0x12, 0x12, 0x0a, 0x0e, 0x4d, 0x35, 0x53, 0x54, 0x41,
0x43, 0x4b, 0x5f, 0x43, 0x4f, 0x52, 0x45, 0x53, 0x33, 0x10, 0x50, 0x12, 0x11, 0x0a, 0x0d, 0x53,
0x45, 0x45, 0x45, 0x44, 0x5f, 0x58, 0x49, 0x41, 0x4f, 0x5f, 0x53, 0x33, 0x10, 0x51, 0x12, 0x0b,
0x0a, 0x07, 0x4d, 0x53, 0x32, 0x34, 0x53, 0x46, 0x31, 0x10, 0x52, 0x12, 0x0c, 0x0a, 0x08, 0x54,
0x4c, 0x4f, 0x52, 0x41, 0x5f, 0x43, 0x36, 0x10, 0x53, 0x12, 0x0f, 0x0a, 0x0a, 0x50, 0x52, 0x49,
0x56, 0x41, 0x54, 0x45, 0x5f, 0x48, 0x57, 0x10, 0xff, 0x01, 0x2a, 0x2c, 0x0a, 0x09, 0x43, 0x6f,
0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x08, 0x0a, 0x04, 0x5a, 0x45, 0x52, 0x4f, 0x10,
0x00, 0x12, 0x15, 0x0a, 0x10, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x50, 0x41, 0x59, 0x4c, 0x4f, 0x41,
0x44, 0x5f, 0x4c, 0x45, 0x4e, 0x10, 0xed, 0x01, 0x2a, 0xb4, 0x02, 0x0a, 0x11, 0x43, 0x72, 0x69,
0x74, 0x69, 0x63, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x08,
0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x58, 0x5f, 0x57,
0x41, 0x54, 0x43, 0x48, 0x44, 0x4f, 0x47, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x4c, 0x45,
0x45, 0x50, 0x5f, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x10, 0x02, 0x12,
0x0c, 0x0a, 0x08, 0x4e, 0x4f, 0x5f, 0x52, 0x41, 0x44, 0x49, 0x4f, 0x10, 0x03, 0x12, 0x0f, 0x0a,
0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x04, 0x12, 0x15,
0x0a, 0x11, 0x55, 0x42, 0x4c, 0x4f, 0x58, 0x5f, 0x55, 0x4e, 0x49, 0x54, 0x5f, 0x46, 0x41, 0x49,
0x4c, 0x45, 0x44, 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x5f, 0x41, 0x58, 0x50, 0x31,
0x39, 0x32, 0x10, 0x06, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f,
0x52, 0x41, 0x44, 0x49, 0x4f, 0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x07, 0x12,
0x13, 0x0a, 0x0f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x4d, 0x49, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c,
0x45, 0x44, 0x10, 0x08, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x52, 0x4f, 0x57, 0x4e, 0x4f, 0x55, 0x54,
0x10, 0x09, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x58, 0x31, 0x32, 0x36, 0x32, 0x5f, 0x46, 0x41, 0x49,
0x4c, 0x55, 0x52, 0x45, 0x10, 0x0a, 0x12, 0x11, 0x0a, 0x0d, 0x52, 0x41, 0x44, 0x49, 0x4f, 0x5f,
0x53, 0x50, 0x49, 0x5f, 0x42, 0x55, 0x47, 0x10, 0x0b, 0x12, 0x20, 0x0a, 0x1c, 0x46, 0x4c, 0x41,
0x53, 0x48, 0x5f, 0x43, 0x4f, 0x52, 0x52, 0x55, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45,
0x43, 0x4f, 0x56, 0x45, 0x52, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x0c, 0x12, 0x22, 0x0a, 0x1e, 0x46,
0x4c, 0x41, 0x53, 0x48, 0x5f, 0x43, 0x4f, 0x52, 0x52, 0x55, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f,
0x55, 0x4e, 0x52, 0x45, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x0d, 0x42,
0x86, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x65, 0x65, 0x6b, 0x73, 0x76, 0x69, 0x6c,
0x6c, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x42, 0x0a, 0x4d, 0x65, 0x73, 0x68, 0x50, 0x72, 0x6f,
0x74, 0x6f, 0x73, 0x5a, 0x49, 0x67, 0x69, 0x74, 0x2e, 0x6a, 0x61, 0x6e, 0x6b, 0x79, 0x2e, 0x73,
0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x66, 0x69, 0x6e, 0x6e, 0x2f, 0x6d, 0x61,
0x74, 0x72, 0x69, 0x78, 0x2d, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2d,
0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2d, 0x67, 0x6f, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x74, 0x61,
0x73, 0x74, 0x69, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0xaa, 0x02,
0x14, 0x4d, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x73, 0xba, 0x02, 0x00, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_protobufs_mesh_proto_rawDescOnce sync.Once
file_protobufs_mesh_proto_rawDescData = file_protobufs_mesh_proto_rawDesc
)
func file_protobufs_mesh_proto_rawDescGZIP() []byte {
file_protobufs_mesh_proto_rawDescOnce.Do(func() {
file_protobufs_mesh_proto_rawDescData = protoimpl.X.CompressGZIP(file_protobufs_mesh_proto_rawDescData)
})
return file_protobufs_mesh_proto_rawDescData
}
var file_protobufs_mesh_proto_enumTypes = make([]protoimpl.EnumInfo, 9)
var file_protobufs_mesh_proto_msgTypes = make([]protoimpl.MessageInfo, 25)
var file_protobufs_mesh_proto_goTypes = []interface{}{
(HardwareModel)(0), // 0: meshtastic.HardwareModel
(Constants)(0), // 1: meshtastic.Constants
(CriticalErrorCode)(0), // 2: meshtastic.CriticalErrorCode
(Position_LocSource)(0), // 3: meshtastic.Position.LocSource
(Position_AltSource)(0), // 4: meshtastic.Position.AltSource
(Routing_Error)(0), // 5: meshtastic.Routing.Error
(MeshPacket_Priority)(0), // 6: meshtastic.MeshPacket.Priority
(MeshPacket_Delayed)(0), // 7: meshtastic.MeshPacket.Delayed
(LogRecord_Level)(0), // 8: meshtastic.LogRecord.Level
(*Position)(nil), // 9: meshtastic.Position
(*User)(nil), // 10: meshtastic.User
(*RouteDiscovery)(nil), // 11: meshtastic.RouteDiscovery
(*Routing)(nil), // 12: meshtastic.Routing
(*Data)(nil), // 13: meshtastic.Data
(*Waypoint)(nil), // 14: meshtastic.Waypoint
(*MqttClientProxyMessage)(nil), // 15: meshtastic.MqttClientProxyMessage
(*MeshPacket)(nil), // 16: meshtastic.MeshPacket
(*NodeInfo)(nil), // 17: meshtastic.NodeInfo
(*MyNodeInfo)(nil), // 18: meshtastic.MyNodeInfo
(*LogRecord)(nil), // 19: meshtastic.LogRecord
(*QueueStatus)(nil), // 20: meshtastic.QueueStatus
(*FromRadio)(nil), // 21: meshtastic.FromRadio
(*ClientNotification)(nil), // 22: meshtastic.ClientNotification
(*FileInfo)(nil), // 23: meshtastic.FileInfo
(*ToRadio)(nil), // 24: meshtastic.ToRadio
(*Compressed)(nil), // 25: meshtastic.Compressed
(*NeighborInfo)(nil), // 26: meshtastic.NeighborInfo
(*Neighbor)(nil), // 27: meshtastic.Neighbor
(*DeviceMetadata)(nil), // 28: meshtastic.DeviceMetadata
(*Heartbeat)(nil), // 29: meshtastic.Heartbeat
(*NodeRemoteHardwarePin)(nil), // 30: meshtastic.NodeRemoteHardwarePin
(*ChunkedPayload)(nil), // 31: meshtastic.ChunkedPayload
(*ResendChunks)(nil), // 32: meshtastic.resend_chunks
(*ChunkedPayloadResponse)(nil), // 33: meshtastic.ChunkedPayloadResponse
(Config_DeviceConfig_Role)(0), // 34: meshtastic.Config.DeviceConfig.Role
(PortNum)(0), // 35: meshtastic.PortNum
(*DeviceMetrics)(nil), // 36: meshtastic.DeviceMetrics
(*Config)(nil), // 37: meshtastic.Config
(*ModuleConfig)(nil), // 38: meshtastic.ModuleConfig
(*Channel)(nil), // 39: meshtastic.Channel
(*XModem)(nil), // 40: meshtastic.XModem
(*DeviceUIConfig)(nil), // 41: meshtastic.DeviceUIConfig
(*RemoteHardwarePin)(nil), // 42: meshtastic.RemoteHardwarePin
}
var file_protobufs_mesh_proto_depIdxs = []int32{
3, // 0: meshtastic.Position.location_source:type_name -> meshtastic.Position.LocSource
4, // 1: meshtastic.Position.altitude_source:type_name -> meshtastic.Position.AltSource
0, // 2: meshtastic.User.hw_model:type_name -> meshtastic.HardwareModel
34, // 3: meshtastic.User.role:type_name -> meshtastic.Config.DeviceConfig.Role
11, // 4: meshtastic.Routing.route_request:type_name -> meshtastic.RouteDiscovery
11, // 5: meshtastic.Routing.route_reply:type_name -> meshtastic.RouteDiscovery
5, // 6: meshtastic.Routing.error_reason:type_name -> meshtastic.Routing.Error
35, // 7: meshtastic.Data.portnum:type_name -> meshtastic.PortNum
13, // 8: meshtastic.MeshPacket.decoded:type_name -> meshtastic.Data
6, // 9: meshtastic.MeshPacket.priority:type_name -> meshtastic.MeshPacket.Priority
7, // 10: meshtastic.MeshPacket.delayed:type_name -> meshtastic.MeshPacket.Delayed
10, // 11: meshtastic.NodeInfo.user:type_name -> meshtastic.User
9, // 12: meshtastic.NodeInfo.position:type_name -> meshtastic.Position
36, // 13: meshtastic.NodeInfo.device_metrics:type_name -> meshtastic.DeviceMetrics
8, // 14: meshtastic.LogRecord.level:type_name -> meshtastic.LogRecord.Level
16, // 15: meshtastic.FromRadio.packet:type_name -> meshtastic.MeshPacket
18, // 16: meshtastic.FromRadio.my_info:type_name -> meshtastic.MyNodeInfo
17, // 17: meshtastic.FromRadio.node_info:type_name -> meshtastic.NodeInfo
37, // 18: meshtastic.FromRadio.config:type_name -> meshtastic.Config
19, // 19: meshtastic.FromRadio.log_record:type_name -> meshtastic.LogRecord
38, // 20: meshtastic.FromRadio.moduleConfig:type_name -> meshtastic.ModuleConfig
39, // 21: meshtastic.FromRadio.channel:type_name -> meshtastic.Channel
20, // 22: meshtastic.FromRadio.queueStatus:type_name -> meshtastic.QueueStatus
40, // 23: meshtastic.FromRadio.xmodemPacket:type_name -> meshtastic.XModem
28, // 24: meshtastic.FromRadio.metadata:type_name -> meshtastic.DeviceMetadata
15, // 25: meshtastic.FromRadio.mqttClientProxyMessage:type_name -> meshtastic.MqttClientProxyMessage
23, // 26: meshtastic.FromRadio.fileInfo:type_name -> meshtastic.FileInfo
22, // 27: meshtastic.FromRadio.clientNotification:type_name -> meshtastic.ClientNotification
41, // 28: meshtastic.FromRadio.deviceuiConfig:type_name -> meshtastic.DeviceUIConfig
8, // 29: meshtastic.ClientNotification.level:type_name -> meshtastic.LogRecord.Level
16, // 30: meshtastic.ToRadio.packet:type_name -> meshtastic.MeshPacket
40, // 31: meshtastic.ToRadio.xmodemPacket:type_name -> meshtastic.XModem
15, // 32: meshtastic.ToRadio.mqttClientProxyMessage:type_name -> meshtastic.MqttClientProxyMessage
29, // 33: meshtastic.ToRadio.heartbeat:type_name -> meshtastic.Heartbeat
35, // 34: meshtastic.Compressed.portnum:type_name -> meshtastic.PortNum
27, // 35: meshtastic.NeighborInfo.neighbors:type_name -> meshtastic.Neighbor
34, // 36: meshtastic.DeviceMetadata.role:type_name -> meshtastic.Config.DeviceConfig.Role
0, // 37: meshtastic.DeviceMetadata.hw_model:type_name -> meshtastic.HardwareModel
42, // 38: meshtastic.NodeRemoteHardwarePin.pin:type_name -> meshtastic.RemoteHardwarePin
32, // 39: meshtastic.ChunkedPayloadResponse.resend_chunks:type_name -> meshtastic.resend_chunks
40, // [40:40] is the sub-list for method output_type
40, // [40:40] is the sub-list for method input_type
40, // [40:40] is the sub-list for extension type_name
40, // [40:40] is the sub-list for extension extendee
0, // [0:40] is the sub-list for field type_name
}
func init() { file_protobufs_mesh_proto_init() }
func file_protobufs_mesh_proto_init() {
if File_protobufs_mesh_proto != nil {
return
}
file_protobufs_channel_proto_init()
file_protobufs_config_proto_init()
file_protobufs_module_config_proto_init()
file_protobufs_portnums_proto_init()
file_protobufs_telemetry_proto_init()
file_protobufs_xmodem_proto_init()
file_protobufs_device_ui_proto_init()
if !protoimpl.UnsafeEnabled {
file_protobufs_mesh_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Position); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*User); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RouteDiscovery); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Routing); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Data); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Waypoint); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MqttClientProxyMessage); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MeshPacket); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*NodeInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MyNodeInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*LogRecord); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*QueueStatus); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*FromRadio); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ClientNotification); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*FileInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ToRadio); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Compressed); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*NeighborInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Neighbor); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DeviceMetadata); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Heartbeat); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*NodeRemoteHardwarePin); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ChunkedPayload); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ResendChunks); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_protobufs_mesh_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ChunkedPayloadResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
file_protobufs_mesh_proto_msgTypes[0].OneofWrappers = []interface{}{}
file_protobufs_mesh_proto_msgTypes[3].OneofWrappers = []interface{}{
(*Routing_RouteRequest)(nil),
(*Routing_RouteReply)(nil),
(*Routing_ErrorReason)(nil),
}
file_protobufs_mesh_proto_msgTypes[4].OneofWrappers = []interface{}{}
file_protobufs_mesh_proto_msgTypes[5].OneofWrappers = []interface{}{}
file_protobufs_mesh_proto_msgTypes[6].OneofWrappers = []interface{}{
(*MqttClientProxyMessage_Data)(nil),
(*MqttClientProxyMessage_Text)(nil),
}
file_protobufs_mesh_proto_msgTypes[7].OneofWrappers = []interface{}{
(*MeshPacket_Decoded)(nil),
(*MeshPacket_Encrypted)(nil),
}
file_protobufs_mesh_proto_msgTypes[8].OneofWrappers = []interface{}{}
file_protobufs_mesh_proto_msgTypes[12].OneofWrappers = []interface{}{
(*FromRadio_Packet)(nil),
(*FromRadio_MyInfo)(nil),
(*FromRadio_NodeInfo)(nil),
(*FromRadio_Config)(nil),
(*FromRadio_LogRecord)(nil),
(*FromRadio_ConfigCompleteId)(nil),
(*FromRadio_Rebooted)(nil),
(*FromRadio_ModuleConfig)(nil),
(*FromRadio_Channel)(nil),
(*FromRadio_QueueStatus)(nil),
(*FromRadio_XmodemPacket)(nil),
(*FromRadio_Metadata)(nil),
(*FromRadio_MqttClientProxyMessage)(nil),
(*FromRadio_FileInfo)(nil),
(*FromRadio_ClientNotification)(nil),
(*FromRadio_DeviceuiConfig)(nil),
}
file_protobufs_mesh_proto_msgTypes[13].OneofWrappers = []interface{}{}
file_protobufs_mesh_proto_msgTypes[15].OneofWrappers = []interface{}{
(*ToRadio_Packet)(nil),
(*ToRadio_WantConfigId)(nil),
(*ToRadio_Disconnect)(nil),
(*ToRadio_XmodemPacket)(nil),
(*ToRadio_MqttClientProxyMessage)(nil),
(*ToRadio_Heartbeat)(nil),
}
file_protobufs_mesh_proto_msgTypes[24].OneofWrappers = []interface{}{
(*ChunkedPayloadResponse_RequestTransfer)(nil),
(*ChunkedPayloadResponse_AcceptTransfer)(nil),
(*ChunkedPayloadResponse_ResendChunks)(nil),
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_protobufs_mesh_proto_rawDesc,
NumEnums: 9,
NumMessages: 25,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_protobufs_mesh_proto_goTypes,
DependencyIndexes: file_protobufs_mesh_proto_depIdxs,
EnumInfos: file_protobufs_mesh_proto_enumTypes,
MessageInfos: file_protobufs_mesh_proto_msgTypes,
}.Build()
File_protobufs_mesh_proto = out.File
file_protobufs_mesh_proto_rawDesc = nil
file_protobufs_mesh_proto_goTypes = nil
file_protobufs_mesh_proto_depIdxs = nil
}