diff --git a/genl_p4wnp1/Client.go b/genl_p4wnp1/Client.go deleted file mode 100644 index f3b9ff5..0000000 --- a/genl_p4wnp1/Client.go +++ /dev/null @@ -1,133 +0,0 @@ -package genl_p4wnp1 - -import ( - "fmt" - genl "github.com/mame82/P4wnP1_go/mgenetlink" - nl "github.com/mame82/P4wnP1_go/mnetlink" - "errors" -) - -const ( - fam_name = "p4wnp1" - dwc2_group_name = "p4wnp1_dwc2_mc" -) - -var ( - EP4wnP1FamilyMissing = errors.New("Couldn't find generic netlink family for P4wnP1") - EDwc2GrpMissing = errors.New("Couldn't find generic netlink mcast group for P4wnP1 dwc2") - EDwc2GrpJoin = errors.New("Couldn't join generic netlink mcast group for P4wnP1 dwc2") - EWrongFamily = errors.New("Message not from generic netlink family P4wnP1") -) - -type Client struct { - genl *genl.Client - fam *genl.Family - running bool -} - -func NewClient() (c *Client, err error) { - res := &Client{} - res.genl,err = genl.NewGeNl() - if err != nil { return c,err } - return res,nil -} - -func (c *Client) Open() (err error) { - err = c.genl.Open() - if err != nil { return } - - // try to find GENL family for P4wnP1 - c.fam,err = c.genl.GetFamily(fam_name) - if err != nil { - c.genl.Close() - return EP4wnP1FamilyMissing - } - - // try to join group for dwc2 - grpId,err := c.fam.GetGroupByName(dwc2_group_name) - if err != nil { - c.genl.Close() - return EDwc2GrpMissing - } - err = c.genl.AddGroupMembership(grpId) - if err != nil { - c.genl.Close() - return EDwc2GrpMissing - } - - go c.rcv_loop() - return -} - -func (c *Client) rcv_loop() { - c.running = true - // ToDo, make loop stoppable by non-blocking/interruptable socket read a.k.a select with timeout - for c.running { - fmt.Println("\nWaiting for messages from P4wnP1 kernel mods...\n") - msgs,errm := c.genl.Receive() - if errm == nil { - for _,msg := range msgs { - if cmd,errp := c.parseMsg(msg); errp == nil { - switch cmd.Cmd { - case dwc2_cmd_connection_state: - fmt.Println("COMMAND_CONNECTION_STATE") - params,perr := cmd.AttributesFromData() - if perr != nil { - fmt.Println("Couldn't parse params for COMMAND_CONNECTION_STATE") - continue - } - // find - for _,param := range params { - if param.Type == dwc2_attr_connection_state { - fmt.Println("Connection State: ", param.GetDataUint8()) - } - } - default: - fmt.Printf("Unknown command:\n%+v\n", cmd) - } - } else { - fmt.Printf("Message ignored:\n%+v\n", msg) - continue - } - - } - } else { - fmt.Println("Receive error: ", errm) - } - } - - fmt.Println("GenNl rcv loop ended") -} - -const ( - dwc2_cmd_connection_state = uint8(0) - - dwc2_attr_connection_dummy = uint16(0) - dwc2_attr_connection_state = uint16(1) - - -) - -func (c *Client) parseMsg(msg nl.Message) (cmd genl.Message, err error) { - if msg.Type != c.fam.ID { - // Multicast message from different familiy, ignore - err = EWrongFamily - return - } - - err = cmd.UnmarshalBinary(msg.GetData()) - if err != nil { return } - return -} - -func (c *Client) Close() (err error) { - c.running = false - - // leave dwc2 group - if grpId,err := c.fam.GetGroupByName(dwc2_group_name); err == nil { - c.genl.DropGroupMembership(grpId) - } - // close soket - return c.genl.Close() - -} diff --git a/proto/gopherjs/grpc.pb.gopherjs.go b/proto/gopherjs/grpc.pb.gopherjs.go index ae51d63..5bf53c1 100644 --- a/proto/gopherjs/grpc.pb.gopherjs.go +++ b/proto/gopherjs/grpc.pb.gopherjs.go @@ -9,7 +9,6 @@ It has these top-level messages: TriggerActionSet - TriggerActionSetRequestStorage TriggerAction TriggerServiceStarted TriggerUSBGadgetConnected @@ -347,6 +346,7 @@ func (x EthernetInterfaceSettings_Mode) String() string { // Triggers, Actions and resulting TriggerActions type TriggerActionSet struct { TriggerActions []*TriggerAction + Name string } // GetTriggerActions gets the TriggerActions of the TriggerActionSet. @@ -357,6 +357,14 @@ func (m *TriggerActionSet) GetTriggerActions() (x []*TriggerAction) { return m.TriggerActions } +// GetName gets the Name of the TriggerActionSet. +func (m *TriggerActionSet) GetName() (x string) { + if m == nil { + return x + } + return m.Name +} + // MarshalToWriter marshals TriggerActionSet to the provided writer. func (m *TriggerActionSet) MarshalToWriter(writer jspb.Writer) { if m == nil { @@ -369,6 +377,10 @@ func (m *TriggerActionSet) MarshalToWriter(writer jspb.Writer) { }) } + if len(m.Name) > 0 { + writer.WriteString(2, m.Name) + } + return } @@ -391,6 +403,8 @@ func (m *TriggerActionSet) UnmarshalFromReader(reader jspb.Reader) *TriggerActio reader.ReadMessage(func() { m.TriggerActions = append(m.TriggerActions, new(TriggerAction).UnmarshalFromReader(reader)) }) + case 2: + m.Name = reader.ReadString() default: reader.SkipField() } @@ -412,88 +426,6 @@ func (m *TriggerActionSet) Unmarshal(rawBytes []byte) (*TriggerActionSet, error) return m, nil } -type TriggerActionSetRequestStorage struct { - TemplateName string - Set *TriggerActionSet -} - -// GetTemplateName gets the TemplateName of the TriggerActionSetRequestStorage. -func (m *TriggerActionSetRequestStorage) GetTemplateName() (x string) { - if m == nil { - return x - } - return m.TemplateName -} - -// GetSet gets the Set of the TriggerActionSetRequestStorage. -func (m *TriggerActionSetRequestStorage) GetSet() (x *TriggerActionSet) { - if m == nil { - return x - } - return m.Set -} - -// MarshalToWriter marshals TriggerActionSetRequestStorage to the provided writer. -func (m *TriggerActionSetRequestStorage) MarshalToWriter(writer jspb.Writer) { - if m == nil { - return - } - - if len(m.TemplateName) > 0 { - writer.WriteString(1, m.TemplateName) - } - - if m.Set != nil { - writer.WriteMessage(2, func() { - m.Set.MarshalToWriter(writer) - }) - } - - return -} - -// Marshal marshals TriggerActionSetRequestStorage to a slice of bytes. -func (m *TriggerActionSetRequestStorage) Marshal() []byte { - writer := jspb.NewWriter() - m.MarshalToWriter(writer) - return writer.GetResult() -} - -// UnmarshalFromReader unmarshals a TriggerActionSetRequestStorage from the provided reader. -func (m *TriggerActionSetRequestStorage) UnmarshalFromReader(reader jspb.Reader) *TriggerActionSetRequestStorage { - for reader.Next() { - if m == nil { - m = &TriggerActionSetRequestStorage{} - } - - switch reader.GetFieldNumber() { - case 1: - m.TemplateName = reader.ReadString() - case 2: - reader.ReadMessage(func() { - m.Set = m.Set.UnmarshalFromReader(reader) - }) - default: - reader.SkipField() - } - } - - return m -} - -// Unmarshal unmarshals a TriggerActionSetRequestStorage from a slice of bytes. -func (m *TriggerActionSetRequestStorage) Unmarshal(rawBytes []byte) (*TriggerActionSetRequestStorage, error) { - reader := jspb.NewReader(rawBytes) - - m = m.UnmarshalFromReader(reader) - - if err := reader.Err(); err != nil { - return nil, err - } - - return m, nil -} - type TriggerAction struct { Id uint32 OneShot bool @@ -5210,7 +5142,7 @@ type P4WNP1Client interface { ListStoredWifiSettings(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*StringMessageArray, error) // TriggerActions ListStoredTriggerActionSets(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*StringMessageArray, error) - StoreTriggerActionSets(ctx context.Context, in *TriggerActionSetRequestStorage, opts ...grpcweb.CallOption) (*Empty, error) + StoreTriggerActionSets(ctx context.Context, in *TriggerActionSet, opts ...grpcweb.CallOption) (*Empty, error) GetTriggerActionsState(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*TriggerActionSet, error) DeployTriggerActionSetReplace(ctx context.Context, in *TriggerActionSet, opts ...grpcweb.CallOption) (*TriggerActionSet, error) DeployTriggerActionSetAdd(ctx context.Context, in *TriggerActionSet, opts ...grpcweb.CallOption) (*TriggerActionSet, error) @@ -5538,7 +5470,7 @@ func (c *p4WNP1Client) ListStoredTriggerActionSets(ctx context.Context, in *Empt return new(StringMessageArray).Unmarshal(resp) } -func (c *p4WNP1Client) StoreTriggerActionSets(ctx context.Context, in *TriggerActionSetRequestStorage, opts ...grpcweb.CallOption) (*Empty, error) { +func (c *p4WNP1Client) StoreTriggerActionSets(ctx context.Context, in *TriggerActionSet, opts ...grpcweb.CallOption) (*Empty, error) { resp, err := c.client.RPCCall(ctx, "StoreTriggerActionSets", in.Marshal(), opts...) if err != nil { return nil, err diff --git a/proto/grpc.pb.go b/proto/grpc.pb.go index 64135eb..39ff8af 100644 --- a/proto/grpc.pb.go +++ b/proto/grpc.pb.go @@ -9,7 +9,6 @@ It is generated from these files: It has these top-level messages: TriggerActionSet - TriggerActionSetRequestStorage TriggerAction TriggerServiceStarted TriggerUSBGadgetConnected @@ -333,7 +332,7 @@ func (x ActionDeploySettingsTemplate_TemplateType) String() string { return proto.EnumName(ActionDeploySettingsTemplate_TemplateType_name, int32(x)) } func (ActionDeploySettingsTemplate_TemplateType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{15, 0} + return fileDescriptor0, []int{14, 0} } type EthernetInterfaceSettings_Mode int32 @@ -362,12 +361,13 @@ func (x EthernetInterfaceSettings_Mode) String() string { return proto.EnumName(EthernetInterfaceSettings_Mode_name, int32(x)) } func (EthernetInterfaceSettings_Mode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{45, 0} + return fileDescriptor0, []int{44, 0} } // Triggers, Actions and resulting TriggerActions type TriggerActionSet struct { TriggerActions []*TriggerAction `protobuf:"bytes,1,rep,name=TriggerActions" json:"TriggerActions,omitempty"` + Name string `protobuf:"bytes,2,opt,name=Name" json:"Name,omitempty"` } func (m *TriggerActionSet) Reset() { *m = TriggerActionSet{} } @@ -382,30 +382,13 @@ func (m *TriggerActionSet) GetTriggerActions() []*TriggerAction { return nil } -type TriggerActionSetRequestStorage struct { - TemplateName string `protobuf:"bytes,1,opt,name=TemplateName" json:"TemplateName,omitempty"` - Set *TriggerActionSet `protobuf:"bytes,2,opt,name=set" json:"set,omitempty"` -} - -func (m *TriggerActionSetRequestStorage) Reset() { *m = TriggerActionSetRequestStorage{} } -func (m *TriggerActionSetRequestStorage) String() string { return proto.CompactTextString(m) } -func (*TriggerActionSetRequestStorage) ProtoMessage() {} -func (*TriggerActionSetRequestStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } - -func (m *TriggerActionSetRequestStorage) GetTemplateName() string { +func (m *TriggerActionSet) GetName() string { if m != nil { - return m.TemplateName + return m.Name } return "" } -func (m *TriggerActionSetRequestStorage) GetSet() *TriggerActionSet { - if m != nil { - return m.Set - } - return nil -} - type TriggerAction struct { Id uint32 `protobuf:"varint,1,opt,name=id" json:"id,omitempty"` OneShot bool `protobuf:"varint,2,opt,name=oneShot" json:"oneShot,omitempty"` @@ -436,7 +419,7 @@ type TriggerAction struct { func (m *TriggerAction) Reset() { *m = TriggerAction{} } func (m *TriggerAction) String() string { return proto.CompactTextString(m) } func (*TriggerAction) ProtoMessage() {} -func (*TriggerAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } +func (*TriggerAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } type isTriggerAction_Trigger interface { isTriggerAction_Trigger() @@ -1022,7 +1005,7 @@ type TriggerServiceStarted struct { func (m *TriggerServiceStarted) Reset() { *m = TriggerServiceStarted{} } func (m *TriggerServiceStarted) String() string { return proto.CompactTextString(m) } func (*TriggerServiceStarted) ProtoMessage() {} -func (*TriggerServiceStarted) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } +func (*TriggerServiceStarted) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } type TriggerUSBGadgetConnected struct { } @@ -1030,7 +1013,7 @@ type TriggerUSBGadgetConnected struct { func (m *TriggerUSBGadgetConnected) Reset() { *m = TriggerUSBGadgetConnected{} } func (m *TriggerUSBGadgetConnected) String() string { return proto.CompactTextString(m) } func (*TriggerUSBGadgetConnected) ProtoMessage() {} -func (*TriggerUSBGadgetConnected) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } +func (*TriggerUSBGadgetConnected) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } type TriggerUSBGadgetDisconnected struct { } @@ -1038,7 +1021,7 @@ type TriggerUSBGadgetDisconnected struct { func (m *TriggerUSBGadgetDisconnected) Reset() { *m = TriggerUSBGadgetDisconnected{} } func (m *TriggerUSBGadgetDisconnected) String() string { return proto.CompactTextString(m) } func (*TriggerUSBGadgetDisconnected) ProtoMessage() {} -func (*TriggerUSBGadgetDisconnected) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } +func (*TriggerUSBGadgetDisconnected) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } type TriggerWifiAPStarted struct { } @@ -1046,7 +1029,7 @@ type TriggerWifiAPStarted struct { func (m *TriggerWifiAPStarted) Reset() { *m = TriggerWifiAPStarted{} } func (m *TriggerWifiAPStarted) String() string { return proto.CompactTextString(m) } func (*TriggerWifiAPStarted) ProtoMessage() {} -func (*TriggerWifiAPStarted) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } +func (*TriggerWifiAPStarted) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } type TriggerWifiConnectedAsSta struct { } @@ -1054,7 +1037,7 @@ type TriggerWifiConnectedAsSta struct { func (m *TriggerWifiConnectedAsSta) Reset() { *m = TriggerWifiConnectedAsSta{} } func (m *TriggerWifiConnectedAsSta) String() string { return proto.CompactTextString(m) } func (*TriggerWifiConnectedAsSta) ProtoMessage() {} -func (*TriggerWifiConnectedAsSta) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } +func (*TriggerWifiConnectedAsSta) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } type TriggerSSHLogin struct { LoginUser string `protobuf:"bytes,1,opt,name=loginUser" json:"loginUser,omitempty"` @@ -1063,7 +1046,7 @@ type TriggerSSHLogin struct { func (m *TriggerSSHLogin) Reset() { *m = TriggerSSHLogin{} } func (m *TriggerSSHLogin) String() string { return proto.CompactTextString(m) } func (*TriggerSSHLogin) ProtoMessage() {} -func (*TriggerSSHLogin) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } +func (*TriggerSSHLogin) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } func (m *TriggerSSHLogin) GetLoginUser() string { if m != nil { @@ -1078,7 +1061,7 @@ type TriggerDHCPLeaseGranted struct { func (m *TriggerDHCPLeaseGranted) Reset() { *m = TriggerDHCPLeaseGranted{} } func (m *TriggerDHCPLeaseGranted) String() string { return proto.CompactTextString(m) } func (*TriggerDHCPLeaseGranted) ProtoMessage() {} -func (*TriggerDHCPLeaseGranted) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } +func (*TriggerDHCPLeaseGranted) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } type TriggerGroupReceive struct { GroupName string `protobuf:"bytes,1,opt,name=groupName" json:"groupName,omitempty"` @@ -1088,7 +1071,7 @@ type TriggerGroupReceive struct { func (m *TriggerGroupReceive) Reset() { *m = TriggerGroupReceive{} } func (m *TriggerGroupReceive) String() string { return proto.CompactTextString(m) } func (*TriggerGroupReceive) ProtoMessage() {} -func (*TriggerGroupReceive) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } +func (*TriggerGroupReceive) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } func (m *TriggerGroupReceive) GetGroupName() string { if m != nil { @@ -1113,7 +1096,7 @@ type TriggerGroupReceiveSequence struct { func (m *TriggerGroupReceiveSequence) Reset() { *m = TriggerGroupReceiveSequence{} } func (m *TriggerGroupReceiveSequence) String() string { return proto.CompactTextString(m) } func (*TriggerGroupReceiveSequence) ProtoMessage() {} -func (*TriggerGroupReceiveSequence) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } +func (*TriggerGroupReceiveSequence) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } func (m *TriggerGroupReceiveSequence) GetGroupName() string { if m != nil { @@ -1145,7 +1128,7 @@ type TriggerGPIOIn struct { func (m *TriggerGPIOIn) Reset() { *m = TriggerGPIOIn{} } func (m *TriggerGPIOIn) String() string { return proto.CompactTextString(m) } func (*TriggerGPIOIn) ProtoMessage() {} -func (*TriggerGPIOIn) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } +func (*TriggerGPIOIn) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } func (m *TriggerGPIOIn) GetGpioNum() GPIONum { if m != nil { @@ -1175,7 +1158,7 @@ type ActionStartBashScript struct { func (m *ActionStartBashScript) Reset() { *m = ActionStartBashScript{} } func (m *ActionStartBashScript) String() string { return proto.CompactTextString(m) } func (*ActionStartBashScript) ProtoMessage() {} -func (*ActionStartBashScript) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } +func (*ActionStartBashScript) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } func (m *ActionStartBashScript) GetScriptName() string { if m != nil { @@ -1191,7 +1174,7 @@ type ActionStartHIDScript struct { func (m *ActionStartHIDScript) Reset() { *m = ActionStartHIDScript{} } func (m *ActionStartHIDScript) String() string { return proto.CompactTextString(m) } func (*ActionStartHIDScript) ProtoMessage() {} -func (*ActionStartHIDScript) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (*ActionStartHIDScript) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } func (m *ActionStartHIDScript) GetScriptName() string { if m != nil { @@ -1208,7 +1191,7 @@ type ActionDeploySettingsTemplate struct { func (m *ActionDeploySettingsTemplate) Reset() { *m = ActionDeploySettingsTemplate{} } func (m *ActionDeploySettingsTemplate) String() string { return proto.CompactTextString(m) } func (*ActionDeploySettingsTemplate) ProtoMessage() {} -func (*ActionDeploySettingsTemplate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } +func (*ActionDeploySettingsTemplate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } func (m *ActionDeploySettingsTemplate) GetTemplateName() string { if m != nil { @@ -1230,7 +1213,7 @@ type ActionLog struct { func (m *ActionLog) Reset() { *m = ActionLog{} } func (m *ActionLog) String() string { return proto.CompactTextString(m) } func (*ActionLog) ProtoMessage() {} -func (*ActionLog) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } +func (*ActionLog) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } type ActionGPIOOut struct { GpioNum GPIONum `protobuf:"varint,1,opt,name=gpioNum,enum=P4wnP1_grpc.GPIONum" json:"gpioNum,omitempty"` @@ -1240,7 +1223,7 @@ type ActionGPIOOut struct { func (m *ActionGPIOOut) Reset() { *m = ActionGPIOOut{} } func (m *ActionGPIOOut) String() string { return proto.CompactTextString(m) } func (*ActionGPIOOut) ProtoMessage() {} -func (*ActionGPIOOut) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } +func (*ActionGPIOOut) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } func (m *ActionGPIOOut) GetGpioNum() GPIONum { if m != nil { @@ -1264,7 +1247,7 @@ type ActionGroupSend struct { func (m *ActionGroupSend) Reset() { *m = ActionGroupSend{} } func (m *ActionGroupSend) String() string { return proto.CompactTextString(m) } func (*ActionGroupSend) ProtoMessage() {} -func (*ActionGroupSend) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } +func (*ActionGroupSend) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } func (m *ActionGroupSend) GetGroupName() string { if m != nil { @@ -1288,7 +1271,7 @@ type WifiRequestSettingsStorage struct { func (m *WifiRequestSettingsStorage) Reset() { *m = WifiRequestSettingsStorage{} } func (m *WifiRequestSettingsStorage) String() string { return proto.CompactTextString(m) } func (*WifiRequestSettingsStorage) ProtoMessage() {} -func (*WifiRequestSettingsStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } +func (*WifiRequestSettingsStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } func (m *WifiRequestSettingsStorage) GetTemplateName() string { if m != nil { @@ -1321,7 +1304,7 @@ type WiFiSettings struct { func (m *WiFiSettings) Reset() { *m = WiFiSettings{} } func (m *WiFiSettings) String() string { return proto.CompactTextString(m) } func (*WiFiSettings) ProtoMessage() {} -func (*WiFiSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } +func (*WiFiSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } func (m *WiFiSettings) GetName() string { if m != nil { @@ -1403,7 +1386,7 @@ type WiFiState struct { func (m *WiFiState) Reset() { *m = WiFiState{} } func (m *WiFiState) String() string { return proto.CompactTextString(m) } func (*WiFiState) ProtoMessage() {} -func (*WiFiState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } +func (*WiFiState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } func (m *WiFiState) GetMode() WiFiStateMode { if m != nil { @@ -1441,7 +1424,7 @@ type WiFiBSSCfg struct { func (m *WiFiBSSCfg) Reset() { *m = WiFiBSSCfg{} } func (m *WiFiBSSCfg) String() string { return proto.CompactTextString(m) } func (*WiFiBSSCfg) ProtoMessage() {} -func (*WiFiBSSCfg) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } +func (*WiFiBSSCfg) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } func (m *WiFiBSSCfg) GetSSID() string { if m != nil { @@ -1465,7 +1448,7 @@ type StringMessage struct { func (m *StringMessage) Reset() { *m = StringMessage{} } func (m *StringMessage) String() string { return proto.CompactTextString(m) } func (*StringMessage) ProtoMessage() {} -func (*StringMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } +func (*StringMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } func (m *StringMessage) GetMsg() string { if m != nil { @@ -1481,7 +1464,7 @@ type StringMessageArray struct { func (m *StringMessageArray) Reset() { *m = StringMessageArray{} } func (m *StringMessageArray) String() string { return proto.CompactTextString(m) } func (*StringMessageArray) ProtoMessage() {} -func (*StringMessageArray) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } +func (*StringMessageArray) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } func (m *StringMessageArray) GetMsgArray() []string { if m != nil { @@ -1498,7 +1481,7 @@ type EventRequest struct { func (m *EventRequest) Reset() { *m = EventRequest{} } func (m *EventRequest) String() string { return proto.CompactTextString(m) } func (*EventRequest) ProtoMessage() {} -func (*EventRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } +func (*EventRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } func (m *EventRequest) GetListenType() int64 { if m != nil { @@ -1518,7 +1501,7 @@ type EventValue struct { func (m *EventValue) Reset() { *m = EventValue{} } func (m *EventValue) String() string { return proto.CompactTextString(m) } func (*EventValue) ProtoMessage() {} -func (*EventValue) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } +func (*EventValue) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } type isEventValue_Val interface { isEventValue_Val() @@ -1657,7 +1640,7 @@ type Event struct { func (m *Event) Reset() { *m = Event{} } func (m *Event) String() string { return proto.CompactTextString(m) } func (*Event) ProtoMessage() {} -func (*Event) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } +func (*Event) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } func (m *Event) GetType() int64 { if m != nil { @@ -1683,7 +1666,7 @@ type TempDirOrFileRequest struct { func (m *TempDirOrFileRequest) Reset() { *m = TempDirOrFileRequest{} } func (m *TempDirOrFileRequest) String() string { return proto.CompactTextString(m) } func (*TempDirOrFileRequest) ProtoMessage() {} -func (*TempDirOrFileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } +func (*TempDirOrFileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } func (m *TempDirOrFileRequest) GetDir() string { if m != nil { @@ -1713,7 +1696,7 @@ type TempDirOrFileResponse struct { func (m *TempDirOrFileResponse) Reset() { *m = TempDirOrFileResponse{} } func (m *TempDirOrFileResponse) String() string { return proto.CompactTextString(m) } func (*TempDirOrFileResponse) ProtoMessage() {} -func (*TempDirOrFileResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } +func (*TempDirOrFileResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } func (m *TempDirOrFileResponse) GetResultPath() string { if m != nil { @@ -1731,7 +1714,7 @@ type ReadFileRequest struct { func (m *ReadFileRequest) Reset() { *m = ReadFileRequest{} } func (m *ReadFileRequest) String() string { return proto.CompactTextString(m) } func (*ReadFileRequest) ProtoMessage() {} -func (*ReadFileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } +func (*ReadFileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } func (m *ReadFileRequest) GetPath() string { if m != nil { @@ -1761,7 +1744,7 @@ type ReadFileResponse struct { func (m *ReadFileResponse) Reset() { *m = ReadFileResponse{} } func (m *ReadFileResponse) String() string { return proto.CompactTextString(m) } func (*ReadFileResponse) ProtoMessage() {} -func (*ReadFileResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } +func (*ReadFileResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } func (m *ReadFileResponse) GetReadCount() int64 { if m != nil { @@ -1780,7 +1763,7 @@ type WriteFileRequest struct { func (m *WriteFileRequest) Reset() { *m = WriteFileRequest{} } func (m *WriteFileRequest) String() string { return proto.CompactTextString(m) } func (*WriteFileRequest) ProtoMessage() {} -func (*WriteFileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } +func (*WriteFileRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} } func (m *WriteFileRequest) GetPath() string { if m != nil { @@ -1817,7 +1800,7 @@ type FileInfoRequest struct { func (m *FileInfoRequest) Reset() { *m = FileInfoRequest{} } func (m *FileInfoRequest) String() string { return proto.CompactTextString(m) } func (*FileInfoRequest) ProtoMessage() {} -func (*FileInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } +func (*FileInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} } func (m *FileInfoRequest) GetPath() string { if m != nil { @@ -1837,7 +1820,7 @@ type FileInfoResponse struct { func (m *FileInfoResponse) Reset() { *m = FileInfoResponse{} } func (m *FileInfoResponse) String() string { return proto.CompactTextString(m) } func (*FileInfoResponse) ProtoMessage() {} -func (*FileInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } +func (*FileInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{33} } func (m *FileInfoResponse) GetName() string { if m != nil { @@ -1883,7 +1866,7 @@ type HIDScriptRequest struct { func (m *HIDScriptRequest) Reset() { *m = HIDScriptRequest{} } func (m *HIDScriptRequest) String() string { return proto.CompactTextString(m) } func (*HIDScriptRequest) ProtoMessage() {} -func (*HIDScriptRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} } +func (*HIDScriptRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{34} } func (m *HIDScriptRequest) GetScriptPath() string { if m != nil { @@ -1906,7 +1889,7 @@ type HIDScriptJob struct { func (m *HIDScriptJob) Reset() { *m = HIDScriptJob{} } func (m *HIDScriptJob) String() string { return proto.CompactTextString(m) } func (*HIDScriptJob) ProtoMessage() {} -func (*HIDScriptJob) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } +func (*HIDScriptJob) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} } func (m *HIDScriptJob) GetId() uint32 { if m != nil { @@ -1922,7 +1905,7 @@ type HIDScriptJobList struct { func (m *HIDScriptJobList) Reset() { *m = HIDScriptJobList{} } func (m *HIDScriptJobList) String() string { return proto.CompactTextString(m) } func (*HIDScriptJobList) ProtoMessage() {} -func (*HIDScriptJobList) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} } +func (*HIDScriptJobList) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} } func (m *HIDScriptJobList) GetIds() []uint32 { if m != nil { @@ -1940,7 +1923,7 @@ type HIDRunningJobStateResult struct { func (m *HIDRunningJobStateResult) Reset() { *m = HIDRunningJobStateResult{} } func (m *HIDRunningJobStateResult) String() string { return proto.CompactTextString(m) } func (*HIDRunningJobStateResult) ProtoMessage() {} -func (*HIDRunningJobStateResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} } +func (*HIDRunningJobStateResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{37} } func (m *HIDRunningJobStateResult) GetId() int64 { if m != nil { @@ -1972,7 +1955,7 @@ type HIDScriptResult struct { func (m *HIDScriptResult) Reset() { *m = HIDScriptResult{} } func (m *HIDScriptResult) String() string { return proto.CompactTextString(m) } func (*HIDScriptResult) ProtoMessage() {} -func (*HIDScriptResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} } +func (*HIDScriptResult) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{38} } func (m *HIDScriptResult) GetJob() *HIDScriptJob { if m != nil { @@ -2003,7 +1986,7 @@ type LEDSettings struct { func (m *LEDSettings) Reset() { *m = LEDSettings{} } func (m *LEDSettings) String() string { return proto.CompactTextString(m) } func (*LEDSettings) ProtoMessage() {} -func (*LEDSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} } +func (*LEDSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{39} } func (m *LEDSettings) GetBlinkCount() uint32 { if m != nil { @@ -2035,7 +2018,7 @@ type GadgetSettings struct { func (m *GadgetSettings) Reset() { *m = GadgetSettings{} } func (m *GadgetSettings) String() string { return proto.CompactTextString(m) } func (*GadgetSettings) ProtoMessage() {} -func (*GadgetSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} } +func (*GadgetSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} } func (m *GadgetSettings) GetEnabled() bool { if m != nil { @@ -2157,7 +2140,7 @@ type GadgetSettingsEthernet struct { func (m *GadgetSettingsEthernet) Reset() { *m = GadgetSettingsEthernet{} } func (m *GadgetSettingsEthernet) String() string { return proto.CompactTextString(m) } func (*GadgetSettingsEthernet) ProtoMessage() {} -func (*GadgetSettingsEthernet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} } +func (*GadgetSettingsEthernet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} } func (m *GadgetSettingsEthernet) GetHostAddr() string { if m != nil { @@ -2181,7 +2164,7 @@ type GadgetSettingsUMS struct { func (m *GadgetSettingsUMS) Reset() { *m = GadgetSettingsUMS{} } func (m *GadgetSettingsUMS) String() string { return proto.CompactTextString(m) } func (*GadgetSettingsUMS) ProtoMessage() {} -func (*GadgetSettingsUMS) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} } +func (*GadgetSettingsUMS) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} } func (m *GadgetSettingsUMS) GetCdrom() bool { if m != nil { @@ -2206,7 +2189,7 @@ func (m *DeployedEthernetInterfaceSettings) Reset() { *m = DeployedEther func (m *DeployedEthernetInterfaceSettings) String() string { return proto.CompactTextString(m) } func (*DeployedEthernetInterfaceSettings) ProtoMessage() {} func (*DeployedEthernetInterfaceSettings) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{44} + return fileDescriptor0, []int{43} } func (m *DeployedEthernetInterfaceSettings) GetList() []*EthernetInterfaceSettings { @@ -2229,7 +2212,7 @@ type EthernetInterfaceSettings struct { func (m *EthernetInterfaceSettings) Reset() { *m = EthernetInterfaceSettings{} } func (m *EthernetInterfaceSettings) String() string { return proto.CompactTextString(m) } func (*EthernetInterfaceSettings) ProtoMessage() {} -func (*EthernetInterfaceSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} } +func (*EthernetInterfaceSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} } func (m *EthernetInterfaceSettings) GetName() string { if m != nil { @@ -2297,7 +2280,7 @@ type DHCPServerSettings struct { func (m *DHCPServerSettings) Reset() { *m = DHCPServerSettings{} } func (m *DHCPServerSettings) String() string { return proto.CompactTextString(m) } func (*DHCPServerSettings) ProtoMessage() {} -func (*DHCPServerSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} } +func (*DHCPServerSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{45} } func (m *DHCPServerSettings) GetListenPort() uint32 { if m != nil { @@ -2372,7 +2355,7 @@ type DHCPServerRange struct { func (m *DHCPServerRange) Reset() { *m = DHCPServerRange{} } func (m *DHCPServerRange) String() string { return proto.CompactTextString(m) } func (*DHCPServerRange) ProtoMessage() {} -func (*DHCPServerRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} } +func (*DHCPServerRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{46} } func (m *DHCPServerRange) GetRangeLower() string { if m != nil { @@ -2404,7 +2387,7 @@ type DHCPServerStaticHost struct { func (m *DHCPServerStaticHost) Reset() { *m = DHCPServerStaticHost{} } func (m *DHCPServerStaticHost) String() string { return proto.CompactTextString(m) } func (*DHCPServerStaticHost) ProtoMessage() {} -func (*DHCPServerStaticHost) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} } +func (*DHCPServerStaticHost) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{47} } func (m *DHCPServerStaticHost) GetMac() string { if m != nil { @@ -2426,11 +2409,10 @@ type Empty struct { func (m *Empty) Reset() { *m = Empty{} } func (m *Empty) String() string { return proto.CompactTextString(m) } func (*Empty) ProtoMessage() {} -func (*Empty) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{49} } +func (*Empty) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{48} } func init() { proto.RegisterType((*TriggerActionSet)(nil), "P4wnP1_grpc.TriggerActionSet") - proto.RegisterType((*TriggerActionSetRequestStorage)(nil), "P4wnP1_grpc.TriggerActionSetRequestStorage") proto.RegisterType((*TriggerAction)(nil), "P4wnP1_grpc.TriggerAction") proto.RegisterType((*TriggerServiceStarted)(nil), "P4wnP1_grpc.TriggerServiceStarted") proto.RegisterType((*TriggerUSBGadgetConnected)(nil), "P4wnP1_grpc.TriggerUSBGadgetConnected") @@ -2542,7 +2524,7 @@ type P4WNP1Client interface { ListStoredWifiSettings(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*StringMessageArray, error) // TriggerActions ListStoredTriggerActionSets(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*StringMessageArray, error) - StoreTriggerActionSets(ctx context.Context, in *TriggerActionSetRequestStorage, opts ...grpc.CallOption) (*Empty, error) + StoreTriggerActionSets(ctx context.Context, in *TriggerActionSet, opts ...grpc.CallOption) (*Empty, error) GetTriggerActionsState(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*TriggerActionSet, error) DeployTriggerActionSetReplace(ctx context.Context, in *TriggerActionSet, opts ...grpc.CallOption) (*TriggerActionSet, error) DeployTriggerActionSetAdd(ctx context.Context, in *TriggerActionSet, opts ...grpc.CallOption) (*TriggerActionSet, error) @@ -2867,7 +2849,7 @@ func (c *p4WNP1Client) ListStoredTriggerActionSets(ctx context.Context, in *Empt return out, nil } -func (c *p4WNP1Client) StoreTriggerActionSets(ctx context.Context, in *TriggerActionSetRequestStorage, opts ...grpc.CallOption) (*Empty, error) { +func (c *p4WNP1Client) StoreTriggerActionSets(ctx context.Context, in *TriggerActionSet, opts ...grpc.CallOption) (*Empty, error) { out := new(Empty) err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/StoreTriggerActionSets", in, out, c.cc, opts...) if err != nil { @@ -2947,7 +2929,7 @@ type P4WNP1Server interface { ListStoredWifiSettings(context.Context, *Empty) (*StringMessageArray, error) // TriggerActions ListStoredTriggerActionSets(context.Context, *Empty) (*StringMessageArray, error) - StoreTriggerActionSets(context.Context, *TriggerActionSetRequestStorage) (*Empty, error) + StoreTriggerActionSets(context.Context, *TriggerActionSet) (*Empty, error) GetTriggerActionsState(context.Context, *Empty) (*TriggerActionSet, error) DeployTriggerActionSetReplace(context.Context, *TriggerActionSet) (*TriggerActionSet, error) DeployTriggerActionSetAdd(context.Context, *TriggerActionSet) (*TriggerActionSet, error) @@ -3537,7 +3519,7 @@ func _P4WNP1_ListStoredTriggerActionSets_Handler(srv interface{}, ctx context.Co } func _P4WNP1_StoreTriggerActionSets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(TriggerActionSetRequestStorage) + in := new(TriggerActionSet) if err := dec(in); err != nil { return nil, err } @@ -3549,7 +3531,7 @@ func _P4WNP1_StoreTriggerActionSets_Handler(srv interface{}, ctx context.Context FullMethod: "/P4wnP1_grpc.P4WNP1/StoreTriggerActionSets", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(P4WNP1Server).StoreTriggerActionSets(ctx, req.(*TriggerActionSetRequestStorage)) + return srv.(P4WNP1Server).StoreTriggerActionSets(ctx, req.(*TriggerActionSet)) } return interceptor(ctx, in, info, handler) } @@ -3766,223 +3748,222 @@ var _P4WNP1_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("grpc.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 3476 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x5a, 0xdd, 0x73, 0xdb, 0x48, - 0x72, 0xe7, 0x87, 0x24, 0x92, 0x4d, 0x91, 0x84, 0xc6, 0xb6, 0x4c, 0xcb, 0x1f, 0xeb, 0x45, 0xf6, - 0xf6, 0x1c, 0x6d, 0x4e, 0xf6, 0x6a, 0xb5, 0xde, 0xbd, 0xad, 0xbb, 0xda, 0xe3, 0x37, 0x69, 0xf3, - 0xab, 0x06, 0xa4, 0x95, 0x64, 0xab, 0xc2, 0x83, 0x80, 0x11, 0x85, 0x98, 0x04, 0x18, 0x60, 0x20, - 0xaf, 0xf2, 0x70, 0xa9, 0xca, 0x3f, 0x91, 0xff, 0x22, 0x8f, 0xc9, 0x5f, 0x74, 0xef, 0x79, 0xc9, - 0x73, 0x52, 0x33, 0x03, 0x80, 0x00, 0x04, 0x52, 0xf6, 0xee, 0x5b, 0x4f, 0x4f, 0xf7, 0x6f, 0x1a, - 0x3d, 0x3d, 0x3d, 0x3d, 0x4d, 0x02, 0xcc, 0xed, 0x95, 0x76, 0xb2, 0xb2, 0x2d, 0x6a, 0xa1, 0xe2, - 0xf8, 0xec, 0x83, 0x39, 0xfe, 0x7a, 0xc6, 0x58, 0xf2, 0x3b, 0x90, 0x26, 0xb6, 0x31, 0x9f, 0x13, - 0xbb, 0xa6, 0x51, 0xc3, 0x32, 0x15, 0x42, 0x51, 0x1d, 0xca, 0x11, 0x9e, 0x53, 0x4d, 0x3f, 0xcf, - 0xbe, 0x28, 0x9e, 0x1e, 0x9d, 0x84, 0x34, 0x4f, 0x22, 0x22, 0x38, 0xa6, 0x21, 0xbb, 0xf0, 0x2c, - 0x8e, 0x8b, 0xc9, 0xbf, 0xb8, 0xc4, 0xa1, 0x0a, 0xb5, 0x6c, 0x75, 0x4e, 0x90, 0x0c, 0xfb, 0x13, - 0xb2, 0x5c, 0x2d, 0x54, 0x4a, 0x86, 0xea, 0x92, 0x54, 0xd3, 0xcf, 0xd3, 0x2f, 0x0a, 0x38, 0xc2, - 0x43, 0x2f, 0x21, 0xeb, 0x10, 0x5a, 0xcd, 0x3c, 0x4f, 0xbf, 0x28, 0x9e, 0x3e, 0xdd, 0xbc, 0x3c, - 0x43, 0x67, 0x92, 0xf2, 0x7f, 0x01, 0x94, 0x22, 0x33, 0xa8, 0x0c, 0x19, 0x43, 0xe7, 0xe0, 0x25, - 0x9c, 0x31, 0x74, 0x54, 0x85, 0x9c, 0x65, 0x12, 0xe5, 0xca, 0x12, 0xb0, 0x79, 0xec, 0x0f, 0xd1, - 0x11, 0xe4, 0x0d, 0x87, 0x69, 0x5d, 0x93, 0x6a, 0x96, 0x4f, 0x05, 0x63, 0xf4, 0x04, 0x0a, 0xc6, - 0x72, 0xe9, 0x52, 0xf5, 0x62, 0x41, 0xaa, 0x3b, 0x7c, 0x72, 0xcd, 0x40, 0x7d, 0x28, 0x3b, 0xc4, - 0xbe, 0x36, 0x34, 0xa2, 0x50, 0xd5, 0xa6, 0x44, 0xaf, 0xee, 0x72, 0x8b, 0xe5, 0x24, 0x8b, 0x95, - 0x88, 0x64, 0x37, 0x85, 0x63, 0xba, 0xe8, 0xef, 0x01, 0xb9, 0xce, 0x45, 0x47, 0xd5, 0xe7, 0x84, - 0x36, 0x2c, 0xd3, 0x24, 0x1a, 0x43, 0xdc, 0xe3, 0x88, 0x5f, 0x26, 0x21, 0x4e, 0x95, 0x7a, 0x4c, - 0xba, 0x9b, 0xc2, 0x09, 0x18, 0x48, 0x85, 0x07, 0x01, 0xb7, 0x69, 0x38, 0x5a, 0x00, 0x9e, 0xe3, - 0xe0, 0x7f, 0xbb, 0x15, 0x3c, 0xac, 0xd0, 0x4d, 0xe1, 0x64, 0x24, 0xd4, 0x83, 0xd2, 0x07, 0xe3, - 0xd2, 0xa8, 0x8d, 0x7d, 0x4f, 0xe4, 0x39, 0xf4, 0xe7, 0x49, 0xd0, 0xe7, 0x61, 0xc1, 0x6e, 0x0a, - 0x47, 0x35, 0x99, 0x1f, 0x18, 0x23, 0x30, 0xbf, 0xe6, 0x28, 0x54, 0xad, 0x16, 0x36, 0xfb, 0xe1, - 0xfc, 0x96, 0x34, 0xf3, 0xc3, 0x6d, 0x0c, 0xf4, 0x03, 0xe4, 0x1d, 0xe7, 0xaa, 0x6f, 0xcd, 0x0d, - 0xb3, 0x0a, 0x1c, 0xef, 0x49, 0xe2, 0x4e, 0x29, 0x5d, 0x2e, 0xd3, 0x4d, 0xe1, 0x40, 0x1e, 0x61, - 0x90, 0xf4, 0x2b, 0x6d, 0xd5, 0x27, 0xaa, 0x43, 0x3a, 0xb6, 0x6a, 0xb2, 0x6f, 0x2c, 0x72, 0x8c, - 0x2f, 0x92, 0x30, 0x9a, 0xdd, 0xc6, 0x38, 0x2c, 0xdb, 0x4d, 0xe1, 0x5b, 0xfa, 0xa8, 0x0d, 0xfb, - 0x73, 0xdb, 0x72, 0x57, 0x98, 0x68, 0x84, 0x45, 0xdf, 0x3e, 0xc7, 0x7b, 0x9e, 0x84, 0xd7, 0x09, - 0xc9, 0x75, 0x53, 0x38, 0xa2, 0x87, 0xfe, 0x09, 0xee, 0x87, 0xc7, 0x0a, 0x3b, 0x70, 0xa6, 0x46, - 0xaa, 0x25, 0x8e, 0xf7, 0xe2, 0x2e, 0x3c, 0x5f, 0xbe, 0x9b, 0xc2, 0x89, 0x38, 0xe8, 0x0c, 0xf6, - 0xe6, 0x2b, 0xc3, 0xea, 0x99, 0xd5, 0x32, 0x47, 0x4c, 0x4c, 0x08, 0x9d, 0x71, 0x6f, 0xd4, 0x63, - 0x3e, 0xf3, 0x64, 0x51, 0x13, 0xe0, 0x42, 0x75, 0xae, 0x14, 0xcd, 0x36, 0x56, 0xb4, 0x5a, 0x49, - 0x38, 0x19, 0xde, 0x21, 0x66, 0xfb, 0x5e, 0x0f, 0x24, 0xbb, 0x69, 0x1c, 0xd2, 0x43, 0x35, 0x28, - 0x5c, 0x19, 0xba, 0x07, 0x22, 0x25, 0x04, 0x55, 0x08, 0xa4, 0xdb, 0x6b, 0x06, 0x18, 0x6b, 0x2d, - 0xa4, 0xc1, 0xa1, 0x4e, 0x56, 0x0b, 0xeb, 0x46, 0x21, 0x94, 0x1a, 0xe6, 0xdc, 0xf1, 0x73, 0x4d, - 0xf5, 0x20, 0x21, 0xfe, 0x05, 0x5e, 0x33, 0x51, 0xa1, 0x9b, 0xc6, 0x1b, 0xa0, 0xd0, 0x31, 0x64, - 0x17, 0xd6, 0xbc, 0x8a, 0x38, 0xe2, 0x61, 0x02, 0x62, 0xdf, 0x9a, 0x77, 0xd3, 0x98, 0x09, 0xa1, - 0xd7, 0x90, 0x63, 0x3e, 0x1a, 0xb9, 0xb4, 0x7a, 0x2f, 0xc1, 0xa1, 0x42, 0x9e, 0xf9, 0x73, 0xe4, - 0xb2, 0x4f, 0xf1, 0x85, 0xd1, 0x1f, 0xa0, 0xc0, 0xf7, 0x47, 0x21, 0xa6, 0x5e, 0xbd, 0x9f, 0x10, - 0xc0, 0x9e, 0xa6, 0x2f, 0xc3, 0xdc, 0x10, 0x28, 0xd4, 0x0b, 0x90, 0xf3, 0xb6, 0xaa, 0x9e, 0x87, - 0x3d, 0x21, 0x2a, 0x3f, 0x84, 0x07, 0x89, 0xf9, 0x49, 0x7e, 0x0c, 0x8f, 0x36, 0xa6, 0x19, 0xf9, - 0x19, 0x3c, 0xd9, 0x96, 0x26, 0xe4, 0x43, 0xb8, 0x9f, 0x74, 0xd6, 0x43, 0xa0, 0xb7, 0xcf, 0xac, - 0xfc, 0x12, 0x2a, 0xb1, 0x03, 0xc8, 0xd2, 0xef, 0x82, 0x11, 0x53, 0x87, 0xd8, 0xde, 0x45, 0xb1, - 0x66, 0xc8, 0x8f, 0xe0, 0xe1, 0x86, 0xd3, 0x26, 0xf7, 0xe0, 0x5e, 0x42, 0xa0, 0x33, 0x3c, 0xee, - 0x8f, 0xd0, 0xc5, 0xb3, 0x66, 0xa0, 0xfb, 0xb0, 0x7b, 0xad, 0x2e, 0x5c, 0xc2, 0x2f, 0x88, 0x5d, - 0x2c, 0x06, 0xf2, 0xbf, 0xc1, 0xe3, 0x2d, 0x67, 0xe6, 0x0e, 0xc8, 0x63, 0x90, 0x7a, 0x73, 0xd3, - 0xb2, 0xc9, 0xc8, 0xa5, 0xa3, 0xcb, 0x91, 0xad, 0x13, 0xdb, 0xbb, 0x7e, 0x6e, 0xf1, 0xd1, 0x21, - 0xec, 0xf1, 0x15, 0x9d, 0x6a, 0xf6, 0x79, 0xf6, 0xc5, 0x2e, 0xf6, 0x46, 0xf2, 0x7f, 0xa7, 0x83, - 0xbb, 0x4d, 0x9c, 0x31, 0x74, 0x22, 0xe2, 0x67, 0xe8, 0x2e, 0xf9, 0x8a, 0xe5, 0xd3, 0xfb, 0x91, - 0x28, 0x60, 0x52, 0x43, 0x77, 0x89, 0x7d, 0x21, 0xf4, 0x47, 0x80, 0x95, 0xbb, 0x58, 0x4c, 0x57, - 0x4d, 0xeb, 0x83, 0xc9, 0xd7, 0x2f, 0xc7, 0x6e, 0x55, 0x01, 0x3c, 0x0e, 0x84, 0x70, 0x48, 0x01, - 0x7d, 0x07, 0x20, 0x8e, 0x74, 0x4b, 0x9f, 0x8b, 0x2b, 0xb2, 0x7c, 0xfa, 0x30, 0x41, 0x9d, 0x4d, - 0xe3, 0x90, 0xa8, 0xfc, 0x1d, 0x3c, 0x48, 0x3c, 0xe2, 0xe8, 0x19, 0x80, 0xc3, 0xa9, 0x90, 0xd7, - 0x42, 0x1c, 0xf9, 0x35, 0xdc, 0x4f, 0x3a, 0xd6, 0x77, 0xea, 0xfd, 0x6f, 0x1a, 0x9e, 0x6c, 0x3b, - 0xbf, 0xac, 0xf8, 0xa0, 0x09, 0xc5, 0x47, 0x98, 0x87, 0xde, 0xc0, 0x0e, 0xbd, 0x59, 0x11, 0xcf, - 0x4f, 0xaf, 0x3f, 0x3a, 0x39, 0x9c, 0xf8, 0xc4, 0xe4, 0x66, 0x45, 0x30, 0xc7, 0x90, 0xc9, 0xba, - 0xd8, 0x61, 0x5c, 0x74, 0x00, 0xa5, 0xf6, 0xb4, 0xdf, 0x9f, 0x29, 0xad, 0xc9, 0xa4, 0x37, 0xec, - 0x28, 0x52, 0x0a, 0x15, 0x21, 0x37, 0x6c, 0x4d, 0xce, 0x47, 0xf8, 0xad, 0x94, 0x46, 0x79, 0xd8, - 0x39, 0xef, 0xb5, 0x7b, 0x52, 0x06, 0xe5, 0x20, 0x3b, 0x55, 0xea, 0x52, 0x16, 0x95, 0xa0, 0x50, - 0xef, 0x4f, 0x5b, 0x93, 0xd1, 0x68, 0xd2, 0x95, 0x76, 0xd0, 0x3d, 0xa8, 0x4c, 0x70, 0xaf, 0xd3, - 0x69, 0xe1, 0x59, 0xad, 0x31, 0xe9, 0x8d, 0x86, 0x8a, 0xb4, 0x2b, 0x17, 0xa1, 0x10, 0x24, 0x19, - 0x79, 0x05, 0xa5, 0x48, 0x06, 0xf9, 0xe4, 0x70, 0x79, 0x19, 0x3e, 0x07, 0xe5, 0xd3, 0x47, 0xb7, - 0xa4, 0x47, 0x2e, 0x7d, 0xc7, 0x04, 0xfc, 0x23, 0xd2, 0x82, 0x4a, 0x2c, 0xf3, 0xfc, 0xa2, 0x93, - 0xf6, 0x01, 0x8e, 0x58, 0x5a, 0xf0, 0xeb, 0x45, 0xcf, 0xbd, 0x9f, 0x52, 0x37, 0x7e, 0x0b, 0x79, - 0xc7, 0x53, 0xf3, 0x8a, 0xc7, 0xa8, 0xf1, 0xe7, 0x46, 0xdb, 0xf0, 0x71, 0x71, 0x20, 0x2a, 0xff, - 0x47, 0x16, 0xf6, 0xc3, 0x53, 0x08, 0xc1, 0x8e, 0xb9, 0x5e, 0x83, 0xd3, 0xac, 0x4c, 0xd4, 0x0d, - 0x87, 0xd5, 0x7d, 0xba, 0x77, 0x84, 0x83, 0x31, 0x8b, 0x4b, 0x9b, 0xcc, 0xdd, 0x85, 0x4a, 0x2d, - 0xfb, 0x86, 0x9f, 0x90, 0x02, 0x0e, 0x71, 0xd0, 0x8f, 0xb0, 0xff, 0xc1, 0xb2, 0xdf, 0x1b, 0xe6, - 0x7c, 0xb6, 0xb4, 0x74, 0x51, 0x49, 0x96, 0x63, 0xb9, 0x9b, 0x19, 0x70, 0x2e, 0x84, 0x06, 0x96, - 0x4e, 0x70, 0xf1, 0xc3, 0x7a, 0x80, 0x5e, 0x43, 0x41, 0x75, 0xe9, 0x95, 0xd0, 0xde, 0x4d, 0xd8, - 0x16, 0xa6, 0x5d, 0x73, 0xe9, 0x15, 0x57, 0xcd, 0xab, 0x1e, 0xc5, 0xaa, 0x5e, 0xed, 0x4a, 0x35, - 0x4d, 0xb2, 0xe0, 0x85, 0x64, 0x09, 0xfb, 0x43, 0x74, 0x02, 0x7b, 0xea, 0x6a, 0x56, 0x57, 0x14, - 0xaf, 0x08, 0x7c, 0x78, 0x0b, 0xae, 0xae, 0x28, 0x8d, 0xcb, 0x39, 0xde, 0x55, 0x57, 0x75, 0x45, - 0x41, 0x3f, 0x42, 0x45, 0x5b, 0x18, 0xc4, 0xa4, 0x4c, 0x67, 0xb6, 0x30, 0x1c, 0x5a, 0xcd, 0xf3, - 0xd7, 0xc1, 0x46, 0xc5, 0x92, 0x90, 0xaf, 0x2b, 0x4a, 0xdf, 0x70, 0x28, 0x7a, 0xcc, 0x2f, 0x72, - 0x32, 0x73, 0x1c, 0x43, 0xe7, 0xd5, 0x5c, 0x1e, 0xe7, 0x19, 0x43, 0x71, 0x0c, 0x9d, 0xe5, 0x3e, - 0x93, 0xfc, 0xbc, 0xb4, 0x4c, 0x5e, 0xb3, 0xe4, 0xb1, 0x37, 0x92, 0xff, 0x33, 0x0d, 0x05, 0xbe, - 0x33, 0x94, 0x9d, 0xde, 0x13, 0xd8, 0xe1, 0x0e, 0x10, 0x51, 0x7c, 0x74, 0x7b, 0x6b, 0x99, 0x14, - 0xf7, 0x00, 0x97, 0x0b, 0x7f, 0x7d, 0x26, 0xfa, 0xf5, 0x08, 0x76, 0xb8, 0x1d, 0x62, 0xab, 0x38, - 0x8d, 0x1a, 0x50, 0xd1, 0x5c, 0xdb, 0x26, 0x66, 0x10, 0x7a, 0x7c, 0x9f, 0xb6, 0xc6, 0x50, 0x5c, - 0x43, 0x3e, 0x05, 0x58, 0xbb, 0x80, 0x2d, 0xa3, 0x28, 0xbd, 0xa6, 0x1f, 0x47, 0x8c, 0x46, 0x12, - 0x64, 0xc7, 0xca, 0x5b, 0x6e, 0x50, 0x01, 0x33, 0x52, 0xfe, 0x1c, 0x4a, 0x0a, 0xb5, 0xd9, 0x56, - 0x13, 0xc7, 0x61, 0xa1, 0x2e, 0x41, 0x76, 0xe9, 0xcc, 0x3d, 0x2d, 0x46, 0xca, 0xaf, 0x00, 0x45, - 0x44, 0x6a, 0xb6, 0xad, 0xde, 0xb0, 0x90, 0x5c, 0x3a, 0x73, 0x4e, 0xf3, 0xa7, 0x5a, 0x01, 0x07, - 0x63, 0xf9, 0x04, 0xf6, 0x5b, 0xd7, 0xc4, 0xf4, 0x5f, 0x5f, 0x2c, 0x44, 0xd9, 0xa6, 0x11, 0x93, - 0xe5, 0x21, 0x0e, 0x9d, 0xc5, 0x21, 0x8e, 0xac, 0x02, 0x70, 0x79, 0x7e, 0xb0, 0xd1, 0x11, 0xe4, - 0xa8, 0xc3, 0x17, 0x14, 0x56, 0x74, 0x53, 0xd8, 0x67, 0xa0, 0x43, 0xd8, 0xa5, 0x17, 0x96, 0x25, - 0x7c, 0x9a, 0xef, 0xa6, 0xb0, 0x18, 0xa2, 0x2a, 0xec, 0x51, 0xc3, 0xa4, 0xaf, 0xcf, 0xb8, 0x57, - 0xb3, 0xac, 0x12, 0x14, 0xe3, 0xfa, 0x2e, 0x64, 0xaf, 0xd5, 0x85, 0xdc, 0x87, 0x5d, 0xbe, 0x04, - 0x73, 0x0b, 0x5d, 0x5b, 0xc1, 0x69, 0xf4, 0x32, 0xb8, 0xfd, 0x32, 0x09, 0x61, 0xb5, 0x36, 0x2d, - 0xb8, 0x16, 0xff, 0x0c, 0xf7, 0xd9, 0xd9, 0x6f, 0x1a, 0xf6, 0xc8, 0x6e, 0x1b, 0x0b, 0xe2, 0x7f, - 0xa8, 0x04, 0x59, 0xdd, 0xf0, 0xab, 0x05, 0x46, 0xb2, 0xe0, 0x5a, 0xd9, 0xe4, 0xd2, 0xf8, 0xd9, - 0x73, 0xba, 0x37, 0x62, 0x2e, 0xb1, 0xcc, 0xc5, 0x4d, 0xdb, 0x5a, 0xb0, 0x6b, 0x59, 0x3c, 0xfd, - 0x42, 0x1c, 0x76, 0x7d, 0xc5, 0x56, 0x70, 0x56, 0x96, 0xe9, 0x10, 0x71, 0xdc, 0x1d, 0x77, 0x41, - 0xc7, 0x2a, 0xbd, 0xf2, 0xaf, 0xa1, 0x35, 0x47, 0x1e, 0x41, 0x05, 0x13, 0x55, 0x0f, 0x5b, 0x85, - 0x60, 0x67, 0xb5, 0x16, 0xe6, 0x34, 0xcb, 0x82, 0x0e, 0xbb, 0xdf, 0xb8, 0x59, 0x59, 0x2c, 0x06, - 0x4c, 0x52, 0x57, 0xa9, 0xca, 0xed, 0xd9, 0xc7, 0x9c, 0x96, 0x5f, 0x81, 0xb4, 0x06, 0xf4, 0x8c, - 0x78, 0x02, 0x05, 0x9b, 0xa8, 0x7a, 0xc3, 0x72, 0x4d, 0xea, 0x79, 0x72, 0xcd, 0x90, 0xaf, 0x41, - 0x3a, 0xb7, 0x0d, 0x4a, 0xee, 0xb2, 0xe1, 0x90, 0xa5, 0x81, 0x15, 0xab, 0x27, 0x45, 0x4e, 0xf3, - 0x46, 0x2c, 0xdb, 0x2e, 0x5d, 0x87, 0x0e, 0x2d, 0xda, 0xfa, 0x99, 0x9d, 0x75, 0xe1, 0x9d, 0x08, - 0x2f, 0xb0, 0x74, 0x27, 0x64, 0xe9, 0x6f, 0xa0, 0xc2, 0x96, 0xec, 0x99, 0x97, 0xd6, 0x96, 0x65, - 0xe5, 0xbf, 0x80, 0xb4, 0x16, 0xf3, 0x3e, 0x28, 0x29, 0xe9, 0xb2, 0x73, 0x6a, 0xfc, 0x2b, 0xf1, - 0x3c, 0xc4, 0x69, 0xc6, 0xe3, 0x59, 0x20, 0xcb, 0x8f, 0x74, 0x70, 0xd2, 0x97, 0x96, 0x3e, 0x31, - 0x96, 0x22, 0xb7, 0x66, 0xb1, 0x3f, 0x64, 0x4e, 0x36, 0x9c, 0xa6, 0x61, 0xf3, 0xac, 0x99, 0xc7, - 0x62, 0x20, 0xff, 0x23, 0x48, 0x41, 0x55, 0x11, 0x3a, 0x21, 0xa2, 0x94, 0x08, 0xef, 0xea, 0x9a, - 0x83, 0xbe, 0x84, 0x32, 0x35, 0x96, 0xc4, 0x72, 0xa9, 0x42, 0x34, 0xcb, 0xd4, 0x1d, 0x2f, 0xa9, - 0xc4, 0xb8, 0xf2, 0x33, 0xd8, 0x0f, 0xb0, 0xdf, 0x58, 0x17, 0xf1, 0x4e, 0x84, 0xfc, 0x45, 0x68, - 0xed, 0x37, 0xd6, 0x05, 0x4f, 0x8e, 0x12, 0x64, 0x0d, 0x5d, 0xf4, 0x5b, 0x4a, 0x98, 0x91, 0xf2, - 0x3b, 0xa8, 0x76, 0x7b, 0x4d, 0xec, 0x9a, 0xa6, 0x61, 0xce, 0xdf, 0x58, 0x17, 0x3c, 0xb7, 0x61, - 0x1e, 0x63, 0x21, 0xc4, 0x2c, 0xef, 0x6d, 0x20, 0xd8, 0xb9, 0x5e, 0xf6, 0x74, 0xdf, 0x4b, 0x8c, - 0x66, 0x1b, 0xeb, 0x58, 0xae, 0xad, 0x11, 0x2f, 0xc7, 0x79, 0x23, 0xf9, 0x2f, 0x50, 0x09, 0x7d, - 0x39, 0x87, 0xfb, 0x0a, 0xb2, 0xff, 0x6c, 0x5d, 0x70, 0xbc, 0x78, 0xb2, 0x0b, 0x1b, 0x8a, 0x99, - 0x14, 0xf3, 0x92, 0xe1, 0xb4, 0x0d, 0xd3, 0x70, 0xae, 0x82, 0x8b, 0x30, 0xc4, 0x59, 0x9f, 0x8d, - 0x37, 0x8e, 0x65, 0xae, 0xaf, 0x42, 0x9f, 0x23, 0x9f, 0x40, 0xb1, 0xdf, 0x6a, 0x06, 0x37, 0xed, - 0x67, 0x50, 0xbc, 0x58, 0x18, 0xe6, 0xfb, 0x99, 0x16, 0xc4, 0x71, 0x09, 0x03, 0x67, 0x89, 0x40, - 0xfe, 0xeb, 0x0e, 0x94, 0xc5, 0x0b, 0x23, 0xd0, 0xa9, 0x42, 0x8e, 0x98, 0xe2, 0x22, 0x4e, 0x8b, - 0x56, 0x8e, 0x37, 0x64, 0x6e, 0xbc, 0x36, 0x74, 0x3f, 0xb7, 0x5e, 0x1b, 0x9c, 0xb3, 0x0a, 0xf2, - 0x3c, 0x23, 0x79, 0x64, 0xab, 0xa6, 0x7b, 0xa9, 0x6a, 0xd4, 0xb5, 0x89, 0xcd, 0xe3, 0xa5, 0x80, - 0x23, 0x3c, 0xb6, 0xc2, 0xca, 0xb6, 0x74, 0x57, 0xa3, 0x3c, 0x6c, 0x0a, 0xd8, 0x1f, 0x72, 0xb7, - 0x12, 0xdb, 0x50, 0xc5, 0x7d, 0xca, 0xdc, 0xca, 0x47, 0xe8, 0x19, 0x14, 0x5d, 0x87, 0xcc, 0x1a, - 0xcd, 0xc6, 0xac, 0xd5, 0x18, 0xf0, 0x3b, 0x35, 0x8f, 0x0b, 0xae, 0x43, 0x1a, 0xcd, 0x46, 0xab, - 0x31, 0x60, 0xb7, 0x1f, 0x9b, 0xc7, 0xc3, 0x66, 0x4f, 0xe1, 0xbd, 0x91, 0x3c, 0xce, 0xbb, 0x0e, - 0xe1, 0x63, 0xf4, 0x02, 0x24, 0x36, 0xd9, 0xed, 0x35, 0x67, 0x6f, 0x5b, 0xff, 0x50, 0x1f, 0xd5, - 0x70, 0xd3, 0xbb, 0x21, 0xcb, 0xae, 0x43, 0xba, 0xbd, 0xa6, 0xcf, 0x45, 0x32, 0x94, 0x7c, 0xc9, - 0xc1, 0x68, 0xaa, 0xb4, 0x78, 0x1b, 0x23, 0x8f, 0x8b, 0x42, 0x8c, 0xb3, 0x7c, 0x53, 0x98, 0x0c, - 0xae, 0x9d, 0xf3, 0x26, 0x85, 0x30, 0x85, 0xc5, 0x53, 0xed, 0x1c, 0x3d, 0x84, 0x1c, 0x9b, 0x9f, - 0x0e, 0x14, 0xde, 0x70, 0xc8, 0xe3, 0x3d, 0xd7, 0x21, 0xd3, 0x81, 0x82, 0x9e, 0x02, 0xb0, 0x09, - 0xa5, 0x85, 0x7b, 0xb5, 0xbe, 0x77, 0x11, 0x33, 0x3d, 0xc1, 0x40, 0x6f, 0xa0, 0x6c, 0x9b, 0xba, - 0xe1, 0xcc, 0x82, 0x12, 0x4b, 0x74, 0x03, 0xfe, 0x26, 0x5a, 0x1f, 0x46, 0xf6, 0xaa, 0x45, 0xaf, - 0x88, 0x6d, 0x12, 0x8a, 0x4b, 0x5c, 0x35, 0xd8, 0xc2, 0x01, 0x48, 0x9a, 0xae, 0xcd, 0x88, 0xb6, - 0x5c, 0xa3, 0x55, 0x3e, 0x1e, 0xad, 0xac, 0xe9, 0x5a, 0x4b, 0x5b, 0x06, 0x70, 0x35, 0xd8, 0x77, - 0x97, 0x21, 0xc3, 0x44, 0x9f, 0xe0, 0xd9, 0x16, 0xa8, 0xe9, 0x40, 0xc1, 0x45, 0x77, 0x19, 0x58, - 0x24, 0x8f, 0xe1, 0x30, 0x79, 0x31, 0x5e, 0xb8, 0x58, 0x0e, 0x9d, 0xa9, 0xba, 0xee, 0x5f, 0x2b, - 0x79, 0xc6, 0xa8, 0xe9, 0xba, 0x8d, 0x1e, 0x41, 0x5e, 0x27, 0xd7, 0x62, 0x4e, 0x84, 0x5d, 0x4e, - 0x27, 0xd7, 0x6c, 0x4a, 0xfe, 0x23, 0x1c, 0xdc, 0x5a, 0x93, 0xa5, 0x23, 0x4d, 0xb7, 0xad, 0xa5, - 0x17, 0xb9, 0x62, 0xc0, 0x0e, 0xf0, 0xa5, 0xb1, 0x20, 0x1e, 0x02, 0xa7, 0xe5, 0x19, 0x7c, 0x2e, - 0xde, 0x19, 0x44, 0xf7, 0x4d, 0xe9, 0x99, 0x94, 0xd8, 0x97, 0xaa, 0x46, 0x82, 0x0f, 0xff, 0x01, - 0x76, 0x78, 0x29, 0x26, 0x1a, 0xb5, 0xd1, 0xee, 0xd8, 0x46, 0x2d, 0xcc, 0x75, 0xe4, 0x7f, 0xcf, - 0xc2, 0xa3, 0xcd, 0xc8, 0x49, 0xd9, 0xf8, 0x47, 0x2f, 0xf3, 0x8a, 0x77, 0xc1, 0x57, 0x1f, 0xb7, - 0xda, 0x49, 0xa8, 0x20, 0x63, 0xc9, 0x63, 0xc5, 0x9c, 0x43, 0x1c, 0xe7, 0xcc, 0x4f, 0x0e, 0x6b, - 0x0e, 0x2b, 0x68, 0x4c, 0x42, 0x97, 0xaa, 0xf3, 0xfe, 0xcc, 0x3b, 0x97, 0xc1, 0x38, 0x7c, 0xea, - 0x77, 0xa3, 0xa7, 0x7e, 0x04, 0x48, 0xbf, 0xd2, 0x56, 0x0a, 0xb1, 0xaf, 0x89, 0x1d, 0xd4, 0x6e, - 0xa2, 0x71, 0xfa, 0x59, 0xc4, 0xc8, 0x66, 0xb7, 0x31, 0x8e, 0x8a, 0xe1, 0x04, 0x55, 0xf4, 0x05, - 0x94, 0xfc, 0x50, 0xea, 0x99, 0x53, 0x87, 0x78, 0xc7, 0x39, 0xca, 0x94, 0x1b, 0xb0, 0xc3, 0x6b, - 0x6c, 0x80, 0xbd, 0x41, 0x6d, 0x38, 0xad, 0xf5, 0xa5, 0x14, 0xaa, 0x40, 0x91, 0xad, 0x31, 0x6b, - 0xf4, 0x7b, 0xad, 0xe1, 0x44, 0x4a, 0x07, 0x0c, 0xa5, 0x85, 0xdf, 0xb5, 0xb0, 0x94, 0x61, 0xcf, - 0xb9, 0xe9, 0x70, 0x50, 0x1b, 0xd6, 0x3a, 0xad, 0xa6, 0x94, 0x95, 0xff, 0x2f, 0x0b, 0xe8, 0xb6, - 0x55, 0xeb, 0x6a, 0x6d, 0x6c, 0xd9, 0x41, 0x56, 0x5c, 0x73, 0xd0, 0x0b, 0xa8, 0x88, 0x51, 0xe0, - 0x6e, 0x2f, 0x76, 0xe2, 0x6c, 0xde, 0x42, 0x21, 0xaa, 0xc3, 0x0b, 0x01, 0xcf, 0xe3, 0x6b, 0x06, - 0x3a, 0x06, 0xc9, 0xb4, 0x28, 0x7b, 0x38, 0x58, 0xb6, 0x41, 0x55, 0xde, 0x03, 0x17, 0x6d, 0xee, - 0x5b, 0x7c, 0x74, 0x02, 0x48, 0xb7, 0x86, 0x16, 0xad, 0x1b, 0xa6, 0xbe, 0x5e, 0x56, 0xec, 0x45, - 0xc2, 0x0c, 0xbb, 0x2f, 0x35, 0x75, 0xb1, 0xb8, 0x50, 0xb5, 0xf7, 0x5e, 0xfb, 0x4e, 0xa4, 0xcc, - 0x18, 0x17, 0x9d, 0xc1, 0x9e, 0xad, 0x9a, 0x73, 0xe2, 0x54, 0x73, 0x3c, 0x8a, 0x9f, 0x6c, 0xd8, - 0x32, 0xcc, 0x84, 0xb0, 0x27, 0x8b, 0xda, 0x90, 0xb3, 0x56, 0xe2, 0x57, 0x0a, 0xf1, 0x0e, 0xf9, - 0xbb, 0x3b, 0x76, 0xfa, 0x64, 0x24, 0xc4, 0x5b, 0x26, 0xb5, 0x6f, 0xb0, 0xaf, 0x8c, 0x1a, 0x50, - 0x74, 0xd8, 0x07, 0x6a, 0x5d, 0xcb, 0xa1, 0x4e, 0xb5, 0xc0, 0xb1, 0x3e, 0xdf, 0x84, 0x15, 0x48, - 0xe2, 0xb0, 0xd6, 0xd1, 0x0f, 0xb0, 0x1f, 0x46, 0x67, 0xb7, 0xce, 0x7b, 0x72, 0xe3, 0xed, 0x1b, - 0x23, 0xa3, 0x2f, 0xde, 0x82, 0xf7, 0xe2, 0xfd, 0x21, 0xf3, 0x7d, 0x5a, 0xb6, 0xa0, 0x12, 0xfb, - 0x46, 0x7e, 0x87, 0x32, 0xa2, 0x6f, 0x7d, 0x08, 0xfa, 0x5e, 0x21, 0x4e, 0x30, 0x3f, 0x5d, 0xad, - 0x88, 0x9f, 0x76, 0x42, 0x9c, 0x60, 0xcf, 0x79, 0x3d, 0x14, 0xde, 0x73, 0xc6, 0x90, 0xbf, 0x87, - 0xfb, 0x49, 0x5f, 0xc4, 0x5f, 0x1d, 0xaa, 0x16, 0xbc, 0x3a, 0x54, 0x8d, 0xd7, 0x19, 0x2b, 0x0f, - 0x3f, 0x63, 0xac, 0xe4, 0x1c, 0xec, 0xb6, 0x96, 0x2b, 0x7a, 0x73, 0xfc, 0x3b, 0x90, 0xe2, 0x1d, - 0x23, 0xb4, 0x07, 0x99, 0xe9, 0x58, 0x4a, 0xa1, 0x3c, 0xec, 0x34, 0x47, 0xe7, 0x43, 0x29, 0x8d, - 0x72, 0x90, 0x1d, 0xb5, 0xdb, 0x52, 0xe6, 0xf8, 0x25, 0xc0, 0xba, 0x43, 0xc4, 0xce, 0x0b, 0xee, - 0x29, 0xbd, 0x61, 0x47, 0x34, 0x3f, 0xda, 0xb5, 0x7e, 0x9f, 0x0d, 0x78, 0xf3, 0xa3, 0x3e, 0x9a, - 0x74, 0xa5, 0xcc, 0xf1, 0xff, 0xa4, 0x21, 0xe7, 0xb5, 0x25, 0x50, 0x01, 0x76, 0x87, 0xd3, 0xc1, - 0xec, 0x6b, 0x29, 0xe5, 0x93, 0xa7, 0x52, 0xda, 0x27, 0xbf, 0x91, 0x32, 0x3e, 0x79, 0x26, 0x65, - 0x7d, 0xf2, 0x5b, 0x69, 0xc7, 0x27, 0x5f, 0x4b, 0xbb, 0x3e, 0xf9, 0x9d, 0xb4, 0xe7, 0x93, 0xdf, - 0x4b, 0x39, 0x9f, 0xfc, 0xbd, 0x94, 0x67, 0x16, 0xf1, 0x25, 0x5e, 0x49, 0x85, 0x80, 0xfe, 0x5a, - 0x82, 0x80, 0x3e, 0x95, 0x8a, 0x01, 0xfd, 0x8d, 0xb4, 0x1f, 0xd0, 0x67, 0x52, 0x29, 0xa0, 0xbf, - 0x95, 0xca, 0x01, 0xfd, 0x5a, 0xaa, 0x04, 0xf4, 0x77, 0x92, 0x14, 0xd0, 0xdf, 0x4b, 0x07, 0x01, - 0xfd, 0x7b, 0x09, 0xf9, 0xf4, 0xe9, 0x2b, 0xe9, 0xde, 0xf1, 0xef, 0x60, 0x3f, 0xdc, 0x5a, 0x61, - 0xce, 0xeb, 0x8f, 0xce, 0x85, 0x3f, 0xbb, 0xbd, 0x4e, 0x57, 0x4a, 0x33, 0xf1, 0xc9, 0xa8, 0xd3, - 0xe9, 0xb7, 0xa4, 0xcc, 0x71, 0x13, 0x2a, 0xb1, 0x86, 0x01, 0xf3, 0xe5, 0x74, 0xf8, 0x76, 0xc8, - 0x7c, 0x9f, 0x62, 0xbb, 0x51, 0x1b, 0x8b, 0x3d, 0x50, 0x26, 0x35, 0x29, 0x83, 0xee, 0x41, 0x45, - 0x99, 0xd4, 0x66, 0xed, 0x5a, 0xaf, 0x3f, 0x7a, 0xd7, 0xc2, 0xb3, 0xda, 0x58, 0xca, 0x1e, 0x37, - 0xa1, 0x14, 0x79, 0x37, 0xa3, 0x07, 0x70, 0xc0, 0xa4, 0x86, 0xa3, 0xc9, 0xac, 0x31, 0x1a, 0x0e, - 0x5b, 0x8d, 0x49, 0xab, 0x29, 0x1c, 0x5f, 0x1b, 0xcf, 0xa6, 0x0c, 0xf0, 0x00, 0x4a, 0x4c, 0x62, - 0x3d, 0x9b, 0x39, 0xfe, 0x52, 0x74, 0x4f, 0xfc, 0xf6, 0x03, 0xda, 0x87, 0xfc, 0xf9, 0xb8, 0x76, - 0x3a, 0x1b, 0x2b, 0x6f, 0x85, 0xfd, 0xa3, 0x71, 0x6b, 0x28, 0xa5, 0x4f, 0xff, 0x7a, 0x08, 0x7b, - 0xe3, 0xb3, 0xf3, 0xe1, 0xf8, 0x6b, 0x34, 0x80, 0x6a, 0x87, 0x50, 0xff, 0x7e, 0x8b, 0x5c, 0x93, - 0x08, 0x45, 0xef, 0x15, 0x16, 0x70, 0x47, 0x8f, 0xb7, 0x5c, 0xe5, 0x72, 0x0a, 0x75, 0xe1, 0x9e, - 0xc0, 0xfa, 0xd5, 0x48, 0x6d, 0x38, 0xe8, 0x10, 0x1a, 0x2b, 0x38, 0x7f, 0x01, 0xce, 0x08, 0x0e, - 0x94, 0x5b, 0x38, 0xdb, 0x74, 0xee, 0x02, 0xfc, 0x13, 0x94, 0x3b, 0x84, 0x86, 0x4b, 0xe7, 0x24, - 0xab, 0xaa, 0x11, 0x5e, 0x48, 0x5a, 0x20, 0x28, 0x51, 0x84, 0x8d, 0xd2, 0x47, 0x09, 0xd8, 0x72, - 0x0a, 0x35, 0x61, 0x7f, 0xc0, 0x8a, 0xf2, 0xe9, 0x40, 0xe1, 0xb7, 0xc7, 0x1d, 0x05, 0xd6, 0x06, - 0x94, 0x19, 0x7c, 0x26, 0x36, 0x6b, 0x73, 0xf1, 0xf1, 0x91, 0x85, 0xcc, 0x86, 0x05, 0x2c, 0xf8, - 0x6d, 0x87, 0xd0, 0xda, 0x62, 0x71, 0x77, 0xfd, 0x94, 0xe4, 0xc3, 0x93, 0x68, 0xf2, 0xbf, 0x0b, - 0x43, 0x4e, 0xa1, 0x05, 0x7c, 0x11, 0x8a, 0xe6, 0xcd, 0xab, 0x45, 0x3b, 0x56, 0x91, 0x86, 0xce, - 0xd1, 0x47, 0x7e, 0xb2, 0x9c, 0x42, 0x03, 0xfe, 0xbe, 0xc4, 0xae, 0xe9, 0xdd, 0x9f, 0x4f, 0x93, - 0x5f, 0x6c, 0xde, 0xb3, 0xf6, 0xe8, 0xc9, 0xa6, 0x69, 0xf6, 0x24, 0xe3, 0x70, 0x95, 0x30, 0x1c, - 0x7b, 0xb1, 0xde, 0x81, 0xb8, 0xf9, 0x89, 0x28, 0xa7, 0x10, 0x86, 0x07, 0xdd, 0x5e, 0xb3, 0x43, - 0xe8, 0xfa, 0xdd, 0x28, 0x5e, 0x99, 0x9b, 0xb5, 0xee, 0x34, 0xb1, 0x05, 0xa8, 0xdb, 0x6b, 0x36, - 0x54, 0x53, 0x23, 0x8b, 0xb5, 0x95, 0x5b, 0x00, 0x93, 0xe3, 0x62, 0x08, 0x0f, 0x85, 0x69, 0xde, - 0xab, 0x3a, 0x90, 0x4f, 0x8e, 0x83, 0xa7, 0x1b, 0xf1, 0xd9, 0x93, 0x5d, 0x4e, 0xa1, 0x3a, 0x1c, - 0x06, 0x66, 0xd5, 0x16, 0x8b, 0x3b, 0xe0, 0x92, 0x6d, 0xfa, 0xc9, 0x77, 0x57, 0xec, 0xa5, 0xbf, - 0xed, 0xeb, 0x7e, 0x13, 0x9f, 0x4a, 0xec, 0x12, 0x70, 0x03, 0x8b, 0x6d, 0x25, 0x68, 0x03, 0xc5, - 0xb6, 0x35, 0xde, 0x1e, 0xda, 0x60, 0xe0, 0x5b, 0x80, 0xb6, 0xe2, 0x37, 0x9f, 0x50, 0x74, 0xa7, - 0x62, 0x4d, 0xae, 0x98, 0xc7, 0xe2, 0x1d, 0x2b, 0xbe, 0x03, 0xa5, 0xb6, 0xd2, 0x21, 0xd4, 0xef, - 0xfd, 0xc4, 0xf0, 0x62, 0x9d, 0xa3, 0x18, 0x5e, 0xbc, 0x61, 0x24, 0xa7, 0xd0, 0x9f, 0xe1, 0x41, - 0x5b, 0x69, 0xd8, 0x44, 0xa5, 0x24, 0xd2, 0xa9, 0x43, 0xb1, 0xff, 0x1d, 0x24, 0xf4, 0x09, 0x8f, - 0xe4, 0x6d, 0x22, 0xc1, 0x0a, 0x7f, 0x82, 0x22, 0xef, 0x3d, 0xf6, 0x79, 0x59, 0x1d, 0xdb, 0x95, - 0x70, 0x83, 0x35, 0xee, 0x3e, 0x36, 0x25, 0xa7, 0x5e, 0xa5, 0x51, 0x07, 0x8a, 0x2d, 0xed, 0x2a, - 0xe8, 0x86, 0x6d, 0xcb, 0x01, 0x5b, 0xe6, 0xe4, 0x14, 0xea, 0x01, 0x12, 0x29, 0x26, 0xf2, 0x53, - 0xc5, 0xe6, 0xe6, 0xf4, 0xd1, 0x61, 0x72, 0x83, 0x5c, 0x4e, 0xa1, 0x3f, 0xc0, 0x7e, 0x87, 0xd0, - 0x75, 0x63, 0x3d, 0x29, 0x5e, 0x37, 0x6b, 0xb7, 0xe1, 0x50, 0xb8, 0x23, 0x60, 0x36, 0xae, 0x44, - 0x51, 0xfe, 0x69, 0x38, 0x18, 0x0e, 0x14, 0x6a, 0xd9, 0xe4, 0xdc, 0xb8, 0x5c, 0x7f, 0xcf, 0x6f, - 0x63, 0xe2, 0x9b, 0x7e, 0x0f, 0xda, 0x10, 0xae, 0x63, 0x78, 0xc0, 0x72, 0x0f, 0x83, 0xd5, 0x23, - 0xb8, 0xdb, 0xfc, 0xbe, 0xd9, 0x87, 0x1c, 0xb1, 0xea, 0xfd, 0xde, 0xf7, 0x69, 0xa0, 0x9b, 0xbf, - 0x7b, 0x00, 0x8f, 0x38, 0x96, 0x7f, 0x61, 0x7c, 0x34, 0x64, 0xf2, 0x27, 0x8f, 0xc4, 0x76, 0x24, - 0x98, 0x97, 0xb4, 0x1d, 0x9f, 0x6d, 0xc6, 0x17, 0x3f, 0x1c, 0xa4, 0xd0, 0x04, 0x1e, 0xaf, 0x01, - 0xe3, 0xff, 0xb7, 0xfa, 0xc5, 0xa8, 0x3f, 0xc1, 0x21, 0x47, 0xbc, 0x0d, 0xf8, 0xd5, 0xf6, 0x3f, - 0x78, 0x45, 0xfe, 0x3e, 0xb6, 0xc1, 0x07, 0x03, 0x38, 0xec, 0x10, 0x1a, 0xfd, 0x2f, 0xda, 0xe6, - 0xd0, 0xde, 0xfe, 0x8f, 0x32, 0x5e, 0xa2, 0x3c, 0x15, 0x9b, 0x73, 0xdb, 0x98, 0xd5, 0x82, 0xbd, - 0x6d, 0xb7, 0x23, 0xdc, 0xbd, 0xc0, 0x4f, 0xf0, 0x28, 0x79, 0x81, 0x9a, 0xae, 0xff, 0x5a, 0xf0, - 0x8b, 0x3d, 0xfe, 0x7f, 0xbf, 0x6f, 0xfe, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xe9, 0x9e, 0x44, 0xcf, - 0xfd, 0x27, 0x00, 0x00, + // 3462 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x5a, 0x5b, 0x77, 0xe3, 0x46, + 0x72, 0xe6, 0x45, 0x12, 0xc9, 0xe2, 0x0d, 0xea, 0x99, 0xd1, 0x70, 0x34, 0x17, 0x8f, 0x11, 0xaf, + 0x77, 0xa2, 0xcd, 0xca, 0x63, 0x59, 0x1e, 0x7b, 0x7d, 0x76, 0x8f, 0x97, 0x77, 0x72, 0x86, 0xb7, + 0xd3, 0x20, 0xad, 0x24, 0x7b, 0x4e, 0xb8, 0x10, 0xd0, 0xa2, 0xb0, 0x43, 0x02, 0x0c, 0xd0, 0xd0, + 0x58, 0x79, 0xd8, 0x9c, 0x93, 0x3f, 0x91, 0x7f, 0x91, 0xc7, 0xe4, 0xa7, 0xe4, 0x17, 0xe4, 0x3d, + 0x2f, 0x79, 0xce, 0x9e, 0xee, 0x06, 0x40, 0x00, 0x02, 0xa9, 0xb1, 0xf7, 0xad, 0xba, 0xba, 0xea, + 0xeb, 0x46, 0x75, 0x55, 0x75, 0x75, 0x91, 0x00, 0x0b, 0x7b, 0xad, 0x9d, 0xae, 0x6d, 0x8b, 0x5a, + 0xa8, 0x38, 0x39, 0xff, 0x60, 0x4e, 0xbe, 0x9c, 0x33, 0x96, 0xfc, 0x27, 0x90, 0xa6, 0xb6, 0xb1, + 0x58, 0x10, 0xbb, 0xae, 0x51, 0xc3, 0x32, 0x15, 0x42, 0x51, 0x03, 0x2a, 0x11, 0x9e, 0x53, 0x4b, + 0xbf, 0xcc, 0xbe, 0x2a, 0x9e, 0x1d, 0x9f, 0x86, 0x34, 0x4f, 0x23, 0x22, 0x38, 0xa6, 0x81, 0x10, + 0xec, 0x8d, 0xd4, 0x15, 0xa9, 0x65, 0x5e, 0xa6, 0x5f, 0x15, 0x30, 0xa7, 0xe5, 0xff, 0x04, 0x28, + 0x47, 0xc4, 0x50, 0x05, 0x32, 0x86, 0x5e, 0x4b, 0xbf, 0x4c, 0xbf, 0x2a, 0xe3, 0x8c, 0xa1, 0xa3, + 0x1a, 0xe4, 0x2c, 0x93, 0x28, 0xd7, 0x16, 0xe5, 0x8a, 0x79, 0xec, 0x0f, 0xd1, 0x31, 0xe4, 0x0d, + 0x87, 0x69, 0xdd, 0x90, 0x5a, 0x96, 0x4f, 0x05, 0x63, 0xf4, 0x0c, 0x0a, 0xc6, 0x6a, 0xe5, 0x52, + 0xf5, 0x72, 0x49, 0x6a, 0x7b, 0x7c, 0x72, 0xc3, 0x40, 0x03, 0xa8, 0x38, 0xc4, 0xbe, 0x31, 0x34, + 0xa2, 0x50, 0xd5, 0xa6, 0x44, 0xaf, 0xed, 0xbf, 0x4c, 0xbf, 0x2a, 0x9e, 0xc9, 0x49, 0x5f, 0xa3, + 0x44, 0x24, 0x7b, 0x29, 0x1c, 0xd3, 0x45, 0x7f, 0x0f, 0xc8, 0x75, 0x2e, 0xbb, 0xaa, 0xbe, 0x20, + 0xb4, 0x69, 0x99, 0x26, 0xd1, 0x18, 0xe2, 0x01, 0x47, 0xfc, 0x3c, 0x09, 0x71, 0xa6, 0x34, 0x62, + 0xd2, 0xbd, 0x14, 0x4e, 0xc0, 0x40, 0x2a, 0x3c, 0x0a, 0xb8, 0x2d, 0xc3, 0xd1, 0x02, 0xf0, 0x1c, + 0x07, 0xff, 0xdb, 0x9d, 0xe0, 0x61, 0x85, 0x5e, 0x0a, 0x27, 0x23, 0xa1, 0x3e, 0x94, 0x3f, 0x18, + 0x57, 0x46, 0x7d, 0xe2, 0x5b, 0x22, 0xcf, 0xa1, 0x3f, 0x4d, 0x82, 0xbe, 0x08, 0x0b, 0xf6, 0x52, + 0x38, 0xaa, 0xc9, 0xec, 0xc0, 0x18, 0xc1, 0xf6, 0xeb, 0x8e, 0x42, 0xd5, 0x5a, 0x61, 0xbb, 0x1d, + 0x2e, 0xee, 0x48, 0x33, 0x3b, 0xdc, 0xc5, 0x40, 0xdf, 0x41, 0xde, 0x71, 0xae, 0x07, 0xd6, 0xc2, + 0x30, 0x6b, 0xc0, 0xf1, 0x9e, 0x25, 0x9e, 0x94, 0xd2, 0xe3, 0x32, 0xbd, 0x14, 0x0e, 0xe4, 0x11, + 0x06, 0x49, 0xbf, 0xd6, 0xd6, 0x03, 0xa2, 0x3a, 0xa4, 0x6b, 0xab, 0x26, 0xfb, 0xc6, 0x22, 0xc7, + 0xf8, 0x2c, 0x09, 0xa3, 0xd5, 0x6b, 0x4e, 0xc2, 0xb2, 0xbd, 0x14, 0xbe, 0xa3, 0x8f, 0x3a, 0x50, + 0x5a, 0xd8, 0x96, 0xbb, 0xc6, 0x44, 0x23, 0xcc, 0xfb, 0x4a, 0x1c, 0xef, 0x65, 0x12, 0x5e, 0x37, + 0x24, 0xd7, 0x4b, 0xe1, 0x88, 0x1e, 0xfa, 0x27, 0x78, 0x18, 0x1e, 0x2b, 0xe4, 0x9f, 0x5d, 0x62, + 0x6a, 0xa4, 0x56, 0xe6, 0x78, 0xaf, 0xee, 0xc3, 0xf3, 0xe5, 0x7b, 0x29, 0x9c, 0x88, 0x83, 0xce, + 0xe1, 0x60, 0xb1, 0x36, 0xac, 0xbe, 0x59, 0xab, 0x70, 0xc4, 0xc4, 0x68, 0xed, 0x4e, 0xfa, 0xe3, + 0x3e, 0xb3, 0x99, 0x27, 0x8b, 0x5a, 0x00, 0x97, 0xaa, 0x73, 0xad, 0x68, 0xb6, 0xb1, 0xa6, 0xb5, + 0x6a, 0x42, 0x64, 0x78, 0x79, 0x81, 0x9d, 0x7b, 0x23, 0x90, 0xec, 0xa5, 0x71, 0x48, 0x0f, 0xd5, + 0xa1, 0x70, 0x6d, 0xe8, 0x1e, 0x88, 0x94, 0xe0, 0x54, 0x21, 0x90, 0x5e, 0xbf, 0x15, 0x60, 0x6c, + 0xb4, 0x90, 0x06, 0x47, 0x3a, 0x59, 0x2f, 0xad, 0x5b, 0x85, 0x50, 0x6a, 0x98, 0x0b, 0x67, 0x4a, + 0x56, 0xeb, 0xa5, 0x4a, 0x49, 0xed, 0x30, 0xc1, 0xff, 0x05, 0x5e, 0x2b, 0x51, 0xa1, 0x97, 0xc6, + 0x5b, 0xa0, 0xd0, 0x09, 0x64, 0x97, 0xd6, 0xa2, 0x86, 0x38, 0xe2, 0x51, 0x02, 0xe2, 0xc0, 0x5a, + 0xf4, 0xd2, 0x98, 0x09, 0xa1, 0x37, 0x90, 0x63, 0x36, 0x1a, 0xbb, 0xb4, 0xf6, 0x20, 0xc1, 0xa0, + 0x42, 0x9e, 0xd9, 0x73, 0xec, 0xb2, 0x4f, 0xf1, 0x85, 0xd1, 0x6f, 0xa1, 0xc0, 0xcf, 0x47, 0x21, + 0xa6, 0x5e, 0x7b, 0x98, 0xe0, 0xc0, 0x9e, 0xa6, 0x2f, 0xc3, 0xcc, 0x10, 0x28, 0x34, 0x0a, 0x90, + 0xf3, 0x8e, 0xaa, 0x91, 0x87, 0x03, 0x21, 0x2a, 0x3f, 0x86, 0x47, 0x89, 0xf9, 0x49, 0x7e, 0x0a, + 0x4f, 0xb6, 0xa6, 0x19, 0xf9, 0x05, 0x3c, 0xdb, 0x95, 0x26, 0xe4, 0x23, 0x78, 0x98, 0x14, 0xeb, + 0x21, 0xd0, 0xbb, 0x31, 0x2b, 0x7f, 0x01, 0xd5, 0x58, 0x00, 0xb2, 0xf4, 0xbb, 0x64, 0xc4, 0xcc, + 0x21, 0x36, 0xcf, 0xe5, 0x05, 0xbc, 0x61, 0xc8, 0x4f, 0xe0, 0xf1, 0x96, 0x68, 0x93, 0xfb, 0xf0, + 0x20, 0xc1, 0xd1, 0x19, 0x1e, 0xb7, 0x07, 0xbf, 0x3f, 0x3c, 0xbc, 0x80, 0x81, 0x1e, 0xc2, 0xfe, + 0x8d, 0xba, 0x74, 0xc5, 0xcd, 0xb2, 0x8f, 0xc5, 0x40, 0xfe, 0x57, 0x78, 0xba, 0x23, 0x66, 0xee, + 0x81, 0x3c, 0x01, 0xa9, 0xbf, 0x30, 0x2d, 0x9b, 0x8c, 0x5d, 0x3a, 0xbe, 0x1a, 0xdb, 0x3a, 0xb1, + 0xbd, 0xeb, 0xe7, 0x0e, 0x1f, 0x1d, 0xc1, 0x01, 0x5f, 0xd1, 0xa9, 0x65, 0x5f, 0x66, 0x5f, 0xed, + 0x63, 0x6f, 0x24, 0xff, 0x57, 0x3a, 0xb8, 0xdb, 0x44, 0x8c, 0xa1, 0x53, 0xe1, 0x3f, 0x23, 0x77, + 0xc5, 0x57, 0xac, 0x9c, 0x3d, 0x8c, 0x78, 0x01, 0x93, 0x1a, 0xb9, 0x2b, 0xec, 0x0b, 0xa1, 0xdf, + 0x01, 0xac, 0xdd, 0xe5, 0x72, 0xb6, 0x6e, 0x59, 0x1f, 0x4c, 0xbe, 0x7e, 0xe5, 0xec, 0xf9, 0x1d, + 0x95, 0xbe, 0x39, 0x09, 0x84, 0x70, 0x48, 0x01, 0x7d, 0x03, 0x20, 0x42, 0xba, 0xad, 0x2f, 0xc4, + 0x15, 0x59, 0x39, 0x7b, 0x9c, 0xa0, 0xce, 0xa6, 0x71, 0x48, 0x54, 0xfe, 0x06, 0x1e, 0x25, 0x86, + 0x38, 0x7a, 0x01, 0xe0, 0x70, 0x2a, 0x64, 0xb5, 0x10, 0x47, 0x7e, 0x03, 0x0f, 0x93, 0xc2, 0xfa, + 0x5e, 0xbd, 0xff, 0x4b, 0xc3, 0xb3, 0x5d, 0xf1, 0x8b, 0x64, 0x28, 0x51, 0x8f, 0x0e, 0x41, 0x44, + 0x78, 0xe8, 0x2d, 0xec, 0xd1, 0xdb, 0x35, 0xf1, 0xec, 0xf4, 0xe6, 0xa3, 0x93, 0xc3, 0xa9, 0x4f, + 0x4c, 0x6f, 0xd7, 0x04, 0x73, 0x0c, 0x99, 0x40, 0x29, 0xcc, 0x45, 0x87, 0x50, 0xee, 0xcc, 0x06, + 0x83, 0xb9, 0xd2, 0x9e, 0x4e, 0xfb, 0xa3, 0xae, 0x22, 0xa5, 0x50, 0x11, 0x72, 0xa3, 0xf6, 0xf4, + 0x62, 0x8c, 0xdf, 0x49, 0x69, 0x94, 0x87, 0xbd, 0x8b, 0x7e, 0xa7, 0x2f, 0x65, 0x50, 0x0e, 0xb2, + 0x33, 0xa5, 0x21, 0x65, 0x51, 0x19, 0x0a, 0x8d, 0xc1, 0xac, 0x3d, 0x1d, 0x8f, 0xa7, 0x3d, 0x69, + 0x0f, 0x3d, 0x80, 0xea, 0x14, 0xf7, 0xbb, 0xdd, 0x36, 0x9e, 0xd7, 0x9b, 0xd3, 0xfe, 0x78, 0xa4, + 0x48, 0xfb, 0x72, 0x11, 0x0a, 0x41, 0x92, 0x91, 0xd7, 0x50, 0x8e, 0x64, 0x90, 0x9f, 0xec, 0x2e, + 0x5f, 0x84, 0xe3, 0xa0, 0x72, 0xf6, 0xe4, 0x8e, 0xf4, 0xd8, 0xa5, 0x3f, 0x30, 0x01, 0x3f, 0x44, + 0xda, 0x50, 0x8d, 0x65, 0x9e, 0x9f, 0x15, 0x69, 0x1f, 0xe0, 0x98, 0xa5, 0x05, 0xcc, 0x42, 0xcb, + 0xa1, 0xbe, 0x79, 0x15, 0x6a, 0xd9, 0xea, 0x82, 0x1f, 0xdd, 0x34, 0xe1, 0xe8, 0xc2, 0x3c, 0xf4, + 0x35, 0xe4, 0x1d, 0x4f, 0x8d, 0x43, 0x17, 0x63, 0x9b, 0xbf, 0x30, 0x3a, 0x86, 0x8f, 0x8b, 0x03, + 0x51, 0xf9, 0xdf, 0xb3, 0x50, 0x0a, 0x4f, 0xb1, 0x12, 0xd3, 0xdc, 0xac, 0xc1, 0x69, 0x56, 0x26, + 0xea, 0x86, 0xc3, 0xea, 0x3e, 0xdd, 0x0b, 0xe1, 0x60, 0xcc, 0xfc, 0xd2, 0x26, 0x0b, 0x77, 0xa9, + 0x52, 0xcb, 0xbe, 0xe5, 0x11, 0x52, 0xc0, 0x21, 0x0e, 0xfa, 0x1e, 0x4a, 0x1f, 0x2c, 0xfb, 0xbd, + 0x61, 0x2e, 0xe6, 0x2b, 0x4b, 0x17, 0x95, 0x64, 0x25, 0x96, 0xbb, 0xd9, 0x06, 0x2e, 0x84, 0xd0, + 0xd0, 0xd2, 0x09, 0x2e, 0x7e, 0xd8, 0x0c, 0xd0, 0x1b, 0x28, 0xa8, 0x2e, 0xbd, 0x16, 0xda, 0xfb, + 0x09, 0xc7, 0xc2, 0xb4, 0xeb, 0x2e, 0xbd, 0xe6, 0xaa, 0x79, 0xd5, 0xa3, 0x58, 0xd5, 0xab, 0x5d, + 0xab, 0xa6, 0x49, 0x96, 0xbc, 0x90, 0x2c, 0x63, 0x7f, 0x88, 0x4e, 0xe1, 0x40, 0x5d, 0xcf, 0x1b, + 0x8a, 0xe2, 0x15, 0x81, 0x8f, 0xef, 0xc0, 0x35, 0x14, 0xa5, 0x79, 0xb5, 0xc0, 0xfb, 0xea, 0xba, + 0xa1, 0x28, 0xe8, 0x7b, 0xa8, 0x6a, 0x4b, 0x83, 0x98, 0x94, 0xe9, 0xcc, 0x97, 0x86, 0x43, 0x6b, + 0x79, 0x5e, 0xba, 0x6f, 0x55, 0x2c, 0x0b, 0xf9, 0x86, 0xa2, 0x0c, 0x0c, 0x87, 0xa2, 0xa7, 0xfc, + 0x22, 0x27, 0x73, 0xc7, 0x31, 0x74, 0x5e, 0xcd, 0xe5, 0x71, 0x9e, 0x31, 0x14, 0xc7, 0xd0, 0x59, + 0xee, 0x33, 0xc9, 0x8f, 0x2b, 0xcb, 0xe4, 0x35, 0x4b, 0x1e, 0x7b, 0x23, 0xf9, 0x3f, 0xd2, 0x50, + 0xe0, 0x27, 0x43, 0x59, 0xf4, 0x9e, 0xc2, 0x1e, 0x37, 0x80, 0xf0, 0xe2, 0xe3, 0xbb, 0x47, 0xcb, + 0xa4, 0xb8, 0x05, 0xb8, 0x5c, 0xf8, 0xeb, 0x33, 0xd1, 0xaf, 0x47, 0xb0, 0xc7, 0xf7, 0x21, 0x8e, + 0x8a, 0xd3, 0xa8, 0x09, 0x55, 0xcd, 0xb5, 0x6d, 0x62, 0x06, 0xae, 0xc7, 0xcf, 0x69, 0xa7, 0x0f, + 0xc5, 0x35, 0xe4, 0x33, 0x80, 0x8d, 0x09, 0xd8, 0x32, 0x8a, 0xd2, 0x6f, 0xf9, 0x7e, 0xc4, 0x68, + 0x24, 0x41, 0x76, 0xa2, 0xbc, 0xf3, 0x5e, 0x2f, 0x8c, 0x94, 0x3f, 0x85, 0xb2, 0x42, 0x6d, 0x76, + 0xd4, 0xc4, 0x71, 0x98, 0xab, 0x4b, 0x90, 0x5d, 0x39, 0x0b, 0x4f, 0x8b, 0x91, 0xf2, 0x6b, 0x40, + 0x11, 0x91, 0xba, 0x6d, 0xab, 0xb7, 0xcc, 0x25, 0x57, 0xce, 0x82, 0xd3, 0xfc, 0x1d, 0x55, 0xc0, + 0xc1, 0x58, 0x3e, 0x85, 0x52, 0xfb, 0x86, 0x98, 0xd4, 0x8b, 0x26, 0xe6, 0xa2, 0xec, 0xd0, 0x88, + 0xc9, 0xf2, 0x10, 0x87, 0xce, 0xe2, 0x10, 0x47, 0x56, 0x01, 0xb8, 0x3c, 0x0f, 0x6c, 0x74, 0x0c, + 0x39, 0xea, 0xf0, 0x05, 0xc5, 0x2e, 0x7a, 0x29, 0xec, 0x33, 0xd0, 0x11, 0xec, 0xd3, 0x4b, 0xcb, + 0x12, 0x36, 0xcd, 0xf7, 0x52, 0x58, 0x0c, 0x51, 0x0d, 0x0e, 0xa8, 0x61, 0xd2, 0x37, 0xe7, 0xdc, + 0xaa, 0x59, 0x56, 0x09, 0x8a, 0x71, 0x63, 0x1f, 0xb2, 0x37, 0xea, 0x52, 0x1e, 0xc0, 0x3e, 0x5f, + 0x82, 0x99, 0x85, 0x6e, 0x76, 0xc1, 0x69, 0xf4, 0x45, 0x70, 0xfb, 0x65, 0x12, 0xdc, 0x6a, 0xb3, + 0xb5, 0xe0, 0x5a, 0xfc, 0x23, 0x3c, 0x64, 0xb1, 0xdf, 0x32, 0xec, 0xb1, 0xdd, 0x31, 0x96, 0xc4, + 0xff, 0x50, 0x09, 0xb2, 0xba, 0xe1, 0x57, 0x0b, 0x8c, 0x64, 0xce, 0xb5, 0xb6, 0xc9, 0x95, 0xf1, + 0xa3, 0x67, 0x74, 0x6f, 0xc4, 0x4c, 0x62, 0x99, 0xcb, 0xdb, 0x8e, 0xb5, 0x64, 0xd7, 0xb2, 0x78, + 0xfa, 0x85, 0x38, 0xec, 0xfa, 0x8a, 0xad, 0xe0, 0xac, 0x2d, 0xd3, 0x21, 0x22, 0xdc, 0x1d, 0x77, + 0x49, 0x27, 0x2a, 0xbd, 0xf6, 0xaf, 0xa1, 0x0d, 0x47, 0x1e, 0x43, 0x15, 0x13, 0x55, 0x0f, 0xef, + 0x0a, 0xc1, 0xde, 0x7a, 0x23, 0xcc, 0x69, 0x96, 0x05, 0x1d, 0x76, 0xbf, 0xf1, 0x6d, 0x65, 0xb1, + 0x18, 0x30, 0x49, 0x5d, 0xa5, 0x2a, 0xdf, 0x4f, 0x09, 0x73, 0x5a, 0x7e, 0x0d, 0xd2, 0x06, 0xd0, + 0xdb, 0xc4, 0x33, 0x28, 0xd8, 0x44, 0xd5, 0x9b, 0x96, 0x6b, 0x52, 0xcf, 0x92, 0x1b, 0x86, 0x7c, + 0x03, 0xd2, 0x85, 0x6d, 0x50, 0x72, 0xdf, 0x1e, 0x8e, 0x58, 0x1a, 0x58, 0xb3, 0x7a, 0x52, 0xe4, + 0x34, 0x6f, 0xc4, 0xb2, 0xed, 0xca, 0x75, 0xe8, 0xc8, 0xa2, 0xed, 0x1f, 0x59, 0xac, 0x0b, 0xeb, + 0x44, 0x78, 0xc1, 0x4e, 0xf7, 0x42, 0x3b, 0xfd, 0x05, 0x54, 0xd9, 0x92, 0x7d, 0xf3, 0xca, 0xda, + 0xb1, 0xac, 0xfc, 0x67, 0x90, 0x36, 0x62, 0xde, 0x07, 0x25, 0x25, 0x5d, 0x16, 0xa7, 0xc6, 0xbf, + 0x10, 0xcf, 0x42, 0x9c, 0x66, 0x3c, 0x9e, 0x05, 0xb2, 0x3c, 0xa4, 0x83, 0x48, 0x5f, 0x59, 0xfa, + 0xd4, 0x58, 0x89, 0xdc, 0x9a, 0xc5, 0xfe, 0x90, 0x19, 0xd9, 0x70, 0x5a, 0x86, 0xcd, 0xb3, 0x66, + 0x1e, 0x8b, 0x81, 0xfc, 0x8f, 0x20, 0x05, 0x55, 0x45, 0x28, 0x42, 0x44, 0x29, 0x11, 0x3e, 0xd5, + 0x0d, 0x07, 0x7d, 0x0e, 0x15, 0x6a, 0xac, 0x88, 0xe5, 0x52, 0x85, 0x68, 0x96, 0xa9, 0x3b, 0x5e, + 0x52, 0x89, 0x71, 0xe5, 0x17, 0x50, 0x0a, 0xb0, 0xdf, 0x5a, 0x97, 0xf1, 0x4e, 0x84, 0xfc, 0x59, + 0x68, 0xed, 0xb7, 0xd6, 0x25, 0x4f, 0x8e, 0x12, 0x64, 0x0d, 0x5d, 0x34, 0x43, 0xca, 0x98, 0x91, + 0xf2, 0x0f, 0x50, 0xeb, 0xf5, 0x5b, 0xd8, 0x35, 0x4d, 0xc3, 0x5c, 0xbc, 0xb5, 0x2e, 0x79, 0x6e, + 0xc3, 0xdc, 0xc7, 0x42, 0x88, 0x59, 0xde, 0xdb, 0x40, 0xb0, 0x77, 0xb3, 0xea, 0xeb, 0xbe, 0x95, + 0x18, 0xcd, 0x0e, 0xd6, 0xb1, 0x5c, 0x5b, 0x23, 0x5e, 0x8e, 0xf3, 0x46, 0xf2, 0x9f, 0xa1, 0x1a, + 0xfa, 0x72, 0x0e, 0xf7, 0x2b, 0xc8, 0xfe, 0xc9, 0xba, 0xe4, 0x78, 0xf1, 0x64, 0x17, 0xde, 0x28, + 0x66, 0x52, 0xcc, 0x4a, 0x86, 0xd3, 0x31, 0x4c, 0xc3, 0xb9, 0x0e, 0x2e, 0xc2, 0x10, 0x67, 0x13, + 0x1b, 0x6f, 0x1d, 0xcb, 0xdc, 0x5c, 0x85, 0x3e, 0x47, 0x3e, 0x85, 0xe2, 0xa0, 0xdd, 0x0a, 0x6e, + 0xda, 0x4f, 0xa0, 0x78, 0xb9, 0x34, 0xcc, 0xf7, 0x73, 0x2d, 0xf0, 0xe3, 0x32, 0x06, 0xce, 0x12, + 0x8e, 0xfc, 0x3f, 0x7b, 0x50, 0x11, 0x2f, 0x8c, 0x40, 0xa7, 0x06, 0x39, 0x62, 0x8a, 0x8b, 0x38, + 0x2d, 0x5a, 0x39, 0xde, 0x90, 0x99, 0xf1, 0xc6, 0xd0, 0xfd, 0xdc, 0x7a, 0x63, 0x70, 0xce, 0x3a, + 0xc8, 0xf3, 0x8c, 0xe4, 0x9e, 0xad, 0x9a, 0xee, 0x95, 0xaa, 0x51, 0xd7, 0x26, 0x36, 0xf7, 0x97, + 0x02, 0x8e, 0xf0, 0xd8, 0x0a, 0x6b, 0xdb, 0xd2, 0x5d, 0x8d, 0x72, 0xb7, 0x29, 0x60, 0x7f, 0xc8, + 0xcd, 0x4a, 0x6c, 0x43, 0x15, 0xf7, 0x29, 0x33, 0x2b, 0x1f, 0xa1, 0x17, 0x50, 0x74, 0x1d, 0x32, + 0x6f, 0xb6, 0x9a, 0xf3, 0x76, 0x73, 0xc8, 0xef, 0xd4, 0x3c, 0x2e, 0xb8, 0x0e, 0x69, 0xb6, 0x9a, + 0xed, 0xe6, 0x90, 0xdd, 0x7e, 0x6c, 0x1e, 0x8f, 0x5a, 0x7d, 0x85, 0xf7, 0x46, 0xf2, 0x38, 0xef, + 0x3a, 0x84, 0x8f, 0xd1, 0x2b, 0x90, 0xd8, 0x64, 0xaf, 0xdf, 0x9a, 0xbf, 0x6b, 0xff, 0x43, 0x63, + 0x5c, 0xc7, 0x2d, 0xef, 0x86, 0xac, 0xb8, 0x0e, 0xe9, 0xf5, 0x5b, 0x3e, 0x17, 0xc9, 0x50, 0xf6, + 0x25, 0x87, 0xe3, 0x99, 0xd2, 0xe6, 0x6d, 0x8c, 0x3c, 0x2e, 0x0a, 0x31, 0xce, 0xf2, 0xb7, 0xc2, + 0x64, 0x70, 0xfd, 0x82, 0x37, 0x29, 0xc4, 0x56, 0x98, 0x3f, 0xd5, 0x2f, 0xd0, 0x63, 0xc8, 0xb1, + 0xf9, 0xd9, 0x50, 0xe1, 0x0d, 0x87, 0x3c, 0x3e, 0x70, 0x1d, 0x32, 0x1b, 0x2a, 0xe8, 0x39, 0x00, + 0x9b, 0x50, 0xda, 0xb8, 0x5f, 0x1f, 0x78, 0x17, 0x31, 0xd3, 0x13, 0x0c, 0xf4, 0x16, 0x2a, 0xb6, + 0xa9, 0x1b, 0xce, 0x3c, 0x28, 0xb1, 0x44, 0x37, 0xe0, 0x6f, 0xa2, 0xf5, 0x61, 0xe4, 0xac, 0xda, + 0xf4, 0x9a, 0xd8, 0x26, 0xa1, 0xb8, 0xcc, 0x55, 0x83, 0x23, 0x1c, 0x82, 0xa4, 0xe9, 0xda, 0x9c, + 0x68, 0xab, 0x0d, 0x5a, 0xf5, 0xe3, 0xd1, 0x2a, 0x9a, 0xae, 0xb5, 0xb5, 0x55, 0x00, 0x57, 0x87, + 0x92, 0xbb, 0x0a, 0x6d, 0x4c, 0xf4, 0x09, 0x5e, 0xec, 0x80, 0x9a, 0x0d, 0x15, 0x5c, 0x74, 0x57, + 0xc1, 0x8e, 0xe4, 0x09, 0x1c, 0x25, 0x2f, 0xc6, 0x0b, 0x17, 0xcb, 0xa1, 0x73, 0x55, 0xd7, 0xfd, + 0x6b, 0x25, 0xcf, 0x18, 0x75, 0x5d, 0xb7, 0xd1, 0x13, 0xc8, 0xeb, 0xe4, 0x46, 0xcc, 0x09, 0xb7, + 0xcb, 0xe9, 0xe4, 0x86, 0x4d, 0xc9, 0xbf, 0x83, 0xc3, 0x3b, 0x6b, 0xb2, 0x74, 0xa4, 0xe9, 0xb6, + 0xb5, 0xf2, 0x3c, 0x57, 0x0c, 0x58, 0x00, 0x5f, 0x19, 0xcb, 0xa0, 0xa5, 0xc9, 0x68, 0x79, 0x0e, + 0x9f, 0x8a, 0x77, 0x06, 0xd1, 0xfd, 0xad, 0xf4, 0x4d, 0x4a, 0xec, 0x2b, 0x55, 0x23, 0xc1, 0x87, + 0x7f, 0x07, 0x7b, 0xbc, 0x14, 0x13, 0x5d, 0xd4, 0x68, 0x77, 0x6c, 0xab, 0x16, 0xe6, 0x3a, 0xf2, + 0xbf, 0x65, 0xe1, 0xc9, 0x76, 0xe4, 0xa4, 0x6c, 0xfc, 0xbd, 0x97, 0x79, 0xc5, 0xbb, 0xe0, 0x57, + 0x1f, 0xb7, 0xda, 0x69, 0xa8, 0x20, 0x63, 0xc9, 0x63, 0xcd, 0x8c, 0x43, 0x1c, 0xe7, 0xdc, 0x4f, + 0x0e, 0x1b, 0x0e, 0x2b, 0x68, 0x4c, 0x42, 0x57, 0xaa, 0xf3, 0xfe, 0xdc, 0x8b, 0xcb, 0x60, 0x1c, + 0x8e, 0xfa, 0xfd, 0x68, 0xd4, 0x8f, 0x01, 0xe9, 0xd7, 0xda, 0x5a, 0x21, 0xf6, 0x0d, 0xb1, 0x83, + 0xda, 0x4d, 0x34, 0x4e, 0x3f, 0x89, 0x6c, 0xb2, 0xd5, 0x6b, 0x4e, 0xa2, 0x62, 0x38, 0x41, 0x15, + 0x7d, 0x06, 0x65, 0xdf, 0x95, 0xfa, 0xe6, 0xcc, 0x21, 0x5e, 0x38, 0x47, 0x99, 0x72, 0x13, 0xf6, + 0x78, 0x8d, 0x0d, 0x70, 0x30, 0xac, 0x8f, 0x66, 0xf5, 0x81, 0x94, 0x42, 0x55, 0x28, 0xb2, 0x35, + 0xe6, 0xcd, 0x41, 0xbf, 0x3d, 0x9a, 0x4a, 0xe9, 0x80, 0xa1, 0xb4, 0xf1, 0x0f, 0x6d, 0x2c, 0x65, + 0xd8, 0x73, 0x6e, 0x36, 0x1a, 0xd6, 0x47, 0xf5, 0x6e, 0xbb, 0x25, 0x65, 0xe5, 0xff, 0xcf, 0x02, + 0xba, 0xbb, 0xab, 0x4d, 0xb5, 0x36, 0xb1, 0xec, 0x20, 0x2b, 0x6e, 0x38, 0xe8, 0x15, 0x54, 0xc5, + 0x28, 0x30, 0xb7, 0xe7, 0x3b, 0x71, 0x36, 0x6f, 0xa1, 0x10, 0xd5, 0xe1, 0x85, 0x80, 0x67, 0xf1, + 0x0d, 0x03, 0x9d, 0x80, 0x64, 0x5a, 0x94, 0x3d, 0x1c, 0x2c, 0xdb, 0xa0, 0x2a, 0xef, 0x81, 0x8b, + 0x36, 0xf7, 0x1d, 0x3e, 0x3a, 0x05, 0xa4, 0x5b, 0x23, 0x8b, 0x36, 0x0c, 0x53, 0xdf, 0x2c, 0x2b, + 0xce, 0x22, 0x61, 0x86, 0xdd, 0x97, 0x9a, 0xba, 0x5c, 0x5e, 0xaa, 0xda, 0x7b, 0xaf, 0x7d, 0x27, + 0x52, 0x66, 0x8c, 0x8b, 0xce, 0xe1, 0xc0, 0x56, 0xcd, 0x05, 0x71, 0x6a, 0x39, 0xee, 0xc5, 0xcf, + 0xb6, 0x1c, 0x19, 0x66, 0x42, 0xd8, 0x93, 0x45, 0x1d, 0xc8, 0x59, 0x6b, 0xf1, 0x13, 0x82, 0x78, + 0x87, 0xfc, 0xdd, 0x3d, 0x27, 0x7d, 0x3a, 0x16, 0xe2, 0x6d, 0x93, 0xda, 0xb7, 0xd8, 0x57, 0x46, + 0x4d, 0x28, 0x3a, 0xec, 0x03, 0xb5, 0x9e, 0xe5, 0x50, 0xa7, 0x56, 0xe0, 0x58, 0x9f, 0x6e, 0xc3, + 0x0a, 0x24, 0x71, 0x58, 0xeb, 0xf8, 0x3b, 0x28, 0x85, 0xd1, 0xd9, 0xad, 0xf3, 0x9e, 0xdc, 0x7a, + 0xe7, 0xc6, 0xc8, 0xe8, 0x8b, 0xb7, 0xe0, 0xbd, 0x78, 0xbf, 0xcb, 0x7c, 0x9b, 0x96, 0x2d, 0xa8, + 0xc6, 0xbe, 0x91, 0xdf, 0xa1, 0x8c, 0x18, 0x58, 0x1f, 0x82, 0xbe, 0x57, 0x88, 0x13, 0xcc, 0xcf, + 0xd6, 0x6b, 0xe2, 0xa7, 0x9d, 0x10, 0x27, 0x38, 0x73, 0x5e, 0x0f, 0x85, 0xcf, 0x9c, 0x31, 0xe4, + 0x6f, 0xe1, 0x61, 0xd2, 0x17, 0xf1, 0x57, 0x87, 0xaa, 0x05, 0xaf, 0x0e, 0x55, 0xe3, 0x75, 0xc6, + 0xda, 0xc3, 0xcf, 0x18, 0x6b, 0x39, 0x07, 0xfb, 0xed, 0xd5, 0x9a, 0xde, 0x9e, 0xfc, 0x1a, 0xa4, + 0x78, 0xc7, 0x08, 0x1d, 0x40, 0x66, 0x36, 0x91, 0x52, 0x28, 0x0f, 0x7b, 0xad, 0xf1, 0xc5, 0x48, + 0x4a, 0xa3, 0x1c, 0x64, 0xc7, 0x9d, 0x8e, 0x94, 0x39, 0xf9, 0x02, 0x60, 0xd3, 0x21, 0x62, 0xf1, + 0x82, 0xfb, 0x4a, 0x7f, 0xd4, 0x15, 0xcd, 0x8f, 0x4e, 0x7d, 0x30, 0x60, 0x03, 0xde, 0xfc, 0x68, + 0x8c, 0xa7, 0x3d, 0x29, 0x73, 0xf2, 0xbf, 0x69, 0xc8, 0x79, 0x6d, 0x09, 0x54, 0x80, 0xfd, 0xd1, + 0x6c, 0x38, 0xff, 0x52, 0x4a, 0xf9, 0xe4, 0x99, 0x94, 0xf6, 0xc9, 0xaf, 0xa4, 0x8c, 0x4f, 0x9e, + 0x4b, 0x59, 0x9f, 0xfc, 0x5a, 0xda, 0xf3, 0xc9, 0x37, 0xd2, 0xbe, 0x4f, 0x7e, 0x23, 0x1d, 0xf8, + 0xe4, 0xb7, 0x52, 0xce, 0x27, 0x7f, 0x23, 0xe5, 0xd9, 0x8e, 0xf8, 0x12, 0xaf, 0xa5, 0x42, 0x40, + 0x7f, 0x29, 0x41, 0x40, 0x9f, 0x49, 0xc5, 0x80, 0xfe, 0x4a, 0x2a, 0x05, 0xf4, 0xb9, 0x54, 0x0e, + 0xe8, 0xaf, 0xa5, 0x4a, 0x40, 0xbf, 0x91, 0xaa, 0x01, 0xfd, 0x8d, 0x24, 0x05, 0xf4, 0xb7, 0xd2, + 0x61, 0x40, 0xff, 0x46, 0x42, 0x3e, 0x7d, 0xf6, 0x5a, 0x7a, 0x70, 0xf2, 0x6b, 0x28, 0x85, 0x5b, + 0x2b, 0xcc, 0x78, 0x83, 0xf1, 0x85, 0xb0, 0x67, 0xaf, 0xdf, 0xed, 0x49, 0x69, 0x26, 0x3e, 0x1d, + 0x77, 0xbb, 0x83, 0xb6, 0x94, 0x39, 0x69, 0x41, 0x35, 0xd6, 0x30, 0x60, 0xb6, 0x9c, 0x8d, 0xde, + 0x8d, 0x98, 0xed, 0x53, 0xec, 0x34, 0xea, 0x13, 0x71, 0x06, 0xca, 0xb4, 0x2e, 0x65, 0xd0, 0x03, + 0xa8, 0x2a, 0xd3, 0xfa, 0xbc, 0x53, 0xef, 0x0f, 0xc6, 0x3f, 0xb4, 0xf1, 0xbc, 0x3e, 0x91, 0xb2, + 0x27, 0x2d, 0x28, 0x47, 0xde, 0xcd, 0xe8, 0x11, 0x1c, 0x32, 0xa9, 0xd1, 0x78, 0x3a, 0x6f, 0x8e, + 0x47, 0xa3, 0x76, 0x73, 0xda, 0x6e, 0x09, 0xc3, 0xd7, 0x27, 0xf3, 0x19, 0x03, 0x3c, 0x84, 0x32, + 0x93, 0xd8, 0xcc, 0x66, 0x4e, 0x3e, 0x17, 0xdd, 0x13, 0xbf, 0xfd, 0x80, 0x4a, 0x90, 0xbf, 0x98, + 0xd4, 0xcf, 0xe6, 0x13, 0xe5, 0x9d, 0xd8, 0xff, 0x78, 0xd2, 0x1e, 0x49, 0xe9, 0xb3, 0xff, 0x3e, + 0x82, 0x83, 0xc9, 0xf9, 0xc5, 0x68, 0xf2, 0x25, 0x1a, 0x42, 0xad, 0x4b, 0xa8, 0x7f, 0xbf, 0x45, + 0xae, 0x49, 0x84, 0xa2, 0xf7, 0x0a, 0x73, 0xb8, 0xe3, 0xa7, 0x3b, 0xae, 0x72, 0x39, 0x85, 0x7a, + 0xf0, 0x40, 0x60, 0xfd, 0xd5, 0x48, 0x1d, 0x38, 0xec, 0x12, 0x1a, 0x2b, 0x38, 0x7f, 0x06, 0xce, + 0x18, 0x0e, 0x95, 0x3b, 0x38, 0xbb, 0x74, 0xee, 0x03, 0xfc, 0x3d, 0x54, 0xba, 0x84, 0x86, 0x4b, + 0xe7, 0xa4, 0x5d, 0xd5, 0x22, 0xbc, 0x90, 0xb4, 0x40, 0x50, 0xa2, 0x08, 0x5b, 0xa5, 0x8f, 0x13, + 0xb0, 0xe5, 0x14, 0x6a, 0x41, 0x69, 0xc8, 0x8a, 0xf2, 0xd9, 0x50, 0xe1, 0xb7, 0xc7, 0x3d, 0x05, + 0xd6, 0x16, 0x94, 0x39, 0x7c, 0x22, 0x0e, 0x6b, 0x7b, 0xf1, 0xf1, 0x91, 0x85, 0xcc, 0x96, 0x05, + 0x2c, 0xf8, 0x65, 0x97, 0xd0, 0xfa, 0x72, 0x79, 0x7f, 0xfd, 0x94, 0x64, 0xc3, 0xd3, 0x68, 0xf2, + 0xbf, 0x0f, 0x43, 0x4e, 0xa1, 0x25, 0x7c, 0x16, 0xf2, 0xe6, 0xed, 0xab, 0x45, 0x3b, 0x56, 0x91, + 0x86, 0xce, 0xf1, 0x47, 0x7e, 0xb2, 0x9c, 0x42, 0x43, 0xfe, 0xbe, 0xc4, 0xae, 0xe9, 0xdd, 0x9f, + 0xcf, 0x93, 0x5f, 0x6c, 0xde, 0xb3, 0xf6, 0xf8, 0xd9, 0xb6, 0x69, 0xf6, 0x24, 0xe3, 0x70, 0xd5, + 0x30, 0x1c, 0x7b, 0xb1, 0xde, 0x83, 0xb8, 0xfd, 0x89, 0x28, 0xa7, 0x10, 0x86, 0x47, 0xbd, 0x7e, + 0xab, 0x4b, 0xe8, 0xe6, 0xdd, 0x28, 0x5e, 0x99, 0xdb, 0xb5, 0xee, 0xdd, 0x62, 0x1b, 0x50, 0xaf, + 0xdf, 0x6a, 0xaa, 0xa6, 0x46, 0x96, 0x9b, 0x5d, 0xee, 0x00, 0x4c, 0xf6, 0x8b, 0x11, 0x3c, 0x16, + 0x5b, 0xf3, 0x5e, 0xd5, 0x81, 0x7c, 0xb2, 0x1f, 0x3c, 0xdf, 0x8a, 0xcf, 0x9e, 0xec, 0x72, 0x0a, + 0x35, 0xe0, 0x28, 0xd8, 0x56, 0x7d, 0xb9, 0xbc, 0x07, 0x2e, 0x79, 0x4f, 0x7f, 0xf0, 0xcd, 0x15, + 0x7b, 0xe9, 0xef, 0xfa, 0xba, 0x5f, 0xc4, 0xa7, 0x12, 0xbb, 0x04, 0x7c, 0x83, 0xc5, 0x8e, 0x12, + 0xb4, 0x81, 0x62, 0xc7, 0x1a, 0x6f, 0x0f, 0x6d, 0xd9, 0xe0, 0x3b, 0x80, 0x8e, 0xe2, 0x37, 0x9f, + 0x50, 0xf4, 0xa4, 0x62, 0x4d, 0xae, 0x98, 0xc5, 0xe2, 0x1d, 0x2b, 0x7e, 0x02, 0xe5, 0x8e, 0xd2, + 0x25, 0xd4, 0xef, 0xfd, 0xc4, 0xf0, 0x62, 0x9d, 0xa3, 0x18, 0x5e, 0xbc, 0x61, 0x24, 0xa7, 0xd0, + 0x1f, 0xe1, 0x51, 0x47, 0x69, 0xda, 0x44, 0xa5, 0x24, 0xd2, 0xa9, 0x43, 0xb1, 0xff, 0x1d, 0x24, + 0xf4, 0x09, 0x8f, 0xe5, 0x5d, 0x22, 0xc1, 0x0a, 0xbf, 0x87, 0x22, 0xef, 0x3d, 0x0e, 0x78, 0x59, + 0x1d, 0x3b, 0x95, 0x70, 0x83, 0x35, 0x6e, 0x3e, 0x36, 0x25, 0xa7, 0x5e, 0xa7, 0x51, 0x17, 0x8a, + 0x6d, 0xed, 0x3a, 0xe8, 0x86, 0xed, 0xca, 0x01, 0x3b, 0xe6, 0xe4, 0x14, 0xea, 0x03, 0x12, 0x29, + 0x26, 0xf2, 0x53, 0xc5, 0xf6, 0xe6, 0xf4, 0xf1, 0x51, 0x72, 0x83, 0x5c, 0x4e, 0xa1, 0xdf, 0x42, + 0xa9, 0x4b, 0xe8, 0xa6, 0xb1, 0x9e, 0xe4, 0xaf, 0xdb, 0xb5, 0x3b, 0x70, 0x24, 0xcc, 0x11, 0x30, + 0x9b, 0xd7, 0xa2, 0x28, 0xff, 0x69, 0x38, 0x18, 0x0e, 0x15, 0x6a, 0xd9, 0xe4, 0xc2, 0xb8, 0xda, + 0x7c, 0xcf, 0x2f, 0x63, 0xe2, 0xdb, 0x7e, 0x0f, 0xda, 0xe2, 0xae, 0x13, 0x78, 0xc4, 0x72, 0x0f, + 0x83, 0xd5, 0x23, 0xb8, 0xbb, 0xec, 0xbe, 0xdd, 0x86, 0x1c, 0xb1, 0xe6, 0xfd, 0xde, 0xf7, 0xd3, + 0x40, 0xb7, 0x7f, 0xf7, 0x10, 0x9e, 0x70, 0x2c, 0xff, 0xc2, 0xf8, 0x68, 0xc8, 0xe4, 0x4f, 0x1e, + 0x8b, 0xe3, 0x48, 0xd8, 0x5e, 0xd2, 0x71, 0x7c, 0xb2, 0x1d, 0x5f, 0xfc, 0x70, 0x90, 0x42, 0x53, + 0x78, 0xba, 0x01, 0x8c, 0xff, 0x85, 0xeb, 0x67, 0xa3, 0x0e, 0xe1, 0x88, 0x23, 0xde, 0x05, 0x7c, + 0xbe, 0xfd, 0xcf, 0x5f, 0x0a, 0xd9, 0x96, 0x97, 0x86, 0x70, 0xd4, 0x25, 0x34, 0xfa, 0xd7, 0xb0, + 0xed, 0xce, 0xbc, 0x7b, 0x09, 0x5e, 0x94, 0x3c, 0x17, 0xc7, 0x11, 0x9f, 0xc3, 0x64, 0xbd, 0x64, + 0xaf, 0xd9, 0x7b, 0x36, 0x79, 0xef, 0x02, 0x7f, 0x80, 0x27, 0xc9, 0x0b, 0xd4, 0x75, 0xfd, 0xaf, + 0x05, 0xbf, 0x3c, 0xe0, 0x7f, 0xbf, 0xfb, 0xea, 0x2f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x95, 0x67, + 0xb2, 0x29, 0x8c, 0x27, 0x00, 0x00, } diff --git a/proto/grpc.proto b/proto/grpc.proto index 8094715..5ae7d89 100644 --- a/proto/grpc.proto +++ b/proto/grpc.proto @@ -51,7 +51,7 @@ service P4WNP1 { // TriggerActions rpc ListStoredTriggerActionSets(Empty) returns (StringMessageArray) {} - rpc StoreTriggerActionSets(TriggerActionSetRequestStorage) returns (Empty) {} + rpc StoreTriggerActionSets(TriggerActionSet) returns (Empty) {} rpc GetTriggerActionsState(Empty) returns (TriggerActionSet) {} rpc DeployTriggerActionSetReplace(TriggerActionSet) returns (TriggerActionSet) {} // Adds a set of additional TriggerActions, returns a set of all Triggeractions registered afterwards rpc DeployTriggerActionSetAdd(TriggerActionSet) returns (TriggerActionSet) {} // Replaces registered TriggerActions with given set, returns a set ONLY OF ADDED TriggerActions (with assigned IDs) @@ -60,12 +60,9 @@ service P4WNP1 { /* Triggers, Actions and resulting TriggerActions */ message TriggerActionSet { repeated TriggerAction TriggerActions = 1; + string Name = 2; } -message TriggerActionSetRequestStorage { - string TemplateName = 1; - TriggerActionSet set = 2; -} message TriggerAction { diff --git a/service/rpc_server.go b/service/rpc_server.go index 79de61b..4932c1a 100644 --- a/service/rpc_server.go +++ b/service/rpc_server.go @@ -39,9 +39,9 @@ type server struct { listenAddrWeb string } -func (s *server) StoreTriggerActionSets(ctx context.Context, sr *pb.TriggerActionSetRequestStorage) (e *pb.Empty, err error) { +func (s *server) StoreTriggerActionSets(ctx context.Context, set *pb.TriggerActionSet) (e *pb.Empty, err error) { e = &pb.Empty{} - err = s.rootSvc.SubSysDataStore.Put(cSTORE_PREFIX_TRIGGER_ACTION_SET+ sr.TemplateName, sr.Set, true) + err = s.rootSvc.SubSysDataStore.Put(cSTORE_PREFIX_TRIGGER_ACTION_SET+ set.Name, set, true) return } diff --git a/web_client/hvueComponentsTriggerActions.go b/web_client/hvueComponentsTriggerActions.go index 2122426..ea04c31 100644 --- a/web_client/hvueComponentsTriggerActions.go +++ b/web_client/hvueComponentsTriggerActions.go @@ -146,15 +146,26 @@ func InitComponentsTriggerActions() { hvue.DataFunc(func(vm *hvue.VM) interface{} { data := struct { *js.Object - TriggerAction *jsTriggerAction `js:"TriggerAction"` + ShowLoadModal bool `js:"showLoadModal"` + TemplateName string `js:"templateName"` }{Object: O()} - data.TriggerAction = NewTriggerAction() + data.ShowLoadModal = false + data.TemplateName = "" return &data }), hvue.Method("addTA", func(vm *hvue.VM) { vm.Get("$store").Call("dispatch", VUEX_ACTION_ADD_NEW_TRIGGER_ACTION) }), + hvue.Method("storeTAS", + func(vm *hvue.VM) { + tas := vm.Get("$store").Get("state").Get("triggerActionList") + vm.Get("$store").Call("dispatch", VUEX_ACTION_STORE_TRIGGER_ACTION_SET, tas) + }), + hvue.Method("updateStoredTriggerActionSetsList", + func(vm *hvue.VM) { + vm.Store.Call("dispatch", VUEX_ACTION_UPDATE_STORED_TRIGGER_ACTION_SETS_LIST) + }), hvue.Mounted(func(vm *hvue.VM) { vm.Store.Call("dispatch", VUEX_ACTION_UPDATE_TRIGGER_ACTIONS) }), @@ -683,11 +694,45 @@ const templateAction = ` const templateTriggerActionManager = ` + + + + + + Load TriggerAction Set + + + + + + + + + + {{ tname }} + + + + + + + + + + + + + + + +
+ +
diff --git a/web_client/jsDataHandling.go b/web_client/jsDataHandling.go index f505b47..b293fb8 100644 --- a/web_client/jsDataHandling.go +++ b/web_client/jsDataHandling.go @@ -943,43 +943,3 @@ func (data *jsEventReceiver) HandleEvent(ev *pb.Event) { } -/* TriggerActions */ -type jsTriggerActionList struct { - *js.Object - TriggerActions *js.Object `js:"TriggerActions"` -} - -func NewTriggerActionList() *jsTriggerActionList { - tal := &jsTriggerActionList{Object: O()} - tal.TriggerActions = O() - return tal -} - -func (tal *jsTriggerActionList) UpdateEntry(ta *jsTriggerAction) { - key := strconv.Itoa(int(ta.Id)) - - //Check if job exists, update existing one if already present - var updateTa *jsTriggerAction - if res := tal.TriggerActions.Get(key); res == js.Undefined { - updateTa = &jsTriggerAction{Object: O()} - } else { - updateTa = &jsTriggerAction{Object: res} - } - - //Create job object - updateTa.Id = ta.Id - updateTa.IsActive = ta.IsActive - updateTa.Immutable = ta.Immutable - updateTa.OneShot = ta.OneShot - updateTa.ActionType = ta.ActionType - updateTa.TriggerType = ta.TriggerType - updateTa.TriggerData = ta.TriggerData - updateTa.ActionData = ta.ActionData - - hvue.Set(tal.TriggerActions, key, updateTa) -} - -func (tal *jsTriggerActionList) DeleteEntry(id uint32) { - tal.TriggerActions.Delete(strconv.Itoa(int(id))) //JS version - //delete(jl.Jobs, strconv.Itoa(int(id))) -} diff --git a/web_client/jsDataTriggerAction.go b/web_client/jsDataTriggerAction.go index d3f059e..5658ee3 100644 --- a/web_client/jsDataTriggerAction.go +++ b/web_client/jsDataTriggerAction.go @@ -1,8 +1,12 @@ +// +build js + package main import ( "github.com/gopherjs/gopherjs/js" pb "github.com/mame82/P4wnP1_go/proto/gopherjs" + "github.com/mame82/hvue" + "strconv" ) type triggerType int @@ -617,3 +621,65 @@ var availableTemplateTypes = []TemplateType{ TemplateTypeBluetooth, TemplateTypeTriggerActions, } + + + +/* TriggerActions */ +type jsTriggerActionSet struct { + *js.Object + Name string `js:"Name"` + TriggerActions *js.Object `js:"TriggerActions"` +} + +func NewTriggerActionList() *jsTriggerActionSet { + tal := &jsTriggerActionSet{Object: O()} + tal.TriggerActions = O() + tal.Name = "default_ta_set" + return tal +} + +func (tal *jsTriggerActionSet) UpdateEntry(ta *jsTriggerAction) { + key := strconv.Itoa(int(ta.Id)) + + //Check if job exists, update existing one if already present + var updateTa *jsTriggerAction + if res := tal.TriggerActions.Get(key); res == js.Undefined { + updateTa = &jsTriggerAction{Object: O()} + } else { + updateTa = &jsTriggerAction{Object: res} + } + + //Create job object + updateTa.Id = ta.Id + updateTa.IsActive = ta.IsActive + updateTa.Immutable = ta.Immutable + updateTa.OneShot = ta.OneShot + updateTa.ActionType = ta.ActionType + updateTa.TriggerType = ta.TriggerType + updateTa.TriggerData = ta.TriggerData + updateTa.ActionData = ta.ActionData + + hvue.Set(tal.TriggerActions, key, updateTa) +} + +func (tal *jsTriggerActionSet) DeleteEntry(id uint32) { + tal.TriggerActions.Delete(strconv.Itoa(int(id))) //JS version + //delete(jl.Jobs, strconv.Itoa(int(id))) +} + +func (src jsTriggerActionSet) toGo() (target *pb.TriggerActionSet) { + js_ta_array := js.Global.Get("Object").Call("values", src.TriggerActions) + count := js_ta_array.Length() + // println("tal len:", count) + // iterate over array + target = &pb.TriggerActionSet{ + Name: src.Name, + } + target.TriggerActions = make([]*pb.TriggerAction, count) + for i:=0;i