diff --git a/api/v2/markdown_service.go b/api/v2/markdown_service.go
index 3fe6d059..87f3b756 100644
--- a/api/v2/markdown_service.go
+++ b/api/v2/markdown_service.go
@@ -63,6 +63,8 @@ func convertFromASTNode(rawNode ast.Node) *apiv2pb.Node {
node.Node = &apiv2pb.Node_TaskListNode{TaskListNode: &apiv2pb.TaskListNode{Symbol: n.Symbol, Indent: int32(n.Indent), Complete: n.Complete, Children: children}}
case *ast.MathBlock:
node.Node = &apiv2pb.Node_MathBlockNode{MathBlockNode: &apiv2pb.MathBlockNode{Content: n.Content}}
+ case *ast.Table:
+ node.Node = &apiv2pb.Node_TableNode{TableNode: convertTableFromASTNode(n)}
case *ast.Text:
node.Node = &apiv2pb.Node_TextNode{TextNode: &apiv2pb.TextNode{Content: n.Content}}
case *ast.Bold:
@@ -134,6 +136,8 @@ func convertToASTNode(node *apiv2pb.Node) ast.Node {
return &ast.TaskList{Symbol: n.TaskListNode.Symbol, Indent: int(n.TaskListNode.Indent), Complete: n.TaskListNode.Complete, Children: children}
case *apiv2pb.Node_MathBlockNode:
return &ast.MathBlock{Content: n.MathBlockNode.Content}
+ case *apiv2pb.Node_TableNode:
+ return convertTableToASTNode(node)
case *apiv2pb.Node_TextNode:
return &ast.Text{Content: n.TextNode.Content}
case *apiv2pb.Node_BoldNode:
@@ -166,6 +170,32 @@ func convertToASTNode(node *apiv2pb.Node) ast.Node {
}
}
+func convertTableToASTNode(node *apiv2pb.Node) *ast.Table {
+ table := &ast.Table{
+ Header: node.GetTableNode().Header,
+ }
+ for _, d := range node.GetTableNode().Delimiter {
+ table.Delimiter = append(table.Delimiter, int(d))
+ }
+ for _, row := range node.GetTableNode().Rows {
+ table.Rows = append(table.Rows, row.Cells)
+ }
+ return table
+}
+
+func convertTableFromASTNode(node *ast.Table) *apiv2pb.TableNode {
+ table := &apiv2pb.TableNode{
+ Header: node.Header,
+ }
+ for _, d := range node.Delimiter {
+ table.Delimiter = append(table.Delimiter, int32(d))
+ }
+ for _, row := range node.Rows {
+ table.Rows = append(table.Rows, &apiv2pb.TableNode_Row{Cells: row})
+ }
+ return table
+}
+
func traverseASTNodes(nodes []ast.Node, fn func(ast.Node)) {
for _, node := range nodes {
fn(node)
diff --git a/proto/api/v2/markdown_service.proto b/proto/api/v2/markdown_service.proto
index 4ddcc257..2441bea8 100644
--- a/proto/api/v2/markdown_service.proto
+++ b/proto/api/v2/markdown_service.proto
@@ -35,19 +35,20 @@ enum NodeType {
UNORDERED_LIST = 8;
TASK_LIST = 9;
MATH_BLOCK = 10;
- TEXT = 11;
- BOLD = 12;
- ITALIC = 13;
- BOLD_ITALIC = 14;
- CODE = 15;
- IMAGE = 16;
- LINK = 17;
- AUTO_LINK = 18;
- TAG = 19;
- STRIKETHROUGH = 20;
- ESCAPING_CHARACTER = 21;
- MATH = 22;
- HIGHLIGHT = 23;
+ TABLE = 11;
+ TEXT = 12;
+ BOLD = 13;
+ ITALIC = 14;
+ BOLD_ITALIC = 15;
+ CODE = 16;
+ IMAGE = 17;
+ LINK = 18;
+ AUTO_LINK = 19;
+ TAG = 20;
+ STRIKETHROUGH = 21;
+ ESCAPING_CHARACTER = 22;
+ MATH = 23;
+ HIGHLIGHT = 24;
}
message Node {
@@ -63,19 +64,20 @@ message Node {
UnorderedListNode unordered_list_node = 9;
TaskListNode task_list_node = 10;
MathBlockNode math_block_node = 11;
- TextNode text_node = 12;
- BoldNode bold_node = 13;
- ItalicNode italic_node = 14;
- BoldItalicNode bold_italic_node = 15;
- CodeNode code_node = 16;
- ImageNode image_node = 17;
- LinkNode link_node = 18;
- AutoLinkNode auto_link_node = 19;
- TagNode tag_node = 20;
- StrikethroughNode strikethrough_node = 21;
- EscapingCharacterNode escaping_character_node = 22;
- MathNode math_node = 23;
- HighlightNode highlight_node = 24;
+ TableNode table_node = 12;
+ TextNode text_node = 13;
+ BoldNode bold_node = 14;
+ ItalicNode italic_node = 15;
+ BoldItalicNode bold_italic_node = 16;
+ CodeNode code_node = 17;
+ ImageNode image_node = 18;
+ LinkNode link_node = 19;
+ AutoLinkNode auto_link_node = 20;
+ TagNode tag_node = 21;
+ StrikethroughNode strikethrough_node = 22;
+ EscapingCharacterNode escaping_character_node = 23;
+ MathNode math_node = 24;
+ HighlightNode highlight_node = 25;
}
}
@@ -126,6 +128,16 @@ message MathBlockNode {
string content = 1;
}
+message TableNode {
+ repeated string header = 1;
+ repeated int32 delimiter = 2;
+
+ message Row {
+ repeated string cells = 1;
+ }
+ repeated Row rows = 3;
+}
+
message TextNode {
string content = 1;
}
diff --git a/proto/gen/api/v2/README.md b/proto/gen/api/v2/README.md
index 34ef4b52..2f18e784 100644
--- a/proto/gen/api/v2/README.md
+++ b/proto/gen/api/v2/README.md
@@ -88,6 +88,8 @@
- [ParseMarkdownRequest](#memos-api-v2-ParseMarkdownRequest)
- [ParseMarkdownResponse](#memos-api-v2-ParseMarkdownResponse)
- [StrikethroughNode](#memos-api-v2-StrikethroughNode)
+ - [TableNode](#memos-api-v2-TableNode)
+ - [TableNode.Row](#memos-api-v2-TableNode-Row)
- [TagNode](#memos-api-v2-TagNode)
- [TaskListNode](#memos-api-v2-TaskListNode)
- [TextNode](#memos-api-v2-TextNode)
@@ -1222,6 +1224,7 @@
| unordered_list_node | [UnorderedListNode](#memos-api-v2-UnorderedListNode) | | |
| task_list_node | [TaskListNode](#memos-api-v2-TaskListNode) | | |
| math_block_node | [MathBlockNode](#memos-api-v2-MathBlockNode) | | |
+| table_node | [TableNode](#memos-api-v2-TableNode) | | |
| text_node | [TextNode](#memos-api-v2-TextNode) | | |
| bold_node | [BoldNode](#memos-api-v2-BoldNode) | | |
| italic_node | [ItalicNode](#memos-api-v2-ItalicNode) | | |
@@ -1318,6 +1321,38 @@
+
+
+### TableNode
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| header | [string](#string) | repeated | |
+| delimiter | [int32](#int32) | repeated | |
+| rows | [TableNode.Row](#memos-api-v2-TableNode-Row) | repeated | |
+
+
+
+
+
+
+
+
+### TableNode.Row
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| cells | [string](#string) | repeated | |
+
+
+
+
+
+
### TagNode
@@ -1403,19 +1438,20 @@
| UNORDERED_LIST | 8 | |
| TASK_LIST | 9 | |
| MATH_BLOCK | 10 | |
-| TEXT | 11 | |
-| BOLD | 12 | |
-| ITALIC | 13 | |
-| BOLD_ITALIC | 14 | |
-| CODE | 15 | |
-| IMAGE | 16 | |
-| LINK | 17 | |
-| AUTO_LINK | 18 | |
-| TAG | 19 | |
-| STRIKETHROUGH | 20 | |
-| ESCAPING_CHARACTER | 21 | |
-| MATH | 22 | |
-| HIGHLIGHT | 23 | |
+| TABLE | 11 | |
+| TEXT | 12 | |
+| BOLD | 13 | |
+| ITALIC | 14 | |
+| BOLD_ITALIC | 15 | |
+| CODE | 16 | |
+| IMAGE | 17 | |
+| LINK | 18 | |
+| AUTO_LINK | 19 | |
+| TAG | 20 | |
+| STRIKETHROUGH | 21 | |
+| ESCAPING_CHARACTER | 22 | |
+| MATH | 23 | |
+| HIGHLIGHT | 24 | |
diff --git a/proto/gen/api/v2/markdown_service.pb.go b/proto/gen/api/v2/markdown_service.pb.go
index 158c0d34..8cb2e6de 100644
--- a/proto/gen/api/v2/markdown_service.pb.go
+++ b/proto/gen/api/v2/markdown_service.pb.go
@@ -35,19 +35,20 @@ const (
NodeType_UNORDERED_LIST NodeType = 8
NodeType_TASK_LIST NodeType = 9
NodeType_MATH_BLOCK NodeType = 10
- NodeType_TEXT NodeType = 11
- NodeType_BOLD NodeType = 12
- NodeType_ITALIC NodeType = 13
- NodeType_BOLD_ITALIC NodeType = 14
- NodeType_CODE NodeType = 15
- NodeType_IMAGE NodeType = 16
- NodeType_LINK NodeType = 17
- NodeType_AUTO_LINK NodeType = 18
- NodeType_TAG NodeType = 19
- NodeType_STRIKETHROUGH NodeType = 20
- NodeType_ESCAPING_CHARACTER NodeType = 21
- NodeType_MATH NodeType = 22
- NodeType_HIGHLIGHT NodeType = 23
+ NodeType_TABLE NodeType = 11
+ NodeType_TEXT NodeType = 12
+ NodeType_BOLD NodeType = 13
+ NodeType_ITALIC NodeType = 14
+ NodeType_BOLD_ITALIC NodeType = 15
+ NodeType_CODE NodeType = 16
+ NodeType_IMAGE NodeType = 17
+ NodeType_LINK NodeType = 18
+ NodeType_AUTO_LINK NodeType = 19
+ NodeType_TAG NodeType = 20
+ NodeType_STRIKETHROUGH NodeType = 21
+ NodeType_ESCAPING_CHARACTER NodeType = 22
+ NodeType_MATH NodeType = 23
+ NodeType_HIGHLIGHT NodeType = 24
)
// Enum value maps for NodeType.
@@ -64,19 +65,20 @@ var (
8: "UNORDERED_LIST",
9: "TASK_LIST",
10: "MATH_BLOCK",
- 11: "TEXT",
- 12: "BOLD",
- 13: "ITALIC",
- 14: "BOLD_ITALIC",
- 15: "CODE",
- 16: "IMAGE",
- 17: "LINK",
- 18: "AUTO_LINK",
- 19: "TAG",
- 20: "STRIKETHROUGH",
- 21: "ESCAPING_CHARACTER",
- 22: "MATH",
- 23: "HIGHLIGHT",
+ 11: "TABLE",
+ 12: "TEXT",
+ 13: "BOLD",
+ 14: "ITALIC",
+ 15: "BOLD_ITALIC",
+ 16: "CODE",
+ 17: "IMAGE",
+ 18: "LINK",
+ 19: "AUTO_LINK",
+ 20: "TAG",
+ 21: "STRIKETHROUGH",
+ 22: "ESCAPING_CHARACTER",
+ 23: "MATH",
+ 24: "HIGHLIGHT",
}
NodeType_value = map[string]int32{
"NODE_UNSPECIFIED": 0,
@@ -90,19 +92,20 @@ var (
"UNORDERED_LIST": 8,
"TASK_LIST": 9,
"MATH_BLOCK": 10,
- "TEXT": 11,
- "BOLD": 12,
- "ITALIC": 13,
- "BOLD_ITALIC": 14,
- "CODE": 15,
- "IMAGE": 16,
- "LINK": 17,
- "AUTO_LINK": 18,
- "TAG": 19,
- "STRIKETHROUGH": 20,
- "ESCAPING_CHARACTER": 21,
- "MATH": 22,
- "HIGHLIGHT": 23,
+ "TABLE": 11,
+ "TEXT": 12,
+ "BOLD": 13,
+ "ITALIC": 14,
+ "BOLD_ITALIC": 15,
+ "CODE": 16,
+ "IMAGE": 17,
+ "LINK": 18,
+ "AUTO_LINK": 19,
+ "TAG": 20,
+ "STRIKETHROUGH": 21,
+ "ESCAPING_CHARACTER": 22,
+ "MATH": 23,
+ "HIGHLIGHT": 24,
}
)
@@ -245,6 +248,7 @@ type Node struct {
// *Node_UnorderedListNode
// *Node_TaskListNode
// *Node_MathBlockNode
+ // *Node_TableNode
// *Node_TextNode
// *Node_BoldNode
// *Node_ItalicNode
@@ -377,6 +381,13 @@ func (x *Node) GetMathBlockNode() *MathBlockNode {
return nil
}
+func (x *Node) GetTableNode() *TableNode {
+ if x, ok := x.GetNode().(*Node_TableNode); ok {
+ return x.TableNode
+ }
+ return nil
+}
+
func (x *Node) GetTextNode() *TextNode {
if x, ok := x.GetNode().(*Node_TextNode); ok {
return x.TextNode
@@ -512,56 +523,60 @@ type Node_MathBlockNode struct {
MathBlockNode *MathBlockNode `protobuf:"bytes,11,opt,name=math_block_node,json=mathBlockNode,proto3,oneof"`
}
+type Node_TableNode struct {
+ TableNode *TableNode `protobuf:"bytes,12,opt,name=table_node,json=tableNode,proto3,oneof"`
+}
+
type Node_TextNode struct {
- TextNode *TextNode `protobuf:"bytes,12,opt,name=text_node,json=textNode,proto3,oneof"`
+ TextNode *TextNode `protobuf:"bytes,13,opt,name=text_node,json=textNode,proto3,oneof"`
}
type Node_BoldNode struct {
- BoldNode *BoldNode `protobuf:"bytes,13,opt,name=bold_node,json=boldNode,proto3,oneof"`
+ BoldNode *BoldNode `protobuf:"bytes,14,opt,name=bold_node,json=boldNode,proto3,oneof"`
}
type Node_ItalicNode struct {
- ItalicNode *ItalicNode `protobuf:"bytes,14,opt,name=italic_node,json=italicNode,proto3,oneof"`
+ ItalicNode *ItalicNode `protobuf:"bytes,15,opt,name=italic_node,json=italicNode,proto3,oneof"`
}
type Node_BoldItalicNode struct {
- BoldItalicNode *BoldItalicNode `protobuf:"bytes,15,opt,name=bold_italic_node,json=boldItalicNode,proto3,oneof"`
+ BoldItalicNode *BoldItalicNode `protobuf:"bytes,16,opt,name=bold_italic_node,json=boldItalicNode,proto3,oneof"`
}
type Node_CodeNode struct {
- CodeNode *CodeNode `protobuf:"bytes,16,opt,name=code_node,json=codeNode,proto3,oneof"`
+ CodeNode *CodeNode `protobuf:"bytes,17,opt,name=code_node,json=codeNode,proto3,oneof"`
}
type Node_ImageNode struct {
- ImageNode *ImageNode `protobuf:"bytes,17,opt,name=image_node,json=imageNode,proto3,oneof"`
+ ImageNode *ImageNode `protobuf:"bytes,18,opt,name=image_node,json=imageNode,proto3,oneof"`
}
type Node_LinkNode struct {
- LinkNode *LinkNode `protobuf:"bytes,18,opt,name=link_node,json=linkNode,proto3,oneof"`
+ LinkNode *LinkNode `protobuf:"bytes,19,opt,name=link_node,json=linkNode,proto3,oneof"`
}
type Node_AutoLinkNode struct {
- AutoLinkNode *AutoLinkNode `protobuf:"bytes,19,opt,name=auto_link_node,json=autoLinkNode,proto3,oneof"`
+ AutoLinkNode *AutoLinkNode `protobuf:"bytes,20,opt,name=auto_link_node,json=autoLinkNode,proto3,oneof"`
}
type Node_TagNode struct {
- TagNode *TagNode `protobuf:"bytes,20,opt,name=tag_node,json=tagNode,proto3,oneof"`
+ TagNode *TagNode `protobuf:"bytes,21,opt,name=tag_node,json=tagNode,proto3,oneof"`
}
type Node_StrikethroughNode struct {
- StrikethroughNode *StrikethroughNode `protobuf:"bytes,21,opt,name=strikethrough_node,json=strikethroughNode,proto3,oneof"`
+ StrikethroughNode *StrikethroughNode `protobuf:"bytes,22,opt,name=strikethrough_node,json=strikethroughNode,proto3,oneof"`
}
type Node_EscapingCharacterNode struct {
- EscapingCharacterNode *EscapingCharacterNode `protobuf:"bytes,22,opt,name=escaping_character_node,json=escapingCharacterNode,proto3,oneof"`
+ EscapingCharacterNode *EscapingCharacterNode `protobuf:"bytes,23,opt,name=escaping_character_node,json=escapingCharacterNode,proto3,oneof"`
}
type Node_MathNode struct {
- MathNode *MathNode `protobuf:"bytes,23,opt,name=math_node,json=mathNode,proto3,oneof"`
+ MathNode *MathNode `protobuf:"bytes,24,opt,name=math_node,json=mathNode,proto3,oneof"`
}
type Node_HighlightNode struct {
- HighlightNode *HighlightNode `protobuf:"bytes,24,opt,name=highlight_node,json=highlightNode,proto3,oneof"`
+ HighlightNode *HighlightNode `protobuf:"bytes,25,opt,name=highlight_node,json=highlightNode,proto3,oneof"`
}
func (*Node_LineBreakNode) isNode_Node() {}
@@ -584,6 +599,8 @@ func (*Node_TaskListNode) isNode_Node() {}
func (*Node_MathBlockNode) isNode_Node() {}
+func (*Node_TableNode) isNode_Node() {}
+
func (*Node_TextNode) isNode_Node() {}
func (*Node_BoldNode) isNode_Node() {}
@@ -1143,6 +1160,69 @@ func (x *MathBlockNode) GetContent() string {
return ""
}
+type TableNode struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Header []string `protobuf:"bytes,1,rep,name=header,proto3" json:"header,omitempty"`
+ Delimiter []int32 `protobuf:"varint,2,rep,packed,name=delimiter,proto3" json:"delimiter,omitempty"`
+ Rows []*TableNode_Row `protobuf:"bytes,3,rep,name=rows,proto3" json:"rows,omitempty"`
+}
+
+func (x *TableNode) Reset() {
+ *x = TableNode{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_api_v2_markdown_service_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *TableNode) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TableNode) ProtoMessage() {}
+
+func (x *TableNode) ProtoReflect() protoreflect.Message {
+ mi := &file_api_v2_markdown_service_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 TableNode.ProtoReflect.Descriptor instead.
+func (*TableNode) Descriptor() ([]byte, []int) {
+ return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *TableNode) GetHeader() []string {
+ if x != nil {
+ return x.Header
+ }
+ return nil
+}
+
+func (x *TableNode) GetDelimiter() []int32 {
+ if x != nil {
+ return x.Delimiter
+ }
+ return nil
+}
+
+func (x *TableNode) GetRows() []*TableNode_Row {
+ if x != nil {
+ return x.Rows
+ }
+ return nil
+}
+
type TextNode struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -1154,7 +1234,7 @@ type TextNode struct {
func (x *TextNode) Reset() {
*x = TextNode{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_markdown_service_proto_msgTypes[13]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1167,7 +1247,7 @@ func (x *TextNode) String() string {
func (*TextNode) ProtoMessage() {}
func (x *TextNode) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_markdown_service_proto_msgTypes[13]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[14]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1180,7 +1260,7 @@ func (x *TextNode) ProtoReflect() protoreflect.Message {
// Deprecated: Use TextNode.ProtoReflect.Descriptor instead.
func (*TextNode) Descriptor() ([]byte, []int) {
- return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{13}
+ return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{14}
}
func (x *TextNode) GetContent() string {
@@ -1202,7 +1282,7 @@ type BoldNode struct {
func (x *BoldNode) Reset() {
*x = BoldNode{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_markdown_service_proto_msgTypes[14]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1215,7 +1295,7 @@ func (x *BoldNode) String() string {
func (*BoldNode) ProtoMessage() {}
func (x *BoldNode) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_markdown_service_proto_msgTypes[14]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[15]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1228,7 +1308,7 @@ func (x *BoldNode) ProtoReflect() protoreflect.Message {
// Deprecated: Use BoldNode.ProtoReflect.Descriptor instead.
func (*BoldNode) Descriptor() ([]byte, []int) {
- return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{14}
+ return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{15}
}
func (x *BoldNode) GetSymbol() string {
@@ -1257,7 +1337,7 @@ type ItalicNode struct {
func (x *ItalicNode) Reset() {
*x = ItalicNode{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_markdown_service_proto_msgTypes[15]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1270,7 +1350,7 @@ func (x *ItalicNode) String() string {
func (*ItalicNode) ProtoMessage() {}
func (x *ItalicNode) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_markdown_service_proto_msgTypes[15]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[16]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1283,7 +1363,7 @@ func (x *ItalicNode) ProtoReflect() protoreflect.Message {
// Deprecated: Use ItalicNode.ProtoReflect.Descriptor instead.
func (*ItalicNode) Descriptor() ([]byte, []int) {
- return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{15}
+ return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{16}
}
func (x *ItalicNode) GetSymbol() string {
@@ -1312,7 +1392,7 @@ type BoldItalicNode struct {
func (x *BoldItalicNode) Reset() {
*x = BoldItalicNode{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_markdown_service_proto_msgTypes[16]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1325,7 +1405,7 @@ func (x *BoldItalicNode) String() string {
func (*BoldItalicNode) ProtoMessage() {}
func (x *BoldItalicNode) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_markdown_service_proto_msgTypes[16]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[17]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1338,7 +1418,7 @@ func (x *BoldItalicNode) ProtoReflect() protoreflect.Message {
// Deprecated: Use BoldItalicNode.ProtoReflect.Descriptor instead.
func (*BoldItalicNode) Descriptor() ([]byte, []int) {
- return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{16}
+ return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{17}
}
func (x *BoldItalicNode) GetSymbol() string {
@@ -1366,7 +1446,7 @@ type CodeNode struct {
func (x *CodeNode) Reset() {
*x = CodeNode{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_markdown_service_proto_msgTypes[17]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1379,7 +1459,7 @@ func (x *CodeNode) String() string {
func (*CodeNode) ProtoMessage() {}
func (x *CodeNode) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_markdown_service_proto_msgTypes[17]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[18]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1392,7 +1472,7 @@ func (x *CodeNode) ProtoReflect() protoreflect.Message {
// Deprecated: Use CodeNode.ProtoReflect.Descriptor instead.
func (*CodeNode) Descriptor() ([]byte, []int) {
- return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{17}
+ return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{18}
}
func (x *CodeNode) GetContent() string {
@@ -1414,7 +1494,7 @@ type ImageNode struct {
func (x *ImageNode) Reset() {
*x = ImageNode{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_markdown_service_proto_msgTypes[18]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1427,7 +1507,7 @@ func (x *ImageNode) String() string {
func (*ImageNode) ProtoMessage() {}
func (x *ImageNode) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_markdown_service_proto_msgTypes[18]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[19]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1440,7 +1520,7 @@ func (x *ImageNode) ProtoReflect() protoreflect.Message {
// Deprecated: Use ImageNode.ProtoReflect.Descriptor instead.
func (*ImageNode) Descriptor() ([]byte, []int) {
- return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{18}
+ return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{19}
}
func (x *ImageNode) GetAltText() string {
@@ -1469,7 +1549,7 @@ type LinkNode struct {
func (x *LinkNode) Reset() {
*x = LinkNode{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_markdown_service_proto_msgTypes[19]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1482,7 +1562,7 @@ func (x *LinkNode) String() string {
func (*LinkNode) ProtoMessage() {}
func (x *LinkNode) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_markdown_service_proto_msgTypes[19]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[20]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1495,7 +1575,7 @@ func (x *LinkNode) ProtoReflect() protoreflect.Message {
// Deprecated: Use LinkNode.ProtoReflect.Descriptor instead.
func (*LinkNode) Descriptor() ([]byte, []int) {
- return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{19}
+ return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{20}
}
func (x *LinkNode) GetText() string {
@@ -1524,7 +1604,7 @@ type AutoLinkNode struct {
func (x *AutoLinkNode) Reset() {
*x = AutoLinkNode{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_markdown_service_proto_msgTypes[20]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1537,7 +1617,7 @@ func (x *AutoLinkNode) String() string {
func (*AutoLinkNode) ProtoMessage() {}
func (x *AutoLinkNode) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_markdown_service_proto_msgTypes[20]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[21]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1550,7 +1630,7 @@ func (x *AutoLinkNode) ProtoReflect() protoreflect.Message {
// Deprecated: Use AutoLinkNode.ProtoReflect.Descriptor instead.
func (*AutoLinkNode) Descriptor() ([]byte, []int) {
- return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{20}
+ return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{21}
}
func (x *AutoLinkNode) GetUrl() string {
@@ -1578,7 +1658,7 @@ type TagNode struct {
func (x *TagNode) Reset() {
*x = TagNode{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_markdown_service_proto_msgTypes[21]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[22]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1591,7 +1671,7 @@ func (x *TagNode) String() string {
func (*TagNode) ProtoMessage() {}
func (x *TagNode) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_markdown_service_proto_msgTypes[21]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[22]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1604,7 +1684,7 @@ func (x *TagNode) ProtoReflect() protoreflect.Message {
// Deprecated: Use TagNode.ProtoReflect.Descriptor instead.
func (*TagNode) Descriptor() ([]byte, []int) {
- return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{21}
+ return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{22}
}
func (x *TagNode) GetContent() string {
@@ -1625,7 +1705,7 @@ type StrikethroughNode struct {
func (x *StrikethroughNode) Reset() {
*x = StrikethroughNode{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_markdown_service_proto_msgTypes[22]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[23]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1638,7 +1718,7 @@ func (x *StrikethroughNode) String() string {
func (*StrikethroughNode) ProtoMessage() {}
func (x *StrikethroughNode) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_markdown_service_proto_msgTypes[22]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[23]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1651,7 +1731,7 @@ func (x *StrikethroughNode) ProtoReflect() protoreflect.Message {
// Deprecated: Use StrikethroughNode.ProtoReflect.Descriptor instead.
func (*StrikethroughNode) Descriptor() ([]byte, []int) {
- return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{22}
+ return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{23}
}
func (x *StrikethroughNode) GetContent() string {
@@ -1672,7 +1752,7 @@ type EscapingCharacterNode struct {
func (x *EscapingCharacterNode) Reset() {
*x = EscapingCharacterNode{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_markdown_service_proto_msgTypes[23]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[24]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1685,7 +1765,7 @@ func (x *EscapingCharacterNode) String() string {
func (*EscapingCharacterNode) ProtoMessage() {}
func (x *EscapingCharacterNode) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_markdown_service_proto_msgTypes[23]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[24]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1698,7 +1778,7 @@ func (x *EscapingCharacterNode) ProtoReflect() protoreflect.Message {
// Deprecated: Use EscapingCharacterNode.ProtoReflect.Descriptor instead.
func (*EscapingCharacterNode) Descriptor() ([]byte, []int) {
- return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{23}
+ return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{24}
}
func (x *EscapingCharacterNode) GetSymbol() string {
@@ -1719,7 +1799,7 @@ type MathNode struct {
func (x *MathNode) Reset() {
*x = MathNode{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_markdown_service_proto_msgTypes[24]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[25]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1732,7 +1812,7 @@ func (x *MathNode) String() string {
func (*MathNode) ProtoMessage() {}
func (x *MathNode) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_markdown_service_proto_msgTypes[24]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[25]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1745,7 +1825,7 @@ func (x *MathNode) ProtoReflect() protoreflect.Message {
// Deprecated: Use MathNode.ProtoReflect.Descriptor instead.
func (*MathNode) Descriptor() ([]byte, []int) {
- return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{24}
+ return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{25}
}
func (x *MathNode) GetContent() string {
@@ -1766,7 +1846,7 @@ type HighlightNode struct {
func (x *HighlightNode) Reset() {
*x = HighlightNode{}
if protoimpl.UnsafeEnabled {
- mi := &file_api_v2_markdown_service_proto_msgTypes[25]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[26]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1779,7 +1859,7 @@ func (x *HighlightNode) String() string {
func (*HighlightNode) ProtoMessage() {}
func (x *HighlightNode) ProtoReflect() protoreflect.Message {
- mi := &file_api_v2_markdown_service_proto_msgTypes[25]
+ mi := &file_api_v2_markdown_service_proto_msgTypes[26]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1792,7 +1872,7 @@ func (x *HighlightNode) ProtoReflect() protoreflect.Message {
// Deprecated: Use HighlightNode.ProtoReflect.Descriptor instead.
func (*HighlightNode) Descriptor() ([]byte, []int) {
- return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{25}
+ return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{26}
}
func (x *HighlightNode) GetContent() string {
@@ -1802,6 +1882,53 @@ func (x *HighlightNode) GetContent() string {
return ""
}
+type TableNode_Row struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Cells []string `protobuf:"bytes,1,rep,name=cells,proto3" json:"cells,omitempty"`
+}
+
+func (x *TableNode_Row) Reset() {
+ *x = TableNode_Row{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_api_v2_markdown_service_proto_msgTypes[27]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *TableNode_Row) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TableNode_Row) ProtoMessage() {}
+
+func (x *TableNode_Row) ProtoReflect() protoreflect.Message {
+ mi := &file_api_v2_markdown_service_proto_msgTypes[27]
+ 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 TableNode_Row.ProtoReflect.Descriptor instead.
+func (*TableNode_Row) Descriptor() ([]byte, []int) {
+ return file_api_v2_markdown_service_proto_rawDescGZIP(), []int{13, 0}
+}
+
+func (x *TableNode_Row) GetCells() []string {
+ if x != nil {
+ return x.Cells
+ }
+ return nil
+}
+
var File_api_v2_markdown_service_proto protoreflect.FileDescriptor
var file_api_v2_markdown_service_proto_rawDesc = []byte{
@@ -1817,7 +1944,7 @@ var file_api_v2_markdown_service_proto_rawDesc = []byte{
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65,
0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x64,
- 0x65, 0x73, 0x22, 0xdb, 0x0c, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x04, 0x74,
+ 0x65, 0x73, 0x22, 0x95, 0x0d, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x04, 0x74,
0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f,
0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70,
0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x45, 0x0a, 0x0f, 0x6c, 0x69, 0x6e, 0x65, 0x5f,
@@ -1866,193 +1993,207 @@ var file_api_v2_markdown_service_proto_rawDesc = []byte{
0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x42, 0x6c, 0x6f, 0x63, 0x6b,
0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x6d, 0x61, 0x74, 0x68, 0x42, 0x6c, 0x6f, 0x63,
- 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x6e, 0x6f,
- 0x64, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73,
- 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x4e, 0x6f, 0x64, 0x65,
- 0x48, 0x00, 0x52, 0x08, 0x74, 0x65, 0x78, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, 0x09,
- 0x62, 0x6f, 0x6c, 0x64, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x42,
- 0x6f, 0x6c, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x08, 0x62, 0x6f, 0x6c, 0x64, 0x4e,
- 0x6f, 0x64, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x69, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x5f, 0x6e, 0x6f,
- 0x64, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73,
- 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f,
- 0x64, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x69, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65,
- 0x12, 0x48, 0x0a, 0x10, 0x62, 0x6f, 0x6c, 0x64, 0x5f, 0x69, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x5f,
- 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x65, 0x6d,
- 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6f, 0x6c, 0x64, 0x49, 0x74,
- 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x62, 0x6f, 0x6c, 0x64,
- 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x63, 0x6f,
- 0x64, 0x65, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e,
- 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x64,
- 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x4e, 0x6f, 0x64,
- 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18,
- 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70,
- 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00,
- 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x6c,
- 0x69, 0x6e, 0x6b, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16,
- 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69,
- 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x08, 0x6c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f,
- 0x64, 0x65, 0x12, 0x42, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f,
- 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x65, 0x6d,
- 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x4c, 0x69,
- 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x6f, 0x4c, 0x69,
- 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x74, 0x61, 0x67, 0x5f, 0x6e, 0x6f,
- 0x64, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73,
- 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x61, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x48,
- 0x00, 0x52, 0x07, 0x74, 0x61, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x50, 0x0a, 0x12, 0x73, 0x74,
- 0x72, 0x69, 0x6b, 0x65, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x6e, 0x6f, 0x64, 0x65,
- 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61,
- 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x74, 0x68, 0x72, 0x6f,
- 0x75, 0x67, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x11, 0x73, 0x74, 0x72, 0x69, 0x6b,
- 0x65, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x5d, 0x0a, 0x17,
- 0x65, 0x73, 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74,
- 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e,
- 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x73, 0x63,
- 0x61, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x4e, 0x6f,
- 0x64, 0x65, 0x48, 0x00, 0x52, 0x15, 0x65, 0x73, 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x68,
- 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x6d,
- 0x61, 0x74, 0x68, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16,
- 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x61,
- 0x74, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x08, 0x6d, 0x61, 0x74, 0x68, 0x4e, 0x6f,
- 0x64, 0x65, 0x12, 0x44, 0x0a, 0x0e, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f,
- 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x65, 0x6d,
- 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69,
- 0x67, 0x68, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x68, 0x69, 0x67, 0x68, 0x6c,
- 0x69, 0x67, 0x68, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65,
- 0x22, 0x0f, 0x0a, 0x0d, 0x4c, 0x69, 0x6e, 0x65, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x4e, 0x6f, 0x64,
- 0x65, 0x22, 0x3f, 0x0a, 0x0d, 0x50, 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x4e, 0x6f,
- 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x01,
- 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69,
- 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72,
- 0x65, 0x6e, 0x22, 0x45, 0x0a, 0x0d, 0x43, 0x6f, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4e,
- 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12,
- 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x53, 0x0a, 0x0b, 0x48, 0x65, 0x61,
- 0x64, 0x69, 0x6e, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65,
- 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x2e,
- 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
- 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e,
- 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x2c,
- 0x0a, 0x12, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x52, 0x75, 0x6c, 0x65,
- 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x22, 0x40, 0x0a, 0x0e,
- 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2e,
- 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
- 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e,
- 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x71,
- 0x0a, 0x0f, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64,
- 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x64,
- 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e,
- 0x74, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x03, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e,
- 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65,
- 0x6e, 0x22, 0x73, 0x0a, 0x11, 0x55, 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x4c, 0x69,
- 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x16,
- 0x0a, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06,
- 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72,
- 0x65, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73,
- 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68,
- 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x8a, 0x01, 0x0a, 0x0c, 0x54, 0x61, 0x73, 0x6b, 0x4c,
- 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f,
- 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12,
- 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
- 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c,
- 0x65, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c,
- 0x65, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18,
- 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70,
- 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64,
- 0x72, 0x65, 0x6e, 0x22, 0x29, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x68, 0x42, 0x6c, 0x6f, 0x63, 0x6b,
- 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x24,
- 0x0a, 0x08, 0x54, 0x65, 0x78, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f,
- 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e,
- 0x74, 0x65, 0x6e, 0x74, 0x22, 0x52, 0x0a, 0x08, 0x42, 0x6f, 0x6c, 0x64, 0x4e, 0x6f, 0x64, 0x65,
- 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c,
+ 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e,
+ 0x6f, 0x64, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x65, 0x6d, 0x6f,
+ 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f,
+ 0x64, 0x65, 0x48, 0x00, 0x52, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12,
+ 0x35, 0x0a, 0x09, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x0d, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76,
+ 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x08, 0x74, 0x65,
+ 0x78, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x62, 0x6f, 0x6c, 0x64, 0x5f, 0x6e,
+ 0x6f, 0x64, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f,
+ 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6f, 0x6c, 0x64, 0x4e, 0x6f, 0x64,
+ 0x65, 0x48, 0x00, 0x52, 0x08, 0x62, 0x6f, 0x6c, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x3b, 0x0a,
+ 0x0b, 0x69, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x0f, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76,
+ 0x32, 0x2e, 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x0a,
+ 0x69, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x48, 0x0a, 0x10, 0x62, 0x6f,
+ 0x6c, 0x64, 0x5f, 0x69, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x10,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69,
+ 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6f, 0x6c, 0x64, 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f,
+ 0x64, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x62, 0x6f, 0x6c, 0x64, 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63,
+ 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x6f, 0x64,
+ 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e,
+ 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x48,
+ 0x00, 0x52, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x38, 0x0a, 0x0a, 0x69,
+ 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x17, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x49,
+ 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67,
+ 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6e, 0x6f,
+ 0x64, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73,
+ 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65,
+ 0x48, 0x00, 0x52, 0x08, 0x6c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x42, 0x0a, 0x0e,
+ 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x14,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69,
+ 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65,
+ 0x48, 0x00, 0x52, 0x0c, 0x61, 0x75, 0x74, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65,
+ 0x12, 0x32, 0x0a, 0x08, 0x74, 0x61, 0x67, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x15, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76,
+ 0x32, 0x2e, 0x54, 0x61, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x07, 0x74, 0x61, 0x67,
+ 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x50, 0x0a, 0x12, 0x73, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x74, 0x68,
+ 0x72, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x1f, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e,
+ 0x53, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x4e, 0x6f, 0x64,
+ 0x65, 0x48, 0x00, 0x52, 0x11, 0x73, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x74, 0x68, 0x72, 0x6f, 0x75,
+ 0x67, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x5d, 0x0a, 0x17, 0x65, 0x73, 0x63, 0x61, 0x70, 0x69,
+ 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x64,
+ 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e,
+ 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x73, 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x43,
+ 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x15,
+ 0x65, 0x73, 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x35, 0x0a, 0x09, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x6e, 0x6f,
+ 0x64, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73,
+ 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x4e, 0x6f, 0x64, 0x65,
+ 0x48, 0x00, 0x52, 0x08, 0x6d, 0x61, 0x74, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x44, 0x0a, 0x0e,
+ 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x19,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69,
+ 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x4e, 0x6f, 0x64,
+ 0x65, 0x48, 0x00, 0x52, 0x0d, 0x68, 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x4e, 0x6f,
+ 0x64, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x4c, 0x69,
+ 0x6e, 0x65, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x3f, 0x0a, 0x0d, 0x50,
+ 0x61, 0x72, 0x61, 0x67, 0x72, 0x61, 0x70, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x08,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12,
+ 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f,
+ 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x45, 0x0a, 0x0d,
+ 0x43, 0x6f, 0x64, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a,
+ 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x6e, 0x74, 0x22, 0x53, 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x4e, 0x6f,
+ 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x05, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c,
0x64, 0x72, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d,
0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08,
- 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x3e, 0x0a, 0x0a, 0x49, 0x74, 0x61, 0x6c,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x2c, 0x0a, 0x12, 0x48, 0x6f, 0x72, 0x69,
+ 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16,
+ 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
+ 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x22, 0x40, 0x0a, 0x0e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x71,
+ 0x75, 0x6f, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x72, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d,
+ 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08,
+ 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x71, 0x0a, 0x0f, 0x4f, 0x72, 0x64, 0x65,
+ 0x72, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e,
+ 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x75, 0x6d,
+ 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x08, 0x63,
+ 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e,
+ 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64,
+ 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x73, 0x0a, 0x11, 0x55,
+ 0x6e, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65,
+ 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x64, 0x65,
+ 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74,
+ 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76,
+ 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e,
+ 0x22, 0x8a, 0x01, 0x0a, 0x0c, 0x54, 0x61, 0x73, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64,
+ 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x64,
+ 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x6e,
+ 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x03, 0x20,
+ 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2e, 0x0a,
+ 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32,
+ 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e,
+ 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x22, 0x29, 0x0a,
+ 0x0d, 0x4d, 0x61, 0x74, 0x68, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18,
+ 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x8f, 0x01, 0x0a, 0x09, 0x54, 0x61, 0x62,
+ 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
+ 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x1c,
+ 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28,
+ 0x05, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x04,
+ 0x72, 0x6f, 0x77, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x65, 0x6d,
+ 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4e,
+ 0x6f, 0x64, 0x65, 0x2e, 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x1a, 0x1b, 0x0a,
+ 0x03, 0x52, 0x6f, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x18, 0x01, 0x20,
+ 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x65, 0x6c, 0x6c, 0x73, 0x22, 0x24, 0x0a, 0x08, 0x54, 0x65,
+ 0x78, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x22, 0x52, 0x0a, 0x08, 0x42, 0x6f, 0x6c, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06,
+ 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79,
+ 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e,
+ 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61,
+ 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c,
+ 0x64, 0x72, 0x65, 0x6e, 0x22, 0x3e, 0x0a, 0x0a, 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f,
+ 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e,
+ 0x74, 0x65, 0x6e, 0x74, 0x22, 0x42, 0x0a, 0x0e, 0x42, 0x6f, 0x6c, 0x64, 0x49, 0x74, 0x61, 0x6c,
0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x18,
0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x42, 0x0a, 0x0e, 0x42, 0x6f, 0x6c, 0x64,
- 0x49, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79,
- 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62,
- 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x24, 0x0a, 0x08,
- 0x43, 0x6f, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74,
+ 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x24, 0x0a, 0x08, 0x43, 0x6f, 0x64, 0x65,
+ 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x38,
+ 0x0a, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61,
+ 0x6c, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61,
+ 0x6c, 0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x30, 0x0a, 0x08, 0x4c, 0x69, 0x6e, 0x6b,
+ 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x40, 0x0a, 0x0c, 0x41, 0x75,
+ 0x74, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72,
+ 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1e, 0x0a, 0x0b,
+ 0x69, 0x73, 0x5f, 0x72, 0x61, 0x77, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x08, 0x52, 0x09, 0x69, 0x73, 0x52, 0x61, 0x77, 0x54, 0x65, 0x78, 0x74, 0x22, 0x23, 0x0a, 0x07,
+ 0x54, 0x61, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+ 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x22, 0x2d, 0x0a, 0x11, 0x53, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x74, 0x68, 0x72, 0x6f, 0x75,
+ 0x67, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+ 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+ 0x22, 0x2f, 0x0a, 0x15, 0x45, 0x73, 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x72,
+ 0x61, 0x63, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d,
+ 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f,
+ 0x6c, 0x22, 0x24, 0x0a, 0x08, 0x4d, 0x61, 0x74, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a,
+ 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
+ 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x29, 0x0a, 0x0d, 0x48, 0x69, 0x67, 0x68, 0x6c,
+ 0x69, 0x67, 0x68, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74,
0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65,
- 0x6e, 0x74, 0x22, 0x38, 0x0a, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12,
- 0x19, 0x0a, 0x08, 0x61, 0x6c, 0x74, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x07, 0x61, 0x6c, 0x74, 0x54, 0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72,
- 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x30, 0x0a, 0x08,
- 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x10, 0x0a, 0x03,
- 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x40,
- 0x0a, 0x0c, 0x41, 0x75, 0x74, 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x10,
- 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c,
- 0x12, 0x1e, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x72, 0x61, 0x77, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x52, 0x61, 0x77, 0x54, 0x65, 0x78, 0x74,
- 0x22, 0x23, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63,
- 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f,
- 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x2d, 0x0a, 0x11, 0x53, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x74,
- 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f,
- 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e,
- 0x74, 0x65, 0x6e, 0x74, 0x22, 0x2f, 0x0a, 0x15, 0x45, 0x73, 0x63, 0x61, 0x70, 0x69, 0x6e, 0x67,
- 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a,
- 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73,
- 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x22, 0x24, 0x0a, 0x08, 0x4d, 0x61, 0x74, 0x68, 0x4e, 0x6f, 0x64,
- 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x29, 0x0a, 0x0d, 0x48,
- 0x69, 0x67, 0x68, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07,
- 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63,
- 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2a, 0xf2, 0x02, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x54,
- 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50,
- 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x4e,
- 0x45, 0x5f, 0x42, 0x52, 0x45, 0x41, 0x4b, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x41, 0x52,
- 0x41, 0x47, 0x52, 0x41, 0x50, 0x48, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4f, 0x44, 0x45,
- 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x45, 0x41, 0x44,
- 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x4f, 0x4e,
- 0x54, 0x41, 0x4c, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x42, 0x4c,
- 0x4f, 0x43, 0x4b, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x52,
- 0x44, 0x45, 0x52, 0x45, 0x44, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x07, 0x12, 0x12, 0x0a, 0x0e,
- 0x55, 0x4e, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x45, 0x44, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x08,
- 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x41, 0x53, 0x4b, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x09, 0x12,
- 0x0e, 0x0a, 0x0a, 0x4d, 0x41, 0x54, 0x48, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x0a, 0x12,
- 0x08, 0x0a, 0x04, 0x54, 0x45, 0x58, 0x54, 0x10, 0x0b, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4f, 0x4c,
- 0x44, 0x10, 0x0c, 0x12, 0x0a, 0x0a, 0x06, 0x49, 0x54, 0x41, 0x4c, 0x49, 0x43, 0x10, 0x0d, 0x12,
- 0x0f, 0x0a, 0x0b, 0x42, 0x4f, 0x4c, 0x44, 0x5f, 0x49, 0x54, 0x41, 0x4c, 0x49, 0x43, 0x10, 0x0e,
- 0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x0f, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4d,
- 0x41, 0x47, 0x45, 0x10, 0x10, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x11, 0x12,
- 0x0d, 0x0a, 0x09, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x12, 0x12, 0x07,
- 0x0a, 0x03, 0x54, 0x41, 0x47, 0x10, 0x13, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x54, 0x52, 0x49, 0x4b,
- 0x45, 0x54, 0x48, 0x52, 0x4f, 0x55, 0x47, 0x48, 0x10, 0x14, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x53,
- 0x43, 0x41, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52,
- 0x10, 0x15, 0x12, 0x08, 0x0a, 0x04, 0x4d, 0x41, 0x54, 0x48, 0x10, 0x16, 0x12, 0x0d, 0x0a, 0x09,
- 0x48, 0x49, 0x47, 0x48, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x10, 0x17, 0x32, 0x88, 0x01, 0x0a, 0x0f,
- 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
- 0x75, 0x0a, 0x0d, 0x50, 0x61, 0x72, 0x73, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e,
- 0x12, 0x22, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e,
- 0x50, 0x61, 0x72, 0x73, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69,
- 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77,
- 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02,
- 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x6d, 0x61,
- 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x42, 0xac, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x6d,
- 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x42, 0x14, 0x4d, 0x61, 0x72,
- 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74,
- 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
- 0x75, 0x73, 0x65, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x3b,
- 0x61, 0x70, 0x69, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x4d, 0x41, 0x58, 0xaa, 0x02, 0x0c, 0x4d, 0x65,
- 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x0c, 0x4d, 0x65, 0x6d,
- 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x18, 0x4d, 0x65, 0x6d, 0x6f,
- 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61,
- 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x41, 0x70,
- 0x69, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x6e, 0x74, 0x2a, 0xfd, 0x02, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12,
+ 0x14, 0x0a, 0x10, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46,
+ 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x42, 0x52,
+ 0x45, 0x41, 0x4b, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x41, 0x52, 0x41, 0x47, 0x52, 0x41,
+ 0x50, 0x48, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x42, 0x4c, 0x4f,
+ 0x43, 0x4b, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x45, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10,
+ 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x4f, 0x4e, 0x54, 0x41, 0x4c, 0x5f,
+ 0x52, 0x55, 0x4c, 0x45, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x51,
+ 0x55, 0x4f, 0x54, 0x45, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x45,
+ 0x44, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x07, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x4e, 0x4f, 0x52,
+ 0x44, 0x45, 0x52, 0x45, 0x44, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09,
+ 0x54, 0x41, 0x53, 0x4b, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x4d,
+ 0x41, 0x54, 0x48, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x0a, 0x12, 0x09, 0x0a, 0x05, 0x54,
+ 0x41, 0x42, 0x4c, 0x45, 0x10, 0x0b, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x45, 0x58, 0x54, 0x10, 0x0c,
+ 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4f, 0x4c, 0x44, 0x10, 0x0d, 0x12, 0x0a, 0x0a, 0x06, 0x49, 0x54,
+ 0x41, 0x4c, 0x49, 0x43, 0x10, 0x0e, 0x12, 0x0f, 0x0a, 0x0b, 0x42, 0x4f, 0x4c, 0x44, 0x5f, 0x49,
+ 0x54, 0x41, 0x4c, 0x49, 0x43, 0x10, 0x0f, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, 0x44, 0x45, 0x10,
+ 0x10, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x10, 0x11, 0x12, 0x08, 0x0a, 0x04,
+ 0x4c, 0x49, 0x4e, 0x4b, 0x10, 0x12, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x4c,
+ 0x49, 0x4e, 0x4b, 0x10, 0x13, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x41, 0x47, 0x10, 0x14, 0x12, 0x11,
+ 0x0a, 0x0d, 0x53, 0x54, 0x52, 0x49, 0x4b, 0x45, 0x54, 0x48, 0x52, 0x4f, 0x55, 0x47, 0x48, 0x10,
+ 0x15, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x53, 0x43, 0x41, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x48,
+ 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52, 0x10, 0x16, 0x12, 0x08, 0x0a, 0x04, 0x4d, 0x41, 0x54,
+ 0x48, 0x10, 0x17, 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x49, 0x47, 0x48, 0x4c, 0x49, 0x47, 0x48, 0x54,
+ 0x10, 0x18, 0x32, 0x88, 0x01, 0x0a, 0x0f, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x53,
+ 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x75, 0x0a, 0x0d, 0x50, 0x61, 0x72, 0x73, 0x65, 0x4d,
+ 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x22, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e,
+ 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x4d, 0x61, 0x72, 0x6b,
+ 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x65,
+ 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65,
+ 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x61, 0x70,
+ 0x69, 0x2f, 0x76, 0x32, 0x2f, 0x6d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x42, 0xac, 0x01,
+ 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+ 0x76, 0x32, 0x42, 0x14, 0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x53, 0x65, 0x72, 0x76,
+ 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68,
+ 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x75, 0x73, 0x65, 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f,
+ 0x6d, 0x65, 0x6d, 0x6f, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f,
+ 0x61, 0x70, 0x69, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x4d,
+ 0x41, 0x58, 0xaa, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x56,
+ 0x32, 0xca, 0x02, 0x0c, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x32,
+ 0xe2, 0x02, 0x18, 0x4d, 0x65, 0x6d, 0x6f, 0x73, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x32, 0x5c,
+ 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4d, 0x65,
+ 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -2068,7 +2209,7 @@ func file_api_v2_markdown_service_proto_rawDescGZIP() []byte {
}
var file_api_v2_markdown_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_api_v2_markdown_service_proto_msgTypes = make([]protoimpl.MessageInfo, 26)
+var file_api_v2_markdown_service_proto_msgTypes = make([]protoimpl.MessageInfo, 28)
var file_api_v2_markdown_service_proto_goTypes = []interface{}{
(NodeType)(0), // 0: memos.api.v2.NodeType
(*ParseMarkdownRequest)(nil), // 1: memos.api.v2.ParseMarkdownRequest
@@ -2084,19 +2225,21 @@ var file_api_v2_markdown_service_proto_goTypes = []interface{}{
(*UnorderedListNode)(nil), // 11: memos.api.v2.UnorderedListNode
(*TaskListNode)(nil), // 12: memos.api.v2.TaskListNode
(*MathBlockNode)(nil), // 13: memos.api.v2.MathBlockNode
- (*TextNode)(nil), // 14: memos.api.v2.TextNode
- (*BoldNode)(nil), // 15: memos.api.v2.BoldNode
- (*ItalicNode)(nil), // 16: memos.api.v2.ItalicNode
- (*BoldItalicNode)(nil), // 17: memos.api.v2.BoldItalicNode
- (*CodeNode)(nil), // 18: memos.api.v2.CodeNode
- (*ImageNode)(nil), // 19: memos.api.v2.ImageNode
- (*LinkNode)(nil), // 20: memos.api.v2.LinkNode
- (*AutoLinkNode)(nil), // 21: memos.api.v2.AutoLinkNode
- (*TagNode)(nil), // 22: memos.api.v2.TagNode
- (*StrikethroughNode)(nil), // 23: memos.api.v2.StrikethroughNode
- (*EscapingCharacterNode)(nil), // 24: memos.api.v2.EscapingCharacterNode
- (*MathNode)(nil), // 25: memos.api.v2.MathNode
- (*HighlightNode)(nil), // 26: memos.api.v2.HighlightNode
+ (*TableNode)(nil), // 14: memos.api.v2.TableNode
+ (*TextNode)(nil), // 15: memos.api.v2.TextNode
+ (*BoldNode)(nil), // 16: memos.api.v2.BoldNode
+ (*ItalicNode)(nil), // 17: memos.api.v2.ItalicNode
+ (*BoldItalicNode)(nil), // 18: memos.api.v2.BoldItalicNode
+ (*CodeNode)(nil), // 19: memos.api.v2.CodeNode
+ (*ImageNode)(nil), // 20: memos.api.v2.ImageNode
+ (*LinkNode)(nil), // 21: memos.api.v2.LinkNode
+ (*AutoLinkNode)(nil), // 22: memos.api.v2.AutoLinkNode
+ (*TagNode)(nil), // 23: memos.api.v2.TagNode
+ (*StrikethroughNode)(nil), // 24: memos.api.v2.StrikethroughNode
+ (*EscapingCharacterNode)(nil), // 25: memos.api.v2.EscapingCharacterNode
+ (*MathNode)(nil), // 26: memos.api.v2.MathNode
+ (*HighlightNode)(nil), // 27: memos.api.v2.HighlightNode
+ (*TableNode_Row)(nil), // 28: memos.api.v2.TableNode.Row
}
var file_api_v2_markdown_service_proto_depIdxs = []int32{
3, // 0: memos.api.v2.ParseMarkdownResponse.nodes:type_name -> memos.api.v2.Node
@@ -2111,33 +2254,35 @@ var file_api_v2_markdown_service_proto_depIdxs = []int32{
11, // 9: memos.api.v2.Node.unordered_list_node:type_name -> memos.api.v2.UnorderedListNode
12, // 10: memos.api.v2.Node.task_list_node:type_name -> memos.api.v2.TaskListNode
13, // 11: memos.api.v2.Node.math_block_node:type_name -> memos.api.v2.MathBlockNode
- 14, // 12: memos.api.v2.Node.text_node:type_name -> memos.api.v2.TextNode
- 15, // 13: memos.api.v2.Node.bold_node:type_name -> memos.api.v2.BoldNode
- 16, // 14: memos.api.v2.Node.italic_node:type_name -> memos.api.v2.ItalicNode
- 17, // 15: memos.api.v2.Node.bold_italic_node:type_name -> memos.api.v2.BoldItalicNode
- 18, // 16: memos.api.v2.Node.code_node:type_name -> memos.api.v2.CodeNode
- 19, // 17: memos.api.v2.Node.image_node:type_name -> memos.api.v2.ImageNode
- 20, // 18: memos.api.v2.Node.link_node:type_name -> memos.api.v2.LinkNode
- 21, // 19: memos.api.v2.Node.auto_link_node:type_name -> memos.api.v2.AutoLinkNode
- 22, // 20: memos.api.v2.Node.tag_node:type_name -> memos.api.v2.TagNode
- 23, // 21: memos.api.v2.Node.strikethrough_node:type_name -> memos.api.v2.StrikethroughNode
- 24, // 22: memos.api.v2.Node.escaping_character_node:type_name -> memos.api.v2.EscapingCharacterNode
- 25, // 23: memos.api.v2.Node.math_node:type_name -> memos.api.v2.MathNode
- 26, // 24: memos.api.v2.Node.highlight_node:type_name -> memos.api.v2.HighlightNode
- 3, // 25: memos.api.v2.ParagraphNode.children:type_name -> memos.api.v2.Node
- 3, // 26: memos.api.v2.HeadingNode.children:type_name -> memos.api.v2.Node
- 3, // 27: memos.api.v2.BlockquoteNode.children:type_name -> memos.api.v2.Node
- 3, // 28: memos.api.v2.OrderedListNode.children:type_name -> memos.api.v2.Node
- 3, // 29: memos.api.v2.UnorderedListNode.children:type_name -> memos.api.v2.Node
- 3, // 30: memos.api.v2.TaskListNode.children:type_name -> memos.api.v2.Node
- 3, // 31: memos.api.v2.BoldNode.children:type_name -> memos.api.v2.Node
- 1, // 32: memos.api.v2.MarkdownService.ParseMarkdown:input_type -> memos.api.v2.ParseMarkdownRequest
- 2, // 33: memos.api.v2.MarkdownService.ParseMarkdown:output_type -> memos.api.v2.ParseMarkdownResponse
- 33, // [33:34] is the sub-list for method output_type
- 32, // [32:33] is the sub-list for method input_type
- 32, // [32:32] is the sub-list for extension type_name
- 32, // [32:32] is the sub-list for extension extendee
- 0, // [0:32] is the sub-list for field type_name
+ 14, // 12: memos.api.v2.Node.table_node:type_name -> memos.api.v2.TableNode
+ 15, // 13: memos.api.v2.Node.text_node:type_name -> memos.api.v2.TextNode
+ 16, // 14: memos.api.v2.Node.bold_node:type_name -> memos.api.v2.BoldNode
+ 17, // 15: memos.api.v2.Node.italic_node:type_name -> memos.api.v2.ItalicNode
+ 18, // 16: memos.api.v2.Node.bold_italic_node:type_name -> memos.api.v2.BoldItalicNode
+ 19, // 17: memos.api.v2.Node.code_node:type_name -> memos.api.v2.CodeNode
+ 20, // 18: memos.api.v2.Node.image_node:type_name -> memos.api.v2.ImageNode
+ 21, // 19: memos.api.v2.Node.link_node:type_name -> memos.api.v2.LinkNode
+ 22, // 20: memos.api.v2.Node.auto_link_node:type_name -> memos.api.v2.AutoLinkNode
+ 23, // 21: memos.api.v2.Node.tag_node:type_name -> memos.api.v2.TagNode
+ 24, // 22: memos.api.v2.Node.strikethrough_node:type_name -> memos.api.v2.StrikethroughNode
+ 25, // 23: memos.api.v2.Node.escaping_character_node:type_name -> memos.api.v2.EscapingCharacterNode
+ 26, // 24: memos.api.v2.Node.math_node:type_name -> memos.api.v2.MathNode
+ 27, // 25: memos.api.v2.Node.highlight_node:type_name -> memos.api.v2.HighlightNode
+ 3, // 26: memos.api.v2.ParagraphNode.children:type_name -> memos.api.v2.Node
+ 3, // 27: memos.api.v2.HeadingNode.children:type_name -> memos.api.v2.Node
+ 3, // 28: memos.api.v2.BlockquoteNode.children:type_name -> memos.api.v2.Node
+ 3, // 29: memos.api.v2.OrderedListNode.children:type_name -> memos.api.v2.Node
+ 3, // 30: memos.api.v2.UnorderedListNode.children:type_name -> memos.api.v2.Node
+ 3, // 31: memos.api.v2.TaskListNode.children:type_name -> memos.api.v2.Node
+ 28, // 32: memos.api.v2.TableNode.rows:type_name -> memos.api.v2.TableNode.Row
+ 3, // 33: memos.api.v2.BoldNode.children:type_name -> memos.api.v2.Node
+ 1, // 34: memos.api.v2.MarkdownService.ParseMarkdown:input_type -> memos.api.v2.ParseMarkdownRequest
+ 2, // 35: memos.api.v2.MarkdownService.ParseMarkdown:output_type -> memos.api.v2.ParseMarkdownResponse
+ 35, // [35:36] is the sub-list for method output_type
+ 34, // [34:35] is the sub-list for method input_type
+ 34, // [34:34] is the sub-list for extension type_name
+ 34, // [34:34] is the sub-list for extension extendee
+ 0, // [0:34] is the sub-list for field type_name
}
func init() { file_api_v2_markdown_service_proto_init() }
@@ -2303,7 +2448,7 @@ func file_api_v2_markdown_service_proto_init() {
}
}
file_api_v2_markdown_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*TextNode); i {
+ switch v := v.(*TableNode); i {
case 0:
return &v.state
case 1:
@@ -2315,7 +2460,7 @@ func file_api_v2_markdown_service_proto_init() {
}
}
file_api_v2_markdown_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*BoldNode); i {
+ switch v := v.(*TextNode); i {
case 0:
return &v.state
case 1:
@@ -2327,7 +2472,7 @@ func file_api_v2_markdown_service_proto_init() {
}
}
file_api_v2_markdown_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ItalicNode); i {
+ switch v := v.(*BoldNode); i {
case 0:
return &v.state
case 1:
@@ -2339,7 +2484,7 @@ func file_api_v2_markdown_service_proto_init() {
}
}
file_api_v2_markdown_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*BoldItalicNode); i {
+ switch v := v.(*ItalicNode); i {
case 0:
return &v.state
case 1:
@@ -2351,7 +2496,7 @@ func file_api_v2_markdown_service_proto_init() {
}
}
file_api_v2_markdown_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*CodeNode); i {
+ switch v := v.(*BoldItalicNode); i {
case 0:
return &v.state
case 1:
@@ -2363,7 +2508,7 @@ func file_api_v2_markdown_service_proto_init() {
}
}
file_api_v2_markdown_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*ImageNode); i {
+ switch v := v.(*CodeNode); i {
case 0:
return &v.state
case 1:
@@ -2375,7 +2520,7 @@ func file_api_v2_markdown_service_proto_init() {
}
}
file_api_v2_markdown_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*LinkNode); i {
+ switch v := v.(*ImageNode); i {
case 0:
return &v.state
case 1:
@@ -2387,7 +2532,7 @@ func file_api_v2_markdown_service_proto_init() {
}
}
file_api_v2_markdown_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AutoLinkNode); i {
+ switch v := v.(*LinkNode); i {
case 0:
return &v.state
case 1:
@@ -2399,7 +2544,7 @@ func file_api_v2_markdown_service_proto_init() {
}
}
file_api_v2_markdown_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*TagNode); i {
+ switch v := v.(*AutoLinkNode); i {
case 0:
return &v.state
case 1:
@@ -2411,7 +2556,7 @@ func file_api_v2_markdown_service_proto_init() {
}
}
file_api_v2_markdown_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*StrikethroughNode); i {
+ switch v := v.(*TagNode); i {
case 0:
return &v.state
case 1:
@@ -2423,7 +2568,7 @@ func file_api_v2_markdown_service_proto_init() {
}
}
file_api_v2_markdown_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*EscapingCharacterNode); i {
+ switch v := v.(*StrikethroughNode); i {
case 0:
return &v.state
case 1:
@@ -2435,7 +2580,7 @@ func file_api_v2_markdown_service_proto_init() {
}
}
file_api_v2_markdown_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*MathNode); i {
+ switch v := v.(*EscapingCharacterNode); i {
case 0:
return &v.state
case 1:
@@ -2447,6 +2592,18 @@ func file_api_v2_markdown_service_proto_init() {
}
}
file_api_v2_markdown_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MathNode); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_api_v2_markdown_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*HighlightNode); i {
case 0:
return &v.state
@@ -2458,6 +2615,18 @@ func file_api_v2_markdown_service_proto_init() {
return nil
}
}
+ file_api_v2_markdown_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*TableNode_Row); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
}
file_api_v2_markdown_service_proto_msgTypes[2].OneofWrappers = []interface{}{
(*Node_LineBreakNode)(nil),
@@ -2470,6 +2639,7 @@ func file_api_v2_markdown_service_proto_init() {
(*Node_UnorderedListNode)(nil),
(*Node_TaskListNode)(nil),
(*Node_MathBlockNode)(nil),
+ (*Node_TableNode)(nil),
(*Node_TextNode)(nil),
(*Node_BoldNode)(nil),
(*Node_ItalicNode)(nil),
@@ -2490,7 +2660,7 @@ func file_api_v2_markdown_service_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_api_v2_markdown_service_proto_rawDesc,
NumEnums: 1,
- NumMessages: 26,
+ NumMessages: 28,
NumExtensions: 0,
NumServices: 1,
},
diff --git a/web/src/components/MemoContent/Renderer.tsx b/web/src/components/MemoContent/Renderer.tsx
index 64efe05d..b3ba1f47 100644
--- a/web/src/components/MemoContent/Renderer.tsx
+++ b/web/src/components/MemoContent/Renderer.tsx
@@ -18,6 +18,7 @@ import {
OrderedListNode,
ParagraphNode,
StrikethroughNode,
+ TableNode,
TagNode,
TaskListNode,
TextNode,
@@ -40,6 +41,7 @@ import Math from "./Math";
import OrderedList from "./OrderedList";
import Paragraph from "./Paragraph";
import Strikethrough from "./Strikethrough";
+import Table from "./Table";
import Tag from "./Tag";
import TaskList from "./TaskList";
import Text from "./Text";
@@ -72,6 +74,8 @@ const Renderer: React.FC = ({ index, node }: Props) => {
return ;
case NodeType.MATH_BLOCK:
return ;
+ case NodeType.TABLE:
+ return ;
case NodeType.TEXT:
return ;
case NodeType.BOLD:
diff --git a/web/src/components/MemoContent/Table.tsx b/web/src/components/MemoContent/Table.tsx
new file mode 100644
index 00000000..c5dc18f0
--- /dev/null
+++ b/web/src/components/MemoContent/Table.tsx
@@ -0,0 +1,35 @@
+import { TableNode_Row } from "@/types/proto/api/v2/markdown_service";
+
+interface Props {
+ header: string[];
+ rows: TableNode_Row[];
+}
+
+const Table = ({ header, rows }: Props) => {
+ return (
+
+
+
+ {header.map((h, i) => (
+
+ {h}
+ |
+ ))}
+
+
+
+ {rows.map((row, i) => (
+
+ {row.cells.map((r, j) => (
+
+ {r}
+ |
+ ))}
+
+ ))}
+
+
+ );
+};
+
+export default Table;