USB load&store, minor fixes

This commit is contained in:
MaMe82 2018-10-15 14:29:46 +02:00
parent c11f7ec2cb
commit be227cbd67
10 changed files with 861 additions and 275 deletions

View File

@ -48,6 +48,7 @@
HIDRunningJobStateResult
HIDScriptResult
LEDSettings
USBRequestSettingsStorage
GadgetSettings
GadgetSettingsEthernet
GadgetSettingsUMS
@ -4044,6 +4045,88 @@ func (m *LEDSettings) Unmarshal(rawBytes []byte) (*LEDSettings, error) {
}
// USB Gadget
type USBRequestSettingsStorage struct {
TemplateName string
Settings *GadgetSettings
}
// GetTemplateName gets the TemplateName of the USBRequestSettingsStorage.
func (m *USBRequestSettingsStorage) GetTemplateName() (x string) {
if m == nil {
return x
}
return m.TemplateName
}
// GetSettings gets the Settings of the USBRequestSettingsStorage.
func (m *USBRequestSettingsStorage) GetSettings() (x *GadgetSettings) {
if m == nil {
return x
}
return m.Settings
}
// MarshalToWriter marshals USBRequestSettingsStorage to the provided writer.
func (m *USBRequestSettingsStorage) MarshalToWriter(writer jspb.Writer) {
if m == nil {
return
}
if len(m.TemplateName) > 0 {
writer.WriteString(1, m.TemplateName)
}
if m.Settings != nil {
writer.WriteMessage(2, func() {
m.Settings.MarshalToWriter(writer)
})
}
return
}
// Marshal marshals USBRequestSettingsStorage to a slice of bytes.
func (m *USBRequestSettingsStorage) Marshal() []byte {
writer := jspb.NewWriter()
m.MarshalToWriter(writer)
return writer.GetResult()
}
// UnmarshalFromReader unmarshals a USBRequestSettingsStorage from the provided reader.
func (m *USBRequestSettingsStorage) UnmarshalFromReader(reader jspb.Reader) *USBRequestSettingsStorage {
for reader.Next() {
if m == nil {
m = &USBRequestSettingsStorage{}
}
switch reader.GetFieldNumber() {
case 1:
m.TemplateName = reader.ReadString()
case 2:
reader.ReadMessage(func() {
m.Settings = m.Settings.UnmarshalFromReader(reader)
})
default:
reader.SkipField()
}
}
return m
}
// Unmarshal unmarshals a USBRequestSettingsStorage from a slice of bytes.
func (m *USBRequestSettingsStorage) Unmarshal(rawBytes []byte) (*USBRequestSettingsStorage, error) {
reader := jspb.NewReader(rawBytes)
m = m.UnmarshalFromReader(reader)
if err := reader.Err(); err != nil {
return nil, err
}
return m, nil
}
type GadgetSettings struct {
Enabled bool
Vid string
@ -5260,6 +5343,11 @@ type P4WNP1Client interface {
GetLEDSettings(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*LEDSettings, error)
SetLEDSettings(ctx context.Context, in *LEDSettings, opts ...grpcweb.CallOption) (*Empty, error)
MountUMSFile(ctx context.Context, in *GadgetSettingsUMS, opts ...grpcweb.CallOption) (*Empty, error)
StoreUSBSettings(ctx context.Context, in *USBRequestSettingsStorage, opts ...grpcweb.CallOption) (*Empty, error)
GetStoredUSBSettings(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*GadgetSettings, error)
DeployStoredUSBSettings(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*GadgetSettings, error)
StoreDeployedUSBSettings(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*Empty, error)
ListStoredUSBSettings(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*StringMessageArray, error)
// HIDScript / job management
HIDRunScript(ctx context.Context, in *HIDScriptRequest, opts ...grpcweb.CallOption) (*HIDScriptResult, error)
HIDRunScriptJob(ctx context.Context, in *HIDScriptRequest, opts ...grpcweb.CallOption) (*HIDScriptJob, error)
@ -5381,6 +5469,51 @@ func (c *p4WNP1Client) MountUMSFile(ctx context.Context, in *GadgetSettingsUMS,
return new(Empty).Unmarshal(resp)
}
func (c *p4WNP1Client) StoreUSBSettings(ctx context.Context, in *USBRequestSettingsStorage, opts ...grpcweb.CallOption) (*Empty, error) {
resp, err := c.client.RPCCall(ctx, "StoreUSBSettings", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(Empty).Unmarshal(resp)
}
func (c *p4WNP1Client) GetStoredUSBSettings(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*GadgetSettings, error) {
resp, err := c.client.RPCCall(ctx, "GetStoredUSBSettings", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(GadgetSettings).Unmarshal(resp)
}
func (c *p4WNP1Client) DeployStoredUSBSettings(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*GadgetSettings, error) {
resp, err := c.client.RPCCall(ctx, "DeployStoredUSBSettings", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(GadgetSettings).Unmarshal(resp)
}
func (c *p4WNP1Client) StoreDeployedUSBSettings(ctx context.Context, in *StringMessage, opts ...grpcweb.CallOption) (*Empty, error) {
resp, err := c.client.RPCCall(ctx, "StoreDeployedUSBSettings", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(Empty).Unmarshal(resp)
}
func (c *p4WNP1Client) ListStoredUSBSettings(ctx context.Context, in *Empty, opts ...grpcweb.CallOption) (*StringMessageArray, error) {
resp, err := c.client.RPCCall(ctx, "ListStoredUSBSettings", in.Marshal(), opts...)
if err != nil {
return nil, err
}
return new(StringMessageArray).Unmarshal(resp)
}
func (c *p4WNP1Client) HIDRunScript(ctx context.Context, in *HIDScriptRequest, opts ...grpcweb.CallOption) (*HIDScriptResult, error) {
resp, err := c.client.RPCCall(ctx, "HIDRunScript", in.Marshal(), opts...)
if err != nil {

View File

@ -48,6 +48,7 @@ It has these top-level messages:
HIDRunningJobStateResult
HIDScriptResult
LEDSettings
USBRequestSettingsStorage
GadgetSettings
GadgetSettingsEthernet
GadgetSettingsUMS
@ -386,7 +387,7 @@ 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{46, 0}
}
// Triggers, Actions and resulting TriggerActions
@ -2045,6 +2046,30 @@ func (m *LEDSettings) GetBlinkCount() uint32 {
}
// USB Gadget
type USBRequestSettingsStorage struct {
TemplateName string `protobuf:"bytes,1,opt,name=TemplateName" json:"TemplateName,omitempty"`
Settings *GadgetSettings `protobuf:"bytes,2,opt,name=settings" json:"settings,omitempty"`
}
func (m *USBRequestSettingsStorage) Reset() { *m = USBRequestSettingsStorage{} }
func (m *USBRequestSettingsStorage) String() string { return proto.CompactTextString(m) }
func (*USBRequestSettingsStorage) ProtoMessage() {}
func (*USBRequestSettingsStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{40} }
func (m *USBRequestSettingsStorage) GetTemplateName() string {
if m != nil {
return m.TemplateName
}
return ""
}
func (m *USBRequestSettingsStorage) GetSettings() *GadgetSettings {
if m != nil {
return m.Settings
}
return nil
}
type GadgetSettings struct {
Enabled bool `protobuf:"varint,1,opt,name=enabled" json:"enabled,omitempty"`
Vid string `protobuf:"bytes,2,opt,name=vid" json:"vid,omitempty"`
@ -2067,7 +2092,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{40} }
func (*GadgetSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{41} }
func (m *GadgetSettings) GetEnabled() bool {
if m != nil {
@ -2189,7 +2214,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{41} }
func (*GadgetSettingsEthernet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{42} }
func (m *GadgetSettingsEthernet) GetHostAddr() string {
if m != nil {
@ -2213,7 +2238,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{42} }
func (*GadgetSettingsUMS) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} }
func (m *GadgetSettingsUMS) GetCdrom() bool {
if m != nil {
@ -2238,7 +2263,7 @@ type EthernetRequestSettingsStorage struct {
func (m *EthernetRequestSettingsStorage) Reset() { *m = EthernetRequestSettingsStorage{} }
func (m *EthernetRequestSettingsStorage) String() string { return proto.CompactTextString(m) }
func (*EthernetRequestSettingsStorage) ProtoMessage() {}
func (*EthernetRequestSettingsStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{43} }
func (*EthernetRequestSettingsStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{44} }
func (m *EthernetRequestSettingsStorage) GetTemplateName() string {
if m != nil {
@ -2262,7 +2287,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{45}
}
func (m *DeployedEthernetInterfaceSettings) GetList() []*EthernetInterfaceSettings {
@ -2285,7 +2310,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{46} }
func (m *EthernetInterfaceSettings) GetName() string {
if m != nil {
@ -2353,7 +2378,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{47} }
func (m *DHCPServerSettings) GetListenPort() uint32 {
if m != nil {
@ -2428,7 +2453,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{48} }
func (m *DHCPServerRange) GetRangeLower() string {
if m != nil {
@ -2460,7 +2485,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{49} }
func (m *DHCPServerStaticHost) GetMac() string {
if m != nil {
@ -2482,7 +2507,7 @@ 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{50} }
func init() {
proto.RegisterType((*TriggerActionSet)(nil), "P4wnP1_grpc.TriggerActionSet")
@ -2525,6 +2550,7 @@ func init() {
proto.RegisterType((*HIDRunningJobStateResult)(nil), "P4wnP1_grpc.HIDRunningJobStateResult")
proto.RegisterType((*HIDScriptResult)(nil), "P4wnP1_grpc.HIDScriptResult")
proto.RegisterType((*LEDSettings)(nil), "P4wnP1_grpc.LEDSettings")
proto.RegisterType((*USBRequestSettingsStorage)(nil), "P4wnP1_grpc.USBRequestSettingsStorage")
proto.RegisterType((*GadgetSettings)(nil), "P4wnP1_grpc.GadgetSettings")
proto.RegisterType((*GadgetSettingsEthernet)(nil), "P4wnP1_grpc.GadgetSettingsEthernet")
proto.RegisterType((*GadgetSettingsUMS)(nil), "P4wnP1_grpc.GadgetSettingsUMS")
@ -2566,6 +2592,11 @@ type P4WNP1Client interface {
GetLEDSettings(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*LEDSettings, error)
SetLEDSettings(ctx context.Context, in *LEDSettings, opts ...grpc.CallOption) (*Empty, error)
MountUMSFile(ctx context.Context, in *GadgetSettingsUMS, opts ...grpc.CallOption) (*Empty, error)
StoreUSBSettings(ctx context.Context, in *USBRequestSettingsStorage, opts ...grpc.CallOption) (*Empty, error)
GetStoredUSBSettings(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*GadgetSettings, error)
DeployStoredUSBSettings(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*GadgetSettings, error)
StoreDeployedUSBSettings(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*Empty, error)
ListStoredUSBSettings(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*StringMessageArray, error)
// HIDScript / job management
HIDRunScript(ctx context.Context, in *HIDScriptRequest, opts ...grpc.CallOption) (*HIDScriptResult, error)
HIDRunScriptJob(ctx context.Context, in *HIDScriptRequest, opts ...grpc.CallOption) (*HIDScriptJob, error)
@ -2684,6 +2715,51 @@ func (c *p4WNP1Client) MountUMSFile(ctx context.Context, in *GadgetSettingsUMS,
return out, nil
}
func (c *p4WNP1Client) StoreUSBSettings(ctx context.Context, in *USBRequestSettingsStorage, opts ...grpc.CallOption) (*Empty, error) {
out := new(Empty)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/StoreUSBSettings", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) GetStoredUSBSettings(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*GadgetSettings, error) {
out := new(GadgetSettings)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/GetStoredUSBSettings", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) DeployStoredUSBSettings(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*GadgetSettings, error) {
out := new(GadgetSettings)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/DeployStoredUSBSettings", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) StoreDeployedUSBSettings(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*Empty, error) {
out := new(Empty)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/StoreDeployedUSBSettings", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) ListStoredUSBSettings(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*StringMessageArray, error) {
out := new(StringMessageArray)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/ListStoredUSBSettings", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) HIDRunScript(ctx context.Context, in *HIDScriptRequest, opts ...grpc.CallOption) (*HIDScriptResult, error) {
out := new(HIDScriptResult)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/HIDRunScript", in, out, c.cc, opts...)
@ -3060,6 +3136,11 @@ type P4WNP1Server interface {
GetLEDSettings(context.Context, *Empty) (*LEDSettings, error)
SetLEDSettings(context.Context, *LEDSettings) (*Empty, error)
MountUMSFile(context.Context, *GadgetSettingsUMS) (*Empty, error)
StoreUSBSettings(context.Context, *USBRequestSettingsStorage) (*Empty, error)
GetStoredUSBSettings(context.Context, *StringMessage) (*GadgetSettings, error)
DeployStoredUSBSettings(context.Context, *StringMessage) (*GadgetSettings, error)
StoreDeployedUSBSettings(context.Context, *StringMessage) (*Empty, error)
ListStoredUSBSettings(context.Context, *Empty) (*StringMessageArray, error)
// HIDScript / job management
HIDRunScript(context.Context, *HIDScriptRequest) (*HIDScriptResult, error)
HIDRunScriptJob(context.Context, *HIDScriptRequest) (*HIDScriptJob, error)
@ -3237,6 +3318,96 @@ func _P4WNP1_MountUMSFile_Handler(srv interface{}, ctx context.Context, dec func
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_StoreUSBSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(USBRequestSettingsStorage)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).StoreUSBSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/StoreUSBSettings",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).StoreUSBSettings(ctx, req.(*USBRequestSettingsStorage))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_GetStoredUSBSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(StringMessage)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).GetStoredUSBSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/GetStoredUSBSettings",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).GetStoredUSBSettings(ctx, req.(*StringMessage))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_DeployStoredUSBSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(StringMessage)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).DeployStoredUSBSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/DeployStoredUSBSettings",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).DeployStoredUSBSettings(ctx, req.(*StringMessage))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_StoreDeployedUSBSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(StringMessage)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).StoreDeployedUSBSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/StoreDeployedUSBSettings",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).StoreDeployedUSBSettings(ctx, req.(*StringMessage))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_ListStoredUSBSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).ListStoredUSBSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/ListStoredUSBSettings",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).ListStoredUSBSettings(ctx, req.(*Empty))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_HIDRunScript_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(HIDScriptRequest)
if err := dec(in); err != nil {
@ -3956,6 +4127,26 @@ var _P4WNP1_serviceDesc = grpc.ServiceDesc{
MethodName: "MountUMSFile",
Handler: _P4WNP1_MountUMSFile_Handler,
},
{
MethodName: "StoreUSBSettings",
Handler: _P4WNP1_StoreUSBSettings_Handler,
},
{
MethodName: "GetStoredUSBSettings",
Handler: _P4WNP1_GetStoredUSBSettings_Handler,
},
{
MethodName: "DeployStoredUSBSettings",
Handler: _P4WNP1_DeployStoredUSBSettings_Handler,
},
{
MethodName: "StoreDeployedUSBSettings",
Handler: _P4WNP1_StoreDeployedUSBSettings_Handler,
},
{
MethodName: "ListStoredUSBSettings",
Handler: _P4WNP1_ListStoredUSBSettings_Handler,
},
{
MethodName: "HIDRunScript",
Handler: _P4WNP1_HIDRunScript_Handler,
@ -4118,233 +4309,238 @@ var _P4WNP1_serviceDesc = grpc.ServiceDesc{
func init() { proto.RegisterFile("grpc.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{
// 3646 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x5a, 0x49, 0x77, 0x23, 0x47,
0x72, 0xc6, 0xc2, 0x05, 0x08, 0x00, 0x44, 0x31, 0x9b, 0x64, 0xa3, 0xd9, 0xab, 0x4a, 0xcb, 0xd0,
0x1c, 0x0f, 0x25, 0x51, 0x54, 0x4b, 0xa3, 0x37, 0x63, 0x0d, 0x76, 0xa0, 0x1b, 0xdb, 0xcb, 0x02,
0x44, 0x8f, 0xc7, 0x6f, 0x30, 0xc5, 0xaa, 0x24, 0x58, 0x6a, 0xa0, 0x0a, 0xae, 0x85, 0x2d, 0xfa,
0x30, 0x7e, 0xcf, 0x27, 0x1f, 0x7c, 0xf7, 0x5f, 0xf0, 0xc9, 0x37, 0xdb, 0xbf, 0xc8, 0x77, 0x5f,
0x7c, 0xf6, 0xbc, 0xcc, 0xac, 0x9d, 0x05, 0x90, 0xdd, 0xfd, 0x74, 0x8b, 0x8c, 0x8a, 0xfc, 0x32,
0x32, 0x22, 0x32, 0x32, 0x32, 0x00, 0x80, 0x99, 0xb9, 0x54, 0x4e, 0x96, 0xa6, 0x61, 0x1b, 0xa8,
0x30, 0x3a, 0x7b, 0xab, 0x8f, 0xbe, 0x9c, 0x52, 0x96, 0xf8, 0x23, 0x08, 0x63, 0x53, 0x9b, 0xcd,
0x88, 0x59, 0x55, 0x6c, 0xcd, 0xd0, 0x25, 0x62, 0xa3, 0x1a, 0xec, 0x44, 0x78, 0x56, 0x25, 0xfd,
0x22, 0x7b, 0x54, 0x38, 0x3d, 0x3c, 0x09, 0xcd, 0x3c, 0x89, 0x88, 0xe0, 0xd8, 0x0c, 0x84, 0x60,
0x63, 0x20, 0x2f, 0x48, 0x25, 0xf3, 0x22, 0x7d, 0x94, 0xc7, 0x8c, 0x16, 0xff, 0x0b, 0xa0, 0x14,
0x11, 0x43, 0x3b, 0x90, 0xd1, 0xd4, 0x4a, 0xfa, 0x45, 0xfa, 0xa8, 0x84, 0x33, 0x9a, 0x8a, 0x2a,
0xb0, 0x6d, 0xe8, 0x44, 0xba, 0x32, 0x6c, 0x36, 0x31, 0x87, 0xbd, 0x21, 0x3a, 0x84, 0x9c, 0x66,
0xd1, 0x59, 0xd7, 0xa4, 0x92, 0x65, 0x9f, 0xfc, 0x31, 0x7a, 0x02, 0x79, 0x6d, 0xb1, 0x70, 0x6c,
0xf9, 0x62, 0x4e, 0x2a, 0x1b, 0xec, 0x63, 0xc0, 0x40, 0x3d, 0xd8, 0xb1, 0x88, 0x79, 0xad, 0x29,
0x44, 0xb2, 0x65, 0xd3, 0x26, 0x6a, 0x65, 0xf3, 0x45, 0xfa, 0xa8, 0x70, 0x2a, 0x26, 0xed, 0x46,
0x8a, 0x48, 0x76, 0x52, 0x38, 0x36, 0x17, 0xfd, 0x2d, 0x20, 0xc7, 0xba, 0x68, 0xcb, 0xea, 0x8c,
0xd8, 0x75, 0x43, 0xd7, 0x89, 0x42, 0x11, 0xb7, 0x18, 0xe2, 0x67, 0x49, 0x88, 0x13, 0xa9, 0x16,
0x93, 0xee, 0xa4, 0x70, 0x02, 0x06, 0x92, 0x61, 0xdf, 0xe7, 0x36, 0x34, 0x4b, 0xf1, 0xc1, 0xb7,
0x19, 0xf8, 0x5f, 0xad, 0x05, 0x0f, 0x4f, 0xe8, 0xa4, 0x70, 0x32, 0x12, 0xea, 0x42, 0xe9, 0xad,
0x76, 0xa9, 0x55, 0x47, 0x9e, 0x25, 0x72, 0x0c, 0xfa, 0xa3, 0x24, 0xe8, 0xf3, 0xb0, 0x60, 0x27,
0x85, 0xa3, 0x33, 0xa9, 0x1d, 0x28, 0xc3, 0x57, 0xbf, 0x6a, 0x49, 0xb6, 0x5c, 0xc9, 0xaf, 0xb6,
0xc3, 0xf9, 0x2d, 0x69, 0x6a, 0x87, 0xdb, 0x18, 0xe8, 0x3b, 0xc8, 0x59, 0xd6, 0x55, 0xcf, 0x98,
0x69, 0x7a, 0x05, 0x18, 0xde, 0x93, 0x44, 0x4f, 0x49, 0x1d, 0x26, 0xd3, 0x49, 0x61, 0x5f, 0x1e,
0x61, 0x10, 0xd4, 0x2b, 0x65, 0xd9, 0x23, 0xb2, 0x45, 0xda, 0xa6, 0xac, 0xd3, 0x3d, 0x16, 0x18,
0xc6, 0x27, 0x49, 0x18, 0x8d, 0x4e, 0x7d, 0x14, 0x96, 0xed, 0xa4, 0xf0, 0xad, 0xf9, 0xa8, 0x05,
0xc5, 0x99, 0x69, 0x38, 0x4b, 0x4c, 0x14, 0x42, 0xa3, 0xaf, 0xc8, 0xf0, 0x5e, 0x24, 0xe1, 0xb5,
0x43, 0x72, 0x9d, 0x14, 0x8e, 0xcc, 0x43, 0x7f, 0x84, 0xbd, 0xf0, 0x58, 0x22, 0xff, 0xe0, 0x10,
0x5d, 0x21, 0x95, 0x12, 0xc3, 0x3b, 0xba, 0x0b, 0xcf, 0x93, 0xef, 0xa4, 0x70, 0x22, 0x0e, 0x3a,
0x83, 0xad, 0xd9, 0x52, 0x33, 0xba, 0x7a, 0x65, 0x87, 0x21, 0x26, 0x9e, 0xd6, 0xf6, 0xa8, 0x3b,
0xec, 0x52, 0x9b, 0xb9, 0xb2, 0xa8, 0x01, 0x70, 0x21, 0x5b, 0x57, 0x92, 0x62, 0x6a, 0x4b, 0xbb,
0x52, 0x4e, 0x38, 0x19, 0x6e, 0x5e, 0xa0, 0x7e, 0xaf, 0xf9, 0x92, 0x9d, 0x34, 0x0e, 0xcd, 0x43,
0x55, 0xc8, 0x5f, 0x69, 0xaa, 0x0b, 0x22, 0x24, 0x04, 0x55, 0x08, 0xa4, 0xd3, 0x6d, 0xf8, 0x18,
0xc1, 0x2c, 0xa4, 0xc0, 0x81, 0x4a, 0x96, 0x73, 0xe3, 0x46, 0x22, 0xb6, 0xad, 0xe9, 0x33, 0x6b,
0x4c, 0x16, 0xcb, 0xb9, 0x6c, 0x93, 0xca, 0x6e, 0x42, 0xfc, 0x73, 0xbc, 0x46, 0xe2, 0x84, 0x4e,
0x1a, 0xaf, 0x80, 0x42, 0xc7, 0x90, 0x9d, 0x1b, 0xb3, 0x0a, 0x62, 0x88, 0x07, 0x09, 0x88, 0x3d,
0x63, 0xd6, 0x49, 0x63, 0x2a, 0x84, 0x5e, 0xc2, 0x36, 0xb5, 0xd1, 0xd0, 0xb1, 0x2b, 0x0f, 0x12,
0x0c, 0xca, 0xe5, 0xa9, 0x3d, 0x87, 0x0e, 0xdd, 0x8a, 0x27, 0x8c, 0x7e, 0x03, 0x79, 0xe6, 0x1f,
0x89, 0xe8, 0x6a, 0x65, 0x2f, 0x21, 0x80, 0xdd, 0x99, 0x9e, 0x0c, 0x35, 0x83, 0x3f, 0xa1, 0x96,
0x87, 0x6d, 0xd7, 0x55, 0xb5, 0x1c, 0x6c, 0x71, 0x51, 0xf1, 0x21, 0xec, 0x27, 0xe6, 0x27, 0xf1,
0x31, 0x3c, 0x5a, 0x99, 0x66, 0xc4, 0x67, 0xf0, 0x64, 0x5d, 0x9a, 0x10, 0x0f, 0x60, 0x2f, 0xe9,
0xac, 0x87, 0x40, 0x6f, 0x9f, 0x59, 0xf1, 0x73, 0x28, 0xc7, 0x0e, 0x20, 0x4d, 0xbf, 0x73, 0x4a,
0x4c, 0x2c, 0x62, 0xb2, 0x5c, 0x9e, 0xc7, 0x01, 0x43, 0x7c, 0x04, 0x0f, 0x57, 0x9c, 0x36, 0xb1,
0x0b, 0x0f, 0x12, 0x02, 0x9d, 0xe2, 0x31, 0x7b, 0xb0, 0xfb, 0xc3, 0xc5, 0xf3, 0x19, 0x68, 0x0f,
0x36, 0xaf, 0xe5, 0xb9, 0xc3, 0x6f, 0x96, 0x4d, 0xcc, 0x07, 0xe2, 0x3f, 0xc1, 0xe3, 0x35, 0x67,
0xe6, 0x0e, 0xc8, 0x63, 0x10, 0xba, 0x33, 0xdd, 0x30, 0xc9, 0xd0, 0xb1, 0x87, 0x97, 0x43, 0x53,
0x25, 0xa6, 0x7b, 0xfd, 0xdc, 0xe2, 0xa3, 0x03, 0xd8, 0x62, 0x2b, 0x5a, 0x95, 0xec, 0x8b, 0xec,
0xd1, 0x26, 0x76, 0x47, 0xe2, 0x7f, 0xa7, 0xfd, 0xbb, 0x8d, 0x9f, 0x31, 0x74, 0xc2, 0xe3, 0x67,
0xe0, 0x2c, 0xd8, 0x8a, 0x3b, 0xa7, 0x7b, 0x91, 0x28, 0xa0, 0x52, 0x03, 0x67, 0x81, 0x3d, 0x21,
0xf4, 0x5b, 0x80, 0xa5, 0x33, 0x9f, 0x4f, 0x96, 0x0d, 0xe3, 0xad, 0xce, 0xd6, 0xdf, 0x39, 0x7d,
0x7a, 0x6b, 0x4a, 0x57, 0x1f, 0xf9, 0x42, 0x38, 0x34, 0x01, 0x7d, 0x03, 0xc0, 0x8f, 0x74, 0x53,
0x9d, 0xf1, 0x2b, 0x72, 0xe7, 0xf4, 0x61, 0xc2, 0x74, 0xfa, 0x19, 0x87, 0x44, 0xc5, 0x6f, 0x60,
0x3f, 0xf1, 0x88, 0xa3, 0x67, 0x00, 0x16, 0xa3, 0x42, 0x56, 0x0b, 0x71, 0xc4, 0x97, 0xb0, 0x97,
0x74, 0xac, 0xef, 0x9c, 0xf7, 0x7f, 0x69, 0x78, 0xb2, 0xee, 0xfc, 0x22, 0x11, 0x8a, 0xb6, 0x4b,
0x87, 0x20, 0x22, 0x3c, 0xf4, 0x0a, 0x36, 0xec, 0x9b, 0x25, 0x71, 0xed, 0xf4, 0xf2, 0xde, 0xc9,
0xe1, 0xc4, 0x23, 0xc6, 0x37, 0x4b, 0x82, 0x19, 0x86, 0x48, 0xa0, 0x18, 0xe6, 0xa2, 0x5d, 0x28,
0xb5, 0x26, 0xbd, 0xde, 0x54, 0x6a, 0x8e, 0xc7, 0xdd, 0x41, 0x5b, 0x12, 0x52, 0xa8, 0x00, 0xdb,
0x83, 0xe6, 0xf8, 0x7c, 0x88, 0x5f, 0x0b, 0x69, 0x94, 0x83, 0x8d, 0xf3, 0x6e, 0xab, 0x2b, 0x64,
0xd0, 0x36, 0x64, 0x27, 0x52, 0x4d, 0xc8, 0xa2, 0x12, 0xe4, 0x6b, 0xbd, 0x49, 0x73, 0x3c, 0x1c,
0x8e, 0x3b, 0xc2, 0x06, 0x7a, 0x00, 0xe5, 0x31, 0xee, 0xb6, 0xdb, 0x4d, 0x3c, 0xad, 0xd6, 0xc7,
0xdd, 0xe1, 0x40, 0x12, 0x36, 0xc5, 0x02, 0xe4, 0xfd, 0x24, 0x23, 0x2e, 0xa1, 0x14, 0xc9, 0x20,
0xef, 0x1c, 0x2e, 0x9f, 0x87, 0xcf, 0xc1, 0xce, 0xe9, 0xa3, 0x5b, 0xd2, 0x43, 0xc7, 0xfe, 0x81,
0x0a, 0x78, 0x47, 0xa4, 0x09, 0xe5, 0x58, 0xe6, 0x79, 0xaf, 0x93, 0xf6, 0x16, 0x0e, 0x69, 0x5a,
0xc0, 0xf4, 0x68, 0x59, 0xb6, 0x67, 0x5e, 0xc9, 0x36, 0x4c, 0x79, 0xc6, 0x5c, 0x37, 0x4e, 0x70,
0x5d, 0x98, 0x87, 0xbe, 0x86, 0x9c, 0xe5, 0x4e, 0x63, 0xd0, 0x85, 0x98, 0xf2, 0xe7, 0x5a, 0x4b,
0xf3, 0x70, 0xb1, 0x2f, 0x2a, 0xfe, 0x5b, 0x16, 0x8a, 0xe1, 0x4f, 0xb4, 0xc4, 0xd4, 0x83, 0x35,
0x18, 0x4d, 0xcb, 0x44, 0x55, 0xb3, 0x68, 0xdd, 0xa7, 0xba, 0x47, 0xd8, 0x1f, 0xd3, 0xb8, 0x34,
0xc9, 0xcc, 0x99, 0xcb, 0xb6, 0x61, 0xde, 0xb0, 0x13, 0x92, 0xc7, 0x21, 0x0e, 0xfa, 0x1e, 0x8a,
0x6f, 0x0d, 0xf3, 0x8d, 0xa6, 0xcf, 0xa6, 0x0b, 0x43, 0xe5, 0x95, 0xe4, 0x4e, 0x2c, 0x77, 0x53,
0x05, 0xce, 0xb9, 0x50, 0xdf, 0x50, 0x09, 0x2e, 0xbc, 0x0d, 0x06, 0xe8, 0x25, 0xe4, 0x65, 0xc7,
0xbe, 0xe2, 0xb3, 0x37, 0x13, 0xdc, 0x42, 0x67, 0x57, 0x1d, 0xfb, 0x8a, 0x4d, 0xcd, 0xc9, 0x2e,
0x45, 0xab, 0x5e, 0xe5, 0x4a, 0xd6, 0x75, 0x32, 0x67, 0x85, 0x64, 0x09, 0x7b, 0x43, 0x74, 0x02,
0x5b, 0xf2, 0x72, 0x5a, 0x93, 0x24, 0xb7, 0x08, 0x7c, 0x78, 0x0b, 0xae, 0x26, 0x49, 0xf5, 0xcb,
0x19, 0xde, 0x94, 0x97, 0x35, 0x49, 0x42, 0xdf, 0x43, 0x59, 0x99, 0x6b, 0x44, 0xb7, 0xe9, 0x9c,
0xe9, 0x5c, 0xb3, 0xec, 0x4a, 0x8e, 0x95, 0xee, 0x2b, 0x27, 0x96, 0xb8, 0x7c, 0x4d, 0x92, 0x7a,
0x9a, 0x65, 0xa3, 0xc7, 0xec, 0x22, 0x27, 0x53, 0xcb, 0xd2, 0x54, 0x56, 0xcd, 0xe5, 0x70, 0x8e,
0x32, 0x24, 0x4b, 0x53, 0x69, 0xee, 0xd3, 0xc9, 0x4f, 0x0b, 0x43, 0x67, 0x35, 0x4b, 0x0e, 0xbb,
0x23, 0xf1, 0x3f, 0xd2, 0x90, 0x67, 0x9e, 0xb1, 0xe9, 0xe9, 0x3d, 0x81, 0x0d, 0x66, 0x00, 0x1e,
0xc5, 0x87, 0xb7, 0x5d, 0x4b, 0xa5, 0x98, 0x05, 0x98, 0x5c, 0x78, 0xf7, 0x99, 0xe8, 0xee, 0x11,
0x6c, 0x30, 0x3d, 0xb8, 0xab, 0x18, 0x8d, 0xea, 0x50, 0x56, 0x1c, 0xd3, 0x24, 0xba, 0x1f, 0x7a,
0xcc, 0x4f, 0x6b, 0x63, 0x28, 0x3e, 0x43, 0x3c, 0x05, 0x08, 0x4c, 0x40, 0x97, 0x91, 0xa4, 0x6e,
0xc3, 0x8b, 0x23, 0x4a, 0x23, 0x01, 0xb2, 0x23, 0xe9, 0xb5, 0xfb, 0x7a, 0xa1, 0xa4, 0xf8, 0x11,
0x94, 0x24, 0xdb, 0xa4, 0xae, 0x26, 0x96, 0x45, 0x43, 0x5d, 0x80, 0xec, 0xc2, 0x9a, 0xb9, 0xb3,
0x28, 0x29, 0x7e, 0x01, 0x28, 0x22, 0x52, 0x35, 0x4d, 0xf9, 0x86, 0x86, 0xe4, 0xc2, 0x9a, 0x31,
0x9a, 0xbd, 0xa3, 0xf2, 0xd8, 0x1f, 0x8b, 0x27, 0x50, 0x6c, 0x5e, 0x13, 0xdd, 0x76, 0x4f, 0x13,
0x0d, 0x51, 0xea, 0x34, 0xa2, 0xd3, 0x3c, 0xc4, 0xa0, 0xb3, 0x38, 0xc4, 0x11, 0x65, 0x00, 0x26,
0xcf, 0x0e, 0x36, 0x3a, 0x84, 0x6d, 0xdb, 0x62, 0x0b, 0x72, 0x2d, 0x3a, 0x29, 0xec, 0x31, 0xd0,
0x01, 0x6c, 0xda, 0x17, 0x86, 0xc1, 0x6d, 0x9a, 0xeb, 0xa4, 0x30, 0x1f, 0xa2, 0x0a, 0x6c, 0xd9,
0x9a, 0x6e, 0xbf, 0x3c, 0x63, 0x56, 0xcd, 0xd2, 0x4a, 0x90, 0x8f, 0x6b, 0x9b, 0x90, 0xbd, 0x96,
0xe7, 0x62, 0x0f, 0x36, 0xd9, 0x12, 0xd4, 0x2c, 0x76, 0xa0, 0x05, 0xa3, 0xd1, 0xe7, 0xfe, 0xed,
0x97, 0x49, 0x08, 0xab, 0x40, 0x35, 0xff, 0x5a, 0xfc, 0x13, 0xec, 0xd1, 0xb3, 0xdf, 0xd0, 0xcc,
0xa1, 0xd9, 0xd2, 0xe6, 0xc4, 0xdb, 0xa8, 0x00, 0x59, 0x55, 0xf3, 0xaa, 0x05, 0x4a, 0xd2, 0xe0,
0x5a, 0x9a, 0xe4, 0x52, 0xfb, 0xc9, 0x35, 0xba, 0x3b, 0xa2, 0x26, 0x31, 0xf4, 0xf9, 0x4d, 0xcb,
0x98, 0xd3, 0x6b, 0x99, 0x3f, 0xfd, 0x42, 0x1c, 0x7a, 0x7d, 0xc5, 0x56, 0xb0, 0x96, 0x86, 0x6e,
0x11, 0x7e, 0xdc, 0x2d, 0x67, 0x6e, 0x8f, 0x64, 0xfb, 0xca, 0xbb, 0x86, 0x02, 0x8e, 0xf8, 0xaf,
0x69, 0x28, 0x63, 0x22, 0xab, 0x61, 0xb5, 0xbe, 0x86, 0xad, 0x4b, 0xbe, 0x50, 0x3a, 0xe1, 0xfe,
0xad, 0x2a, 0x0a, 0xb1, 0x2c, 0xed, 0x62, 0x4e, 0xf8, 0xda, 0xd8, 0x15, 0xa6, 0x2e, 0xbe, 0xd4,
0xe6, 0x44, 0x0f, 0x1e, 0xbc, 0xfe, 0x98, 0x66, 0x51, 0x8b, 0xde, 0x8f, 0xdc, 0xde, 0x98, 0x0f,
0xe8, 0xfe, 0xe7, 0x44, 0x67, 0xa1, 0x9b, 0xc5, 0x94, 0x14, 0x1b, 0x20, 0x04, 0xda, 0xb8, 0x5b,
0x78, 0x02, 0x79, 0x93, 0xc8, 0x6a, 0xdd, 0x70, 0x74, 0xdb, 0xf5, 0x43, 0xc0, 0xa0, 0x0e, 0x52,
0x65, 0x5b, 0x66, 0x2b, 0x16, 0x31, 0xa3, 0xc5, 0xff, 0x4c, 0x83, 0x70, 0x6e, 0x6a, 0x36, 0xf9,
0x99, 0x77, 0x75, 0x40, 0x13, 0xd3, 0x92, 0x56, 0xb8, 0xdc, 0x23, 0xee, 0x88, 0xe6, 0xff, 0x85,
0x63, 0xd9, 0x03, 0xc3, 0x6e, 0xfe, 0x44, 0xb3, 0x0f, 0x7f, 0x8d, 0x47, 0x78, 0xbe, 0xde, 0x9b,
0x21, 0xbd, 0x3f, 0x85, 0x32, 0xd5, 0xb8, 0xab, 0x5f, 0x1a, 0x9e, 0xd6, 0x08, 0x36, 0x96, 0x81,
0xe7, 0x18, 0x2d, 0xfe, 0x19, 0x84, 0x40, 0xcc, 0x35, 0x52, 0xd2, 0x35, 0x40, 0x33, 0x87, 0xf6,
0x8f, 0x5c, 0xed, 0x2c, 0x66, 0x34, 0xe5, 0xb1, 0xbc, 0x94, 0x65, 0x49, 0xc6, 0xcf, 0x3d, 0x0b,
0x43, 0x1d, 0x6b, 0x0b, 0xe2, 0xba, 0xc2, 0x1b, 0x52, 0xb7, 0x69, 0x56, 0x43, 0x33, 0x99, 0x96,
0x39, 0xcc, 0x07, 0xe2, 0xdf, 0x81, 0xe0, 0xd7, 0x39, 0xa1, 0x33, 0xcb, 0x8b, 0x9b, 0x70, 0x9c,
0x05, 0x1c, 0xf4, 0x19, 0xec, 0xd8, 0xda, 0x82, 0x18, 0x8e, 0x2d, 0x11, 0xc5, 0xd0, 0x55, 0xcb,
0x4d, 0x73, 0x31, 0xae, 0xf8, 0x0c, 0x8a, 0x3e, 0xf6, 0x2b, 0xe3, 0x22, 0xde, 0x1b, 0x11, 0x3f,
0x09, 0xad, 0xfd, 0xca, 0xb8, 0x60, 0xe9, 0x5a, 0x80, 0xac, 0xa6, 0xf2, 0xf6, 0x4c, 0x09, 0x53,
0x52, 0xfc, 0x01, 0x2a, 0x9d, 0x6e, 0x03, 0x3b, 0xba, 0xae, 0xe9, 0xb3, 0x57, 0xc6, 0x05, 0xcb,
0xb6, 0x98, 0x45, 0x7d, 0x08, 0x31, 0xcb, 0xba, 0x2d, 0x08, 0x36, 0xae, 0x17, 0x5d, 0xd5, 0xb3,
0x12, 0xa5, 0xa9, 0x63, 0x2d, 0xc3, 0x31, 0x15, 0xe2, 0x66, 0x5d, 0x77, 0x24, 0xfe, 0x19, 0xca,
0xa1, 0x9d, 0x33, 0xb8, 0x5f, 0x42, 0xf6, 0x47, 0xe3, 0x82, 0xe1, 0xc5, 0xd3, 0x6f, 0x58, 0x51,
0x4c, 0xa5, 0xa8, 0x95, 0x34, 0xab, 0xa5, 0xe9, 0x9a, 0x75, 0xe5, 0x5f, 0xcd, 0x21, 0x4e, 0x70,
0x5a, 0x5f, 0x59, 0x86, 0x1e, 0x5c, 0xce, 0x1e, 0x47, 0x3c, 0x81, 0x42, 0xaf, 0xd9, 0xf0, 0xef,
0xfe, 0xe7, 0x50, 0xb8, 0x98, 0x6b, 0xfa, 0x9b, 0xa9, 0xe2, 0x9f, 0x8d, 0x12, 0x06, 0xc6, 0x62,
0x87, 0x43, 0xfc, 0x9f, 0x0d, 0xd8, 0xe1, 0x6f, 0x1e, 0x7f, 0x4e, 0x05, 0xb6, 0x89, 0xce, 0x4b,
0x83, 0x34, 0x6f, 0x2e, 0xb9, 0x43, 0x6a, 0xc6, 0x6b, 0x4d, 0xf5, 0xb2, 0xfd, 0xb5, 0xc6, 0x38,
0x4b, 0xff, 0xe6, 0xa1, 0x24, 0x8b, 0x6c, 0x59, 0x77, 0x2e, 0x65, 0xc5, 0x76, 0x4c, 0x62, 0xb2,
0x78, 0xc9, 0xe3, 0x08, 0x8f, 0xae, 0xb0, 0x34, 0x0d, 0xd5, 0x51, 0x6c, 0x16, 0x36, 0x79, 0xec,
0x0d, 0x99, 0x59, 0x89, 0xa9, 0xc9, 0xfc, 0x86, 0xa7, 0x66, 0x65, 0x23, 0xf4, 0x0c, 0x0a, 0x8e,
0x45, 0xa6, 0xf5, 0x46, 0x7d, 0xda, 0xac, 0xf7, 0xd9, 0x2d, 0x9f, 0xc3, 0x79, 0xc7, 0x22, 0xf5,
0x46, 0xbd, 0x59, 0xef, 0xd3, 0xfb, 0x98, 0x7e, 0xc7, 0x83, 0x46, 0x57, 0x62, 0xdd, 0x9a, 0x1c,
0xce, 0x39, 0x16, 0x61, 0x63, 0x74, 0x04, 0x02, 0xfd, 0xd8, 0xe9, 0x36, 0xa6, 0xaf, 0x9b, 0xbf,
0xaf, 0x0d, 0xab, 0xb8, 0xe1, 0xde, 0xd9, 0x3b, 0x8e, 0x45, 0x3a, 0xdd, 0x86, 0xc7, 0x45, 0x22,
0x94, 0x3c, 0xc9, 0xfe, 0x70, 0x22, 0x35, 0x59, 0x63, 0x25, 0x87, 0x0b, 0x5c, 0x8c, 0xb1, 0x3c,
0x55, 0xa8, 0x0c, 0xae, 0x9e, 0xb3, 0xb6, 0x09, 0x57, 0x85, 0xc6, 0x53, 0xf5, 0x1c, 0x3d, 0x84,
0x6d, 0xfa, 0x7d, 0xd2, 0x97, 0x58, 0x0b, 0x24, 0x87, 0xb7, 0x1c, 0x8b, 0x4c, 0xfa, 0x12, 0x7a,
0x0a, 0x40, 0x3f, 0x48, 0x4d, 0xdc, 0xad, 0xf6, 0xdc, 0xd2, 0x80, 0xce, 0xe3, 0x0c, 0xf4, 0x0a,
0x76, 0x4c, 0x5d, 0xd5, 0xac, 0xa9, 0x5f, 0xf4, 0xf1, 0xfe, 0xc4, 0xc7, 0xd1, 0x8a, 0x35, 0xe2,
0xab, 0xa6, 0x7d, 0x45, 0x4c, 0x9d, 0xd8, 0xb8, 0xc4, 0xa6, 0xfa, 0x2e, 0xec, 0x83, 0xa0, 0xa8,
0xca, 0x94, 0x28, 0x8b, 0x00, 0xad, 0x7c, 0x7f, 0xb4, 0x1d, 0x45, 0x55, 0x9a, 0xca, 0xc2, 0x87,
0xab, 0x42, 0xd1, 0x59, 0x84, 0x14, 0xe3, 0x9d, 0x8b, 0x67, 0x6b, 0xa0, 0x26, 0x7d, 0x09, 0x17,
0x9c, 0x85, 0xaf, 0x91, 0x38, 0x82, 0x83, 0xe4, 0xc5, 0x58, 0x29, 0x65, 0x58, 0xf6, 0x54, 0x56,
0x55, 0xef, 0xa2, 0xcb, 0x51, 0x46, 0x55, 0x55, 0x4d, 0xf4, 0x08, 0x72, 0x2a, 0xb9, 0xe6, 0xdf,
0x78, 0xd8, 0x6d, 0xab, 0xe4, 0x9a, 0x7e, 0x12, 0x7f, 0x0b, 0xbb, 0xb7, 0xd6, 0xa4, 0xe9, 0x48,
0x51, 0x4d, 0x63, 0xe1, 0x46, 0x2e, 0x1f, 0xd0, 0x03, 0x4c, 0x33, 0xb2, 0xd7, 0x64, 0xa5, 0xb4,
0xf8, 0x2f, 0x69, 0x78, 0xe6, 0x6f, 0xf8, 0xfd, 0x8b, 0xf4, 0xda, 0xad, 0x22, 0x3d, 0xda, 0xd5,
0xf3, 0x96, 0xe8, 0xea, 0x36, 0x31, 0x2f, 0x65, 0x85, 0x24, 0x54, 0xec, 0x53, 0xf8, 0x88, 0x3f,
0xc2, 0x88, 0xba, 0x52, 0x1c, 0x7d, 0x07, 0x1b, 0xac, 0x4e, 0xe5, 0x2d, 0xe6, 0xfb, 0x2e, 0xc2,
0xe6, 0x88, 0xff, 0x9c, 0x85, 0x47, 0xab, 0x91, 0x93, 0x2e, 0x86, 0xef, 0xdd, 0x4b, 0x80, 0x3f,
0x9a, 0x7e, 0x79, 0xbf, 0xd5, 0x4e, 0x42, 0xd5, 0x2a, 0xcd, 0x63, 0x4b, 0xea, 0x27, 0x62, 0x59,
0x67, 0x5e, 0x9e, 0x0a, 0x38, 0xf4, 0xd2, 0xd4, 0x89, 0xbd, 0x90, 0xad, 0x37, 0x67, 0x6e, 0x8a,
0xf0, 0xc7, 0xe1, 0x04, 0xb4, 0x19, 0x4d, 0x40, 0x43, 0x40, 0xea, 0x95, 0xb2, 0x94, 0x88, 0x79,
0x4d, 0x4c, 0xbf, 0xb0, 0xe5, 0x5d, 0xe5, 0xe7, 0x11, 0x25, 0x1b, 0x9d, 0xfa, 0x28, 0x2a, 0x86,
0x13, 0xa6, 0xa2, 0x4f, 0xa0, 0xe4, 0xb9, 0xa1, 0xab, 0x4f, 0x2c, 0xe2, 0x66, 0x96, 0x28, 0x53,
0xac, 0xc3, 0x06, 0x7b, 0x80, 0x00, 0x6c, 0xf5, 0xab, 0x83, 0x49, 0xb5, 0x27, 0xa4, 0x50, 0x19,
0x0a, 0x74, 0x8d, 0x69, 0xbd, 0xd7, 0x6d, 0x0e, 0xc6, 0x42, 0xda, 0x67, 0x48, 0x4d, 0xfc, 0x43,
0x13, 0x0b, 0x19, 0xfa, 0xd6, 0x9d, 0x0c, 0xfa, 0xd5, 0x41, 0xb5, 0xdd, 0x6c, 0x08, 0x59, 0xf1,
0xff, 0xb3, 0x80, 0x6e, 0x6b, 0x15, 0x94, 0xb2, 0x23, 0xc3, 0xf4, 0x13, 0x74, 0xc0, 0x41, 0x47,
0x50, 0xe6, 0x23, 0xdf, 0xdc, 0x6e, 0x18, 0xc7, 0xd9, 0xac, 0xbf, 0x44, 0x64, 0x8b, 0x95, 0x34,
0xae, 0xc5, 0x03, 0x06, 0x3a, 0x06, 0x41, 0x37, 0x6c, 0xfa, 0xaa, 0x32, 0x4c, 0xcd, 0x96, 0xd9,
0x0f, 0x04, 0xbc, 0xea, 0xb8, 0xc5, 0x47, 0x27, 0x80, 0x54, 0x63, 0x60, 0xd8, 0x35, 0x4d, 0x57,
0x83, 0x65, 0xb9, 0x2f, 0x12, 0xbe, 0xd0, 0xab, 0x5b, 0x91, 0xe7, 0xf3, 0x0b, 0x59, 0x79, 0xe3,
0xf6, 0x36, 0x79, 0xf6, 0x8e, 0x71, 0xd1, 0x19, 0x6c, 0x99, 0xb2, 0x3e, 0x23, 0x56, 0x65, 0x9b,
0x45, 0xf1, 0x93, 0x15, 0x2e, 0xc3, 0x54, 0x08, 0xbb, 0xb2, 0xa8, 0x05, 0xdb, 0xc6, 0x92, 0xff,
0xbe, 0xc2, 0x1f, 0x69, 0x7f, 0x7d, 0x87, 0xa7, 0x4f, 0x86, 0x5c, 0xbc, 0xa9, 0xdb, 0xe6, 0x0d,
0xf6, 0x26, 0xa3, 0x3a, 0x14, 0x2c, 0xba, 0x41, 0xa5, 0x63, 0x58, 0xb6, 0x55, 0xc9, 0x33, 0xac,
0x8f, 0x56, 0x61, 0xf9, 0x92, 0x38, 0x3c, 0xeb, 0xf0, 0x3b, 0x28, 0x86, 0xd1, 0xe9, 0x05, 0xf8,
0x86, 0xdc, 0xb8, 0x7e, 0xa3, 0x64, 0xb4, 0x1d, 0x90, 0x77, 0xdb, 0x01, 0xdf, 0x65, 0xbe, 0x4d,
0x8b, 0x06, 0x94, 0x63, 0x7b, 0x64, 0xd7, 0x39, 0x25, 0x7a, 0xc6, 0x5b, 0xbf, 0x29, 0x18, 0xe2,
0xf8, 0xdf, 0x27, 0xcb, 0x25, 0xf1, 0x32, 0x60, 0x88, 0xe3, 0xfb, 0x9c, 0x95, 0x66, 0x61, 0x9f,
0x53, 0x86, 0xf8, 0x2d, 0xec, 0x25, 0xed, 0x88, 0x3d, 0xc9, 0x64, 0xc5, 0x7f, 0x92, 0xc9, 0x0a,
0x2b, 0x79, 0x96, 0x2e, 0x7e, 0x46, 0x5b, 0x8a, 0xdb, 0xb0, 0xd9, 0x5c, 0x2c, 0xed, 0x9b, 0xe3,
0x5f, 0x81, 0x10, 0x6f, 0xa7, 0xa1, 0x2d, 0xc8, 0x4c, 0x46, 0x42, 0x0a, 0xe5, 0x60, 0xa3, 0x31,
0x3c, 0x1f, 0x08, 0x69, 0xb4, 0x0d, 0xd9, 0x61, 0xab, 0x25, 0x64, 0x8e, 0x3f, 0x07, 0x08, 0xda,
0x67, 0xf4, 0xbc, 0xe0, 0xae, 0xd4, 0x1d, 0xb4, 0x79, 0x67, 0xa8, 0x55, 0xed, 0xf5, 0xe8, 0x80,
0x75, 0x86, 0x6a, 0xc3, 0x71, 0x47, 0xc8, 0x1c, 0xff, 0x6f, 0x1a, 0xb6, 0xdd, 0x9e, 0x0d, 0xca,
0xc3, 0xe6, 0x60, 0xd2, 0x9f, 0x7e, 0x29, 0xa4, 0x3c, 0xf2, 0x54, 0x48, 0x7b, 0xe4, 0x57, 0x42,
0xc6, 0x23, 0xcf, 0x84, 0xac, 0x47, 0x7e, 0x2d, 0x6c, 0x78, 0xe4, 0x4b, 0x61, 0xd3, 0x23, 0xbf,
0x11, 0xb6, 0x3c, 0xf2, 0x5b, 0x61, 0xdb, 0x23, 0x7f, 0x2d, 0xe4, 0xa8, 0x46, 0x6c, 0x89, 0x2f,
0x84, 0xbc, 0x4f, 0x7f, 0x29, 0x80, 0x4f, 0x9f, 0x0a, 0x05, 0x9f, 0xfe, 0x4a, 0x28, 0xfa, 0xf4,
0x99, 0x50, 0xf2, 0xe9, 0xaf, 0x85, 0x1d, 0x9f, 0x7e, 0x29, 0x94, 0x7d, 0xfa, 0x1b, 0x41, 0xf0,
0xe9, 0x6f, 0x85, 0x5d, 0x9f, 0xfe, 0xb5, 0x80, 0x3c, 0xfa, 0xf4, 0x0b, 0xe1, 0xc1, 0xf1, 0xaf,
0xa0, 0x18, 0xee, 0x3b, 0x51, 0xe3, 0xf5, 0x86, 0xe7, 0xdc, 0x9e, 0x9d, 0x6e, 0xbb, 0x23, 0xa4,
0xa9, 0xf8, 0x78, 0xd8, 0x6e, 0xf7, 0x9a, 0x42, 0xe6, 0xb8, 0x01, 0xe5, 0x58, 0x37, 0x85, 0xda,
0x72, 0x32, 0x78, 0x3d, 0xa0, 0xb6, 0x4f, 0x51, 0x6f, 0x54, 0x47, 0xdc, 0x07, 0xd2, 0xb8, 0x2a,
0x64, 0xd0, 0x03, 0x28, 0x4b, 0xe3, 0xea, 0xb4, 0x55, 0xed, 0xf6, 0x86, 0x3f, 0x34, 0xf1, 0xb4,
0x3a, 0x12, 0xb2, 0xc7, 0x0d, 0x28, 0x45, 0x9a, 0x0a, 0x68, 0x1f, 0x76, 0xa9, 0xd4, 0x60, 0x38,
0x9e, 0xd6, 0x87, 0x83, 0x41, 0xb3, 0x3e, 0x6e, 0x36, 0xb8, 0xe1, 0xab, 0xa3, 0xe9, 0x84, 0x02,
0xee, 0x42, 0x89, 0x4a, 0x04, 0x5f, 0x33, 0xc7, 0x9f, 0xf1, 0xd6, 0x92, 0xd7, 0x9b, 0x41, 0x45,
0xc8, 0x9d, 0x8f, 0xaa, 0xa7, 0xd3, 0x91, 0xf4, 0x9a, 0xeb, 0x3f, 0x1c, 0x35, 0x07, 0x42, 0xfa,
0xf8, 0x6f, 0x40, 0x88, 0x3f, 0x97, 0xa8, 0x7e, 0xe3, 0x3e, 0x0d, 0x1b, 0x01, 0x8a, 0xb5, 0xaa,
0xd4, 0x99, 0x4a, 0x75, 0xdc, 0x1d, 0x8d, 0x25, 0x9e, 0x3a, 0x69, 0x39, 0xe5, 0x31, 0x32, 0xa7,
0xff, 0xfe, 0x14, 0xb6, 0x46, 0x67, 0xe7, 0x83, 0xd1, 0x97, 0xa8, 0x0f, 0x95, 0x36, 0xb1, 0xbd,
0xfb, 0x31, 0x72, 0xe3, 0x23, 0x14, 0xbd, 0x97, 0x68, 0xc0, 0x1e, 0x3e, 0x5e, 0x53, 0x95, 0x88,
0x29, 0xd4, 0x81, 0x07, 0x1c, 0xeb, 0x83, 0x91, 0x5a, 0xb0, 0xdb, 0x26, 0x76, 0xac, 0x76, 0x7e,
0x0f, 0x9c, 0x21, 0xec, 0x4a, 0xb7, 0x70, 0xd6, 0xcd, 0xb9, 0x0b, 0xf0, 0x77, 0xb0, 0xd3, 0x26,
0x76, 0xf8, 0x15, 0x90, 0xa4, 0x55, 0x25, 0xc2, 0x0b, 0x49, 0x73, 0x04, 0x29, 0x8a, 0xb0, 0x52,
0xfa, 0x30, 0x01, 0x5b, 0x4c, 0xa1, 0x06, 0x14, 0xfb, 0xf4, 0x7d, 0x31, 0xe9, 0x4b, 0xec, 0xf6,
0xb9, 0xa3, 0x56, 0x5c, 0x81, 0xd2, 0x67, 0x4f, 0x3d, 0xec, 0xe8, 0xee, 0xfd, 0xf1, 0x34, 0xf9,
0xf1, 0xe4, 0x96, 0x6f, 0x87, 0x4f, 0x56, 0x7d, 0xa6, 0xaf, 0x23, 0x06, 0x57, 0x0e, 0xc3, 0xd1,
0xc7, 0xe3, 0x1d, 0x88, 0xab, 0x5f, 0x6b, 0x62, 0x0a, 0x61, 0xd8, 0xef, 0x74, 0x1b, 0x6d, 0x62,
0x07, 0x4f, 0x38, 0xfe, 0xe0, 0x5b, 0x3d, 0xeb, 0x4e, 0x15, 0x9b, 0x80, 0x3a, 0xdd, 0x46, 0x5d,
0xd6, 0x15, 0x32, 0x0f, 0xb4, 0x5c, 0x03, 0x98, 0x6c, 0xb8, 0x01, 0x3c, 0xe4, 0xaa, 0xb9, 0x0f,
0x5c, 0x5f, 0x3e, 0x39, 0x16, 0x9e, 0xae, 0xc4, 0xa7, 0xaf, 0x67, 0x31, 0x85, 0x6a, 0x70, 0xe0,
0xab, 0x55, 0x9d, 0xcf, 0xef, 0x80, 0x4b, 0xd6, 0xe9, 0x0f, 0x9e, 0xb9, 0x62, 0x8f, 0xee, 0x75,
0xbb, 0xfb, 0x34, 0xfe, 0x29, 0xf1, 0xc1, 0xce, 0x14, 0x2c, 0xb4, 0x24, 0xbf, 0xa1, 0x13, 0x73,
0x6b, 0xbc, 0xd1, 0xb3, 0x42, 0xc1, 0xd7, 0x00, 0x2d, 0xc9, 0xeb, 0x2d, 0xa1, 0xa8, 0xa7, 0x62,
0x0d, 0xb0, 0x98, 0xc5, 0xe2, 0x0d, 0x29, 0xe6, 0x81, 0x52, 0x4b, 0x6a, 0x13, 0xdb, 0x6b, 0xc3,
0xc4, 0xf0, 0x62, 0x4d, 0x9c, 0x18, 0x5e, 0xbc, 0x77, 0x23, 0xa6, 0xd0, 0x9f, 0x60, 0xbf, 0x25,
0xd5, 0x4d, 0x22, 0xdb, 0x24, 0xd2, 0xc6, 0x43, 0xb1, 0x3f, 0x25, 0x24, 0x34, 0x11, 0x0f, 0xc5,
0x75, 0x22, 0xfe, 0x0a, 0xbf, 0x83, 0x02, 0x6b, 0x4c, 0xf6, 0x58, 0x59, 0x19, 0xf3, 0x4a, 0xb8,
0xfb, 0x1a, 0x37, 0x1f, 0xfd, 0x24, 0xa6, 0xbe, 0x48, 0xa3, 0x36, 0x14, 0x9a, 0xca, 0x95, 0xdf,
0x98, 0x8a, 0xb6, 0xb4, 0x23, 0x1d, 0xdf, 0xc3, 0x35, 0xdf, 0xc4, 0x14, 0xea, 0x02, 0xe2, 0x49,
0x3a, 0xf2, 0x3b, 0xc6, 0xea, 0xce, 0xf5, 0xe1, 0x41, 0x72, 0xf7, 0x5c, 0x4c, 0xa1, 0xdf, 0x40,
0xb1, 0x4d, 0xec, 0xa0, 0xeb, 0x9e, 0x14, 0xaf, 0xab, 0x67, 0xb7, 0xe0, 0x80, 0x9b, 0xc3, 0x67,
0xd6, 0xaf, 0x78, 0x51, 0xfa, 0x6e, 0x38, 0x18, 0x76, 0xe9, 0xa3, 0x92, 0x9c, 0x6b, 0x97, 0xc1,
0x7e, 0x7e, 0x11, 0x13, 0x5f, 0xf5, 0x63, 0xd1, 0x8a, 0x70, 0x1d, 0xc1, 0x3e, 0xcd, 0x3d, 0x14,
0x56, 0x8d, 0xe0, 0xae, 0xb3, 0xfb, 0x6a, 0x1b, 0x32, 0xc4, 0x8a, 0xfb, 0x63, 0xe0, 0xbb, 0x81,
0xae, 0xde, 0x77, 0x1f, 0x1e, 0x31, 0x2c, 0xef, 0xfa, 0xbe, 0x37, 0x64, 0xf2, 0x96, 0x87, 0xdc,
0x1d, 0x09, 0xea, 0x25, 0xb9, 0xe3, 0xf9, 0x6a, 0x7c, 0xfe, 0xab, 0x42, 0x0a, 0x4d, 0xe1, 0x39,
0x57, 0x6d, 0xf5, 0xeb, 0xf8, 0x9e, 0x2f, 0xed, 0x15, 0x1a, 0x1b, 0xf0, 0x8b, 0x36, 0xb1, 0xab,
0xf3, 0xf9, 0xdd, 0x0f, 0xfc, 0xa4, 0x2d, 0x9c, 0x44, 0x5f, 0x27, 0x77, 0x61, 0x88, 0x29, 0x34,
0x87, 0x4f, 0x42, 0xe5, 0xd2, 0xea, 0xd5, 0xd6, 0x19, 0xff, 0x9e, 0x5b, 0x16, 0x53, 0x48, 0x81,
0x67, 0xcc, 0x19, 0xab, 0xd7, 0x49, 0x6e, 0x1d, 0xbc, 0x53, 0xa0, 0xff, 0x08, 0xa2, 0x1f, 0xe8,
0x3f, 0xf7, 0x86, 0x7e, 0x0f, 0x9f, 0x86, 0x8f, 0xc0, 0xfb, 0x2d, 0x97, 0xbc, 0x8d, 0xbf, 0x87,
0x8f, 0x83, 0xe0, 0x7d, 0xb7, 0x30, 0xb8, 0x47, 0x24, 0x63, 0x78, 0x1c, 0xf2, 0xfb, 0xad, 0xbf,
0x2a, 0xde, 0x7d, 0xeb, 0xc7, 0xa7, 0xb0, 0xd3, 0xf1, 0x94, 0x03, 0xc6, 0xbf, 0x61, 0xb2, 0x9c,
0xd3, 0x77, 0xff, 0x7a, 0x84, 0xbb, 0x17, 0xf8, 0x03, 0x3c, 0x4a, 0x5e, 0xa0, 0xaa, 0xaa, 0x1f,
0x0c, 0xfe, 0x47, 0x78, 0xb2, 0x4a, 0xfb, 0x85, 0x71, 0xfd, 0xe1, 0xca, 0x8f, 0xe1, 0x71, 0xe0,
0xcf, 0xf8, 0xf7, 0xf7, 0xf6, 0x63, 0x0f, 0xf6, 0x19, 0xe2, 0x2d, 0x0f, 0xde, 0xa1, 0x6e, 0x72,
0xcc, 0x5d, 0xc0, 0xc7, 0xe1, 0x70, 0x5e, 0xe5, 0xc7, 0x75, 0xc1, 0x7c, 0x0f, 0x3b, 0x3f, 0x5f,
0xb7, 0x06, 0x75, 0xe5, 0x07, 0xe1, 0xf7, 0x61, 0x2f, 0xb0, 0xb3, 0x5f, 0x1d, 0xbe, 0xb7, 0x81,
0x07, 0xb0, 0x1f, 0xc0, 0x05, 0xff, 0xe2, 0x79, 0x5f, 0xbc, 0x8b, 0x2d, 0xf6, 0x67, 0xe1, 0xaf,
0xfe, 0x12, 0x00, 0x00, 0xff, 0xff, 0x59, 0x2e, 0x44, 0x8b, 0x3a, 0x2c, 0x00, 0x00,
// 3716 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x5a, 0x49, 0x77, 0xe3, 0x48,
0x72, 0xe6, 0xa2, 0x85, 0x0c, 0x6e, 0x50, 0x96, 0xa4, 0x62, 0xa9, 0xd6, 0x46, 0x2f, 0x53, 0xd6,
0x78, 0xd4, 0xdd, 0x6a, 0x75, 0x55, 0x4f, 0xbf, 0x19, 0xf7, 0x70, 0x27, 0xab, 0xb8, 0x39, 0x41,
0xb6, 0x3c, 0x1e, 0xbf, 0xe1, 0x40, 0x40, 0x8a, 0x42, 0x17, 0x09, 0xd0, 0x58, 0x54, 0x2d, 0x1f,
0xc6, 0xef, 0xf9, 0xe4, 0x83, 0xef, 0xfe, 0x17, 0xbe, 0xd9, 0x3e, 0xfb, 0xc7, 0xf8, 0xee, 0x8b,
0xcf, 0xf6, 0xcb, 0x4c, 0x00, 0x04, 0x40, 0x90, 0x52, 0xab, 0x66, 0x6e, 0x91, 0x81, 0xc8, 0x2f,
0x23, 0x23, 0x22, 0x23, 0x23, 0x83, 0x04, 0x98, 0x9a, 0x0b, 0xe5, 0x64, 0x61, 0x1a, 0xb6, 0x81,
0x72, 0xc3, 0xb3, 0xf7, 0xfa, 0xf0, 0xcb, 0x09, 0x65, 0x89, 0x3f, 0x80, 0x30, 0x32, 0xb5, 0xe9,
0x94, 0x98, 0x15, 0xc5, 0xd6, 0x0c, 0x5d, 0x22, 0x36, 0xaa, 0x42, 0x31, 0xc4, 0xb3, 0xca, 0xc9,
0x17, 0xe9, 0x97, 0xb9, 0xd3, 0xa3, 0x93, 0xc0, 0xcc, 0x93, 0x90, 0x08, 0x8e, 0xcc, 0x40, 0x08,
0xb6, 0xfa, 0xf2, 0x9c, 0x94, 0x53, 0x2f, 0x92, 0x2f, 0xb3, 0x98, 0xd1, 0xe2, 0x7f, 0x00, 0x14,
0x42, 0x62, 0xa8, 0x08, 0x29, 0x4d, 0x2d, 0x27, 0x5f, 0x24, 0x5f, 0x16, 0x70, 0x4a, 0x53, 0x51,
0x19, 0x76, 0x0d, 0x9d, 0x48, 0x57, 0x86, 0xcd, 0x26, 0x66, 0xb0, 0x37, 0x44, 0x47, 0x90, 0xd1,
0x2c, 0x3a, 0xeb, 0x9a, 0x94, 0xd3, 0xec, 0x93, 0x3f, 0x46, 0x4f, 0x20, 0xab, 0xcd, 0xe7, 0x8e,
0x2d, 0x5f, 0xcc, 0x48, 0x79, 0x8b, 0x7d, 0x5c, 0x32, 0x50, 0x17, 0x8a, 0x16, 0x31, 0xaf, 0x35,
0x85, 0x48, 0xb6, 0x6c, 0xda, 0x44, 0x2d, 0x6f, 0xbf, 0x48, 0xbe, 0xcc, 0x9d, 0x8a, 0x71, 0xbb,
0x91, 0x42, 0x92, 0xed, 0x04, 0x8e, 0xcc, 0x45, 0x7f, 0x03, 0xc8, 0xb1, 0x2e, 0x5a, 0xb2, 0x3a,
0x25, 0x76, 0xcd, 0xd0, 0x75, 0xa2, 0x50, 0xc4, 0x1d, 0x86, 0xf8, 0x59, 0x1c, 0xe2, 0x58, 0xaa,
0x46, 0xa4, 0xdb, 0x09, 0x1c, 0x83, 0x81, 0x64, 0x38, 0xf0, 0xb9, 0x75, 0xcd, 0x52, 0x7c, 0xf0,
0x5d, 0x06, 0xfe, 0x17, 0x1b, 0xc1, 0x83, 0x13, 0xda, 0x09, 0x1c, 0x8f, 0x84, 0x3a, 0x50, 0x78,
0xaf, 0x5d, 0x6a, 0x95, 0xa1, 0x67, 0x89, 0x0c, 0x83, 0xfe, 0x28, 0x0e, 0xfa, 0x3c, 0x28, 0xd8,
0x4e, 0xe0, 0xf0, 0x4c, 0x6a, 0x07, 0xca, 0xf0, 0xd5, 0xaf, 0x58, 0x92, 0x2d, 0x97, 0xb3, 0xeb,
0xed, 0x70, 0xbe, 0x22, 0x4d, 0xed, 0xb0, 0x8a, 0x81, 0xbe, 0x85, 0x8c, 0x65, 0x5d, 0x75, 0x8d,
0xa9, 0xa6, 0x97, 0x81, 0xe1, 0x3d, 0x89, 0xf5, 0x94, 0xd4, 0x66, 0x32, 0xed, 0x04, 0xf6, 0xe5,
0x11, 0x06, 0x41, 0xbd, 0x52, 0x16, 0x5d, 0x22, 0x5b, 0xa4, 0x65, 0xca, 0x3a, 0xdd, 0x63, 0x8e,
0x61, 0x7c, 0x12, 0x87, 0x51, 0x6f, 0xd7, 0x86, 0x41, 0xd9, 0x76, 0x02, 0xaf, 0xcc, 0x47, 0x4d,
0xc8, 0x4f, 0x4d, 0xc3, 0x59, 0x60, 0xa2, 0x10, 0x1a, 0x7d, 0x79, 0x86, 0xf7, 0x22, 0x0e, 0xaf,
0x15, 0x90, 0x6b, 0x27, 0x70, 0x68, 0x1e, 0xfa, 0x3d, 0xec, 0x07, 0xc7, 0x12, 0xf9, 0x7b, 0x87,
0xe8, 0x0a, 0x29, 0x17, 0x18, 0xde, 0xcb, 0xdb, 0xf0, 0x3c, 0xf9, 0x76, 0x02, 0xc7, 0xe2, 0xa0,
0x33, 0xd8, 0x99, 0x2e, 0x34, 0xa3, 0xa3, 0x97, 0x8b, 0x0c, 0x31, 0xf6, 0xb4, 0xb6, 0x86, 0x9d,
0x41, 0x87, 0xda, 0xcc, 0x95, 0x45, 0x75, 0x80, 0x0b, 0xd9, 0xba, 0x92, 0x14, 0x53, 0x5b, 0xd8,
0xe5, 0x52, 0xcc, 0xc9, 0x70, 0xf3, 0x02, 0xf5, 0x7b, 0xd5, 0x97, 0x6c, 0x27, 0x71, 0x60, 0x1e,
0xaa, 0x40, 0xf6, 0x4a, 0x53, 0x5d, 0x10, 0x21, 0x26, 0xa8, 0x02, 0x20, 0xed, 0x4e, 0xdd, 0xc7,
0x58, 0xce, 0x42, 0x0a, 0x1c, 0xaa, 0x64, 0x31, 0x33, 0x6e, 0x24, 0x62, 0xdb, 0x9a, 0x3e, 0xb5,
0x46, 0x64, 0xbe, 0x98, 0xc9, 0x36, 0x29, 0xef, 0xc5, 0xc4, 0x3f, 0xc7, 0xab, 0xc7, 0x4e, 0x68,
0x27, 0xf1, 0x1a, 0x28, 0x74, 0x0c, 0xe9, 0x99, 0x31, 0x2d, 0x23, 0x86, 0x78, 0x18, 0x83, 0xd8,
0x35, 0xa6, 0xed, 0x24, 0xa6, 0x42, 0xe8, 0x15, 0xec, 0x52, 0x1b, 0x0d, 0x1c, 0xbb, 0xfc, 0x20,
0xc6, 0xa0, 0x5c, 0x9e, 0xda, 0x73, 0xe0, 0xd0, 0xad, 0x78, 0xc2, 0xe8, 0x57, 0x90, 0x65, 0xfe,
0x91, 0x88, 0xae, 0x96, 0xf7, 0x63, 0x02, 0xd8, 0x9d, 0xe9, 0xc9, 0x50, 0x33, 0xf8, 0x13, 0xaa,
0x59, 0xd8, 0x75, 0x5d, 0x55, 0xcd, 0xc0, 0x0e, 0x17, 0x15, 0x1f, 0xc2, 0x41, 0x6c, 0x7e, 0x12,
0x1f, 0xc3, 0xa3, 0xb5, 0x69, 0x46, 0x7c, 0x06, 0x4f, 0x36, 0xa5, 0x09, 0xf1, 0x10, 0xf6, 0xe3,
0xce, 0x7a, 0x00, 0x74, 0xf5, 0xcc, 0x8a, 0x9f, 0x43, 0x29, 0x72, 0x00, 0x69, 0xfa, 0x9d, 0x51,
0x62, 0x6c, 0x11, 0x93, 0xe5, 0xf2, 0x2c, 0x5e, 0x32, 0xc4, 0x47, 0xf0, 0x70, 0xcd, 0x69, 0x13,
0x3b, 0xf0, 0x20, 0x26, 0xd0, 0x29, 0x1e, 0xb3, 0x07, 0xbb, 0x3f, 0x5c, 0x3c, 0x9f, 0x81, 0xf6,
0x61, 0xfb, 0x5a, 0x9e, 0x39, 0xfc, 0x66, 0xd9, 0xc6, 0x7c, 0x20, 0xfe, 0x23, 0x3c, 0xde, 0x70,
0x66, 0x6e, 0x81, 0x3c, 0x06, 0xa1, 0x33, 0xd5, 0x0d, 0x93, 0x0c, 0x1c, 0x7b, 0x70, 0x39, 0x30,
0x55, 0x62, 0xba, 0xd7, 0xcf, 0x0a, 0x1f, 0x1d, 0xc2, 0x0e, 0x5b, 0xd1, 0x2a, 0xa7, 0x5f, 0xa4,
0x5f, 0x6e, 0x63, 0x77, 0x24, 0xfe, 0x67, 0xd2, 0xbf, 0xdb, 0xf8, 0x19, 0x43, 0x27, 0x3c, 0x7e,
0xfa, 0xce, 0x9c, 0xad, 0x58, 0x3c, 0xdd, 0x0f, 0x45, 0x01, 0x95, 0xea, 0x3b, 0x73, 0xec, 0x09,
0xa1, 0x5f, 0x03, 0x2c, 0x9c, 0xd9, 0x6c, 0xbc, 0xa8, 0x1b, 0xef, 0x75, 0xb6, 0x7e, 0xf1, 0xf4,
0xe9, 0xca, 0x94, 0x8e, 0x3e, 0xf4, 0x85, 0x70, 0x60, 0x02, 0x7a, 0x0d, 0xc0, 0x8f, 0x74, 0x43,
0x9d, 0xf2, 0x2b, 0xb2, 0x78, 0xfa, 0x30, 0x66, 0x3a, 0xfd, 0x8c, 0x03, 0xa2, 0xe2, 0x6b, 0x38,
0x88, 0x3d, 0xe2, 0xe8, 0x19, 0x80, 0xc5, 0xa8, 0x80, 0xd5, 0x02, 0x1c, 0xf1, 0x15, 0xec, 0xc7,
0x1d, 0xeb, 0x5b, 0xe7, 0xfd, 0x6f, 0x12, 0x9e, 0x6c, 0x3a, 0xbf, 0x48, 0x84, 0xbc, 0xed, 0xd2,
0x01, 0x88, 0x10, 0x0f, 0xbd, 0x81, 0x2d, 0xfb, 0x66, 0x41, 0x5c, 0x3b, 0xbd, 0xba, 0x73, 0x72,
0x38, 0xf1, 0x88, 0xd1, 0xcd, 0x82, 0x60, 0x86, 0x21, 0x12, 0xc8, 0x07, 0xb9, 0x68, 0x0f, 0x0a,
0xcd, 0x71, 0xb7, 0x3b, 0x91, 0x1a, 0xa3, 0x51, 0xa7, 0xdf, 0x92, 0x84, 0x04, 0xca, 0xc1, 0x6e,
0xbf, 0x31, 0x3a, 0x1f, 0xe0, 0xb7, 0x42, 0x12, 0x65, 0x60, 0xeb, 0xbc, 0xd3, 0xec, 0x08, 0x29,
0xb4, 0x0b, 0xe9, 0xb1, 0x54, 0x15, 0xd2, 0xa8, 0x00, 0xd9, 0x6a, 0x77, 0xdc, 0x18, 0x0d, 0x06,
0xa3, 0xb6, 0xb0, 0x85, 0x1e, 0x40, 0x69, 0x84, 0x3b, 0xad, 0x56, 0x03, 0x4f, 0x2a, 0xb5, 0x51,
0x67, 0xd0, 0x97, 0x84, 0x6d, 0x31, 0x07, 0x59, 0x3f, 0xc9, 0x88, 0x0b, 0x28, 0x84, 0x32, 0xc8,
0x4f, 0x0e, 0x97, 0xcf, 0x83, 0xe7, 0xa0, 0x78, 0xfa, 0x68, 0x45, 0x7a, 0xe0, 0xd8, 0xdf, 0x53,
0x01, 0xef, 0x88, 0x34, 0xa0, 0x14, 0xc9, 0x3c, 0xf7, 0x3a, 0x69, 0xef, 0xe1, 0x88, 0xa6, 0x05,
0x4c, 0x8f, 0x96, 0x65, 0x7b, 0xe6, 0x95, 0x6c, 0xc3, 0x94, 0xa7, 0xcc, 0x75, 0xa3, 0x18, 0xd7,
0x05, 0x79, 0xe8, 0x6b, 0xc8, 0x58, 0xee, 0x34, 0x06, 0x9d, 0x8b, 0x28, 0x7f, 0xae, 0x35, 0x35,
0x0f, 0x17, 0xfb, 0xa2, 0xe2, 0xbf, 0xa6, 0x21, 0x1f, 0xfc, 0x44, 0x4b, 0x4c, 0x7d, 0xb9, 0x06,
0xa3, 0x69, 0x99, 0xa8, 0x6a, 0x16, 0xad, 0xfb, 0x54, 0xf7, 0x08, 0xfb, 0x63, 0x1a, 0x97, 0x26,
0x99, 0x3a, 0x33, 0xd9, 0x36, 0xcc, 0x1b, 0x76, 0x42, 0xb2, 0x38, 0xc0, 0x41, 0xdf, 0x41, 0xfe,
0xbd, 0x61, 0xbe, 0xd3, 0xf4, 0xe9, 0x64, 0x6e, 0xa8, 0xbc, 0x92, 0x2c, 0x46, 0x72, 0x37, 0x55,
0xe0, 0x9c, 0x0b, 0xf5, 0x0c, 0x95, 0xe0, 0xdc, 0xfb, 0xe5, 0x00, 0xbd, 0x82, 0xac, 0xec, 0xd8,
0x57, 0x7c, 0xf6, 0x76, 0x8c, 0x5b, 0xe8, 0xec, 0x8a, 0x63, 0x5f, 0xb1, 0xa9, 0x19, 0xd9, 0xa5,
0x68, 0xd5, 0xab, 0x5c, 0xc9, 0xba, 0x4e, 0x66, 0xac, 0x90, 0x2c, 0x60, 0x6f, 0x88, 0x4e, 0x60,
0x47, 0x5e, 0x4c, 0xaa, 0x92, 0xe4, 0x16, 0x81, 0x0f, 0x57, 0xe0, 0xaa, 0x92, 0x54, 0xbb, 0x9c,
0xe2, 0x6d, 0x79, 0x51, 0x95, 0x24, 0xf4, 0x1d, 0x94, 0x94, 0x99, 0x46, 0x74, 0x9b, 0xce, 0x99,
0xcc, 0x34, 0xcb, 0x2e, 0x67, 0x58, 0xe9, 0xbe, 0x76, 0x62, 0x81, 0xcb, 0x57, 0x25, 0xa9, 0xab,
0x59, 0x36, 0x7a, 0xcc, 0x2e, 0x72, 0x32, 0xb1, 0x2c, 0x4d, 0x65, 0xd5, 0x5c, 0x06, 0x67, 0x28,
0x43, 0xb2, 0x34, 0x95, 0xe6, 0x3e, 0x9d, 0xfc, 0x38, 0x37, 0x74, 0x56, 0xb3, 0x64, 0xb0, 0x3b,
0x12, 0xff, 0x2d, 0x09, 0x59, 0xe6, 0x19, 0x9b, 0x9e, 0xde, 0x13, 0xd8, 0x62, 0x06, 0xe0, 0x51,
0x7c, 0xb4, 0xea, 0x5a, 0x2a, 0xc5, 0x2c, 0xc0, 0xe4, 0x82, 0xbb, 0x4f, 0x85, 0x77, 0x8f, 0x60,
0x8b, 0xe9, 0xc1, 0x5d, 0xc5, 0x68, 0x54, 0x83, 0x92, 0xe2, 0x98, 0x26, 0xd1, 0xfd, 0xd0, 0x63,
0x7e, 0xda, 0x18, 0x43, 0xd1, 0x19, 0xe2, 0x29, 0xc0, 0xd2, 0x04, 0x74, 0x19, 0x49, 0xea, 0xd4,
0xbd, 0x38, 0xa2, 0x34, 0x12, 0x20, 0x3d, 0x94, 0xde, 0xba, 0xaf, 0x17, 0x4a, 0x8a, 0x1f, 0x41,
0x41, 0xb2, 0x4d, 0xea, 0x6a, 0x62, 0x59, 0x34, 0xd4, 0x05, 0x48, 0xcf, 0xad, 0xa9, 0x3b, 0x8b,
0x92, 0xe2, 0x17, 0x80, 0x42, 0x22, 0x15, 0xd3, 0x94, 0x6f, 0x68, 0x48, 0xce, 0xad, 0x29, 0xa3,
0xd9, 0x3b, 0x2a, 0x8b, 0xfd, 0xb1, 0x78, 0x02, 0xf9, 0xc6, 0x35, 0xd1, 0x6d, 0xf7, 0x34, 0xd1,
0x10, 0xa5, 0x4e, 0x23, 0x3a, 0xcd, 0x43, 0x0c, 0x3a, 0x8d, 0x03, 0x1c, 0x51, 0x06, 0x60, 0xf2,
0xec, 0x60, 0xa3, 0x23, 0xd8, 0xb5, 0x2d, 0xb6, 0x20, 0xd7, 0xa2, 0x9d, 0xc0, 0x1e, 0x03, 0x1d,
0xc2, 0xb6, 0x7d, 0x61, 0x18, 0xdc, 0xa6, 0x99, 0x76, 0x02, 0xf3, 0x21, 0x2a, 0xc3, 0x8e, 0xad,
0xe9, 0xf6, 0xab, 0x33, 0x66, 0xd5, 0x34, 0xad, 0x04, 0xf9, 0xb8, 0xba, 0x0d, 0xe9, 0x6b, 0x79,
0x26, 0x76, 0x61, 0x9b, 0x2d, 0x41, 0xcd, 0x62, 0x2f, 0xb5, 0x60, 0x34, 0xfa, 0xdc, 0xbf, 0xfd,
0x52, 0x31, 0x61, 0xb5, 0x54, 0xcd, 0xbf, 0x16, 0xff, 0x00, 0xfb, 0xf4, 0xec, 0xd7, 0x35, 0x73,
0x60, 0x36, 0xb5, 0x19, 0xf1, 0x36, 0x2a, 0x40, 0x5a, 0xd5, 0xbc, 0x6a, 0x81, 0x92, 0x34, 0xb8,
0x16, 0x26, 0xb9, 0xd4, 0x7e, 0x74, 0x8d, 0xee, 0x8e, 0xa8, 0x49, 0x0c, 0x7d, 0x76, 0xd3, 0x34,
0x66, 0xf4, 0x5a, 0xe6, 0x4f, 0xbf, 0x00, 0x87, 0x5e, 0x5f, 0x91, 0x15, 0xac, 0x85, 0xa1, 0x5b,
0x84, 0x1f, 0x77, 0xcb, 0x99, 0xd9, 0x43, 0xd9, 0xbe, 0xf2, 0xae, 0xa1, 0x25, 0x47, 0xfc, 0x97,
0x24, 0x94, 0x30, 0x91, 0xd5, 0xa0, 0x5a, 0x5f, 0xc3, 0xce, 0x25, 0x5f, 0x28, 0x19, 0x73, 0xff,
0x56, 0x14, 0x85, 0x58, 0x96, 0x76, 0x31, 0x23, 0x7c, 0x6d, 0xec, 0x0a, 0x53, 0x17, 0x5f, 0x6a,
0x33, 0xa2, 0x2f, 0x1f, 0xbc, 0xfe, 0x98, 0x66, 0x51, 0x8b, 0xde, 0x8f, 0xdc, 0xde, 0x98, 0x0f,
0xe8, 0xfe, 0x67, 0x44, 0x67, 0xa1, 0x9b, 0xc6, 0x94, 0x14, 0xeb, 0x20, 0x2c, 0xb5, 0x71, 0xb7,
0xf0, 0x04, 0xb2, 0x26, 0x91, 0xd5, 0x9a, 0xe1, 0xe8, 0xb6, 0xeb, 0x87, 0x25, 0x83, 0x3a, 0x48,
0x95, 0x6d, 0x99, 0xad, 0x98, 0xc7, 0x8c, 0x16, 0xff, 0x3d, 0x09, 0xc2, 0xb9, 0xa9, 0xd9, 0xe4,
0xcf, 0xbc, 0xab, 0x43, 0x9a, 0x98, 0x16, 0xb4, 0xc2, 0xe5, 0x1e, 0x71, 0x47, 0x34, 0xff, 0xcf,
0x1d, 0xcb, 0xee, 0x1b, 0x76, 0xe3, 0x47, 0x9a, 0x7d, 0xf8, 0x6b, 0x3c, 0xc4, 0xf3, 0xf5, 0xde,
0x0e, 0xe8, 0xfd, 0x29, 0x94, 0xa8, 0xc6, 0x1d, 0xfd, 0xd2, 0xf0, 0xb4, 0x46, 0xb0, 0xb5, 0x58,
0x7a, 0x8e, 0xd1, 0xe2, 0x1f, 0x41, 0x58, 0x8a, 0xb9, 0x46, 0x8a, 0xbb, 0x06, 0x68, 0xe6, 0xd0,
0xfe, 0x81, 0xab, 0x9d, 0xc6, 0x8c, 0xa6, 0x3c, 0x96, 0x97, 0xd2, 0x2c, 0xc9, 0xf8, 0xb9, 0x67,
0x6e, 0xa8, 0x23, 0x6d, 0x4e, 0x5c, 0x57, 0x78, 0x43, 0xea, 0x36, 0xcd, 0xaa, 0x6b, 0x26, 0xd3,
0x32, 0x83, 0xf9, 0x40, 0xfc, 0x5b, 0x10, 0xfc, 0x3a, 0x27, 0x70, 0x66, 0x79, 0x71, 0x13, 0x8c,
0xb3, 0x25, 0x07, 0x7d, 0x06, 0x45, 0x5b, 0x9b, 0x13, 0xc3, 0xb1, 0x25, 0xa2, 0x18, 0xba, 0x6a,
0xb9, 0x69, 0x2e, 0xc2, 0x15, 0x9f, 0x41, 0xde, 0xc7, 0x7e, 0x63, 0x5c, 0x44, 0x7b, 0x23, 0xe2,
0x27, 0x81, 0xb5, 0xdf, 0x18, 0x17, 0x2c, 0x5d, 0x0b, 0x90, 0xd6, 0x54, 0xde, 0x9e, 0x29, 0x60,
0x4a, 0x8a, 0xdf, 0x43, 0xb9, 0xdd, 0xa9, 0x63, 0x47, 0xd7, 0x35, 0x7d, 0xfa, 0xc6, 0xb8, 0x60,
0xd9, 0x16, 0xb3, 0xa8, 0x0f, 0x20, 0xa6, 0x59, 0xb7, 0x05, 0xc1, 0xd6, 0xf5, 0xbc, 0xa3, 0x7a,
0x56, 0xa2, 0x34, 0x75, 0xac, 0x65, 0x38, 0xa6, 0x42, 0xdc, 0xac, 0xeb, 0x8e, 0xc4, 0x3f, 0x42,
0x29, 0xb0, 0x73, 0x06, 0xf7, 0x73, 0x48, 0xff, 0x60, 0x5c, 0x30, 0xbc, 0x68, 0xfa, 0x0d, 0x2a,
0x8a, 0xa9, 0x14, 0xb5, 0x92, 0x66, 0x35, 0x35, 0x5d, 0xb3, 0xae, 0xfc, 0xab, 0x39, 0xc0, 0x59,
0x9e, 0xd6, 0x37, 0x96, 0xa1, 0x2f, 0x2f, 0x67, 0x8f, 0x23, 0x9e, 0x40, 0xae, 0xdb, 0xa8, 0xfb,
0x77, 0xff, 0x73, 0xc8, 0x5d, 0xcc, 0x34, 0xfd, 0xdd, 0x44, 0xf1, 0xcf, 0x46, 0x01, 0x03, 0x63,
0xb1, 0xc3, 0x21, 0xfe, 0x08, 0x8f, 0xc6, 0x52, 0xf5, 0x03, 0xaa, 0x94, 0xd7, 0x2b, 0x55, 0xca,
0xe3, 0x70, 0x89, 0xc5, 0x1e, 0x54, 0x31, 0x75, 0xca, 0x7f, 0x6f, 0x41, 0x31, 0xfc, 0x91, 0x86,
0x19, 0xd1, 0x79, 0x51, 0x92, 0xe4, 0x6d, 0x2d, 0x77, 0x48, 0x1d, 0x78, 0xad, 0xa9, 0xde, 0x3d,
0x73, 0xad, 0x31, 0xce, 0xc2, 0xbf, 0xf3, 0x28, 0xc9, 0xce, 0x94, 0xac, 0x3b, 0x97, 0xb2, 0x62,
0x3b, 0x26, 0x31, 0x59, 0xa4, 0x66, 0x71, 0x88, 0x47, 0x57, 0x58, 0x98, 0x86, 0xea, 0x28, 0x36,
0x0b, 0xd8, 0x2c, 0xf6, 0x86, 0xcc, 0xa1, 0xc4, 0xd4, 0x64, 0x5e, 0x5b, 0x50, 0x87, 0xb2, 0x11,
0x7a, 0x06, 0x39, 0xc7, 0x22, 0x93, 0x5a, 0xbd, 0x36, 0x69, 0xd4, 0x7a, 0xac, 0xbe, 0xc8, 0xe0,
0xac, 0x63, 0x91, 0x5a, 0xbd, 0xd6, 0xa8, 0xf5, 0x68, 0x25, 0x40, 0xbf, 0xe3, 0x7e, 0xbd, 0x23,
0xb1, 0x3e, 0x51, 0x06, 0x67, 0x1c, 0x8b, 0xb0, 0x31, 0x7a, 0x09, 0x02, 0xfd, 0xd8, 0xee, 0xd4,
0x27, 0x6f, 0x1b, 0xbf, 0xad, 0x0e, 0x2a, 0xb8, 0xee, 0x56, 0x0b, 0x45, 0xc7, 0x22, 0xed, 0x4e,
0xdd, 0xe3, 0x22, 0x11, 0x0a, 0x9e, 0x64, 0x6f, 0x30, 0x96, 0x1a, 0xac, 0xa5, 0x93, 0xc1, 0x39,
0x2e, 0xc6, 0x58, 0x9e, 0x2a, 0x54, 0x06, 0x57, 0xce, 0x59, 0xc3, 0x86, 0xab, 0x42, 0x23, 0xb9,
0x72, 0x8e, 0x1e, 0xc2, 0x2e, 0xfd, 0x3e, 0xee, 0x49, 0xac, 0xf9, 0x92, 0xc1, 0x3b, 0x8e, 0x45,
0xc6, 0x3d, 0x09, 0x3d, 0x05, 0xa0, 0x1f, 0xa4, 0x06, 0xee, 0x54, 0xba, 0x6e, 0x51, 0x42, 0xe7,
0x71, 0x06, 0x7a, 0x03, 0x45, 0x53, 0x57, 0x35, 0x6b, 0xe2, 0x3b, 0x92, 0x77, 0x46, 0x3e, 0xde,
0xe0, 0xc8, 0x86, 0x7d, 0x45, 0x4c, 0x9d, 0xd8, 0xb8, 0xc0, 0xa6, 0xfa, 0x2e, 0xec, 0x81, 0xa0,
0xa8, 0xca, 0x84, 0x28, 0xf3, 0x25, 0x5a, 0xe9, 0xee, 0x68, 0x45, 0x45, 0x55, 0x1a, 0xca, 0xdc,
0x87, 0xab, 0x40, 0xde, 0x99, 0x07, 0x14, 0xe3, 0x3d, 0x93, 0x67, 0x1b, 0xa0, 0xc6, 0x3d, 0x09,
0xe7, 0x9c, 0xb9, 0xaf, 0x91, 0x38, 0x84, 0xc3, 0xf8, 0xc5, 0x58, 0x11, 0x67, 0x58, 0xf6, 0x44,
0x56, 0x55, 0xef, 0x8a, 0xcd, 0x50, 0x46, 0x45, 0x55, 0x4d, 0xf4, 0x08, 0x32, 0x2a, 0xb9, 0xe6,
0xdf, 0x78, 0xd8, 0xed, 0xaa, 0xe4, 0x9a, 0x7e, 0x12, 0x7f, 0x0d, 0x7b, 0x2b, 0x6b, 0xd2, 0x44,
0xa8, 0xa8, 0xa6, 0x31, 0x77, 0x23, 0x97, 0x0f, 0x68, 0xea, 0xa0, 0x77, 0x81, 0xd7, 0xde, 0xa5,
0xb4, 0xf8, 0xcf, 0x49, 0x78, 0xe6, 0x6f, 0xf8, 0xfe, 0x07, 0xaf, 0xba, 0x72, 0xf0, 0xc2, 0xfd,
0x44, 0x6f, 0x89, 0x8e, 0x6e, 0x13, 0xf3, 0x52, 0x56, 0x48, 0xcc, 0x19, 0x9c, 0xc0, 0x47, 0xfc,
0xf9, 0x47, 0xd4, 0xb5, 0xe2, 0xe8, 0x5b, 0xd8, 0x62, 0x15, 0x32, 0x6f, 0x6e, 0xdf, 0x75, 0x11,
0x36, 0x47, 0xfc, 0xa7, 0x34, 0x3c, 0x5a, 0x8f, 0x1c, 0x77, 0x25, 0x7d, 0xe7, 0x5e, 0x3f, 0xfc,
0xb9, 0xf6, 0xf3, 0xbb, 0xad, 0x76, 0x12, 0xa8, 0x93, 0x69, 0x06, 0x5d, 0x50, 0x3f, 0x11, 0xcb,
0x3a, 0xf3, 0x32, 0xe4, 0x92, 0x43, 0xaf, 0x6b, 0x9d, 0xd8, 0x73, 0xd9, 0x7a, 0x77, 0xe6, 0xa6,
0x08, 0x7f, 0x1c, 0x4c, 0x40, 0xdb, 0xe1, 0x04, 0x34, 0x00, 0xa4, 0x5e, 0x29, 0x0b, 0x89, 0x98,
0xd7, 0xc4, 0xf4, 0x4b, 0x6a, 0xde, 0xcf, 0x7e, 0x1e, 0x52, 0xb2, 0xde, 0xae, 0x0d, 0xc3, 0x62,
0x38, 0x66, 0x2a, 0xfa, 0x04, 0x0a, 0x9e, 0x1b, 0x3a, 0xfa, 0xd8, 0x22, 0x6e, 0x66, 0x09, 0x33,
0xc5, 0x1a, 0x6c, 0xb1, 0xa7, 0x0f, 0xc0, 0x4e, 0xaf, 0xd2, 0x1f, 0x57, 0xba, 0x42, 0x02, 0x95,
0x20, 0x47, 0xd7, 0x98, 0xd4, 0xba, 0x9d, 0x46, 0x7f, 0x24, 0x24, 0x7d, 0x86, 0xd4, 0xc0, 0xdf,
0x37, 0xb0, 0x90, 0xa2, 0xaf, 0xec, 0x71, 0xbf, 0x57, 0xe9, 0x57, 0x5a, 0x8d, 0xba, 0x90, 0x16,
0xff, 0x2f, 0x0d, 0x68, 0x55, 0xab, 0x65, 0x11, 0x3d, 0x34, 0x4c, 0xff, 0x6a, 0x58, 0x72, 0xd0,
0x4b, 0x28, 0xf1, 0x91, 0x6f, 0x6e, 0x37, 0x8c, 0xa3, 0x6c, 0xd6, 0xd9, 0x22, 0xb2, 0xc5, 0x8a,
0x29, 0xd7, 0xe2, 0x4b, 0x06, 0x3a, 0x06, 0x41, 0x37, 0x6c, 0xfa, 0x9e, 0x33, 0x4c, 0xcd, 0x96,
0xd9, 0x4f, 0x13, 0xbc, 0xde, 0x59, 0xe1, 0xa3, 0x13, 0x40, 0xaa, 0xd1, 0x37, 0xec, 0xaa, 0xa6,
0xab, 0xcb, 0x65, 0xb9, 0x2f, 0x62, 0xbe, 0xd0, 0xa2, 0x41, 0x91, 0x67, 0xb3, 0x0b, 0x59, 0x79,
0xe7, 0x76, 0x55, 0x79, 0xf6, 0x8e, 0x70, 0xd1, 0x19, 0xec, 0x98, 0xb2, 0x3e, 0x25, 0x56, 0x79,
0x97, 0x45, 0xf1, 0x93, 0x35, 0x2e, 0xc3, 0x54, 0x08, 0xbb, 0xb2, 0xa8, 0x09, 0xbb, 0xc6, 0x82,
0xff, 0xb2, 0xc3, 0x9f, 0x87, 0x7f, 0x79, 0x8b, 0xa7, 0x4f, 0x06, 0x5c, 0xbc, 0xa1, 0xdb, 0xe6,
0x0d, 0xf6, 0x26, 0xa3, 0x1a, 0xe4, 0x2c, 0xba, 0x41, 0xa5, 0x6d, 0x58, 0xb6, 0x55, 0xce, 0x32,
0xac, 0x8f, 0xd6, 0x61, 0xf9, 0x92, 0x38, 0x38, 0xeb, 0xe8, 0x5b, 0xc8, 0x07, 0xd1, 0xe9, 0x05,
0xf8, 0x8e, 0xdc, 0xb8, 0x7e, 0xa3, 0x64, 0xb8, 0x11, 0x91, 0x75, 0x1b, 0x11, 0xdf, 0xa6, 0xbe,
0x49, 0x8a, 0x06, 0x94, 0x22, 0x7b, 0x64, 0x85, 0x04, 0x25, 0xba, 0xc6, 0x7b, 0xbf, 0x1d, 0x19,
0xe0, 0xf8, 0xdf, 0xc7, 0x8b, 0x05, 0xf1, 0x32, 0x60, 0x80, 0xe3, 0xfb, 0x9c, 0x15, 0x85, 0x41,
0x9f, 0x53, 0x86, 0xf8, 0x0d, 0xec, 0xc7, 0xed, 0x88, 0x3d, 0x06, 0x65, 0xc5, 0x7f, 0x0c, 0xca,
0x0a, 0x2b, 0xb6, 0x16, 0x2e, 0x7e, 0x4a, 0x5b, 0x88, 0xbb, 0xb0, 0xdd, 0x98, 0x2f, 0xec, 0x9b,
0xe3, 0x5f, 0x80, 0x10, 0x6d, 0xe4, 0xa1, 0x1d, 0x48, 0x8d, 0x87, 0x42, 0x02, 0x65, 0x60, 0xab,
0x3e, 0x38, 0xef, 0x0b, 0x49, 0xb4, 0x0b, 0xe9, 0x41, 0xb3, 0x29, 0xa4, 0x8e, 0x3f, 0x07, 0x58,
0x36, 0xee, 0xe8, 0x79, 0xc1, 0x1d, 0xa9, 0xd3, 0x6f, 0xf1, 0x9e, 0x54, 0xb3, 0xd2, 0xed, 0xd2,
0x01, 0xeb, 0x49, 0x55, 0x07, 0xa3, 0xb6, 0x90, 0x3a, 0xfe, 0x9f, 0x24, 0xec, 0xba, 0xdd, 0x22,
0x94, 0x85, 0xed, 0xfe, 0xb8, 0x37, 0xf9, 0x52, 0x48, 0x78, 0xe4, 0xa9, 0x90, 0xf4, 0xc8, 0xaf,
0x84, 0x94, 0x47, 0x9e, 0x09, 0x69, 0x8f, 0xfc, 0x5a, 0xd8, 0xf2, 0xc8, 0x57, 0xc2, 0xb6, 0x47,
0xbe, 0x16, 0x76, 0x3c, 0xf2, 0x1b, 0x61, 0xd7, 0x23, 0x7f, 0x29, 0x64, 0xa8, 0x46, 0x6c, 0x89,
0x2f, 0x84, 0xac, 0x4f, 0x7f, 0x29, 0x80, 0x4f, 0x9f, 0x0a, 0x39, 0x9f, 0xfe, 0x4a, 0xc8, 0xfb,
0xf4, 0x99, 0x50, 0xf0, 0xe9, 0xaf, 0x85, 0xa2, 0x4f, 0xbf, 0x12, 0x4a, 0x3e, 0xfd, 0x5a, 0x10,
0x7c, 0xfa, 0x1b, 0x61, 0xcf, 0xa7, 0x7f, 0x29, 0x20, 0x8f, 0x3e, 0xfd, 0x42, 0x78, 0x70, 0xfc,
0x0b, 0xc8, 0x07, 0x3b, 0x5e, 0xd4, 0x78, 0xdd, 0xc1, 0x39, 0xb7, 0x67, 0xbb, 0xd3, 0x6a, 0x0b,
0x49, 0x2a, 0x3e, 0x1a, 0xb4, 0x5a, 0xdd, 0x86, 0x90, 0x3a, 0xae, 0x43, 0x29, 0xd2, 0xc7, 0xa1,
0xb6, 0x1c, 0xf7, 0xdf, 0xf6, 0xa9, 0xed, 0x13, 0xd4, 0x1b, 0x95, 0x21, 0xf7, 0x81, 0x34, 0xaa,
0x08, 0x29, 0xf4, 0x00, 0x4a, 0xd2, 0xa8, 0x32, 0x69, 0x56, 0x3a, 0xdd, 0xc1, 0xf7, 0x0d, 0x3c,
0xa9, 0x0c, 0x85, 0xf4, 0x71, 0x1d, 0x0a, 0xa1, 0x76, 0x06, 0x3a, 0x80, 0x3d, 0x2a, 0xd5, 0x1f,
0x8c, 0x26, 0xb5, 0x41, 0xbf, 0xdf, 0xa8, 0x8d, 0x1a, 0x75, 0x6e, 0xf8, 0xca, 0x70, 0x32, 0xa6,
0x80, 0x7b, 0x50, 0xa0, 0x12, 0xcb, 0xaf, 0xa9, 0xe3, 0xcf, 0x78, 0x53, 0xcb, 0xeb, 0x0a, 0xa1,
0x3c, 0x64, 0xce, 0x87, 0x95, 0xd3, 0xc9, 0x50, 0x7a, 0xcb, 0xf5, 0x1f, 0x0c, 0x1b, 0x7d, 0x21,
0x79, 0xfc, 0x57, 0x20, 0x44, 0x1f, 0x6a, 0x54, 0xbf, 0x51, 0x8f, 0x86, 0x8d, 0x00, 0xf9, 0x6a,
0x45, 0x6a, 0x4f, 0xa4, 0x1a, 0xee, 0x0c, 0x47, 0x12, 0x4f, 0x9d, 0xb4, 0x9c, 0xf2, 0x18, 0xa9,
0xd3, 0xff, 0x7a, 0x01, 0x3b, 0xc3, 0xb3, 0xf3, 0xfe, 0xf0, 0x4b, 0xd4, 0x83, 0x72, 0x8b, 0xd8,
0xde, 0xfd, 0x18, 0xba, 0xf1, 0x11, 0x0a, 0xdf, 0x4b, 0x34, 0x60, 0x8f, 0x36, 0xd5, 0xbd, 0x62,
0x02, 0xb5, 0xe1, 0x01, 0xc7, 0xfa, 0x60, 0xa4, 0x26, 0xec, 0xb5, 0x88, 0x1d, 0xa9, 0x9d, 0xef,
0x81, 0x33, 0x80, 0x3d, 0x69, 0x05, 0x67, 0xd3, 0x9c, 0xdb, 0x00, 0x7f, 0x03, 0xc5, 0x16, 0xb1,
0x83, 0xef, 0x8f, 0x38, 0xad, 0xca, 0x21, 0x5e, 0x40, 0x9a, 0x23, 0x48, 0x61, 0x84, 0xb5, 0xd2,
0x47, 0x31, 0xd8, 0x62, 0x02, 0xd5, 0x21, 0xdf, 0xa3, 0x2f, 0x9b, 0x71, 0x4f, 0x62, 0xb7, 0xcf,
0x2d, 0xb5, 0xe2, 0x1a, 0x94, 0x21, 0x08, 0xb4, 0x16, 0x23, 0x63, 0xa9, 0xea, 0x6b, 0x12, 0xae,
0x7c, 0xd6, 0xbe, 0x9a, 0xd6, 0x20, 0xfe, 0x35, 0xec, 0xb7, 0x88, 0xcd, 0x40, 0xd5, 0x20, 0x6a,
0xb8, 0xf1, 0x17, 0xea, 0x8b, 0xdd, 0x66, 0xee, 0x11, 0x3c, 0x74, 0x9b, 0xf7, 0x7f, 0x4a, 0xd4,
0x2e, 0x94, 0x19, 0x9e, 0x17, 0xf8, 0x77, 0x85, 0x8d, 0xdf, 0x76, 0x1f, 0x0e, 0xe8, 0x0b, 0x7c,
0x55, 0xc3, 0xb8, 0xc8, 0x78, 0xbe, 0x1e, 0x9e, 0xf7, 0x01, 0x13, 0xa8, 0xc7, 0x5e, 0xff, 0xd8,
0xd1, 0xdd, 0x8b, 0xfd, 0x69, 0xfc, 0x7b, 0xda, 0x75, 0xcd, 0xd1, 0x93, 0x75, 0x9f, 0xe9, 0x83,
0x99, 0xc1, 0x95, 0x82, 0x70, 0x6f, 0x8c, 0x8b, 0xdb, 0x10, 0xd7, 0x3f, 0xe0, 0xc5, 0x04, 0xc2,
0x70, 0xd0, 0xee, 0xd4, 0xa9, 0x9f, 0xfd, 0x57, 0x3d, 0xef, 0x01, 0xac, 0x9f, 0x75, 0xab, 0x8a,
0x0d, 0x40, 0xed, 0x4e, 0xbd, 0x26, 0xeb, 0x0a, 0x99, 0x2d, 0xb5, 0xdc, 0x00, 0xb8, 0xce, 0x11,
0x0f, 0xb9, 0x6a, 0x6e, 0xcf, 0xc3, 0x97, 0x8f, 0x77, 0xc5, 0xd3, 0xb5, 0xf8, 0xd4, 0x9d, 0x62,
0x02, 0x55, 0xe1, 0xd0, 0x57, 0xab, 0x32, 0x9b, 0xdd, 0x02, 0x17, 0xaf, 0xd3, 0xef, 0x3c, 0x73,
0x45, 0xfa, 0x30, 0x9b, 0x76, 0xf7, 0x69, 0xf4, 0x53, 0x6c, 0x0f, 0x87, 0x29, 0x98, 0x6b, 0x4a,
0x7e, 0x8f, 0x2f, 0xe2, 0xd6, 0x68, 0xef, 0x6f, 0x8d, 0x82, 0x6f, 0x01, 0x9a, 0x92, 0xd7, 0x6e,
0x44, 0x61, 0x4f, 0x45, 0x7a, 0xa2, 0x11, 0x8b, 0x45, 0x7b, 0x94, 0xcc, 0x03, 0x85, 0xa6, 0xd4,
0x22, 0xb6, 0xd7, 0x99, 0x8b, 0xe0, 0x45, 0xfa, 0x7a, 0x11, 0xbc, 0x68, 0x3b, 0x4f, 0x4c, 0xa0,
0x3f, 0xc0, 0x41, 0x53, 0xaa, 0x99, 0x44, 0xb6, 0x49, 0xa8, 0xb3, 0x8b, 0x22, 0xff, 0x53, 0x89,
0xe9, 0x2b, 0x1f, 0x89, 0x9b, 0x44, 0xfc, 0x15, 0x7e, 0x03, 0x39, 0xd6, 0xab, 0xee, 0xb2, 0x7a,
0x3f, 0xe2, 0x95, 0x60, 0x43, 0x3e, 0x6a, 0x3e, 0xfa, 0x49, 0x4c, 0x7c, 0x91, 0x44, 0x2d, 0xc8,
0x35, 0x94, 0x2b, 0xbf, 0x57, 0xb9, 0x29, 0x7f, 0x6c, 0xf8, 0x26, 0x26, 0x50, 0x07, 0x10, 0x4f,
0x48, 0xa1, 0x9f, 0xb6, 0xd6, 0xff, 0x98, 0x71, 0x74, 0x18, 0xff, 0x83, 0x8a, 0x98, 0x40, 0xbf,
0x82, 0x7c, 0x8b, 0xd8, 0xcb, 0x1f, 0x62, 0xe2, 0xe2, 0x75, 0xfd, 0xec, 0x26, 0x1c, 0x72, 0x73,
0xf8, 0xcc, 0xda, 0x15, 0x7f, 0x2d, 0xfc, 0x34, 0x1c, 0x0c, 0x7b, 0x2c, 0x29, 0x9e, 0x6b, 0x97,
0xcb, 0xfd, 0xfc, 0x2c, 0x22, 0xbe, 0xee, 0xf7, 0xc3, 0xb5, 0xb7, 0xd6, 0x81, 0x7f, 0xc7, 0x84,
0x70, 0x37, 0xd9, 0x7d, 0xbd, 0x0d, 0x19, 0x62, 0x39, 0x78, 0xc5, 0xdc, 0x19, 0x74, 0xfd, 0xbe,
0x7b, 0xf0, 0x28, 0x74, 0xbd, 0xdc, 0x19, 0x32, 0x7e, 0xcb, 0x03, 0xee, 0x8e, 0x18, 0xf5, 0xee,
0x79, 0xc1, 0x4c, 0xe0, 0x39, 0x57, 0x6d, 0x7d, 0xdb, 0xe2, 0x8e, 0x2d, 0x90, 0x35, 0x1a, 0x1b,
0xf0, 0xb3, 0x16, 0xb1, 0x2b, 0xb3, 0xd9, 0xed, 0x9d, 0x97, 0xb8, 0x2d, 0x9c, 0x84, 0x9f, 0x8d,
0xb7, 0x61, 0x88, 0x09, 0x34, 0x83, 0x4f, 0x02, 0x75, 0xec, 0xfa, 0xd5, 0x36, 0x19, 0xff, 0x8e,
0x5b, 0x16, 0x13, 0x48, 0x81, 0x67, 0xcc, 0x19, 0xeb, 0xd7, 0x89, 0xef, 0xe9, 0xfc, 0xa4, 0x40,
0xff, 0x01, 0x44, 0x3f, 0xd0, 0xff, 0xdc, 0x1b, 0xfa, 0x2d, 0x7c, 0x1a, 0x3c, 0x02, 0xf7, 0x5b,
0x2e, 0x7e, 0x1b, 0x7f, 0x07, 0x1f, 0x2f, 0x83, 0xf7, 0xa7, 0x85, 0xc1, 0x1d, 0x22, 0x19, 0xc3,
0xe3, 0x80, 0xdf, 0x57, 0xfe, 0xbd, 0x7a, 0xfb, 0xad, 0x1f, 0x9d, 0xc2, 0x4e, 0xc7, 0x53, 0x0e,
0x18, 0xfd, 0x86, 0xc9, 0x62, 0x26, 0x2b, 0xd1, 0x6b, 0x36, 0x2a, 0x75, 0xfb, 0x02, 0xbf, 0x83,
0x47, 0xf1, 0x0b, 0x54, 0x54, 0xf5, 0x83, 0xc1, 0x7f, 0x0f, 0x4f, 0xd6, 0x69, 0x3f, 0x37, 0xae,
0x3f, 0x5c, 0xf9, 0x11, 0x3c, 0x5e, 0xfa, 0x33, 0xfa, 0xfd, 0xde, 0x7e, 0xec, 0xc2, 0x01, 0x43,
0x5c, 0xf1, 0xe0, 0x2d, 0xea, 0xc6, 0xc7, 0xdc, 0x05, 0x7c, 0x1c, 0x0c, 0xe7, 0x75, 0x7e, 0xdc,
0x14, 0xcc, 0x77, 0xb0, 0xf3, 0xf3, 0x4d, 0x6b, 0x50, 0x57, 0x7e, 0x10, 0x7e, 0x0f, 0xf6, 0x97,
0x76, 0xf6, 0xab, 0xc3, 0x7b, 0x1b, 0x38, 0xf4, 0x46, 0x59, 0xfe, 0xb1, 0xeb, 0xbe, 0x78, 0x17,
0x3b, 0xec, 0xff, 0xe3, 0x5f, 0xfd, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4b, 0x70, 0x90, 0xa4,
0x4d, 0x2e, 0x00, 0x00,
}

View File

@ -12,6 +12,13 @@ service P4WNP1 {
rpc SetLEDSettings (LEDSettings) returns (Empty) { }
rpc MountUMSFile (GadgetSettingsUMS) returns (Empty) { }
rpc StoreUSBSettings(USBRequestSettingsStorage) returns (Empty) {}
rpc GetStoredUSBSettings(StringMessage) returns (GadgetSettings) {}
rpc DeployStoredUSBSettings(StringMessage) returns (GadgetSettings) {}
rpc StoreDeployedUSBSettings(StringMessage) returns (Empty) {}
rpc ListStoredUSBSettings(Empty) returns (StringMessageArray) {}
//HIDScript / job management
rpc HIDRunScript (HIDScriptRequest) returns (HIDScriptResult) { }
rpc HIDRunScriptJob (HIDScriptRequest) returns (HIDScriptJob) { }
@ -364,6 +371,12 @@ message LEDSettings {
/* End LED */
/* USB Gadget */
message USBRequestSettingsStorage {
string TemplateName = 1;
GadgetSettings settings = 2;
}
message GadgetSettings {
bool enabled = 1;
string vid = 2;

View File

@ -30,6 +30,7 @@ var (
const (
cSTORE_PREFIX_WIFI_SETTINGS = "ws_"
cSTORE_PREFIX_USB_SETTINGS = "usbs_"
cSTORE_PREFIX_ETHERNET_INTERFACE_SETTINGS = "eis_"
cSTORE_PREFIX_TRIGGER_ACTION_SET = "tas_"
)
@ -48,6 +49,48 @@ type server struct {
listenAddrWeb string
}
func (s *server) StoreUSBSettings(ctx context.Context, r *pb.USBRequestSettingsStorage) (e *pb.Empty, err error) {
e = &pb.Empty{}
err = s.rootSvc.SubSysDataStore.Put(cSTORE_PREFIX_USB_SETTINGS + r.TemplateName, r.Settings, true)
return
}
func (s *server) GetStoredUSBSettings(ctx context.Context, m *pb.StringMessage) (gs *pb.GadgetSettings, err error) {
gs = &pb.GadgetSettings{}
err = s.rootSvc.SubSysDataStore.Get(cSTORE_PREFIX_USB_SETTINGS + m.Msg, gs)
return
}
func (s *server) DeployStoredUSBSettings(ctx context.Context, m *pb.StringMessage) (st *pb.GadgetSettings, err error) {
ws,err := s.GetStoredUSBSettings(ctx,m)
if err != nil { return st,err }
st,err = s.SetGadgetSettings(ctx, ws)
if err != nil {
return
}
_,err = s.DeployGadgetSetting(ctx, &pb.Empty{})
return
}
func (s *server) StoreDeployedUSBSettings(ctx context.Context, m *pb.StringMessage) (e *pb.Empty, err error) {
gstate, err := ParseGadgetState(USB_GADGET_NAME)
if err != nil { return nil,err }
return s.StoreUSBSettings(ctx, &pb.USBRequestSettingsStorage{
Settings: gstate,
TemplateName: m.Msg,
})
}
func (s *server) ListStoredUSBSettings(ctx context.Context, e *pb.Empty) (sa *pb.StringMessageArray, err error) {
res,err := s.rootSvc.SubSysDataStore.KeysPrefix(cSTORE_PREFIX_USB_SETTINGS, true)
if err != nil { return sa,err }
sa = &pb.StringMessageArray{
MsgArray: res,
}
return
}
func (s *server) ListStoredHIDScripts(context.Context, *pb.Empty) (*pb.StringMessageArray, error) {
scripts,err := ListFilesOfFolder(PATH_HID_SCRIPTS, ".js", ".javascript")
if err != nil { return nil,err }

View File

@ -339,7 +339,12 @@ func (tam *TriggerActionManager) executeActionDeploySettingsTemplate(evt *pb.Eve
fmt.Println("... deploying stored settings failed: ", err.Error())
}
case pb.ActionDeploySettingsTemplate_USB:
// ToDo: Implement
_,err := tam.rootSvc.SubSysRPC.DeployStoredUSBSettings(context.Background(), &pb.StringMessage{Msg: action.TemplateName})
if err == nil {
fmt.Println("... stored settings deployed")
} else {
fmt.Println("... deploying stored settings failed: ", err.Error())
}
case pb.ActionDeploySettingsTemplate_WIFI:
_,err := tam.rootSvc.SubSysRPC.DeployStoredWifiSettings(context.Background(), &pb.StringMessage{Msg: action.TemplateName})
if err == nil {

View File

@ -3,19 +3,19 @@
package service
import (
"errors"
"io/ioutil"
"log"
"os"
"os/exec"
"strings"
"context"
"errors"
"fmt"
"github.com/mame82/P4wnP1_go/hid"
pb "github.com/mame82/P4wnP1_go/proto"
"io/ioutil"
"log"
"net"
"os"
"os/exec"
"regexp"
"strings"
"sync"
"time"
)
@ -85,7 +85,6 @@ var (
type UsbManagerState struct {
UndeployedGadgetSettings *pb.GadgetSettings
DevicePath map[string]string
}
type UsbGadgetManager struct {
@ -94,7 +93,8 @@ type UsbGadgetManager struct {
State *UsbManagerState
// ToDo: variable, indicating if HIDScript is usable
hidCtl *hid.HIDController // Points to an HID controller instance only if keyboard and/or mouse are enabled, nil otherwise
hidCtl *hid.HIDController // Points to an HID controller instance only if keyboard and/or mouse are enabled, nil otherwise
gadgetSettingsLock *sync.Mutex
}
func (gm *UsbGadgetManager) HandleEvent(event hid.Event) {
@ -163,8 +163,9 @@ func (gm *UsbGadgetManager) HidScriptCancelAllRunningBackgroundJobs() (err error
func NewUSBGadgetManager(rooSvc *Service) (newUGM *UsbGadgetManager, err error) {
newUGM = &UsbGadgetManager{
RootSvc: rooSvc,
Usable: true,
RootSvc: rooSvc,
Usable: true,
gadgetSettingsLock: &sync.Mutex{},
State: &UsbManagerState{
DevicePath: map[string]string{},
},
@ -520,6 +521,10 @@ func (gm *UsbGadgetManager) DeployGadgetSettings(settings *pb.GadgetSettings) er
return ErrUsbNotUsable
}
//Lock, only one change at a time
gm.gadgetSettingsLock.Lock()
defer gm.gadgetSettingsLock.Unlock()
var usesUSBEthernet bool
//gadget_root := "./test"

View File

@ -15,16 +15,20 @@ type CompUSBSettingsData struct {
DeployPending bool `js:"deployPending"`
CdcEcmDetails bool `js:"cdcEcmDetails"`
RndisDetails bool `js:"rndisDetails"`
ShowStoreModal bool `js:"showStoreModal"`
ShowLoadModal bool `js:"showLoadModal"`
ShowDeployStoredModal bool `js:"showDeployStoredModal"`
}
//This becomes a method of the Vue Component and encapsulates dispatching of a Vuex action
func (c *CompUSBSettingsData) UpdateFromDeployedGadgetSettings(vm *hvue.VM) {
vm.Get("$store").Call("dispatch", VUEX_ACTION_UPDATE_GADGET_SETTINGS_FROM_DEPLOYED)
vm.Get("$store").Call("dispatch", VUEX_ACTION_UPDATE_CURRENT_USB_SETTINGS)
}
//This becomes a method of the Vue Component and encapsulates dispatching of a Vuex action
func (c *CompUSBSettingsData) ApplyGadgetSettings(vm *hvue.VM) {
vm.Get("$store").Call("dispatch", VUEX_ACTION_DEPLOY_CURRENT_GADGET_SETTINGS)
vm.Get("$store").Call("dispatch", VUEX_ACTION_DEPLOY_CURRENT_USB_SETTINGS)
}
func InitCompUSBSettings() {
@ -42,21 +46,54 @@ func InitCompUSBSettings() {
func(vm *hvue.VM) interface{} {
return vm.Get("$store").Get("state").Get("deployingGadgetSettings")
}),
hvue.Mounted(func(vm *hvue.VM) {
vm.Store.Call("dispatch", VUEX_ACTION_UPDATE_CURRENT_USB_SETTINGS)
}),
hvue.Method("store",
func(vm *hvue.VM, name *js.Object) {
sReq := NewUSBRequestSettingsStorage()
sReq.TemplateName = name.String()
sReq.Settings = &jsGadgetSettings{
Object: vm.Get("$store").Get("state").Get("currentGadgetSettings"),
}
println("Storing :", sReq)
vm.Get("$store").Call("dispatch", VUEX_ACTION_STORE_USB_SETTINGS, sReq)
vm.Set("showStoreModal", false)
}),
hvue.Method("load",
func(vm *hvue.VM, name *js.Object) {
println("Loading :", name.String())
vm.Get("$store").Call("dispatch", VUEX_ACTION_LOAD_USB_SETTINGS, name)
}),
hvue.Method("deployStored",
func(vm *hvue.VM, name *js.Object) {
println("Loading :", name.String())
vm.Get("$store").Call("dispatch", VUEX_ACTION_DEPLOY_STORED_USB_SETTINGS, name)
}),
hvue.Method("updateStoredSettingsList",
func(vm *hvue.VM) {
vm.Store.Call("dispatch", VUEX_ACTION_UPDATE_STORED_USB_SETTINGS_LIST)
}),
)
}
func newCompUSBSettingsData(vm *hvue.VM) interface{} {
cc := &CompUSBSettingsData{
data := &CompUSBSettingsData{
Object: js.Global.Get("Object").New(),
}
cc.GadgetSettings = NewUSBGadgetSettings()
data.GadgetSettings = NewUSBGadgetSettings()
cc.DeployPending = false
cc.RndisDetails = false
cc.CdcEcmDetails = false
data.ShowStoreModal = false
data.ShowLoadModal = false
data.ShowDeployStoredModal = false
return cc
data.DeployPending = false
data.RndisDetails = false
data.CdcEcmDetails = false
return data
}
@ -64,6 +101,11 @@ func newCompUSBSettingsData(vm *hvue.VM) interface{} {
const (
compUSBSettingsTemplate = `
<q-page padding>
<select-string-from-array :values="$store.state.StoredUSBSettingsList" v-model="showLoadModal" title="Load USB gadget settings" @load="load($event)"></select-string-from-array>
<select-string-from-array :values="$store.state.StoredUSBSettingsList" v-model="showDeployStoredModal" title="Deploy stored USB gadget settings" @load="deployStored($event)"></select-string-from-array>
<modal-string-input v-model="showStoreModal" title="Store current USB gadget Settings" @save="store($event)"></modal-string-input>
<div class="row gutter-sm">
<div class="col-12 col-sm-6 col-md-5 col-xl-4">
<q-card class="full-height">
@ -73,6 +115,10 @@ const (
<q-card-actions>
<q-btn :loading="deploying" color="primary" @click="ApplyGadgetSettings" label="deploy"></q-btn>
<q-btn color="secondary" @click="UpdateFromDeployedGadgetSettings" label="reset"></q-btn>
<q-btn color="primary" @click="showStoreModal=true" label="store"></q-btn>
<q-btn color="primary" @click="updateStoredSettingsList(); showLoadModal=true" label="load stored"></q-btn>
<q-btn color="primary" @click="updateStoredSettingsList(); showDeployStoredModal=true" label="deploy stored"></q-btn>
</q-card-actions>

View File

@ -54,6 +54,33 @@ func NewWifiRequestSettingsStorage() *jsWifiRequestSettingsStorage {
/* USB Gadget types corresponding to gRPC messages */
type jsUSBRequestSettingsStorage struct {
*js.Object
TemplateName string `js:"TemplateName"`
Settings *jsGadgetSettings `js:"Settings"`
}
func (rs *jsUSBRequestSettingsStorage) toGo() *pb.USBRequestSettingsStorage {
return &pb.USBRequestSettingsStorage{
Settings: rs.Settings.toGo(),
TemplateName: rs.TemplateName,
}
}
func (rs *jsUSBRequestSettingsStorage) fromGo(src *pb.USBRequestSettingsStorage) {
rs.TemplateName = src.TemplateName
rs.Settings = NewUSBGadgetSettings()
rs.Settings.fromGo(src.Settings)
}
func NewUSBRequestSettingsStorage() *jsUSBRequestSettingsStorage {
res := &jsUSBRequestSettingsStorage{Object:O()}
res.TemplateName = ""
res.Settings = NewUSBGadgetSettings()
return res
}
type jsGadgetSettings struct {
*js.Object
Enabled bool `js:"Enabled"`
@ -86,7 +113,7 @@ type jsGadgetSettingsUMS struct {
File string `js:"File"`
}
func (jsGS jsGadgetSettings) toGS() (gs *pb.GadgetSettings) {
func (jsGS jsGadgetSettings) toGo() (gs *pb.GadgetSettings) {
return &pb.GadgetSettings{
Serial: jsGS.Serial,
Use_SERIAL: jsGS.Use_SERIAL,
@ -116,7 +143,7 @@ func (jsGS jsGadgetSettings) toGS() (gs *pb.GadgetSettings) {
}
}
func (jsGS *jsGadgetSettings) fromGS(gs *pb.GadgetSettings) {
func (jsGS *jsGadgetSettings) fromGo(gs *pb.GadgetSettings) {
println(gs)
jsGS.Enabled = gs.Enabled
@ -162,7 +189,7 @@ func NewUSBGadgetSettings() *jsGadgetSettings {
gs := &jsGadgetSettings{
Object: O(),
}
gs.fromGS(&pb.GadgetSettings{}) //start with empty settings, but create nested structs
gs.fromGo(&pb.GadgetSettings{}) //start with empty settings, but create nested structs
return gs
}

View File

@ -28,10 +28,16 @@ const (
VUEX_MUTATION_SET_STORED_HID_SCRIPTS_LIST = "setStoredHIDScriptsList"
//USBGadget
VUEX_ACTION_DEPLOY_CURRENT_GADGET_SETTINGS = "deployCurrentGadgetSettings"
VUEX_ACTION_UPDATE_GADGET_SETTINGS_FROM_DEPLOYED = "updateCurrentGadgetSettingsFromDeployed"
VUEX_ACTION_DEPLOY_CURRENT_USB_SETTINGS = "deployCurrentUSBSettings"
VUEX_ACTION_UPDATE_CURRENT_USB_SETTINGS = "updateCurrentUSBSettings"
VUEX_ACTION_STORE_USB_SETTINGS = "storeUSBSettings"
VUEX_ACTION_LOAD_USB_SETTINGS = "loadUSBSettings"
VUEX_ACTION_DEPLOY_STORED_USB_SETTINGS = "deployStoredUSBSettings"
VUEX_ACTION_UPDATE_STORED_USB_SETTINGS_LIST = "updateStoredUSBSettingsList"
VUEX_MUTATION_SET_CURRENT_USB_SETTINGS = "setCurrentUSBSettings"
VUEX_MUTATION_SET_STORED_USB_SETTINGS_LIST = "setStoredUSBSettingsList"
VUEX_MUTATION_SET_CURRENT_GADGET_SETTINGS_TO = "setCurrentGadgetSettings"
// Ethernet
VUEX_ACTION_UPDATE_ALL_ETHERNET_INTERFACE_SETTINGS = "updateAllEthernetInterfaceSettings"
@ -102,6 +108,7 @@ type GlobalState struct {
StoredTriggerActionSetsList []string `js:"StoredTriggerActionSetsList"`
StoredBashScriptsList []string `js:"StoredBashScriptsList"`
StoredHIDScriptsList []string `js:"StoredHIDScriptsList"`
StoredUSBSettingsList []string `js:"StoredUSBSettingsList"`
}
func createGlobalStateStruct() GlobalState {
@ -122,6 +129,7 @@ func createGlobalStateStruct() GlobalState {
state.StoredTriggerActionSetsList = []string{}
state.StoredBashScriptsList = []string{}
state.StoredHIDScriptsList = []string{}
state.StoredUSBSettingsList = []string{}
//Retrieve Interface settings
state.InterfaceSettings = NewEthernetSettingsList()
@ -136,6 +144,71 @@ func createGlobalStateStruct() GlobalState {
return state
}
func actionUpdateStoredUSBSettingsList(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState) {
go func() {
println("Trying to fetch wsList")
//fetch deployed gadget settings
wsList, err := RpcClient.GetStoredUSBSettingsList(defaultTimeout)
if err != nil {
println("Couldn't retrieve WifiSettingsList")
return
}
//commit to current
println(wsList)
context.Commit(VUEX_MUTATION_SET_STORED_USB_SETTINGS_LIST, wsList)
//context.Commit(VUEX_MUTATION_SET_STORED_WIFI_SETTINGS_LIST, []string{"test1", "test2"})
}()
return
}
func actionStoreUSBSettings(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, req *jsUSBRequestSettingsStorage) {
go func() {
println("Vuex dispatch store USB settings: ", req.TemplateName)
// convert to Go type
err := RpcClient.StoreUSBSettings(defaultTimeout, req.toGo())
if err != nil {
QuasarNotifyError("Error storing USB Settings", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM)
}
QuasarNotifySuccess("New USB settings stored", "", QUASAR_NOTIFICATION_POSITION_TOP)
}()
}
func actionLoadUSBSettings(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, settingsName *js.Object) {
go func() {
println("Vuex dispatch load USB settings: ", settingsName.String())
// convert to Go type
settings, err := RpcClient.GetStoredUSBSettings(defaultTimeout, &pb.StringMessage{Msg: settingsName.String()})
if err != nil {
QuasarNotifyError("Error fetching stored USB Settings", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM)
}
jsSettings := NewUSBGadgetSettings()
jsSettings.fromGo(settings)
context.Commit(VUEX_MUTATION_SET_CURRENT_USB_SETTINGS, jsSettings)
QuasarNotifySuccess("New USB settings loaded", "", QUASAR_NOTIFICATION_POSITION_TOP)
}()
}
func actionDeployStoredUSBSettings(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState, settingsName *js.Object) {
go func() {
println("Vuex dispatch load USB settings: ", settingsName.String())
// convert to Go type
goUSBstettings, err := RpcClient.DeployStoredUSBSettings(defaultTimeoutMid, &pb.StringMessage{Msg: settingsName.String()})
if err != nil {
QuasarNotifyError("Error deploying stored USB Settings", err.Error(), QUASAR_NOTIFICATION_POSITION_BOTTOM)
}
QuasarNotifySuccess("New USB settings deployed", "", QUASAR_NOTIFICATION_POSITION_TOP)
jsUSBSettings := NewUSBGadgetSettings()
jsUSBSettings.fromGo(goUSBstettings)
context.Commit(VUEX_MUTATION_SET_CURRENT_USB_SETTINGS, jsUSBSettings)
}()
}
func actionUpdateAllEthernetInterfaceSettings(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState) interface{} {
return NewPromise(func() (res interface{}, err error) {
@ -315,10 +388,10 @@ func actionUpdateGadgetSettingsFromDeployed(store *mvuex.Store, context *mvuex.A
}
//convert to JS version
jsGS := &jsGadgetSettings{Object: O()}
jsGS.fromGS(dGS)
jsGS.fromGo(dGS)
//commit to current
context.Commit("setCurrentGadgetSettings", jsGS)
context.Commit("setCurrentUSBSettings", jsGS)
}()
return
@ -590,7 +663,7 @@ func actionDeployCurrentGadgetSettings(store *mvuex.Store, context *mvuex.Action
defer func() { state.CurrentlyDeployingGadgetSettings = false }()
//get current GadgetSettings
curGS := state.CurrentGadgetSettings.toGS()
curGS := state.CurrentGadgetSettings.toGo()
//try to set them via gRPC (the server holds an internal state, setting != deploying)
err := RpcClient.SetRemoteGadgetSettings(curGS, defaultTimeoutShort)
@ -644,7 +717,7 @@ func initMVuex() *mvuex.Store {
state.CurrentHIDScriptSource = newText
return
}),
mvuex.Mutation(VUEX_MUTATION_SET_CURRENT_GADGET_SETTINGS_TO, func(store *mvuex.Store, state *GlobalState, settings *jsGadgetSettings) {
mvuex.Mutation(VUEX_MUTATION_SET_CURRENT_USB_SETTINGS, func(store *mvuex.Store, state *GlobalState, settings *jsGadgetSettings) {
state.CurrentGadgetSettings = settings
return
}),
@ -660,6 +733,10 @@ func initMVuex() *mvuex.Store {
println("New ws list", wsList)
hvue.Set(state, "StoredWifiSettingsList", wsList)
}),
mvuex.Mutation(VUEX_MUTATION_SET_STORED_USB_SETTINGS_LIST, func(store *mvuex.Store, state *GlobalState, usbList []interface{}) {
println("New USB settings list", usbList)
hvue.Set(state, "StoredUSBSettingsList", usbList)
}),
mvuex.Mutation(VUEX_MUTATION_SET_STORED_BASH_SCRIPTS_LIST, func(store *mvuex.Store, state *GlobalState, bsList []interface{}) {
hvue.Set(state, "StoredBashScriptsList", bsList)
}),
@ -691,9 +768,13 @@ func initMVuex() *mvuex.Store {
return
}),
*/
mvuex.Action(VUEX_ACTION_UPDATE_GADGET_SETTINGS_FROM_DEPLOYED, actionUpdateGadgetSettingsFromDeployed),
mvuex.Action(VUEX_ACTION_DEPLOY_CURRENT_GADGET_SETTINGS, actionDeployCurrentGadgetSettings),
mvuex.Action(VUEX_ACTION_UPDATE_CURRENT_USB_SETTINGS, actionUpdateGadgetSettingsFromDeployed),
mvuex.Action(VUEX_ACTION_DEPLOY_CURRENT_USB_SETTINGS, actionDeployCurrentGadgetSettings),
mvuex.Action(VUEX_ACTION_UPDATE_RUNNING_HID_JOBS, actionUpdateRunningHidJobs),
mvuex.Action(VUEX_ACTION_STORE_USB_SETTINGS, actionStoreUSBSettings),
mvuex.Action(VUEX_ACTION_LOAD_USB_SETTINGS, actionLoadUSBSettings),
mvuex.Action(VUEX_ACTION_DEPLOY_STORED_USB_SETTINGS, actionDeployStoredUSBSettings),
mvuex.Action(VUEX_ACTION_UPDATE_STORED_USB_SETTINGS_LIST, actionUpdateStoredUSBSettingsList),
mvuex.Action(VUEX_ACTION_DEPLOY_ETHERNET_INTERFACE_SETTINGS, actionDeployEthernetInterfaceSettings),
mvuex.Action(VUEX_ACTION_UPDATE_ALL_ETHERNET_INTERFACE_SETTINGS, actionUpdateAllEthernetInterfaceSettings),
@ -780,7 +861,7 @@ func initMVuex() *mvuex.Store {
)
// fetch deployed gadget settings
store.Dispatch(VUEX_ACTION_UPDATE_GADGET_SETTINGS_FROM_DEPLOYED)
store.Dispatch(VUEX_ACTION_UPDATE_CURRENT_USB_SETTINGS)
// Update already running HID jobs
store.Dispatch(VUEX_ACTION_UPDATE_RUNNING_HID_JOBS)

View File

@ -30,6 +30,44 @@ func NewRpcClient(addr string) Rpc {
return rcl
}
func (rpc *Rpc) GetStoredUSBSettingsList(timeout time.Duration) (ws []string, err error) {
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
ma, err := rpc.Client.ListStoredUSBSettings(ctx, &pb.Empty{})
if err != nil { return ws, err }
return ma.MsgArray, err
}
func (rpc *Rpc) StoreUSBSettings(timeout time.Duration, req *pb.USBRequestSettingsStorage) (err error) {
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
_, err = rpc.Client.StoreUSBSettings(ctx, req)
return
}
func (rpc *Rpc) GetStoredUSBSettings(timeout time.Duration, req *pb.StringMessage) (settings *pb.GadgetSettings, err error) {
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
settings, err = rpc.Client.GetStoredUSBSettings(ctx, req)
return
}
func (rpc *Rpc) DeployStoredUSBSettings(timeout time.Duration, req *pb.StringMessage) (state *pb.GadgetSettings, err error) {
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
state, err = rpc.Client.DeployStoredUSBSettings(ctx, req)
return
}
func (rpc *Rpc) UploadBytesToFile(timeout time.Duration, filename string, folder pb.AccessibleFolder, content []byte, allowOverwrite bool) (err error) {
ctx := context.Background()
if timeout > 0 {
@ -113,7 +151,6 @@ func (rpc *Rpc) DeployedEthernetInterfaceSettings(timeout time.Duration, setting
return
}
func (rpc *Rpc) GetStoredWifiSettingsList(timeout time.Duration) (ws []string, err error) {
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
@ -399,7 +436,7 @@ func (rpc *Rpc) StartListening() {
go func() {
for {
println("Try to connect server ...")
for RpcClient.ConnectionTest(time.Second*3) != nil {
for RpcClient.ConnectionTest(time.Millisecond * 2500) != nil {
println("... failed, retry for 3 seconds")
globalState.FailedConnectionAttempts++
}