diff options
author | IWASE Yusuke <iwase.yusuke0@gmail.com> | 2017-06-23 16:16:02 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2017-06-26 14:21:57 +0900 |
commit | 0111219af1270f69668a62f93a385f96df51b79f (patch) | |
tree | a341cd1289811367fd42a4a2b6f2709ee8920c5a | |
parent | f2576098049dbc3b21596eb2d603f7378e939d60 (diff) |
api: Enable to compose AfiSafi message structure
Signed-off-by: IWASE Yusuke <iwase.yusuke0@gmail.com>
-rw-r--r-- | api/gobgp.pb.go | 1451 | ||||
-rw-r--r-- | api/gobgp.proto | 95 | ||||
-rw-r--r-- | api/grpc_server.go | 328 |
3 files changed, 1307 insertions, 567 deletions
diff --git a/api/gobgp.pb.go b/api/gobgp.pb.go index 3d8f2ce8..162e5d42 100644 --- a/api/gobgp.pb.go +++ b/api/gobgp.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: gobgp.proto -// DO NOT EDIT! /* Package gobgpapi is a generated protocol buffer package. @@ -127,14 +126,28 @@ It has these top-level messages: Transport RouteServer GracefulRestart + MpGracefulRestartConfig + MpGracefulRestartState MpGracefulRestart AfiSafiConfig + AfiSafiState + RouteSelectionOptionsConfig + RouteSelectionOptionsState RouteSelectionOptions UseMultiplePathsConfig + UseMultiplePathsState + EbgpConfig + EbgpState Ebgp + IbgpConfig + IbgpState Ibgp UseMultiplePaths + RouteTargetMembershipConfig + RouteTargetMembershipState RouteTargetMembership + LongLivedGracefulRestartConfig + LongLivedGracefulRestartState LongLivedGracefulRestart AfiSafi Prefix @@ -516,7 +529,7 @@ var Conditions_RouteType_value = map[string]int32{ func (x Conditions_RouteType) String() string { return proto.EnumName(Conditions_RouteType_name, int32(x)) } -func (Conditions_RouteType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{132, 0} } +func (Conditions_RouteType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{146, 0} } type GetNeighborRequest struct { EnableAdvertised bool `protobuf:"varint,1,opt,name=enableAdvertised" json:"enableAdvertised,omitempty"` @@ -2609,25 +2622,28 @@ func (m *PrefixLimit) GetShutdownThresholdPct() uint32 { } type PeerConf struct { - AuthPassword string `protobuf:"bytes,1,opt,name=auth_password,json=authPassword" json:"auth_password,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` - LocalAs uint32 `protobuf:"varint,3,opt,name=local_as,json=localAs" json:"local_as,omitempty"` - NeighborAddress string `protobuf:"bytes,4,opt,name=neighbor_address,json=neighborAddress" json:"neighbor_address,omitempty"` - PeerAs uint32 `protobuf:"varint,5,opt,name=peer_as,json=peerAs" json:"peer_as,omitempty"` - PeerGroup string `protobuf:"bytes,6,opt,name=peer_group,json=peerGroup" json:"peer_group,omitempty"` - PeerType uint32 `protobuf:"varint,7,opt,name=peer_type,json=peerType" json:"peer_type,omitempty"` - RemovePrivateAs PeerConf_RemovePrivateAs `protobuf:"varint,8,opt,name=remove_private_as,json=removePrivateAs,enum=gobgpapi.PeerConf_RemovePrivateAs" json:"remove_private_as,omitempty"` - RouteFlapDamping bool `protobuf:"varint,9,opt,name=route_flap_damping,json=routeFlapDamping" json:"route_flap_damping,omitempty"` - SendCommunity uint32 `protobuf:"varint,10,opt,name=send_community,json=sendCommunity" json:"send_community,omitempty"` - RemoteCap [][]byte `protobuf:"bytes,11,rep,name=remote_cap,json=remoteCap,proto3" json:"remote_cap,omitempty"` - LocalCap [][]byte `protobuf:"bytes,12,rep,name=local_cap,json=localCap,proto3" json:"local_cap,omitempty"` - Id string `protobuf:"bytes,13,opt,name=id" json:"id,omitempty"` - PrefixLimits []*PrefixLimit `protobuf:"bytes,14,rep,name=prefix_limits,json=prefixLimits" json:"prefix_limits,omitempty"` - LocalAddress string `protobuf:"bytes,15,opt,name=local_address,json=localAddress" json:"local_address,omitempty"` - NeighborInterface string `protobuf:"bytes,16,opt,name=neighbor_interface,json=neighborInterface" json:"neighbor_interface,omitempty"` - Vrf string `protobuf:"bytes,17,opt,name=vrf" json:"vrf,omitempty"` - AllowOwnAs uint32 `protobuf:"varint,18,opt,name=allow_own_as,json=allowOwnAs" json:"allow_own_as,omitempty"` - ReplacePeerAs bool `protobuf:"varint,19,opt,name=replace_peer_as,json=replacePeerAs" json:"replace_peer_as,omitempty"` + AuthPassword string `protobuf:"bytes,1,opt,name=auth_password,json=authPassword" json:"auth_password,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + LocalAs uint32 `protobuf:"varint,3,opt,name=local_as,json=localAs" json:"local_as,omitempty"` + NeighborAddress string `protobuf:"bytes,4,opt,name=neighbor_address,json=neighborAddress" json:"neighbor_address,omitempty"` + PeerAs uint32 `protobuf:"varint,5,opt,name=peer_as,json=peerAs" json:"peer_as,omitempty"` + PeerGroup string `protobuf:"bytes,6,opt,name=peer_group,json=peerGroup" json:"peer_group,omitempty"` + PeerType uint32 `protobuf:"varint,7,opt,name=peer_type,json=peerType" json:"peer_type,omitempty"` + RemovePrivateAs PeerConf_RemovePrivateAs `protobuf:"varint,8,opt,name=remove_private_as,json=removePrivateAs,enum=gobgpapi.PeerConf_RemovePrivateAs" json:"remove_private_as,omitempty"` + RouteFlapDamping bool `protobuf:"varint,9,opt,name=route_flap_damping,json=routeFlapDamping" json:"route_flap_damping,omitempty"` + SendCommunity uint32 `protobuf:"varint,10,opt,name=send_community,json=sendCommunity" json:"send_community,omitempty"` + RemoteCap [][]byte `protobuf:"bytes,11,rep,name=remote_cap,json=remoteCap,proto3" json:"remote_cap,omitempty"` + LocalCap [][]byte `protobuf:"bytes,12,rep,name=local_cap,json=localCap,proto3" json:"local_cap,omitempty"` + Id string `protobuf:"bytes,13,opt,name=id" json:"id,omitempty"` + // Note: Regarding to the consistency with OpenConfig mode, list of + // PrefixLimit should be removed from here, and list of PrefixLimit in + // AfiSafi should be used instead. + PrefixLimits []*PrefixLimit `protobuf:"bytes,14,rep,name=prefix_limits,json=prefixLimits" json:"prefix_limits,omitempty"` + LocalAddress string `protobuf:"bytes,15,opt,name=local_address,json=localAddress" json:"local_address,omitempty"` + NeighborInterface string `protobuf:"bytes,16,opt,name=neighbor_interface,json=neighborInterface" json:"neighbor_interface,omitempty"` + Vrf string `protobuf:"bytes,17,opt,name=vrf" json:"vrf,omitempty"` + AllowOwnAs uint32 `protobuf:"varint,18,opt,name=allow_own_as,json=allowOwnAs" json:"allow_own_as,omitempty"` + ReplacePeerAs bool `protobuf:"varint,19,opt,name=replace_peer_as,json=replacePeerAs" json:"replace_peer_as,omitempty"` } func (m *PeerConf) Reset() { *m = PeerConf{} } @@ -3368,20 +3384,92 @@ func (m *GracefulRestart) GetLonglivedEnabled() bool { return false } -type MpGracefulRestart struct { +type MpGracefulRestartConfig struct { Enabled bool `protobuf:"varint,1,opt,name=enabled" json:"enabled,omitempty"` } +func (m *MpGracefulRestartConfig) Reset() { *m = MpGracefulRestartConfig{} } +func (m *MpGracefulRestartConfig) String() string { return proto.CompactTextString(m) } +func (*MpGracefulRestartConfig) ProtoMessage() {} +func (*MpGracefulRestartConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{118} } + +func (m *MpGracefulRestartConfig) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +type MpGracefulRestartState struct { + Enabled bool `protobuf:"varint,1,opt,name=enabled" json:"enabled,omitempty"` + Received bool `protobuf:"varint,2,opt,name=received" json:"received,omitempty"` + Advertised bool `protobuf:"varint,3,opt,name=advertised" json:"advertised,omitempty"` + EndOfRibReceived bool `protobuf:"varint,4,opt,name=end_of_rib_received,json=endOfRibReceived" json:"end_of_rib_received,omitempty"` + EndOfRibSent bool `protobuf:"varint,5,opt,name=end_of_rib_sent,json=endOfRibSent" json:"end_of_rib_sent,omitempty"` +} + +func (m *MpGracefulRestartState) Reset() { *m = MpGracefulRestartState{} } +func (m *MpGracefulRestartState) String() string { return proto.CompactTextString(m) } +func (*MpGracefulRestartState) ProtoMessage() {} +func (*MpGracefulRestartState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{119} } + +func (m *MpGracefulRestartState) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +func (m *MpGracefulRestartState) GetReceived() bool { + if m != nil { + return m.Received + } + return false +} + +func (m *MpGracefulRestartState) GetAdvertised() bool { + if m != nil { + return m.Advertised + } + return false +} + +func (m *MpGracefulRestartState) GetEndOfRibReceived() bool { + if m != nil { + return m.EndOfRibReceived + } + return false +} + +func (m *MpGracefulRestartState) GetEndOfRibSent() bool { + if m != nil { + return m.EndOfRibSent + } + return false +} + +type MpGracefulRestart struct { + Config *MpGracefulRestartConfig `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"` + State *MpGracefulRestartState `protobuf:"bytes,2,opt,name=state" json:"state,omitempty"` +} + func (m *MpGracefulRestart) Reset() { *m = MpGracefulRestart{} } func (m *MpGracefulRestart) String() string { return proto.CompactTextString(m) } func (*MpGracefulRestart) ProtoMessage() {} -func (*MpGracefulRestart) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{118} } +func (*MpGracefulRestart) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{120} } -func (m *MpGracefulRestart) GetEnabled() bool { +func (m *MpGracefulRestart) GetConfig() *MpGracefulRestartConfig { if m != nil { - return m.Enabled + return m.Config } - return false + return nil +} + +func (m *MpGracefulRestart) GetState() *MpGracefulRestartState { + if m != nil { + return m.State + } + return nil } type AfiSafiConfig struct { @@ -3392,7 +3480,7 @@ type AfiSafiConfig struct { func (m *AfiSafiConfig) Reset() { *m = AfiSafiConfig{} } func (m *AfiSafiConfig) String() string { return proto.CompactTextString(m) } func (*AfiSafiConfig) ProtoMessage() {} -func (*AfiSafiConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{119} } +func (*AfiSafiConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{121} } func (m *AfiSafiConfig) GetFamily() uint32 { if m != nil { @@ -3408,7 +3496,47 @@ func (m *AfiSafiConfig) GetEnabled() bool { return false } -type RouteSelectionOptions struct { +type AfiSafiState struct { + Family uint32 `protobuf:"varint,1,opt,name=family" json:"family,omitempty"` + Enabled bool `protobuf:"varint,2,opt,name=enabled" json:"enabled,omitempty"` + TotalPaths uint32 `protobuf:"varint,3,opt,name=total_paths,json=totalPaths" json:"total_paths,omitempty"` + TotalPrefixes uint32 `protobuf:"varint,4,opt,name=total_prefixes,json=totalPrefixes" json:"total_prefixes,omitempty"` +} + +func (m *AfiSafiState) Reset() { *m = AfiSafiState{} } +func (m *AfiSafiState) String() string { return proto.CompactTextString(m) } +func (*AfiSafiState) ProtoMessage() {} +func (*AfiSafiState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{122} } + +func (m *AfiSafiState) GetFamily() uint32 { + if m != nil { + return m.Family + } + return 0 +} + +func (m *AfiSafiState) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +func (m *AfiSafiState) GetTotalPaths() uint32 { + if m != nil { + return m.TotalPaths + } + return 0 +} + +func (m *AfiSafiState) GetTotalPrefixes() uint32 { + if m != nil { + return m.TotalPrefixes + } + return 0 +} + +type RouteSelectionOptionsConfig struct { AlwaysCompareMed bool `protobuf:"varint,1,opt,name=always_compare_med,json=alwaysCompareMed" json:"always_compare_med,omitempty"` IgnoreAsPathLength bool `protobuf:"varint,2,opt,name=ignore_as_path_length,json=ignoreAsPathLength" json:"ignore_as_path_length,omitempty"` ExternalCompareRouterId bool `protobuf:"varint,3,opt,name=external_compare_router_id,json=externalCompareRouterId" json:"external_compare_router_id,omitempty"` @@ -3417,53 +3545,133 @@ type RouteSelectionOptions struct { IgnoreNextHopIgpMetric bool `protobuf:"varint,6,opt,name=ignore_next_hop_igp_metric,json=ignoreNextHopIgpMetric" json:"ignore_next_hop_igp_metric,omitempty"` } -func (m *RouteSelectionOptions) Reset() { *m = RouteSelectionOptions{} } -func (m *RouteSelectionOptions) String() string { return proto.CompactTextString(m) } -func (*RouteSelectionOptions) ProtoMessage() {} -func (*RouteSelectionOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{120} } +func (m *RouteSelectionOptionsConfig) Reset() { *m = RouteSelectionOptionsConfig{} } +func (m *RouteSelectionOptionsConfig) String() string { return proto.CompactTextString(m) } +func (*RouteSelectionOptionsConfig) ProtoMessage() {} +func (*RouteSelectionOptionsConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{123} } -func (m *RouteSelectionOptions) GetAlwaysCompareMed() bool { +func (m *RouteSelectionOptionsConfig) GetAlwaysCompareMed() bool { if m != nil { return m.AlwaysCompareMed } return false } -func (m *RouteSelectionOptions) GetIgnoreAsPathLength() bool { +func (m *RouteSelectionOptionsConfig) GetIgnoreAsPathLength() bool { if m != nil { return m.IgnoreAsPathLength } return false } -func (m *RouteSelectionOptions) GetExternalCompareRouterId() bool { +func (m *RouteSelectionOptionsConfig) GetExternalCompareRouterId() bool { if m != nil { return m.ExternalCompareRouterId } return false } -func (m *RouteSelectionOptions) GetAdvertiseInactiveRoutes() bool { +func (m *RouteSelectionOptionsConfig) GetAdvertiseInactiveRoutes() bool { if m != nil { return m.AdvertiseInactiveRoutes } return false } -func (m *RouteSelectionOptions) GetEnableAigp() bool { +func (m *RouteSelectionOptionsConfig) GetEnableAigp() bool { if m != nil { return m.EnableAigp } return false } -func (m *RouteSelectionOptions) GetIgnoreNextHopIgpMetric() bool { +func (m *RouteSelectionOptionsConfig) GetIgnoreNextHopIgpMetric() bool { if m != nil { return m.IgnoreNextHopIgpMetric } return false } +type RouteSelectionOptionsState struct { + AlwaysCompareMed bool `protobuf:"varint,1,opt,name=always_compare_med,json=alwaysCompareMed" json:"always_compare_med,omitempty"` + IgnoreAsPathLength bool `protobuf:"varint,2,opt,name=ignore_as_path_length,json=ignoreAsPathLength" json:"ignore_as_path_length,omitempty"` + ExternalCompareRouterId bool `protobuf:"varint,3,opt,name=external_compare_router_id,json=externalCompareRouterId" json:"external_compare_router_id,omitempty"` + AdvertiseInactiveRoutes bool `protobuf:"varint,4,opt,name=advertise_inactive_routes,json=advertiseInactiveRoutes" json:"advertise_inactive_routes,omitempty"` + EnableAigp bool `protobuf:"varint,5,opt,name=enable_aigp,json=enableAigp" json:"enable_aigp,omitempty"` + IgnoreNextHopIgpMetric bool `protobuf:"varint,6,opt,name=ignore_next_hop_igp_metric,json=ignoreNextHopIgpMetric" json:"ignore_next_hop_igp_metric,omitempty"` +} + +func (m *RouteSelectionOptionsState) Reset() { *m = RouteSelectionOptionsState{} } +func (m *RouteSelectionOptionsState) String() string { return proto.CompactTextString(m) } +func (*RouteSelectionOptionsState) ProtoMessage() {} +func (*RouteSelectionOptionsState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{124} } + +func (m *RouteSelectionOptionsState) GetAlwaysCompareMed() bool { + if m != nil { + return m.AlwaysCompareMed + } + return false +} + +func (m *RouteSelectionOptionsState) GetIgnoreAsPathLength() bool { + if m != nil { + return m.IgnoreAsPathLength + } + return false +} + +func (m *RouteSelectionOptionsState) GetExternalCompareRouterId() bool { + if m != nil { + return m.ExternalCompareRouterId + } + return false +} + +func (m *RouteSelectionOptionsState) GetAdvertiseInactiveRoutes() bool { + if m != nil { + return m.AdvertiseInactiveRoutes + } + return false +} + +func (m *RouteSelectionOptionsState) GetEnableAigp() bool { + if m != nil { + return m.EnableAigp + } + return false +} + +func (m *RouteSelectionOptionsState) GetIgnoreNextHopIgpMetric() bool { + if m != nil { + return m.IgnoreNextHopIgpMetric + } + return false +} + +type RouteSelectionOptions struct { + Config *RouteSelectionOptionsConfig `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"` + State *RouteSelectionOptionsState `protobuf:"bytes,2,opt,name=state" json:"state,omitempty"` +} + +func (m *RouteSelectionOptions) Reset() { *m = RouteSelectionOptions{} } +func (m *RouteSelectionOptions) String() string { return proto.CompactTextString(m) } +func (*RouteSelectionOptions) ProtoMessage() {} +func (*RouteSelectionOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{125} } + +func (m *RouteSelectionOptions) GetConfig() *RouteSelectionOptionsConfig { + if m != nil { + return m.Config + } + return nil +} + +func (m *RouteSelectionOptions) GetState() *RouteSelectionOptionsState { + if m != nil { + return m.State + } + return nil +} + type UseMultiplePathsConfig struct { Enabled bool `protobuf:"varint,1,opt,name=enabled" json:"enabled,omitempty"` } @@ -3471,7 +3679,7 @@ type UseMultiplePathsConfig struct { func (m *UseMultiplePathsConfig) Reset() { *m = UseMultiplePathsConfig{} } func (m *UseMultiplePathsConfig) String() string { return proto.CompactTextString(m) } func (*UseMultiplePathsConfig) ProtoMessage() {} -func (*UseMultiplePathsConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{121} } +func (*UseMultiplePathsConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{126} } func (m *UseMultiplePathsConfig) GetEnabled() bool { if m != nil { @@ -3480,56 +3688,161 @@ func (m *UseMultiplePathsConfig) GetEnabled() bool { return false } -type Ebgp struct { +type UseMultiplePathsState struct { + Enabled bool `protobuf:"varint,1,opt,name=enabled" json:"enabled,omitempty"` +} + +func (m *UseMultiplePathsState) Reset() { *m = UseMultiplePathsState{} } +func (m *UseMultiplePathsState) String() string { return proto.CompactTextString(m) } +func (*UseMultiplePathsState) ProtoMessage() {} +func (*UseMultiplePathsState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{127} } + +func (m *UseMultiplePathsState) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +type EbgpConfig struct { + AllowMultipleAs bool `protobuf:"varint,1,opt,name=allow_multiple_as,json=allowMultipleAs" json:"allow_multiple_as,omitempty"` + MaximumPaths uint32 `protobuf:"varint,2,opt,name=maximum_paths,json=maximumPaths" json:"maximum_paths,omitempty"` +} + +func (m *EbgpConfig) Reset() { *m = EbgpConfig{} } +func (m *EbgpConfig) String() string { return proto.CompactTextString(m) } +func (*EbgpConfig) ProtoMessage() {} +func (*EbgpConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{128} } + +func (m *EbgpConfig) GetAllowMultipleAs() bool { + if m != nil { + return m.AllowMultipleAs + } + return false +} + +func (m *EbgpConfig) GetMaximumPaths() uint32 { + if m != nil { + return m.MaximumPaths + } + return 0 +} + +type EbgpState struct { AllowMultipleAs bool `protobuf:"varint,1,opt,name=allow_multiple_as,json=allowMultipleAs" json:"allow_multiple_as,omitempty"` MaximumPaths uint32 `protobuf:"varint,2,opt,name=maximum_paths,json=maximumPaths" json:"maximum_paths,omitempty"` } +func (m *EbgpState) Reset() { *m = EbgpState{} } +func (m *EbgpState) String() string { return proto.CompactTextString(m) } +func (*EbgpState) ProtoMessage() {} +func (*EbgpState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{129} } + +func (m *EbgpState) GetAllowMultipleAs() bool { + if m != nil { + return m.AllowMultipleAs + } + return false +} + +func (m *EbgpState) GetMaximumPaths() uint32 { + if m != nil { + return m.MaximumPaths + } + return 0 +} + +type Ebgp struct { + Config *EbgpConfig `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"` + State *EbgpState `protobuf:"bytes,2,opt,name=state" json:"state,omitempty"` +} + func (m *Ebgp) Reset() { *m = Ebgp{} } func (m *Ebgp) String() string { return proto.CompactTextString(m) } func (*Ebgp) ProtoMessage() {} -func (*Ebgp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{122} } +func (*Ebgp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{130} } -func (m *Ebgp) GetAllowMultipleAs() bool { +func (m *Ebgp) GetConfig() *EbgpConfig { if m != nil { - return m.AllowMultipleAs + return m.Config } - return false + return nil } -func (m *Ebgp) GetMaximumPaths() uint32 { +func (m *Ebgp) GetState() *EbgpState { + if m != nil { + return m.State + } + return nil +} + +type IbgpConfig struct { + MaximumPaths uint32 `protobuf:"varint,1,opt,name=maximum_paths,json=maximumPaths" json:"maximum_paths,omitempty"` +} + +func (m *IbgpConfig) Reset() { *m = IbgpConfig{} } +func (m *IbgpConfig) String() string { return proto.CompactTextString(m) } +func (*IbgpConfig) ProtoMessage() {} +func (*IbgpConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{131} } + +func (m *IbgpConfig) GetMaximumPaths() uint32 { if m != nil { return m.MaximumPaths } return 0 } -type Ibgp struct { +type IbgpState struct { MaximumPaths uint32 `protobuf:"varint,1,opt,name=maximum_paths,json=maximumPaths" json:"maximum_paths,omitempty"` } +func (m *IbgpState) Reset() { *m = IbgpState{} } +func (m *IbgpState) String() string { return proto.CompactTextString(m) } +func (*IbgpState) ProtoMessage() {} +func (*IbgpState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{132} } + +func (m *IbgpState) GetMaximumPaths() uint32 { + if m != nil { + return m.MaximumPaths + } + return 0 +} + +type Ibgp struct { + Config *IbgpConfig `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"` + State *IbgpState `protobuf:"bytes,2,opt,name=state" json:"state,omitempty"` +} + func (m *Ibgp) Reset() { *m = Ibgp{} } func (m *Ibgp) String() string { return proto.CompactTextString(m) } func (*Ibgp) ProtoMessage() {} -func (*Ibgp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{123} } +func (*Ibgp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{133} } -func (m *Ibgp) GetMaximumPaths() uint32 { +func (m *Ibgp) GetConfig() *IbgpConfig { if m != nil { - return m.MaximumPaths + return m.Config } - return 0 + return nil +} + +func (m *Ibgp) GetState() *IbgpState { + if m != nil { + return m.State + } + return nil } type UseMultiplePaths struct { Config *UseMultiplePathsConfig `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"` - Ebgp *Ebgp `protobuf:"bytes,2,opt,name=ebgp" json:"ebgp,omitempty"` - Ibgp *Ibgp `protobuf:"bytes,3,opt,name=ibgp" json:"ibgp,omitempty"` + State *UseMultiplePathsState `protobuf:"bytes,2,opt,name=state" json:"state,omitempty"` + Ebgp *Ebgp `protobuf:"bytes,3,opt,name=ebgp" json:"ebgp,omitempty"` + Ibgp *Ibgp `protobuf:"bytes,4,opt,name=ibgp" json:"ibgp,omitempty"` } func (m *UseMultiplePaths) Reset() { *m = UseMultiplePaths{} } func (m *UseMultiplePaths) String() string { return proto.CompactTextString(m) } func (*UseMultiplePaths) ProtoMessage() {} -func (*UseMultiplePaths) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{124} } +func (*UseMultiplePaths) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{134} } func (m *UseMultiplePaths) GetConfig() *UseMultiplePathsConfig { if m != nil { @@ -3538,6 +3851,13 @@ func (m *UseMultiplePaths) GetConfig() *UseMultiplePathsConfig { return nil } +func (m *UseMultiplePaths) GetState() *UseMultiplePathsState { + if m != nil { + return m.State + } + return nil +} + func (m *UseMultiplePaths) GetEbgp() *Ebgp { if m != nil { return m.Ebgp @@ -3552,46 +3872,160 @@ func (m *UseMultiplePaths) GetIbgp() *Ibgp { return nil } -type RouteTargetMembership struct { +type RouteTargetMembershipConfig struct { + DeferralTime uint32 `protobuf:"varint,1,opt,name=deferral_time,json=deferralTime" json:"deferral_time,omitempty"` +} + +func (m *RouteTargetMembershipConfig) Reset() { *m = RouteTargetMembershipConfig{} } +func (m *RouteTargetMembershipConfig) String() string { return proto.CompactTextString(m) } +func (*RouteTargetMembershipConfig) ProtoMessage() {} +func (*RouteTargetMembershipConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{135} } + +func (m *RouteTargetMembershipConfig) GetDeferralTime() uint32 { + if m != nil { + return m.DeferralTime + } + return 0 +} + +type RouteTargetMembershipState struct { DeferralTime uint32 `protobuf:"varint,1,opt,name=deferral_time,json=deferralTime" json:"deferral_time,omitempty"` } +func (m *RouteTargetMembershipState) Reset() { *m = RouteTargetMembershipState{} } +func (m *RouteTargetMembershipState) String() string { return proto.CompactTextString(m) } +func (*RouteTargetMembershipState) ProtoMessage() {} +func (*RouteTargetMembershipState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{136} } + +func (m *RouteTargetMembershipState) GetDeferralTime() uint32 { + if m != nil { + return m.DeferralTime + } + return 0 +} + +type RouteTargetMembership struct { + Config *RouteTargetMembershipConfig `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"` + State *RouteTargetMembershipState `protobuf:"bytes,2,opt,name=state" json:"state,omitempty"` +} + func (m *RouteTargetMembership) Reset() { *m = RouteTargetMembership{} } func (m *RouteTargetMembership) String() string { return proto.CompactTextString(m) } func (*RouteTargetMembership) ProtoMessage() {} -func (*RouteTargetMembership) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{125} } +func (*RouteTargetMembership) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{137} } -func (m *RouteTargetMembership) GetDeferralTime() uint32 { +func (m *RouteTargetMembership) GetConfig() *RouteTargetMembershipConfig { if m != nil { - return m.DeferralTime + return m.Config } - return 0 + return nil } -type LongLivedGracefulRestart struct { +func (m *RouteTargetMembership) GetState() *RouteTargetMembershipState { + if m != nil { + return m.State + } + return nil +} + +type LongLivedGracefulRestartConfig struct { Enabled bool `protobuf:"varint,1,opt,name=enabled" json:"enabled,omitempty"` RestartTime uint32 `protobuf:"varint,2,opt,name=restart_time,json=restartTime" json:"restart_time,omitempty"` } -func (m *LongLivedGracefulRestart) Reset() { *m = LongLivedGracefulRestart{} } -func (m *LongLivedGracefulRestart) String() string { return proto.CompactTextString(m) } -func (*LongLivedGracefulRestart) ProtoMessage() {} -func (*LongLivedGracefulRestart) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{126} } +func (m *LongLivedGracefulRestartConfig) Reset() { *m = LongLivedGracefulRestartConfig{} } +func (m *LongLivedGracefulRestartConfig) String() string { return proto.CompactTextString(m) } +func (*LongLivedGracefulRestartConfig) ProtoMessage() {} +func (*LongLivedGracefulRestartConfig) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{138} +} -func (m *LongLivedGracefulRestart) GetEnabled() bool { +func (m *LongLivedGracefulRestartConfig) GetEnabled() bool { if m != nil { return m.Enabled } return false } -func (m *LongLivedGracefulRestart) GetRestartTime() uint32 { +func (m *LongLivedGracefulRestartConfig) GetRestartTime() uint32 { if m != nil { return m.RestartTime } return 0 } +type LongLivedGracefulRestartState struct { + Enabled bool `protobuf:"varint,1,opt,name=enabled" json:"enabled,omitempty"` + Received bool `protobuf:"varint,2,opt,name=received" json:"received,omitempty"` + Advertised bool `protobuf:"varint,3,opt,name=advertised" json:"advertised,omitempty"` + PeerRestartTime uint32 `protobuf:"varint,4,opt,name=peer_restart_time,json=peerRestartTime" json:"peer_restart_time,omitempty"` + PeerRestartTimerExpired bool `protobuf:"varint,5,opt,name=peer_restart_timer_expired,json=peerRestartTimerExpired" json:"peer_restart_timer_expired,omitempty"` +} + +func (m *LongLivedGracefulRestartState) Reset() { *m = LongLivedGracefulRestartState{} } +func (m *LongLivedGracefulRestartState) String() string { return proto.CompactTextString(m) } +func (*LongLivedGracefulRestartState) ProtoMessage() {} +func (*LongLivedGracefulRestartState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{139} } + +func (m *LongLivedGracefulRestartState) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +func (m *LongLivedGracefulRestartState) GetReceived() bool { + if m != nil { + return m.Received + } + return false +} + +func (m *LongLivedGracefulRestartState) GetAdvertised() bool { + if m != nil { + return m.Advertised + } + return false +} + +func (m *LongLivedGracefulRestartState) GetPeerRestartTime() uint32 { + if m != nil { + return m.PeerRestartTime + } + return 0 +} + +func (m *LongLivedGracefulRestartState) GetPeerRestartTimerExpired() bool { + if m != nil { + return m.PeerRestartTimerExpired + } + return false +} + +type LongLivedGracefulRestart struct { + Config *LongLivedGracefulRestartConfig `protobuf:"bytes,1,opt,name=config" json:"config,omitempty"` + State *LongLivedGracefulRestartState `protobuf:"bytes,2,opt,name=state" json:"state,omitempty"` +} + +func (m *LongLivedGracefulRestart) Reset() { *m = LongLivedGracefulRestart{} } +func (m *LongLivedGracefulRestart) String() string { return proto.CompactTextString(m) } +func (*LongLivedGracefulRestart) ProtoMessage() {} +func (*LongLivedGracefulRestart) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{140} } + +func (m *LongLivedGracefulRestart) GetConfig() *LongLivedGracefulRestartConfig { + if m != nil { + return m.Config + } + return nil +} + +func (m *LongLivedGracefulRestart) GetState() *LongLivedGracefulRestartState { + if m != nil { + return m.State + } + return nil +} + type AfiSafi struct { MpGracefulRestart *MpGracefulRestart `protobuf:"bytes,1,opt,name=mp_graceful_restart,json=mpGracefulRestart" json:"mp_graceful_restart,omitempty"` Config *AfiSafiConfig `protobuf:"bytes,2,opt,name=config" json:"config,omitempty"` @@ -3618,7 +4052,7 @@ type AfiSafi struct { func (m *AfiSafi) Reset() { *m = AfiSafi{} } func (m *AfiSafi) String() string { return proto.CompactTextString(m) } func (*AfiSafi) ProtoMessage() {} -func (*AfiSafi) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{127} } +func (*AfiSafi) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{141} } func (m *AfiSafi) GetMpGracefulRestart() *MpGracefulRestart { if m != nil { @@ -3685,7 +4119,7 @@ type Prefix struct { func (m *Prefix) Reset() { *m = Prefix{} } func (m *Prefix) String() string { return proto.CompactTextString(m) } func (*Prefix) ProtoMessage() {} -func (*Prefix) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{128} } +func (*Prefix) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{142} } func (m *Prefix) GetIpPrefix() string { if m != nil { @@ -3718,7 +4152,7 @@ type DefinedSet struct { func (m *DefinedSet) Reset() { *m = DefinedSet{} } func (m *DefinedSet) String() string { return proto.CompactTextString(m) } func (*DefinedSet) ProtoMessage() {} -func (*DefinedSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{129} } +func (*DefinedSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{143} } func (m *DefinedSet) GetType() DefinedType { if m != nil { @@ -3756,7 +4190,7 @@ type MatchSet struct { func (m *MatchSet) Reset() { *m = MatchSet{} } func (m *MatchSet) String() string { return proto.CompactTextString(m) } func (*MatchSet) ProtoMessage() {} -func (*MatchSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{130} } +func (*MatchSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{144} } func (m *MatchSet) GetType() MatchType { if m != nil { @@ -3780,7 +4214,7 @@ type AsPathLength struct { func (m *AsPathLength) Reset() { *m = AsPathLength{} } func (m *AsPathLength) String() string { return proto.CompactTextString(m) } func (*AsPathLength) ProtoMessage() {} -func (*AsPathLength) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{131} } +func (*AsPathLength) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{145} } func (m *AsPathLength) GetType() AsPathLengthType { if m != nil { @@ -3811,7 +4245,7 @@ type Conditions struct { func (m *Conditions) Reset() { *m = Conditions{} } func (m *Conditions) String() string { return proto.CompactTextString(m) } func (*Conditions) ProtoMessage() {} -func (*Conditions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{132} } +func (*Conditions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{146} } func (m *Conditions) GetPrefixSet() *MatchSet { if m != nil { @@ -3884,7 +4318,7 @@ type CommunityAction struct { func (m *CommunityAction) Reset() { *m = CommunityAction{} } func (m *CommunityAction) String() string { return proto.CompactTextString(m) } func (*CommunityAction) ProtoMessage() {} -func (*CommunityAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{133} } +func (*CommunityAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{147} } func (m *CommunityAction) GetType() CommunityActionType { if m != nil { @@ -3908,7 +4342,7 @@ type MedAction struct { func (m *MedAction) Reset() { *m = MedAction{} } func (m *MedAction) String() string { return proto.CompactTextString(m) } func (*MedAction) ProtoMessage() {} -func (*MedAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{134} } +func (*MedAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{148} } func (m *MedAction) GetType() MedActionType { if m != nil { @@ -3933,7 +4367,7 @@ type AsPrependAction struct { func (m *AsPrependAction) Reset() { *m = AsPrependAction{} } func (m *AsPrependAction) String() string { return proto.CompactTextString(m) } func (*AsPrependAction) ProtoMessage() {} -func (*AsPrependAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{135} } +func (*AsPrependAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{149} } func (m *AsPrependAction) GetAsn() uint32 { if m != nil { @@ -3964,7 +4398,7 @@ type NexthopAction struct { func (m *NexthopAction) Reset() { *m = NexthopAction{} } func (m *NexthopAction) String() string { return proto.CompactTextString(m) } func (*NexthopAction) ProtoMessage() {} -func (*NexthopAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{136} } +func (*NexthopAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{150} } func (m *NexthopAction) GetAddress() string { if m != nil { @@ -3987,7 +4421,7 @@ type LocalPrefAction struct { func (m *LocalPrefAction) Reset() { *m = LocalPrefAction{} } func (m *LocalPrefAction) String() string { return proto.CompactTextString(m) } func (*LocalPrefAction) ProtoMessage() {} -func (*LocalPrefAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{137} } +func (*LocalPrefAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{151} } func (m *LocalPrefAction) GetValue() uint32 { if m != nil { @@ -4010,7 +4444,7 @@ type Actions struct { func (m *Actions) Reset() { *m = Actions{} } func (m *Actions) String() string { return proto.CompactTextString(m) } func (*Actions) ProtoMessage() {} -func (*Actions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{138} } +func (*Actions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{152} } func (m *Actions) GetRouteAction() RouteAction { if m != nil { @@ -4077,7 +4511,7 @@ type Statement struct { func (m *Statement) Reset() { *m = Statement{} } func (m *Statement) String() string { return proto.CompactTextString(m) } func (*Statement) ProtoMessage() {} -func (*Statement) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{139} } +func (*Statement) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{153} } func (m *Statement) GetName() string { if m != nil { @@ -4108,7 +4542,7 @@ type Policy struct { func (m *Policy) Reset() { *m = Policy{} } func (m *Policy) String() string { return proto.CompactTextString(m) } func (*Policy) ProtoMessage() {} -func (*Policy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{140} } +func (*Policy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{154} } func (m *Policy) GetName() string { if m != nil { @@ -4135,7 +4569,7 @@ type PolicyAssignment struct { func (m *PolicyAssignment) Reset() { *m = PolicyAssignment{} } func (m *PolicyAssignment) String() string { return proto.CompactTextString(m) } func (*PolicyAssignment) ProtoMessage() {} -func (*PolicyAssignment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{141} } +func (*PolicyAssignment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{155} } func (m *PolicyAssignment) GetType() PolicyType { if m != nil { @@ -4183,7 +4617,7 @@ type Roa struct { func (m *Roa) Reset() { *m = Roa{} } func (m *Roa) String() string { return proto.CompactTextString(m) } func (*Roa) ProtoMessage() {} -func (*Roa) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{142} } +func (*Roa) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{156} } func (m *Roa) GetAs() uint32 { if m != nil { @@ -4227,7 +4661,7 @@ type GetRoaRequest struct { func (m *GetRoaRequest) Reset() { *m = GetRoaRequest{} } func (m *GetRoaRequest) String() string { return proto.CompactTextString(m) } func (*GetRoaRequest) ProtoMessage() {} -func (*GetRoaRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{143} } +func (*GetRoaRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{157} } func (m *GetRoaRequest) GetFamily() uint32 { if m != nil { @@ -4243,7 +4677,7 @@ type GetRoaResponse struct { func (m *GetRoaResponse) Reset() { *m = GetRoaResponse{} } func (m *GetRoaResponse) String() string { return proto.CompactTextString(m) } func (*GetRoaResponse) ProtoMessage() {} -func (*GetRoaResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{144} } +func (*GetRoaResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{158} } func (m *GetRoaResponse) GetRoas() []*Roa { if m != nil { @@ -4263,7 +4697,7 @@ type Vrf struct { func (m *Vrf) Reset() { *m = Vrf{} } func (m *Vrf) String() string { return proto.CompactTextString(m) } func (*Vrf) ProtoMessage() {} -func (*Vrf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{145} } +func (*Vrf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{159} } func (m *Vrf) GetName() string { if m != nil { @@ -4312,7 +4746,7 @@ type Global struct { func (m *Global) Reset() { *m = Global{} } func (m *Global) String() string { return proto.CompactTextString(m) } func (*Global) ProtoMessage() {} -func (*Global) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{146} } +func (*Global) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{160} } func (m *Global) GetAs() uint32 { if m != nil { @@ -4368,7 +4802,7 @@ type TableInfo struct { func (m *TableInfo) Reset() { *m = TableInfo{} } func (m *TableInfo) String() string { return proto.CompactTextString(m) } func (*TableInfo) ProtoMessage() {} -func (*TableInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{147} } +func (*TableInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{161} } func (m *TableInfo) GetType() Resource { if m != nil { @@ -4419,7 +4853,7 @@ type GetRibInfoRequest struct { func (m *GetRibInfoRequest) Reset() { *m = GetRibInfoRequest{} } func (m *GetRibInfoRequest) String() string { return proto.CompactTextString(m) } func (*GetRibInfoRequest) ProtoMessage() {} -func (*GetRibInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{148} } +func (*GetRibInfoRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{162} } func (m *GetRibInfoRequest) GetInfo() *TableInfo { if m != nil { @@ -4435,7 +4869,7 @@ type GetRibInfoResponse struct { func (m *GetRibInfoResponse) Reset() { *m = GetRibInfoResponse{} } func (m *GetRibInfoResponse) String() string { return proto.CompactTextString(m) } func (*GetRibInfoResponse) ProtoMessage() {} -func (*GetRibInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{149} } +func (*GetRibInfoResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{163} } func (m *GetRibInfoResponse) GetInfo() *TableInfo { if m != nil { @@ -4563,14 +4997,28 @@ func init() { proto.RegisterType((*Transport)(nil), "gobgpapi.Transport") proto.RegisterType((*RouteServer)(nil), "gobgpapi.RouteServer") proto.RegisterType((*GracefulRestart)(nil), "gobgpapi.GracefulRestart") + proto.RegisterType((*MpGracefulRestartConfig)(nil), "gobgpapi.MpGracefulRestartConfig") + proto.RegisterType((*MpGracefulRestartState)(nil), "gobgpapi.MpGracefulRestartState") proto.RegisterType((*MpGracefulRestart)(nil), "gobgpapi.MpGracefulRestart") proto.RegisterType((*AfiSafiConfig)(nil), "gobgpapi.AfiSafiConfig") + proto.RegisterType((*AfiSafiState)(nil), "gobgpapi.AfiSafiState") + proto.RegisterType((*RouteSelectionOptionsConfig)(nil), "gobgpapi.RouteSelectionOptionsConfig") + proto.RegisterType((*RouteSelectionOptionsState)(nil), "gobgpapi.RouteSelectionOptionsState") proto.RegisterType((*RouteSelectionOptions)(nil), "gobgpapi.RouteSelectionOptions") proto.RegisterType((*UseMultiplePathsConfig)(nil), "gobgpapi.UseMultiplePathsConfig") + proto.RegisterType((*UseMultiplePathsState)(nil), "gobgpapi.UseMultiplePathsState") + proto.RegisterType((*EbgpConfig)(nil), "gobgpapi.EbgpConfig") + proto.RegisterType((*EbgpState)(nil), "gobgpapi.EbgpState") proto.RegisterType((*Ebgp)(nil), "gobgpapi.Ebgp") + proto.RegisterType((*IbgpConfig)(nil), "gobgpapi.IbgpConfig") + proto.RegisterType((*IbgpState)(nil), "gobgpapi.IbgpState") proto.RegisterType((*Ibgp)(nil), "gobgpapi.Ibgp") proto.RegisterType((*UseMultiplePaths)(nil), "gobgpapi.UseMultiplePaths") + proto.RegisterType((*RouteTargetMembershipConfig)(nil), "gobgpapi.RouteTargetMembershipConfig") + proto.RegisterType((*RouteTargetMembershipState)(nil), "gobgpapi.RouteTargetMembershipState") proto.RegisterType((*RouteTargetMembership)(nil), "gobgpapi.RouteTargetMembership") + proto.RegisterType((*LongLivedGracefulRestartConfig)(nil), "gobgpapi.LongLivedGracefulRestartConfig") + proto.RegisterType((*LongLivedGracefulRestartState)(nil), "gobgpapi.LongLivedGracefulRestartState") proto.RegisterType((*LongLivedGracefulRestart)(nil), "gobgpapi.LongLivedGracefulRestart") proto.RegisterType((*AfiSafi)(nil), "gobgpapi.AfiSafi") proto.RegisterType((*Prefix)(nil), "gobgpapi.Prefix") @@ -6424,405 +6872,428 @@ var _GobgpApi_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("gobgp.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 6389 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xd4, 0x7c, 0x4b, 0x93, 0x1b, 0x47, - 0x72, 0xf0, 0xe0, 0x31, 0x18, 0x20, 0xf1, 0x9c, 0x9a, 0x17, 0x88, 0xe1, 0xb3, 0x77, 0x29, 0x52, - 0x94, 0x34, 0x12, 0x29, 0x2d, 0xa5, 0x4f, 0xaf, 0x5d, 0x70, 0x06, 0x1c, 0x62, 0x35, 0x0f, 0xa8, - 0x06, 0xa4, 0x28, 0x7d, 0xb6, 0xdb, 0x3d, 0xe8, 0x02, 0xa6, 0xad, 0x46, 0x77, 0xab, 0xbb, 0x31, - 0x9c, 0x09, 0x47, 0xd8, 0x11, 0xeb, 0xa3, 0xc3, 0x37, 0x1f, 0x1d, 0xe1, 0xfb, 0x86, 0x7d, 0xf0, - 0xc9, 0x11, 0xbe, 0xaf, 0xc3, 0x11, 0x1b, 0xb1, 0xbf, 0xc0, 0x61, 0x1f, 0xfc, 0x03, 0x7c, 0xf1, - 0xc1, 0x07, 0x1f, 0x1c, 0xf5, 0xe8, 0xee, 0xea, 0x07, 0x86, 0x43, 0x2e, 0xd7, 0x0e, 0x9f, 0x80, - 0xca, 0xcc, 0xca, 0x7a, 0x65, 0x66, 0x65, 0x65, 0x55, 0x36, 0x54, 0x27, 0xf6, 0xf1, 0xc4, 0xd9, - 0x72, 0x5c, 0xdb, 0xb7, 0x51, 0x99, 0x15, 0x34, 0xc7, 0x50, 0xbe, 0x03, 0xb4, 0x4b, 0xfc, 0x03, - 0x62, 0x4c, 0x4e, 0x8e, 0x6d, 0x17, 0x93, 0x1f, 0x66, 0xc4, 0xf3, 0xd1, 0x3d, 0x68, 0x11, 0x4b, - 0x3b, 0x36, 0x49, 0x57, 0x3f, 0x25, 0xae, 0x6f, 0x78, 0x44, 0x6f, 0xe7, 0x6e, 0xe6, 0xee, 0x96, - 0x71, 0x0a, 0x8e, 0xda, 0xb0, 0xa4, 0xe9, 0xba, 0x4b, 0x3c, 0xaf, 0x9d, 0xbf, 0x99, 0xbb, 0x5b, - 0xc1, 0x41, 0x51, 0xf9, 0x0c, 0x56, 0x62, 0xbc, 0x3d, 0xc7, 0xb6, 0x3c, 0x82, 0x7e, 0x0c, 0x8b, - 0x0e, 0x21, 0xae, 0xd7, 0xce, 0xdd, 0x2c, 0xdc, 0xad, 0x3e, 0x68, 0x6c, 0x05, 0x9d, 0xd9, 0x1a, - 0x10, 0xe2, 0x62, 0x8e, 0x54, 0x26, 0x50, 0xe9, 0xba, 0x93, 0xd9, 0x94, 0x58, 0xbe, 0x87, 0xb6, - 0xa0, 0xec, 0x12, 0xcf, 0x9e, 0xb9, 0x23, 0xc2, 0xfa, 0xd1, 0x78, 0x80, 0xa2, 0x5a, 0x58, 0x60, - 0x70, 0x48, 0x83, 0xd6, 0xa1, 0x34, 0xd6, 0xa6, 0x86, 0x79, 0xce, 0xba, 0x54, 0xc7, 0xa2, 0x84, - 0x10, 0x14, 0x2d, 0x6d, 0x4a, 0xda, 0x05, 0xd6, 0x51, 0xf6, 0x5f, 0xf9, 0x63, 0x68, 0x74, 0x75, - 0x7d, 0xa0, 0xf9, 0x27, 0xc1, 0xe8, 0x5f, 0xb5, 0xb5, 0x35, 0x28, 0x9d, 0xba, 0x63, 0xd5, 0xd0, - 0xc5, 0x04, 0x2c, 0x9e, 0xba, 0xe3, 0xbe, 0x8e, 0x14, 0x28, 0x3a, 0x9a, 0x7f, 0xc2, 0x1a, 0x8b, - 0x0f, 0x93, 0xb6, 0xc5, 0x70, 0xca, 0x6d, 0x68, 0x86, 0x8d, 0x8b, 0xe9, 0x41, 0x50, 0x9c, 0xcd, - 0x0c, 0x3e, 0xdf, 0x35, 0xcc, 0xfe, 0x2b, 0xbf, 0xcc, 0xc1, 0xf2, 0x0e, 0x31, 0x89, 0x4f, 0x7e, - 0x07, 0xfd, 0x8c, 0x26, 0xab, 0x10, 0x9b, 0xac, 0xa0, 0xff, 0xc5, 0xf9, 0xfd, 0x0f, 0x3b, 0xbb, - 0x28, 0x75, 0x76, 0x15, 0x90, 0xdc, 0x57, 0x3e, 0x2c, 0xe5, 0x13, 0x40, 0x5d, 0x5d, 0x4f, 0x0a, - 0x1a, 0x6d, 0x83, 0x10, 0x97, 0x75, 0x3f, 0x2d, 0x0a, 0x0c, 0xa7, 0xac, 0xc1, 0x4a, 0xac, 0xa6, - 0x60, 0xf8, 0x19, 0xac, 0xf1, 0x66, 0x5e, 0x87, 0x67, 0x1b, 0xd6, 0x93, 0x95, 0x05, 0xdb, 0x67, - 0xb0, 0x8a, 0x89, 0x97, 0x56, 0x09, 0x49, 0xcc, 0x73, 0x31, 0x31, 0x47, 0x3f, 0x86, 0xfa, 0xc8, - 0x9e, 0x4e, 0x67, 0x96, 0x31, 0xd2, 0x7c, 0xc3, 0xb6, 0xc4, 0xec, 0xc6, 0x81, 0xca, 0x06, 0xac, - 0x25, 0xf8, 0x8a, 0x06, 0xff, 0x21, 0x07, 0xed, 0x23, 0x7b, 0xec, 0xbf, 0x62, 0xab, 0x47, 0x50, - 0xd1, 0x0d, 0x97, 0x8c, 0xc2, 0x16, 0x1b, 0x0f, 0x7e, 0x12, 0x0d, 0x75, 0x1e, 0xc3, 0x08, 0xb1, - 0x13, 0x54, 0xc6, 0x11, 0x1f, 0xe5, 0x7d, 0x40, 0x69, 0x02, 0x54, 0x82, 0x7c, 0xff, 0xa0, 0xb5, - 0x80, 0x96, 0xa0, 0x70, 0xf8, 0x74, 0xd8, 0xca, 0xa1, 0x32, 0x14, 0x1f, 0x1d, 0x0e, 0x9f, 0xb4, - 0xf2, 0xca, 0x26, 0x5c, 0xc9, 0x68, 0x4a, 0x8c, 0xec, 0x5b, 0xd8, 0x38, 0x3a, 0x99, 0xf9, 0xba, - 0xfd, 0xc2, 0x7a, 0xd3, 0xb3, 0xd9, 0x81, 0x76, 0x9a, 0xb5, 0x68, 0xf6, 0x3e, 0xac, 0xf5, 0x98, - 0x91, 0xba, 0x74, 0xa3, 0x54, 0x1c, 0x92, 0x55, 0x04, 0xb3, 0xe7, 0xb0, 0xbe, 0x63, 0x78, 0xaf, - 0xc4, 0xed, 0x92, 0x43, 0xb8, 0x02, 0x1b, 0x29, 0xce, 0xa2, 0xd1, 0x09, 0xb4, 0x78, 0x77, 0xf6, - 0x5d, 0x3f, 0x68, 0x6e, 0x13, 0x2a, 0xfa, 0x6c, 0xea, 0xa8, 0xfe, 0xb9, 0xc3, 0xb5, 0x7d, 0x11, - 0x97, 0x29, 0x60, 0x78, 0xee, 0x10, 0xd4, 0x81, 0xf2, 0xd8, 0x30, 0x09, 0xb3, 0x6d, 0xbc, 0xb1, - 0xb0, 0x4c, 0x71, 0x86, 0xe5, 0x13, 0xf7, 0x54, 0x33, 0x99, 0x82, 0x17, 0x71, 0x58, 0x56, 0x56, - 0x60, 0x59, 0x6a, 0x48, 0xb4, 0xbe, 0x02, 0xcb, 0xa2, 0x63, 0x51, 0xf3, 0x4c, 0xa9, 0x25, 0xa0, - 0x20, 0xfd, 0x53, 0x68, 0xf5, 0xad, 0x3f, 0x22, 0x23, 0x5f, 0xea, 0xe8, 0x1b, 0xb2, 0x4a, 0x74, - 0x97, 0xd0, 0xfc, 0x13, 0xaf, 0x5d, 0x48, 0xed, 0x12, 0xd4, 0xac, 0x70, 0x24, 0xed, 0xab, 0xd4, - 0x01, 0xd1, 0xab, 0xbf, 0xc9, 0x41, 0xbd, 0xab, 0xeb, 0x8f, 0xa6, 0xce, 0xcb, 0xd7, 0x0a, 0x41, - 0xd1, 0xb1, 0x5d, 0x5f, 0xec, 0x13, 0xec, 0x3f, 0xfa, 0x1c, 0x8a, 0x6c, 0x96, 0x0b, 0xac, 0xf7, - 0x77, 0xa3, 0x96, 0x63, 0x4c, 0xb7, 0xf6, 0x6d, 0xcb, 0xf0, 0x6d, 0xd7, 0xb0, 0x26, 0x03, 0xdb, - 0x34, 0x46, 0xe7, 0x98, 0xd5, 0x52, 0xde, 0x87, 0x56, 0x12, 0x43, 0x35, 0x67, 0x80, 0x7b, 0xad, - 0x05, 0xaa, 0x39, 0x83, 0xc3, 0xa3, 0xb8, 0x0e, 0xb5, 0xd8, 0x06, 0xc4, 0x18, 0x8b, 0x01, 0xfc, - 0x0c, 0x5a, 0xdc, 0x3a, 0xbd, 0xee, 0x10, 0xd8, 0x1a, 0x46, 0x1c, 0x04, 0xdb, 0x21, 0x2c, 0x8b, - 0x9e, 0x61, 0xe3, 0x38, 0xe0, 0x7b, 0x1b, 0x16, 0x7d, 0xba, 0xac, 0xc2, 0x5c, 0x36, 0xa3, 0xd1, - 0x0e, 0x29, 0x18, 0x73, 0x2c, 0x6d, 0x7e, 0x34, 0x73, 0x5d, 0x62, 0xf1, 0x76, 0xca, 0x38, 0x28, - 0x2a, 0x3d, 0x28, 0xe3, 0xc1, 0x57, 0xfd, 0x6d, 0xdb, 0x1a, 0x5f, 0xd0, 0xc9, 0x1b, 0x50, 0x75, - 0xc9, 0xd4, 0xf6, 0x89, 0x1a, 0xf6, 0xb5, 0x82, 0x81, 0x83, 0x06, 0xb4, 0xc7, 0x7f, 0x55, 0x84, - 0x0a, 0xe5, 0x73, 0xe4, 0x6b, 0x3e, 0xdb, 0xc0, 0x67, 0x8e, 0x6f, 0x4c, 0x79, 0xb7, 0x0a, 0x58, - 0x94, 0xa8, 0x30, 0x53, 0x9d, 0x67, 0x98, 0x3c, 0xc3, 0x84, 0x65, 0xd4, 0x80, 0xfc, 0xcc, 0x61, - 0x8b, 0x56, 0xc6, 0xf9, 0x99, 0xc3, 0x9b, 0x1c, 0xd9, 0xae, 0xae, 0x1a, 0xce, 0xe9, 0x47, 0x6c, - 0x1b, 0xab, 0xd3, 0x26, 0x29, 0xa8, 0xef, 0x9c, 0x7e, 0x14, 0x27, 0x78, 0xc8, 0xf6, 0x30, 0x99, - 0xe0, 0x21, 0x25, 0x70, 0x5c, 0x32, 0x36, 0xce, 0x38, 0x87, 0x12, 0x27, 0xe0, 0xa0, 0x80, 0x43, - 0x44, 0xf0, 0xb0, 0xbd, 0x94, 0x20, 0x78, 0x48, 0xc7, 0xe1, 0x11, 0xd7, 0xd0, 0xcc, 0x76, 0x99, - 0xef, 0xad, 0xbc, 0x84, 0x7e, 0x04, 0x75, 0x97, 0x8c, 0x88, 0x71, 0x4a, 0x44, 0xef, 0x2a, 0x6c, - 0x30, 0xb5, 0x00, 0xc8, 0xb8, 0x27, 0x88, 0x1e, 0xb6, 0x21, 0x45, 0xf4, 0x90, 0x12, 0x71, 0x9e, - 0xaa, 0x65, 0xfb, 0xc6, 0xf8, 0xbc, 0x5d, 0xe5, 0x44, 0x1c, 0x78, 0xc0, 0x60, 0xb4, 0x9f, 0x23, - 0x6d, 0x74, 0x42, 0x54, 0x97, 0x1a, 0xea, 0x76, 0x8d, 0x91, 0x00, 0x03, 0x31, 0xd3, 0x8d, 0x6e, - 0x43, 0x23, 0x24, 0x60, 0xc2, 0xd2, 0xae, 0x33, 0x9a, 0x7a, 0x40, 0xc3, 0x7d, 0x93, 0xeb, 0x50, - 0x25, 0x96, 0xae, 0xda, 0x63, 0x55, 0xd7, 0x7c, 0xad, 0xdd, 0x60, 0x34, 0x15, 0x62, 0xe9, 0x87, - 0xe3, 0x1d, 0xcd, 0xd7, 0xd0, 0x2a, 0x2c, 0x12, 0xd7, 0xb5, 0xdd, 0x76, 0x93, 0x61, 0x78, 0x01, - 0xdd, 0x02, 0xd1, 0x1b, 0xf5, 0x87, 0x19, 0x71, 0xcf, 0xdb, 0x2d, 0x86, 0xac, 0x72, 0xd8, 0xd7, - 0x14, 0xc4, 0x97, 0xc2, 0x23, 0xbe, 0xa0, 0x58, 0xe6, 0x1d, 0x64, 0x20, 0x46, 0xa0, 0x7c, 0x0b, - 0x45, 0xec, 0x7c, 0x6f, 0xa0, 0xb7, 0xa0, 0x38, 0xb2, 0xad, 0xb1, 0x90, 0x56, 0xd9, 0xb2, 0x08, - 0x19, 0xc4, 0x0c, 0x8f, 0xde, 0x86, 0x45, 0x8f, 0x4a, 0x12, 0x93, 0x92, 0xea, 0x83, 0x95, 0x38, - 0x21, 0x13, 0x32, 0xcc, 0x29, 0x94, 0xbb, 0xd0, 0xd8, 0x25, 0x3e, 0xe5, 0x1e, 0xe8, 0x44, 0xe4, - 0x11, 0xe5, 0x64, 0x8f, 0x48, 0xf9, 0x0c, 0x9a, 0x21, 0xa5, 0x98, 0x91, 0xbb, 0xb0, 0xe4, 0x11, - 0xf7, 0x34, 0xd3, 0x9d, 0x65, 0x84, 0x01, 0x5a, 0xf9, 0x8e, 0xa9, 0xb9, 0xdc, 0xcc, 0xab, 0x59, - 0xa5, 0x0e, 0x94, 0x4d, 0x63, 0x4c, 0x98, 0xe8, 0x17, 0xb8, 0xe8, 0x07, 0x65, 0x65, 0x99, 0xb9, - 0x91, 0x72, 0xc7, 0x94, 0x6e, 0x60, 0x01, 0x5e, 0xbb, 0xc5, 0xc8, 0x91, 0x8b, 0x31, 0x7e, 0x2f, - 0xd8, 0x33, 0x2e, 0xc5, 0x98, 0x32, 0x91, 0xc9, 0x05, 0x93, 0xad, 0x70, 0x3b, 0xb9, 0x1c, 0x97, - 0x35, 0x58, 0x89, 0xd1, 0x0b, 0x36, 0xef, 0x42, 0x8b, 0xc9, 0xef, 0xe5, 0x98, 0xac, 0xc0, 0xb2, - 0x44, 0x2d, 0x58, 0x7c, 0x00, 0xab, 0xa1, 0x07, 0x73, 0x39, 0x36, 0x1b, 0xb0, 0x96, 0xa8, 0x21, - 0x58, 0xfd, 0x3a, 0x17, 0x8c, 0xf5, 0x3b, 0x72, 0xec, 0x6a, 0x01, 0xa7, 0x16, 0x14, 0x66, 0xae, - 0x29, 0xb8, 0xd0, 0xbf, 0x4c, 0xda, 0xed, 0x99, 0x4f, 0xd8, 0x66, 0x4e, 0x8f, 0x4d, 0x05, 0x66, - 0x0c, 0x29, 0x88, 0x6e, 0xe7, 0x1e, 0x6d, 0x9c, 0xca, 0x0c, 0xf5, 0x1d, 0xb8, 0x4f, 0x1e, 0x14, - 0xd1, 0x47, 0xb0, 0x6e, 0x91, 0x33, 0xff, 0xc4, 0x76, 0x54, 0xdf, 0x35, 0x26, 0x13, 0xe2, 0xaa, - 0xfc, 0x44, 0xc6, 0xec, 0x5b, 0x19, 0xaf, 0x0a, 0xec, 0x90, 0x23, 0x79, 0x77, 0xd0, 0x03, 0x58, - 0x4b, 0xd6, 0xd2, 0x89, 0xa9, 0x9d, 0x0b, 0x9b, 0xb7, 0x12, 0xaf, 0xb4, 0x43, 0x51, 0x74, 0xca, - 0x63, 0x83, 0x11, 0x83, 0x6c, 0x42, 0x7d, 0x97, 0xf8, 0xcf, 0xdc, 0x71, 0xe0, 0x19, 0x7c, 0xc8, - 0xd4, 0x87, 0x01, 0x84, 0x4e, 0xdc, 0x82, 0xe2, 0xa9, 0x3b, 0x0e, 0x14, 0xa2, 0x1e, 0x29, 0x04, - 0x25, 0x62, 0x28, 0xe5, 0x03, 0xb6, 0x43, 0x47, 0x5c, 0xd0, 0x0d, 0x28, 0x9c, 0xba, 0x81, 0x5a, - 0x27, 0xaa, 0x50, 0x8c, 0xd8, 0x25, 0xa5, 0x66, 0x94, 0x0f, 0x83, 0x5d, 0xf2, 0x55, 0xd8, 0x84, - 0x1b, 0xa3, 0xcc, 0xe9, 0x29, 0xac, 0xee, 0x12, 0x7f, 0x87, 0x8c, 0x0d, 0x8b, 0xe8, 0x47, 0x24, - 0x74, 0x65, 0xde, 0x16, 0x8e, 0x00, 0x77, 0x63, 0xd6, 0x22, 0x76, 0x82, 0x94, 0x2e, 0x16, 0xdf, - 0xf5, 0xc3, 0x93, 0x65, 0x5e, 0x3a, 0x59, 0x76, 0x61, 0x2d, 0xc1, 0x36, 0x34, 0x1a, 0x45, 0x8f, - 0xf8, 0xc1, 0x04, 0xad, 0xa6, 0xf8, 0x52, 0x5a, 0x46, 0xa1, 0x7c, 0x09, 0xab, 0x5d, 0x5d, 0x4f, - 0xf7, 0xec, 0x2d, 0x28, 0x50, 0x43, 0xce, 0xc7, 0x99, 0xcd, 0x80, 0x12, 0x50, 0x59, 0x4d, 0xd4, - 0x17, 0x43, 0x3e, 0x82, 0x0d, 0x3e, 0x0f, 0xaf, 0xcd, 0x9b, 0xca, 0xb5, 0x66, 0x9a, 0xc2, 0x1d, - 0xa0, 0x7f, 0xa9, 0x57, 0x9e, 0x66, 0x2a, 0x1a, 0x7c, 0x04, 0x6d, 0x4c, 0x1c, 0x53, 0x1b, 0xbd, - 0x7e, 0x8b, 0xf4, 0xb4, 0x91, 0xc1, 0x43, 0x34, 0xb0, 0xc6, 0xa2, 0x0d, 0xcc, 0xb2, 0x4f, 0x89, - 0x15, 0x3a, 0xae, 0x5f, 0xb1, 0xb5, 0x95, 0xc0, 0x62, 0x0d, 0x3e, 0x04, 0xf0, 0x02, 0x60, 0xb0, - 0x12, 0xd2, 0x2e, 0x11, 0x55, 0x90, 0xc8, 0x94, 0x27, 0xec, 0x28, 0x9a, 0x6c, 0x03, 0xdd, 0x87, - 0x4a, 0x48, 0x24, 0x46, 0x91, 0xc9, 0x2a, 0xa2, 0x52, 0xd6, 0xd9, 0xc2, 0xa6, 0xba, 0xa5, 0xfc, - 0x7e, 0x70, 0x30, 0x7d, 0x03, 0x8d, 0x64, 0xac, 0xd0, 0x95, 0x60, 0xd9, 0xd3, 0x2d, 0xef, 0xc1, - 0x86, 0x98, 0xdc, 0x37, 0x31, 0xbe, 0x4e, 0xb8, 0xdc, 0xe9, 0x96, 0x10, 0xb4, 0x76, 0x89, 0x2f, - 0x9c, 0x66, 0xb1, 0x4c, 0x5d, 0x58, 0x96, 0x60, 0x62, 0x8d, 0xde, 0x85, 0xb2, 0x43, 0x21, 0x06, - 0x09, 0x56, 0xa8, 0x25, 0x1d, 0x03, 0x38, 0x6d, 0x48, 0xa1, 0x9c, 0x41, 0xab, 0xab, 0xeb, 0x31, - 0xb6, 0xe8, 0x2e, 0x94, 0x18, 0xfe, 0x5c, 0x74, 0x3b, 0x5d, 0x5f, 0xe0, 0xd1, 0xa7, 0x70, 0xc5, - 0x25, 0x63, 0x6a, 0x4e, 0xcf, 0x0c, 0xcf, 0x37, 0xac, 0x89, 0x2a, 0x89, 0x07, 0x9f, 0xc1, 0x0d, - 0x46, 0xd0, 0x13, 0xf8, 0xa3, 0x48, 0x2c, 0x56, 0x60, 0x59, 0x6a, 0x59, 0x8c, 0xf2, 0x17, 0x39, - 0x58, 0x11, 0x71, 0x90, 0xd7, 0xec, 0xd2, 0xfb, 0xb0, 0xe2, 0x50, 0x17, 0xc8, 0x3d, 0x25, 0xe9, - 0xce, 0xa0, 0x00, 0x15, 0xf5, 0x23, 0x58, 0xef, 0x42, 0xb4, 0xde, 0xeb, 0xb0, 0x1a, 0xef, 0x83, - 0xe8, 0xdc, 0xdf, 0xe6, 0x60, 0x55, 0xac, 0xcf, 0xff, 0xc2, 0x84, 0xcd, 0x1b, 0x59, 0x61, 0xde, - 0xc8, 0x78, 0xf4, 0x24, 0xd6, 0xdd, 0xf0, 0x7c, 0xde, 0x09, 0xe5, 0xa6, 0xeb, 0x79, 0xc6, 0xc4, - 0x92, 0x05, 0xf7, 0x53, 0x00, 0x2d, 0x04, 0x8a, 0x11, 0x75, 0x92, 0x23, 0x92, 0xaa, 0x49, 0xd4, - 0xca, 0xb7, 0xb0, 0x99, 0xc9, 0x59, 0xc8, 0xe6, 0x6f, 0xc3, 0xfa, 0x39, 0x74, 0x42, 0x79, 0x79, - 0xb3, 0x9d, 0xbe, 0x06, 0x9b, 0x99, 0x9c, 0xc5, 0x6c, 0x4d, 0xe1, 0x9a, 0x2c, 0x0e, 0x6f, 0xb4, - 0xed, 0x0c, 0x6b, 0x73, 0x13, 0xae, 0xcf, 0x6b, 0x4e, 0x74, 0xe8, 0xf7, 0xe0, 0x7a, 0x6c, 0x5d, - 0xdf, 0xec, 0x6c, 0xdc, 0x82, 0x1b, 0x73, 0xb9, 0xc7, 0x6c, 0xd1, 0x11, 0xf3, 0xd1, 0x03, 0x5b, - 0xf4, 0x05, 0xb3, 0x45, 0x01, 0x2c, 0xdc, 0xb3, 0x4b, 0x13, 0xd3, 0x3e, 0xd6, 0xcc, 0xb4, 0x62, - 0xec, 0x32, 0x38, 0x16, 0x78, 0xe5, 0x4b, 0x40, 0x47, 0xbe, 0xe6, 0xc6, 0x99, 0xbe, 0x42, 0xfd, - 0x35, 0x58, 0x89, 0xd5, 0x8f, 0xc2, 0x32, 0x47, 0xbe, 0xed, 0xc4, 0xbb, 0xba, 0x4a, 0xdb, 0x8a, - 0x80, 0x82, 0xf4, 0x5f, 0x0a, 0x50, 0x1c, 0x88, 0xf0, 0xac, 0x65, 0xba, 0x46, 0x10, 0x4b, 0xa6, - 0xff, 0xe9, 0xe1, 0xc6, 0xd1, 0x7c, 0xdf, 0xe5, 0x7e, 0x67, 0x0d, 0x8b, 0x12, 0x5b, 0xbe, 0x49, - 0x70, 0xb4, 0xa0, 0x7f, 0x69, 0xed, 0x63, 0xe2, 0xf9, 0xc2, 0xb3, 0x64, 0xff, 0xa9, 0xeb, 0x6a, - 0x78, 0xea, 0x0b, 0xc3, 0x3f, 0xd1, 0x5d, 0xed, 0x05, 0xf3, 0x1f, 0xcb, 0x18, 0x0c, 0xef, 0x1b, - 0x01, 0x41, 0xd7, 0x01, 0x4e, 0x35, 0xd3, 0xd0, 0x79, 0xe4, 0xab, 0xc4, 0x02, 0x55, 0x12, 0x04, - 0x7d, 0x00, 0xab, 0x96, 0xad, 0x1a, 0x53, 0x87, 0x5a, 0x6d, 0x3f, 0xe2, 0xb4, 0xc4, 0x75, 0xdf, - 0xb2, 0xfb, 0x02, 0x15, 0x72, 0x8c, 0x4e, 0x63, 0xe5, 0x58, 0x7c, 0xfa, 0x1a, 0x00, 0x0f, 0x21, - 0xa9, 0x9a, 0x67, 0xb1, 0x03, 0x74, 0x1d, 0x57, 0x38, 0xa4, 0xeb, 0x59, 0x68, 0x13, 0x44, 0x41, - 0x35, 0x74, 0x76, 0x72, 0xae, 0xe0, 0x32, 0x07, 0xf4, 0x75, 0x11, 0x30, 0xf3, 0x89, 0x4b, 0x74, - 0x76, 0x60, 0x2e, 0xe3, 0xb0, 0x4c, 0x0f, 0xb1, 0x9e, 0xaf, 0x99, 0x84, 0x1d, 0x93, 0xcb, 0x98, - 0x17, 0xd0, 0x5d, 0x68, 0x19, 0x9e, 0x3a, 0x76, 0xed, 0xa9, 0x4a, 0xce, 0x7c, 0xe2, 0x5a, 0x9a, - 0xc9, 0xce, 0xc8, 0x65, 0xdc, 0x30, 0xbc, 0xc7, 0xae, 0x3d, 0xed, 0x09, 0x28, 0x9d, 0x22, 0x4b, - 0x44, 0xf4, 0x54, 0xc3, 0x61, 0x87, 0xe4, 0x0a, 0x86, 0x00, 0xd4, 0x77, 0xc2, 0xa0, 0x79, 0x33, - 0x0a, 0x9a, 0xa3, 0x77, 0x01, 0x19, 0x9e, 0x1a, 0x38, 0xe9, 0x86, 0xc5, 0x66, 0x8c, 0x9d, 0x94, - 0xcb, 0xb8, 0x65, 0x78, 0x07, 0x1c, 0xd1, 0xe7, 0x70, 0xe5, 0xaf, 0x73, 0x50, 0xdd, 0x21, 0xd4, - 0xaa, 0xf2, 0x49, 0xa5, 0x6b, 0xca, 0x82, 0x0e, 0xe2, 0x94, 0x21, 0x4a, 0x51, 0x10, 0x2d, 0x7f, - 0x41, 0x10, 0x0d, 0xdd, 0x81, 0xa6, 0x69, 0x5b, 0xf4, 0x50, 0xc0, 0xab, 0x91, 0xc0, 0x12, 0x37, - 0x38, 0x78, 0x20, 0xa0, 0xe8, 0x6d, 0x68, 0x79, 0x27, 0xb6, 0xeb, 0xcb, 0x94, 0x5c, 0x38, 0x9a, - 0x02, 0x1e, 0x90, 0x2a, 0x7f, 0x9f, 0x83, 0x45, 0x16, 0x40, 0xa2, 0x27, 0x76, 0xc9, 0x89, 0xce, - 0x8a, 0x05, 0xce, 0xf5, 0xa0, 0xe7, 0x5e, 0x4d, 0xfc, 0x3f, 0xa8, 0xe9, 0xd1, 0xf0, 0x69, 0x27, - 0xe8, 0xf0, 0x62, 0x0e, 0x7a, 0x88, 0xc5, 0x31, 0x52, 0x16, 0xb2, 0xb1, 0x3d, 0x5f, 0x15, 0xbb, - 0x9c, 0x10, 0x60, 0x0a, 0xe2, 0x36, 0x42, 0x79, 0xc8, 0x0e, 0x38, 0xaf, 0x1c, 0x21, 0x53, 0x3e, - 0xe6, 0x61, 0x04, 0x5a, 0x4f, 0x98, 0x8c, 0x4b, 0x56, 0x34, 0x01, 0x3d, 0xe3, 0xfa, 0x41, 0xa4, - 0x56, 0x2f, 0x3b, 0x6d, 0xf3, 0xae, 0xba, 0x22, 0x91, 0x28, 0xc8, 0x22, 0x41, 0xad, 0x4b, 0xac, - 0xb5, 0xe0, 0x16, 0xa2, 0x08, 0xc5, 0x01, 0x21, 0x2e, 0xd3, 0x0c, 0xca, 0x21, 0xf0, 0xb9, 0xea, - 0x38, 0x2c, 0xa3, 0x4f, 0xa0, 0xa6, 0x39, 0x8e, 0x79, 0x1e, 0x4c, 0x1e, 0x8f, 0xad, 0x48, 0xd3, - 0xde, 0xa5, 0x58, 0xb1, 0x43, 0x57, 0xb5, 0xa8, 0x10, 0x86, 0x6d, 0x0a, 0xc9, 0xb0, 0x0d, 0x6d, - 0x53, 0x0a, 0xdb, 0x7c, 0x06, 0x75, 0x72, 0x3c, 0x71, 0xd4, 0xe9, 0xcc, 0xf4, 0x8d, 0x13, 0xdb, - 0x11, 0x97, 0x4f, 0xeb, 0x51, 0x85, 0xde, 0xf1, 0xc4, 0xd9, 0x17, 0x58, 0x5c, 0x23, 0x52, 0x09, - 0x75, 0xa1, 0xc9, 0x8f, 0xd5, 0x2e, 0x19, 0x9b, 0x64, 0xe4, 0xdb, 0x2e, 0x5b, 0xde, 0xea, 0x83, - 0xb6, 0x34, 0x7b, 0x94, 0x00, 0x07, 0x78, 0xdc, 0x70, 0x63, 0x65, 0x74, 0x07, 0x8a, 0x86, 0x35, - 0xb6, 0x99, 0xdd, 0x8a, 0x39, 0xb9, 0xb4, 0x9f, 0x3c, 0x6a, 0xc4, 0x08, 0xa8, 0x39, 0xf7, 0x8d, - 0x29, 0x71, 0x3d, 0x66, 0xb8, 0x62, 0xe6, 0x7c, 0xc8, 0xe0, 0x58, 0xe0, 0xa9, 0xf3, 0xec, 0xbb, - 0x9a, 0xe5, 0xb1, 0xf0, 0x4a, 0x39, 0xc9, 0x77, 0x18, 0xa0, 0x70, 0x44, 0x45, 0xe7, 0x99, 0x0f, - 0x84, 0xc7, 0x8e, 0x98, 0x6d, 0x8b, 0xcd, 0x33, 0x1b, 0x85, 0x30, 0xfa, 0x3c, 0x94, 0xc0, 0x0b, - 0x68, 0x07, 0x5a, 0x13, 0x57, 0x1b, 0x91, 0xf1, 0xcc, 0x54, 0x5d, 0xe2, 0xd1, 0x6d, 0x84, 0xd9, - 0xbe, 0xea, 0x83, 0x2b, 0xd2, 0x7e, 0x23, 0x28, 0x30, 0x27, 0xc0, 0xcd, 0x49, 0x1c, 0x80, 0xb6, - 0xa0, 0xa2, 0x8d, 0x0d, 0xd5, 0xd3, 0xc6, 0x86, 0xd7, 0xae, 0x32, 0xdd, 0x5a, 0x96, 0x16, 0x79, - 0x6c, 0x1c, 0x69, 0x63, 0x03, 0x97, 0x35, 0xfe, 0xc7, 0x53, 0xfe, 0x29, 0x07, 0x55, 0x69, 0xe9, - 0xd1, 0xc7, 0x50, 0x31, 0x2c, 0x35, 0xe6, 0x47, 0x5e, 0xb4, 0x65, 0x97, 0x0d, 0x4b, 0x54, 0xfc, - 0x29, 0xd4, 0xc9, 0x19, 0x9d, 0x82, 0xb8, 0x84, 0x5d, 0x54, 0xb9, 0xc6, 0x2b, 0x44, 0x0c, 0x8c, - 0xa9, 0xcc, 0xa0, 0xf0, 0x72, 0x06, 0xbc, 0x82, 0xd0, 0xfe, 0x3f, 0x81, 0x2a, 0xb7, 0x61, 0x7b, - 0xc6, 0xd4, 0x98, 0x1b, 0x09, 0x44, 0xb7, 0xa0, 0x36, 0xd5, 0xce, 0x22, 0x2b, 0xc8, 0x75, 0xaf, - 0x3a, 0xd5, 0xce, 0x42, 0x63, 0xf9, 0x11, 0xac, 0x7b, 0xe2, 0x8a, 0x4a, 0xf5, 0x4f, 0x5c, 0xe2, - 0x9d, 0xd8, 0xa6, 0xae, 0x3a, 0x23, 0x5f, 0xd8, 0xb2, 0xd5, 0x00, 0x3b, 0x0c, 0x90, 0x83, 0x91, - 0xaf, 0xfc, 0xd7, 0x22, 0x94, 0x03, 0x9d, 0x40, 0x3f, 0x82, 0xba, 0x36, 0xf3, 0x4f, 0x54, 0x47, - 0xf3, 0xbc, 0x17, 0xb6, 0xab, 0x0b, 0xeb, 0x5e, 0xa3, 0xc0, 0x81, 0x80, 0xa1, 0x9b, 0x50, 0xd5, - 0x89, 0x37, 0x72, 0x0d, 0x47, 0xba, 0x6b, 0x92, 0x41, 0xe8, 0x0a, 0x94, 0x4d, 0x7b, 0xa4, 0x99, - 0xaa, 0xe6, 0x05, 0xe1, 0x24, 0x56, 0xee, 0x32, 0x8b, 0x1e, 0xee, 0x55, 0x41, 0xb8, 0xab, 0xc8, - 0x38, 0x34, 0x03, 0x78, 0x57, 0x44, 0x08, 0x37, 0x60, 0xc9, 0x21, 0xc4, 0xa5, 0x4c, 0x78, 0xd4, - 0xa8, 0x44, 0x8b, 0x5d, 0x8f, 0xee, 0xc3, 0x0c, 0x31, 0x71, 0xed, 0x99, 0xc3, 0x34, 0xa7, 0x82, - 0x2b, 0x14, 0xb2, 0x4b, 0x01, 0x74, 0x1f, 0x66, 0x68, 0x66, 0xcd, 0x78, 0x84, 0xbc, 0x4c, 0x01, - 0xec, 0xe2, 0xea, 0x00, 0x96, 0x5d, 0x32, 0xb5, 0x4f, 0x89, 0xea, 0xb8, 0xc6, 0xa9, 0xe6, 0xd3, - 0xbd, 0x9c, 0x29, 0x49, 0xe3, 0x81, 0x92, 0x36, 0x12, 0x5b, 0x98, 0xd1, 0x0e, 0x38, 0x69, 0xd7, - 0xc3, 0x4d, 0x37, 0x0e, 0xa0, 0xdb, 0x28, 0xd7, 0x9c, 0xb1, 0xa9, 0x39, 0xaa, 0xae, 0x4d, 0x1d, - 0xc3, 0x9a, 0x30, 0xfd, 0x29, 0xe3, 0x16, 0xc3, 0x3c, 0x36, 0x35, 0x67, 0x87, 0xc3, 0xd1, 0x6d, - 0x68, 0x78, 0xc4, 0xd2, 0x55, 0x71, 0x31, 0xe7, 0x9f, 0x33, 0x5d, 0xa9, 0xe3, 0x3a, 0x85, 0x6e, - 0x07, 0x40, 0x3a, 0x40, 0x71, 0x77, 0x31, 0xd2, 0x1c, 0xa6, 0x0f, 0x35, 0x5c, 0xe1, 0x90, 0x6d, - 0x8d, 0x0d, 0x90, 0x4f, 0x2f, 0xc5, 0xd6, 0x18, 0x96, 0xcf, 0x37, 0x45, 0x36, 0x20, 0x6f, 0xe8, - 0xcc, 0x51, 0xa8, 0xe0, 0xbc, 0xa1, 0xa3, 0x4f, 0xa1, 0x2e, 0x6e, 0x0c, 0x4c, 0x2a, 0x60, 0x5e, - 0xbb, 0x91, 0xdc, 0xba, 0x24, 0xf1, 0xc3, 0x35, 0x27, 0x2a, 0x78, 0x54, 0x1c, 0xc4, 0x3a, 0x8a, - 0x95, 0x6a, 0x72, 0x71, 0xe0, 0x8b, 0x29, 0x96, 0xe9, 0x3d, 0x40, 0x91, 0xf7, 0x61, 0xf9, 0xc4, - 0x1d, 0x6b, 0x23, 0xc2, 0x1c, 0x89, 0x0a, 0x5e, 0x0e, 0x9d, 0x90, 0x00, 0x41, 0xbd, 0xbe, 0x53, - 0x77, 0xcc, 0x02, 0xee, 0x15, 0x16, 0x21, 0x43, 0x37, 0xa1, 0xa6, 0x99, 0xa6, 0xfd, 0x42, 0xa5, - 0x82, 0xab, 0x79, 0x6d, 0xc4, 0x2f, 0x35, 0x18, 0xec, 0xf0, 0x85, 0xd5, 0xf5, 0xd0, 0x5b, 0xd0, - 0x74, 0xb9, 0x5b, 0xad, 0x06, 0x12, 0xb1, 0xc2, 0x66, 0xb8, 0x2e, 0xc0, 0x03, 0x26, 0x18, 0xca, - 0x7d, 0x68, 0x26, 0x16, 0x0c, 0x95, 0xa1, 0x78, 0x70, 0x78, 0xd0, 0xe3, 0x97, 0xc9, 0xdd, 0xbd, - 0xbd, 0x56, 0x0e, 0x55, 0x61, 0x09, 0xf7, 0x06, 0x7b, 0xdd, 0xed, 0x5e, 0x2b, 0xaf, 0x7c, 0x05, - 0x35, 0xd9, 0xc0, 0xa3, 0x36, 0x2c, 0xf1, 0xf0, 0x66, 0xf0, 0xfe, 0x24, 0x28, 0x32, 0x0d, 0x14, - 0x54, 0xaa, 0xef, 0x9b, 0xa1, 0x06, 0x0a, 0xd8, 0xd0, 0x37, 0x95, 0x3f, 0xcb, 0x41, 0x23, 0x6e, - 0xef, 0xa9, 0x52, 0x26, 0xb6, 0x08, 0x75, 0x64, 0x1a, 0xc1, 0xc9, 0xa2, 0x8c, 0x57, 0xe3, 0xfb, - 0xc1, 0x36, 0xc3, 0xa1, 0xcf, 0xa0, 0x93, 0xae, 0x35, 0xf3, 0xa8, 0x1f, 0x14, 0x5e, 0x5b, 0x6e, - 0x24, 0x6b, 0x32, 0x7c, 0x5f, 0x57, 0xfe, 0xae, 0x04, 0x95, 0x70, 0xf7, 0xf8, 0x1f, 0x50, 0xe9, - 0x2d, 0x28, 0x4f, 0x89, 0xe7, 0x69, 0x13, 0xe1, 0x9c, 0xc5, 0xb6, 0xdb, 0x7d, 0x81, 0xc1, 0x21, - 0x4d, 0xa6, 0x09, 0x58, 0x7c, 0xa9, 0x09, 0x28, 0x5d, 0x60, 0x02, 0x96, 0x2e, 0x34, 0x01, 0xe5, - 0x84, 0x09, 0xb8, 0x0b, 0xa5, 0x1f, 0x66, 0x64, 0x46, 0x3c, 0xb1, 0xcd, 0x49, 0x3b, 0xe9, 0xd7, - 0x0c, 0x8e, 0x05, 0x1e, 0xdd, 0xcb, 0x32, 0x16, 0x5c, 0x63, 0x2f, 0x69, 0x08, 0xaa, 0x97, 0x36, - 0x04, 0xb5, 0x2c, 0x43, 0xc0, 0xee, 0xda, 0x3c, 0xcf, 0xb0, 0x2d, 0x1e, 0xb5, 0x60, 0x7a, 0x5d, - 0xc7, 0x35, 0x01, 0xe4, 0x2b, 0xfc, 0x13, 0x58, 0xf7, 0x66, 0x0e, 0xdd, 0x52, 0x88, 0x4e, 0x4d, - 0x82, 0x76, 0x6c, 0x98, 0x86, 0x4f, 0xdd, 0xa9, 0x06, 0x8b, 0xf3, 0xaf, 0x85, 0xd8, 0x6d, 0x09, - 0x49, 0xe7, 0x88, 0x3a, 0x3e, 0x9c, 0x2f, 0x57, 0xec, 0xf2, 0xf1, 0xc4, 0xe1, 0x3c, 0x7f, 0x0a, - 0x55, 0x4d, 0x9f, 0x1a, 0x41, 0xb3, 0x2d, 0x66, 0x20, 0xaf, 0x67, 0x78, 0x27, 0x5b, 0x5d, 0x4a, - 0xc6, 0x1d, 0x15, 0xd0, 0xc2, 0xff, 0xd4, 0xab, 0x0b, 0x6e, 0x0d, 0x99, 0xae, 0xd7, 0x71, 0x58, - 0xa6, 0x38, 0x6d, 0x34, 0x22, 0x8e, 0x4f, 0x74, 0xa1, 0xec, 0x61, 0x99, 0x9e, 0xe6, 0xb4, 0xe8, - 0x09, 0xd8, 0x8a, 0x30, 0x05, 0xd1, 0xe3, 0xaf, 0x15, 0x58, 0xb4, 0x67, 0xbe, 0xfa, 0x43, 0x7b, - 0x95, 0xdf, 0x1b, 0xd9, 0x33, 0xff, 0x6b, 0x7a, 0x80, 0x1a, 0x9b, 0xb6, 0xe3, 0xb5, 0xd7, 0x18, - 0x90, 0x17, 0x94, 0x7b, 0x00, 0x51, 0xe7, 0x50, 0x09, 0xf2, 0x4f, 0x07, 0xfc, 0x42, 0x7c, 0xe7, - 0xf0, 0x9b, 0x83, 0x56, 0x0e, 0x01, 0x94, 0x06, 0x8f, 0x9f, 0xab, 0xdb, 0xc3, 0x56, 0x5e, 0xf9, - 0x43, 0x28, 0x07, 0x92, 0x8a, 0xde, 0x93, 0xba, 0xce, 0x7d, 0x89, 0xe5, 0x94, 0x3c, 0x4b, 0xa3, - 0xb9, 0x0d, 0x45, 0x2f, 0xb8, 0xa5, 0xce, 0x24, 0x65, 0x68, 0xe5, 0x57, 0x39, 0x58, 0x12, 0x10, - 0xa4, 0x40, 0xed, 0xe0, 0x70, 0xd8, 0x7f, 0xdc, 0xdf, 0xee, 0x0e, 0xfb, 0x87, 0x07, 0xac, 0x95, - 0x22, 0x8e, 0xc1, 0xa8, 0x23, 0xf0, 0x74, 0xb0, 0xd3, 0x1d, 0xf6, 0x18, 0xe3, 0x22, 0x16, 0x25, - 0x7a, 0x6a, 0x39, 0x1c, 0xf4, 0x0e, 0xc4, 0xcb, 0x0a, 0xf6, 0x1f, 0x5d, 0x85, 0xca, 0x57, 0xbd, - 0xde, 0xa0, 0xbb, 0xd7, 0x7f, 0xd6, 0x63, 0x2a, 0x58, 0xc4, 0x11, 0x80, 0x9a, 0x34, 0xdc, 0x7b, - 0x8c, 0x7b, 0x47, 0x4f, 0x98, 0x9a, 0x15, 0x71, 0x50, 0xa4, 0xf5, 0x76, 0xfa, 0x47, 0xdb, 0x5d, - 0xbc, 0xd3, 0xdb, 0x61, 0x0a, 0x56, 0xc4, 0x11, 0x80, 0xce, 0xea, 0xf0, 0x70, 0xd8, 0xdd, 0x63, - 0xea, 0x55, 0xc4, 0xbc, 0xa0, 0x3c, 0x84, 0x12, 0xd7, 0x12, 0x8a, 0x37, 0x2c, 0x67, 0xe6, 0x0b, - 0x4f, 0x85, 0x17, 0x68, 0xbf, 0xed, 0x99, 0x4f, 0xc1, 0xe2, 0x78, 0xc0, 0x4b, 0x0a, 0x81, 0x12, - 0xf7, 0x53, 0xd1, 0x16, 0x94, 0xa8, 0xeb, 0x6d, 0x4c, 0xc4, 0xec, 0xae, 0x27, 0x3d, 0xd9, 0x6d, - 0x86, 0xc5, 0x82, 0x0a, 0xbd, 0x13, 0xbf, 0x59, 0x5d, 0x4b, 0x92, 0xc7, 0xee, 0x56, 0x7f, 0x95, - 0x83, 0x9a, 0xcc, 0x85, 0xaa, 0xd0, 0xc8, 0xb6, 0x2c, 0x32, 0xf2, 0x55, 0x97, 0xf8, 0xee, 0x79, - 0x30, 0xd9, 0x02, 0x88, 0x29, 0x8c, 0xea, 0x02, 0x73, 0x96, 0xc2, 0x6b, 0xfe, 0x22, 0x2e, 0x53, - 0x00, 0xe5, 0x44, 0x37, 0xb8, 0xef, 0x09, 0x71, 0x34, 0xd3, 0x38, 0x25, 0x6a, 0xe2, 0x65, 0xcb, - 0x72, 0x88, 0xe9, 0x0b, 0x04, 0xda, 0x81, 0xeb, 0x53, 0xc3, 0x32, 0xa6, 0xb3, 0xa9, 0x1a, 0xca, - 0x2d, 0xf5, 0xfb, 0xa2, 0xaa, 0x7c, 0x85, 0xae, 0x0a, 0xaa, 0xae, 0x4c, 0x14, 0x70, 0x51, 0x7e, - 0x99, 0x87, 0xaa, 0x34, 0xbc, 0xff, 0xa3, 0xc3, 0x60, 0xc1, 0x17, 0x32, 0xb1, 0x7d, 0x43, 0xa3, - 0xc6, 0x29, 0xea, 0x1c, 0x17, 0x44, 0x14, 0xe1, 0x9e, 0x04, 0xdd, 0x8c, 0x1e, 0x62, 0x70, 0x81, - 0xcc, 0x7a, 0x88, 0xc1, 0x05, 0x32, 0x2c, 0x2b, 0xff, 0x99, 0x83, 0x4a, 0x78, 0xae, 0x49, 0x7b, - 0x2d, 0xb9, 0x0c, 0xaf, 0xe5, 0x1a, 0x00, 0x27, 0x92, 0x2e, 0xa1, 0xb9, 0x57, 0x35, 0x10, 0x3c, - 0xa6, 0xfe, 0x4c, 0xd5, 0x0d, 0x6f, 0x64, 0x9f, 0x12, 0xf7, 0x5c, 0xc4, 0x27, 0x6a, 0x53, 0x7f, - 0xb6, 0x13, 0xc0, 0xa8, 0x47, 0x40, 0x77, 0x55, 0x3a, 0x9f, 0x53, 0x5b, 0x0f, 0x2e, 0x44, 0xab, - 0x02, 0xb6, 0x6f, 0xeb, 0xf4, 0x44, 0xde, 0x10, 0x9e, 0x5c, 0x7c, 0xa7, 0xab, 0x73, 0x68, 0x37, - 0xfb, 0xb1, 0x4a, 0x29, 0x78, 0x18, 0x12, 0x3c, 0x56, 0xa1, 0x1b, 0xa1, 0x3f, 0x72, 0xd4, 0xa9, - 0xe7, 0x09, 0x8f, 0xb6, 0xe4, 0x8f, 0x9c, 0x7d, 0xcf, 0x53, 0xbe, 0x80, 0xaa, 0x74, 0x36, 0x43, - 0x5b, 0xb0, 0x22, 0x1f, 0xe4, 0xe2, 0xbe, 0xc6, 0xb2, 0x74, 0x70, 0xe3, 0x8e, 0x86, 0xf2, 0x1f, - 0x39, 0x68, 0x26, 0x4e, 0x67, 0x17, 0xbb, 0x40, 0xe2, 0x8c, 0x17, 0x89, 0x58, 0x1d, 0x57, 0x05, - 0x8c, 0x2d, 0xdf, 0x0d, 0xa8, 0x9e, 0x10, 0xd3, 0x21, 0xae, 0x6a, 0x5b, 0x66, 0x30, 0x6d, 0xc0, - 0x41, 0x87, 0x96, 0xc9, 0xb6, 0x34, 0x9d, 0x8c, 0x89, 0xeb, 0x6a, 0x26, 0x67, 0xc2, 0x9f, 0xc9, - 0xd4, 0x02, 0x20, 0xe3, 0x72, 0x1f, 0x56, 0xd9, 0xe3, 0x12, 0xf1, 0x74, 0x4d, 0x0d, 0xfa, 0xc3, - 0x83, 0x27, 0x2b, 0x32, 0xae, 0x27, 0xfa, 0xf6, 0x0e, 0x2c, 0x9b, 0xb6, 0x35, 0x31, 0xd9, 0xe3, - 0x95, 0x80, 0xbe, 0xc4, 0xb7, 0xdf, 0x10, 0x21, 0x88, 0x95, 0xf7, 0x60, 0x79, 0xdf, 0xb9, 0xf4, - 0xb8, 0x95, 0x2e, 0xd4, 0xc5, 0x19, 0x54, 0x18, 0x95, 0x79, 0xa7, 0x34, 0x89, 0x45, 0x3e, 0xce, - 0xe2, 0x37, 0x79, 0x58, 0x13, 0x0b, 0x65, 0xf2, 0x57, 0x8e, 0x87, 0x0e, 0x8f, 0x0f, 0xbd, 0x0b, - 0x48, 0x33, 0x5f, 0x68, 0xe7, 0x1e, 0x75, 0x06, 0x1c, 0xcd, 0x25, 0xea, 0x34, 0x7a, 0xfc, 0xcc, - 0x31, 0xdb, 0x1c, 0xb1, 0x4f, 0x74, 0x74, 0x1f, 0xd6, 0x8c, 0x89, 0x65, 0xbb, 0xd4, 0x15, 0x51, - 0x1d, 0xcd, 0x3f, 0x51, 0x4d, 0x62, 0x4d, 0xfc, 0x93, 0xe0, 0x92, 0x86, 0x23, 0xbb, 0xde, 0x40, - 0xf3, 0x4f, 0xf6, 0x18, 0x86, 0x3a, 0x93, 0x41, 0x00, 0x31, 0x6c, 0x82, 0x49, 0x02, 0x73, 0x26, - 0xf9, 0x0a, 0x6d, 0x04, 0x14, 0xa2, 0x29, 0xd6, 0x55, 0xb7, 0x4f, 0x8f, 0x0f, 0x57, 0x42, 0xf5, - 0x57, 0x0d, 0x4b, 0x1b, 0xf9, 0x54, 0xdc, 0x59, 0xf5, 0x20, 0x14, 0xb7, 0x11, 0x12, 0xf4, 0x05, - 0x9e, 0xd5, 0x66, 0x52, 0xcd, 0x87, 0xaf, 0x6a, 0xc6, 0xc4, 0x09, 0x22, 0x5f, 0xe2, 0x3d, 0xb7, - 0x31, 0x71, 0xd0, 0xa7, 0xd0, 0x11, 0x83, 0xb1, 0xc8, 0x99, 0xaf, 0xb2, 0x40, 0xe4, 0xc4, 0x51, - 0xa7, 0xc4, 0x77, 0x8d, 0x91, 0x58, 0xbc, 0x75, 0x4e, 0x71, 0x40, 0xce, 0xfc, 0x27, 0xb6, 0xd3, - 0x9f, 0x38, 0xfb, 0x0c, 0xab, 0x3c, 0x80, 0xf5, 0xa7, 0x1e, 0x61, 0x7e, 0xbb, 0x63, 0xb2, 0x97, - 0xbf, 0x81, 0xc5, 0x9f, 0xbf, 0x8e, 0xdf, 0x40, 0x91, 0x3a, 0xfb, 0xd4, 0xaf, 0xe3, 0x27, 0x8e, - 0xa9, 0xa8, 0x4e, 0xfd, 0x3a, 0x4e, 0xdb, 0x64, 0x88, 0x80, 0x6d, 0x97, 0x9d, 0x81, 0xa6, 0xda, - 0x19, 0xb3, 0x83, 0x41, 0x64, 0x93, 0xc9, 0xab, 0x00, 0xb2, 0x86, 0x95, 0x77, 0xa0, 0xd8, 0xa7, - 0x8c, 0x53, 0xc4, 0xb9, 0x0c, 0xe2, 0xbf, 0xcc, 0x41, 0x2b, 0xd9, 0x75, 0xf4, 0x49, 0x62, 0x53, - 0xbc, 0x19, 0xed, 0x72, 0xd9, 0xc3, 0x0c, 0xb7, 0x47, 0x05, 0x8a, 0xe4, 0x78, 0xe2, 0x88, 0xdd, - 0xb1, 0x11, 0x0f, 0x5c, 0x61, 0x86, 0xa3, 0x34, 0x06, 0xa5, 0x49, 0xbd, 0x0c, 0xef, 0x33, 0x1a, - 0x8a, 0x53, 0x3e, 0x17, 0x02, 0x3a, 0xd4, 0xdc, 0x09, 0xf1, 0xf7, 0xc9, 0xf4, 0x98, 0xb8, 0xde, - 0x89, 0xe1, 0xa4, 0x35, 0x36, 0x97, 0xd6, 0x58, 0xe5, 0x1b, 0x68, 0xef, 0xd9, 0xd6, 0x64, 0x8f, - 0x6a, 0xd9, 0x9b, 0x34, 0x28, 0xca, 0x3f, 0x17, 0x61, 0x49, 0x28, 0x1f, 0xfa, 0x0a, 0x56, 0xa6, - 0x8e, 0x9a, 0x8a, 0x37, 0xf1, 0x19, 0xdb, 0x94, 0x3c, 0xaf, 0xa4, 0x6e, 0xe3, 0xe5, 0x69, 0x4a, - 0xdd, 0xdf, 0x0f, 0x67, 0x9c, 0xcf, 0xdc, 0x46, 0x2a, 0xe0, 0x94, 0x98, 0xe8, 0x64, 0x30, 0xb2, - 0x70, 0xe9, 0x60, 0xe4, 0x37, 0xb0, 0x11, 0x58, 0x65, 0xa1, 0xfc, 0xaa, 0xed, 0x04, 0x81, 0x64, - 0xca, 0xe4, 0x46, 0x2a, 0xd2, 0x16, 0x37, 0x12, 0x78, 0xcd, 0xcd, 0xb4, 0x1d, 0x4f, 0x00, 0xcd, - 0x3c, 0x12, 0x89, 0x31, 0x17, 0xba, 0xc5, 0x64, 0x08, 0x2a, 0x29, 0x41, 0xb8, 0x35, 0x4b, 0xca, - 0x5f, 0x2a, 0x4c, 0x50, 0x4a, 0x8e, 0x6e, 0x7e, 0x98, 0x20, 0x1c, 0x9e, 0xcf, 0x44, 0x47, 0x9d, - 0x86, 0xb2, 0x23, 0x62, 0x95, 0xc9, 0xe1, 0x25, 0x45, 0x4c, 0x0c, 0x2f, 0x25, 0x79, 0x1a, 0x6c, - 0x52, 0xd3, 0xad, 0x72, 0xa3, 0x9e, 0x5a, 0x77, 0x1e, 0xdb, 0x94, 0xc2, 0x36, 0xf3, 0x24, 0x10, - 0xb7, 0xcd, 0x39, 0x18, 0x65, 0x06, 0x25, 0x3e, 0x30, 0xea, 0x3c, 0x19, 0x8e, 0x1a, 0xbb, 0xd5, - 0x28, 0x1b, 0x8e, 0x40, 0xbe, 0x05, 0xcd, 0xa9, 0xe6, 0x7d, 0x2f, 0x8c, 0xad, 0x3a, 0x35, 0x2c, - 0x21, 0xab, 0x75, 0x0a, 0xe6, 0x86, 0x76, 0xdf, 0xb0, 0x52, 0x74, 0xda, 0x99, 0x38, 0x2d, 0xcb, - 0x74, 0xda, 0x99, 0xf2, 0x17, 0x39, 0x80, 0xe8, 0x49, 0xc9, 0x6f, 0xf9, 0xee, 0x87, 0xc2, 0x4c, - 0xc3, 0xf3, 0xd9, 0xcb, 0xe5, 0x0a, 0x66, 0xff, 0xd9, 0x53, 0x86, 0xe8, 0xca, 0x24, 0xf9, 0x94, - 0x81, 0x61, 0x70, 0x48, 0xa1, 0xec, 0x42, 0x79, 0x5f, 0xf3, 0x47, 0x27, 0xb4, 0x33, 0x77, 0x62, - 0x9d, 0x91, 0x42, 0xc7, 0x8c, 0xe2, 0x25, 0x4f, 0x90, 0x9e, 0x41, 0x2d, 0xb6, 0xf9, 0x6c, 0xc5, - 0x98, 0x49, 0x32, 0x29, 0x53, 0x49, 0x3c, 0xd7, 0xa1, 0x24, 0x6d, 0x68, 0x75, 0x2c, 0x4a, 0xca, - 0xbf, 0x17, 0x01, 0xb6, 0x6d, 0x4b, 0x37, 0xb8, 0xe0, 0xdf, 0x07, 0xf1, 0xe8, 0x55, 0x8d, 0xde, - 0xf1, 0xa0, 0x44, 0x4f, 0x8f, 0x88, 0x8f, 0x2b, 0x9c, 0x8a, 0x0e, 0xeb, 0x27, 0x50, 0x0b, 0xc3, - 0x0e, 0xb4, 0x52, 0x7e, 0x6e, 0xa5, 0xf0, 0x36, 0x8d, 0x56, 0xfb, 0x1c, 0x1a, 0x89, 0x9d, 0xb6, - 0x90, 0x3c, 0xb5, 0xc8, 0x43, 0xc1, 0x35, 0x4d, 0x1e, 0xfe, 0x03, 0xa8, 0x06, 0xb5, 0x69, 0x9b, - 0xc5, 0xf9, 0x1d, 0xe5, 0xd5, 0x68, 0x8b, 0x1f, 0x87, 0xaf, 0xf9, 0xfd, 0x73, 0x56, 0x6b, 0x71, - 0x6e, 0xad, 0x5a, 0x48, 0x48, 0x2b, 0x7e, 0x09, 0xcb, 0x74, 0x1b, 0x8d, 0x57, 0x2e, 0xcd, 0xad, - 0xdc, 0x24, 0x67, 0xfe, 0xb6, 0x5c, 0x9f, 0x7a, 0xa1, 0xce, 0xf7, 0x06, 0xd5, 0xaf, 0x99, 0xe9, - 0x33, 0xdd, 0x5d, 0xc4, 0xe0, 0xf2, 0x17, 0x87, 0x33, 0xd3, 0x47, 0x5f, 0x00, 0x44, 0xcf, 0x08, - 0x45, 0xd4, 0x54, 0x0a, 0x0a, 0x44, 0xeb, 0x23, 0xd4, 0x9c, 0x2e, 0x6b, 0x25, 0x7c, 0x65, 0x88, - 0x1e, 0xc1, 0x8a, 0x49, 0x55, 0x3c, 0xd1, 0xc3, 0xca, 0xdc, 0x1e, 0x2e, 0x33, 0x72, 0xb9, 0x8f, - 0xca, 0x09, 0x54, 0x42, 0xde, 0x68, 0x05, 0x9a, 0xf8, 0xf0, 0xe9, 0xb0, 0xa7, 0x0e, 0xbf, 0x1d, - 0xf4, 0x54, 0x11, 0xe7, 0xdb, 0x80, 0x15, 0x09, 0xd8, 0x3f, 0x18, 0xf6, 0xf0, 0x41, 0x77, 0xaf, - 0x95, 0x4b, 0x20, 0x7a, 0xcf, 0x05, 0x22, 0x8f, 0x56, 0xa1, 0x25, 0x21, 0xf6, 0x0e, 0xb7, 0xbb, - 0x7b, 0xad, 0x82, 0x32, 0x86, 0x66, 0xd8, 0x72, 0x97, 0xe7, 0xa5, 0xdc, 0x8f, 0x09, 0xf3, 0x35, - 0x79, 0xe4, 0x31, 0x42, 0x49, 0x9e, 0x6f, 0x42, 0x35, 0x18, 0xad, 0x11, 0xbe, 0xbc, 0x94, 0x41, - 0xca, 0x01, 0x54, 0xf6, 0x89, 0x2e, 0x5a, 0x78, 0x27, 0xd6, 0xc2, 0x86, 0x1c, 0x4c, 0xd0, 0x53, - 0xbc, 0x57, 0x61, 0xf1, 0x54, 0x33, 0x67, 0xc1, 0xc3, 0x74, 0x5e, 0x50, 0x54, 0x68, 0x76, 0xbd, - 0x81, 0x4b, 0x1c, 0x62, 0x05, 0x5c, 0x5b, 0x50, 0xd0, 0x3c, 0x4b, 0xec, 0xdb, 0xf4, 0x2f, 0x55, - 0x33, 0x4a, 0xa1, 0x85, 0xa7, 0x74, 0x5e, 0x42, 0x0a, 0xd4, 0xe9, 0x86, 0x62, 0x92, 0xb1, 0xaf, - 0x4e, 0x6d, 0xcf, 0x17, 0xee, 0x61, 0x75, 0xe6, 0x91, 0x3d, 0x32, 0xf6, 0xf7, 0x6d, 0xf6, 0x5a, - 0xa1, 0x2e, 0x6e, 0x87, 0x05, 0xfb, 0x0b, 0x1f, 0xf9, 0x7a, 0xc4, 0x1c, 0x0b, 0xe7, 0x94, 0xfd, - 0x57, 0xee, 0x40, 0x73, 0x8f, 0x9d, 0xb3, 0x5c, 0x32, 0x16, 0x0c, 0xc2, 0x81, 0x88, 0x48, 0x02, - 0x1f, 0xc8, 0x6f, 0x0a, 0xb0, 0xc4, 0x09, 0xbc, 0xe8, 0x82, 0x4a, 0xe3, 0xf9, 0x47, 0x29, 0x43, - 0xc9, 0x84, 0x82, 0x53, 0x8b, 0x0b, 0x2a, 0xc1, 0xfb, 0x63, 0xa8, 0x44, 0x41, 0xb6, 0x7c, 0xf2, - 0x66, 0x2a, 0xb1, 0x70, 0x38, 0xa2, 0x45, 0xb7, 0xa1, 0x40, 0x1d, 0xf1, 0x42, 0xf2, 0x02, 0x2d, - 0x5c, 0x09, 0x4c, 0xf1, 0xe8, 0x13, 0x00, 0xaa, 0xe1, 0x7c, 0xbe, 0x85, 0x82, 0x5f, 0x89, 0xd9, - 0x06, 0x79, 0x29, 0x98, 0x9e, 0x73, 0x00, 0xfa, 0x12, 0xea, 0x31, 0x75, 0x15, 0x7a, 0x7e, 0x41, - 0xef, 0x6a, 0xb2, 0xc6, 0xa2, 0xfb, 0xb0, 0x24, 0xae, 0xef, 0x85, 0x92, 0x4b, 0xe2, 0x12, 0x5b, - 0x20, 0x1c, 0xd0, 0xd1, 0xce, 0x8a, 0x53, 0xaf, 0x4b, 0xc6, 0x62, 0x73, 0xbe, 0x22, 0xef, 0x9f, - 0xb1, 0x75, 0x09, 0x0e, 0xc4, 0x2e, 0x19, 0xa3, 0x47, 0xd0, 0x4c, 0xe8, 0xae, 0xd8, 0x7e, 0x2f, - 0xe8, 0x6e, 0x23, 0xae, 0xbe, 0xca, 0x2f, 0x72, 0x50, 0x09, 0x9f, 0x58, 0x85, 0xbb, 0x47, 0x4e, - 0xda, 0xc8, 0x3e, 0x02, 0x18, 0x85, 0x46, 0x44, 0xac, 0xd6, 0x6a, 0x96, 0x81, 0xc1, 0x12, 0x1d, - 0x7a, 0x07, 0x96, 0xb8, 0x58, 0x78, 0x62, 0xb5, 0xe4, 0xbb, 0x43, 0x8e, 0xc0, 0x01, 0x85, 0xf2, - 0x35, 0x94, 0x84, 0x57, 0x96, 0xd5, 0x81, 0xf8, 0x23, 0xcd, 0xfc, 0xe5, 0x1e, 0x69, 0xfe, 0x6b, - 0x0e, 0x5a, 0xc9, 0x5b, 0x3e, 0x74, 0x37, 0xa6, 0xc9, 0xab, 0xc9, 0xfb, 0x40, 0x49, 0x8d, 0xe5, - 0xfc, 0xa5, 0xfc, 0x25, 0xf2, 0x97, 0x32, 0x72, 0x4a, 0x63, 0x0f, 0x17, 0x8b, 0x2f, 0x7b, 0xb8, - 0x88, 0xde, 0x87, 0x25, 0x9d, 0x8c, 0x35, 0x6a, 0xe4, 0x17, 0x2f, 0x52, 0xa4, 0x80, 0x4a, 0xf9, - 0xf3, 0x1c, 0x14, 0xb0, 0xad, 0xa1, 0x06, 0xe4, 0xb5, 0xe0, 0x50, 0x93, 0xd7, 0x3c, 0x74, 0x15, - 0xc4, 0x06, 0x6b, 0x92, 0xc0, 0x21, 0x8a, 0x00, 0xd4, 0xc8, 0x4c, 0x35, 0x86, 0x12, 0x8f, 0x29, - 0x78, 0x49, 0x7a, 0x29, 0x50, 0x8c, 0x3d, 0x1e, 0x09, 0xee, 0xec, 0x17, 0x2f, 0x4e, 0xb5, 0x50, - 0xee, 0xf0, 0x07, 0x13, 0xb6, 0xf6, 0xb2, 0xf4, 0x09, 0xfe, 0x52, 0x9c, 0x11, 0x46, 0x2f, 0xc5, - 0x5d, 0x5b, 0xcb, 0x78, 0x29, 0x4e, 0x89, 0x18, 0x4a, 0xf1, 0xa0, 0xf0, 0xcc, 0x1d, 0x67, 0x4a, - 0x47, 0x03, 0xf2, 0x2e, 0x3f, 0xd9, 0xd7, 0x70, 0xde, 0xd5, 0x99, 0xcb, 0xc8, 0x2f, 0x7f, 0x5d, - 0xee, 0x7c, 0xd5, 0x70, 0x99, 0x03, 0x30, 0xcb, 0x9f, 0x13, 0x57, 0xcb, 0xae, 0xcf, 0xd6, 0xa4, - 0x86, 0xcb, 0x1c, 0x80, 0x7d, 0x71, 0x4b, 0xc7, 0xaf, 0x35, 0xf3, 0x86, 0xae, 0xfc, 0x3a, 0x07, - 0x25, 0xfe, 0x2a, 0x2b, 0x35, 0xc7, 0x9b, 0x50, 0x89, 0x4e, 0xeb, 0x22, 0xd7, 0xce, 0x0d, 0x8e, - 0xe7, 0x37, 0xa0, 0x4a, 0xbd, 0x3d, 0x62, 0xf1, 0xc0, 0x51, 0x81, 0x6f, 0xd9, 0x1c, 0xc4, 0x02, - 0x47, 0x6f, 0x43, 0x4b, 0x10, 0x08, 0x9b, 0x2c, 0x04, 0xa4, 0x82, 0x9b, 0x1c, 0xde, 0x0d, 0xc0, - 0xb1, 0x87, 0x18, 0x8b, 0x89, 0x87, 0x18, 0xef, 0x66, 0x1e, 0x34, 0x44, 0x78, 0x25, 0x79, 0x98, - 0x50, 0xfe, 0x31, 0x07, 0x15, 0xf6, 0xe2, 0xa4, 0x6f, 0x8d, 0xed, 0xdf, 0xc9, 0x7b, 0x9c, 0x3b, - 0xd0, 0xb4, 0x66, 0x53, 0x55, 0x7a, 0x68, 0x23, 0xc2, 0x91, 0x0d, 0x6b, 0x36, 0x95, 0x1f, 0x2a, - 0x5d, 0x81, 0xb2, 0x25, 0x4e, 0xe3, 0x41, 0xf4, 0xdb, 0xe2, 0x07, 0x71, 0x7a, 0xf8, 0xa4, 0xa8, - 0xf0, 0x2a, 0x82, 0xc7, 0x1b, 0xab, 0xd6, 0x6c, 0xda, 0x15, 0x20, 0xe5, 0x73, 0xf6, 0x30, 0x0f, - 0x1b, 0xc7, 0x74, 0x20, 0x81, 0xb4, 0x05, 0x4f, 0x36, 0x52, 0xef, 0x92, 0xc3, 0x21, 0xf3, 0x27, - 0x1b, 0xca, 0x17, 0x2c, 0xd5, 0x3d, 0xac, 0x2d, 0x44, 0xf0, 0xb2, 0xd5, 0xef, 0x6d, 0x43, 0x39, - 0x98, 0x21, 0x04, 0x50, 0xda, 0xdd, 0x3b, 0x7c, 0xd4, 0xdd, 0x6b, 0x2d, 0xa0, 0x0a, 0x2c, 0x72, - 0x1f, 0x85, 0x5d, 0x61, 0x74, 0x77, 0x7e, 0xae, 0xf6, 0x0f, 0x5a, 0x79, 0x54, 0x85, 0x25, 0xfa, - 0xff, 0xf0, 0xe9, 0xb0, 0x55, 0x40, 0x4b, 0x50, 0x78, 0x86, 0x1f, 0xb7, 0x8a, 0xf7, 0x7c, 0xa8, - 0x4a, 0x67, 0x08, 0x76, 0xe7, 0x81, 0x7b, 0x8f, 0xfb, 0xcf, 0x5b, 0x0b, 0xa8, 0x06, 0xe5, 0x83, - 0x5e, 0x7f, 0xf7, 0xc9, 0xa3, 0x43, 0xdc, 0xca, 0xd1, 0x1a, 0xc3, 0xee, 0xae, 0xe0, 0x73, 0xa4, - 0x0e, 0xba, 0xc3, 0x27, 0xad, 0x02, 0xaa, 0x43, 0x65, 0xfb, 0x70, 0x7f, 0xff, 0xe9, 0x41, 0x7f, - 0xf8, 0x6d, 0xab, 0x88, 0x96, 0xa1, 0xde, 0x7b, 0x3e, 0x54, 0x23, 0xd0, 0x22, 0xf5, 0xc1, 0xf6, - 0xba, 0x78, 0xb7, 0x27, 0x01, 0x4b, 0xf7, 0xde, 0x86, 0x4a, 0x78, 0x58, 0x60, 0x17, 0xaf, 0x07, - 0xdf, 0xca, 0x37, 0xb0, 0x00, 0xa5, 0xfe, 0xc1, 0xb3, 0x1e, 0x1e, 0xb6, 0xf2, 0xf7, 0xee, 0x41, - 0x2b, 0x79, 0x14, 0x40, 0x25, 0xc8, 0xf7, 0xbe, 0x6e, 0x2d, 0xd0, 0xdf, 0xdd, 0x5e, 0x2b, 0x47, - 0x7f, 0xf7, 0x7a, 0xad, 0xfc, 0xbd, 0xf7, 0x45, 0xb0, 0x53, 0x6c, 0xed, 0xd1, 0xdd, 0x2e, 0x9d, - 0x87, 0xed, 0xed, 0xde, 0x60, 0xc8, 0x99, 0xe3, 0xde, 0xcf, 0x7b, 0xdb, 0x94, 0xf9, 0x53, 0x58, - 0xc9, 0x70, 0xcd, 0xe8, 0x30, 0xc2, 0xde, 0xaa, 0xdd, 0x9d, 0x9d, 0xd6, 0x02, 0xf5, 0x01, 0x23, - 0x10, 0xee, 0xed, 0x1f, 0x3e, 0xa3, 0x0d, 0xaf, 0xc1, 0xb2, 0x0c, 0x15, 0x97, 0xc6, 0xf7, 0xde, - 0x83, 0x7a, 0xcc, 0x1f, 0xa3, 0x73, 0xb6, 0xdf, 0xdb, 0x51, 0xf7, 0x0f, 0x29, 0xab, 0x26, 0x54, - 0x69, 0x21, 0x20, 0xcf, 0xdd, 0x7b, 0x17, 0x20, 0x32, 0xfa, 0x61, 0x72, 0x33, 0x9d, 0x84, 0xfd, - 0xc1, 0x21, 0x16, 0x7d, 0xee, 0x3d, 0x67, 0xff, 0xf3, 0x0f, 0xfe, 0xed, 0x06, 0x94, 0x77, 0xa9, - 0x4c, 0x74, 0x1d, 0x03, 0xed, 0x41, 0x55, 0x7a, 0x9a, 0x89, 0xae, 0xc6, 0xb6, 0xa2, 0xc4, 0x8b, - 0xcf, 0xce, 0xb5, 0x39, 0x58, 0xf1, 0xe2, 0x6a, 0x01, 0xf5, 0x01, 0xa2, 0xc7, 0x9b, 0x68, 0x53, - 0x26, 0x4f, 0xbc, 0xf3, 0xec, 0x5c, 0xcd, 0x46, 0x86, 0xac, 0x1e, 0x43, 0x25, 0x7c, 0xb2, 0x8a, - 0xa4, 0x63, 0x5d, 0xf2, 0x6d, 0x6b, 0x67, 0x33, 0x13, 0x17, 0xf2, 0xd9, 0x83, 0xaa, 0x94, 0x6b, - 0x2f, 0x0f, 0x30, 0x9d, 0xbc, 0x2f, 0x0f, 0x30, 0x2b, 0x41, 0x7f, 0x01, 0x3d, 0x85, 0x46, 0x3c, - 0xcb, 0x1e, 0xdd, 0x90, 0xcf, 0xd2, 0x19, 0xc9, 0xfb, 0x9d, 0x9b, 0xf3, 0x09, 0xe4, 0x4e, 0x4a, - 0xdf, 0x95, 0x90, 0x3b, 0x99, 0xfe, 0x94, 0x85, 0xdc, 0xc9, 0x8c, 0x8f, 0x51, 0x28, 0x0b, 0x08, - 0x43, 0x3d, 0x96, 0xbe, 0x8e, 0xae, 0xc7, 0x4c, 0x62, 0x9a, 0xe3, 0x8d, 0xb9, 0xf8, 0x90, 0xe7, - 0x1f, 0xc0, 0x72, 0x2a, 0x2d, 0x1e, 0x29, 0x2f, 0x4f, 0xcf, 0xef, 0xfc, 0xe8, 0x42, 0x9a, 0x90, - 0xff, 0xff, 0x87, 0x56, 0x32, 0xfd, 0x1d, 0xdd, 0x92, 0xaa, 0x66, 0x67, 0xdd, 0x77, 0x94, 0x8b, - 0x48, 0xe4, 0x55, 0x8b, 0x27, 0xc3, 0xcb, 0xab, 0x96, 0x99, 0x59, 0x2f, 0xaf, 0xda, 0x9c, 0x3c, - 0xfa, 0x05, 0xf4, 0x1c, 0x9a, 0x89, 0x7c, 0x77, 0x24, 0x2f, 0x76, 0x66, 0x92, 0x7d, 0xe7, 0xd6, - 0x05, 0x14, 0x21, 0xe7, 0x2f, 0xa0, 0xc4, 0x0d, 0x3b, 0xda, 0x88, 0x2d, 0x76, 0xf4, 0x9a, 0xb2, - 0xd3, 0x4e, 0x23, 0x64, 0x71, 0x92, 0x5e, 0x44, 0xca, 0xe2, 0x94, 0x7e, 0x96, 0x29, 0x8b, 0x53, - 0xd6, 0x33, 0xca, 0x05, 0xf4, 0x33, 0x58, 0x12, 0x5f, 0xf4, 0x40, 0xed, 0x98, 0x7e, 0x48, 0x5f, - 0xee, 0xe8, 0x5c, 0xc9, 0xc0, 0xc8, 0x66, 0x21, 0xfa, 0x7e, 0x86, 0x6c, 0x16, 0x52, 0x5f, 0x00, - 0x91, 0xcd, 0x42, 0xc6, 0x27, 0x37, 0x16, 0xd0, 0x0e, 0x40, 0x94, 0xf1, 0x2d, 0xb3, 0x4a, 0xe5, - 0x81, 0x77, 0xb2, 0x1f, 0xcf, 0x2a, 0x0b, 0x1f, 0xe4, 0xd0, 0x67, 0x61, 0x46, 0x7b, 0xf4, 0x8e, - 0x45, 0xda, 0x28, 0xc3, 0xcf, 0xb4, 0x74, 0x12, 0xdf, 0xda, 0x60, 0x95, 0x1f, 0x43, 0x25, 0xfc, - 0xc4, 0x80, 0x6c, 0x99, 0x92, 0x1f, 0x38, 0x90, 0x2d, 0x53, 0xfa, 0x9b, 0x04, 0x7c, 0x56, 0xc2, - 0x0f, 0x10, 0xc4, 0x66, 0x25, 0xf9, 0xad, 0x82, 0xd8, 0xac, 0xa4, 0xbf, 0x59, 0xb0, 0x80, 0x9e, - 0x40, 0x25, 0xfc, 0x68, 0x80, 0xdc, 0xa5, 0xe4, 0xa7, 0x0c, 0xe4, 0x2e, 0xa5, 0xbf, 0x32, 0xb0, - 0x70, 0x37, 0x47, 0x25, 0x8f, 0xa7, 0xee, 0xcb, 0x92, 0x17, 0xfb, 0x4a, 0x40, 0xa7, 0x9d, 0x46, - 0xc8, 0x56, 0x3b, 0xcc, 0xd2, 0x97, 0x3b, 0x92, 0x4c, 0xfe, 0xef, 0x6c, 0x66, 0xe2, 0x64, 0x99, - 0x13, 0x79, 0xc9, 0x28, 0x21, 0xe8, 0x51, 0x42, 0xab, 0x2c, 0x73, 0x89, 0x24, 0xe6, 0x50, 0x6a, - 0x93, 0x1c, 0xe2, 0xf9, 0xca, 0x09, 0xa9, 0x4d, 0x70, 0x08, 0xa5, 0x96, 0x31, 0x49, 0x75, 0x58, - 0xe6, 0x73, 0x35, 0x1b, 0x29, 0xb3, 0x8a, 0x52, 0x86, 0x51, 0x4a, 0x2e, 0xe6, 0xb0, 0xca, 0xc8, - 0x32, 0x66, 0xba, 0x2d, 0xe5, 0x0d, 0xa3, 0xb4, 0x64, 0xc8, 0xcc, 0xae, 0xcd, 0xc1, 0xca, 0xeb, - 0x15, 0x66, 0xfd, 0xca, 0xeb, 0x95, 0x4c, 0x1e, 0x96, 0xd7, 0x2b, 0x9d, 0x26, 0xcc, 0xb6, 0x9c, - 0x58, 0x06, 0xb1, 0xbc, 0xe5, 0x64, 0x25, 0x23, 0xcb, 0x5b, 0x4e, 0x76, 0xea, 0x71, 0x68, 0x04, - 0x6d, 0x2d, 0x69, 0x04, 0xc3, 0x73, 0x59, 0xd2, 0x08, 0x46, 0xe7, 0x30, 0x3e, 0x51, 0x52, 0xb6, - 0x2f, 0x4a, 0xcd, 0xab, 0x9c, 0xd1, 0x2c, 0x4f, 0x54, 0x56, 0x8a, 0xf0, 0x82, 0xd0, 0x0b, 0x7a, - 0x6e, 0x8b, 0xeb, 0x45, 0x94, 0xa9, 0x9b, 0xd0, 0x0b, 0x39, 0x1b, 0x57, 0xd2, 0x0b, 0xca, 0x21, - 0xa5, 0x17, 0x12, 0x93, 0xcd, 0x4c, 0x5c, 0x62, 0x4e, 0x12, 0xdd, 0x88, 0x65, 0x2f, 0x27, 0xe6, - 0x24, 0x5e, 0x1d, 0xb3, 0x83, 0xad, 0x74, 0x2f, 0x70, 0x3d, 0x46, 0x9c, 0xca, 0x63, 0x95, 0x97, - 0x29, 0x33, 0xf1, 0x97, 0xf3, 0x8c, 0x25, 0xe4, 0xca, 0x3c, 0xb3, 0x32, 0x7d, 0x65, 0x9e, 0xd9, - 0x99, 0xbc, 0xcc, 0x1b, 0x48, 0xa6, 0xdd, 0xca, 0xde, 0xc0, 0x9c, 0x3c, 0x5f, 0xd9, 0x1b, 0x98, - 0x9b, 0xb5, 0xcb, 0x5c, 0x99, 0x54, 0xce, 0xad, 0xec, 0xca, 0xcc, 0x4b, 0xea, 0x95, 0x5d, 0x99, - 0xf9, 0x49, 0xbb, 0x0b, 0xe8, 0x10, 0x6a, 0x72, 0x7e, 0x2e, 0x8a, 0xfb, 0x6b, 0xc9, 0x54, 0xd4, - 0xce, 0xf5, 0x79, 0x68, 0x99, 0xa1, 0x9c, 0x59, 0x8b, 0xe2, 0x5e, 0xea, 0x45, 0x0c, 0x33, 0x13, - 0x72, 0xb9, 0xe3, 0x12, 0xcf, 0x99, 0x45, 0x29, 0x2f, 0x35, 0xc5, 0xf6, 0xd6, 0x05, 0x14, 0xf2, - 0xc2, 0x25, 0x93, 0x64, 0xe5, 0x85, 0x9b, 0x93, 0x8e, 0xdb, 0x51, 0x2e, 0x22, 0x49, 0x1c, 0x09, - 0x44, 0x70, 0x2d, 0x7e, 0x24, 0x88, 0xa5, 0x7c, 0x26, 0x8e, 0x04, 0x89, 0xfc, 0x4a, 0xc6, 0x27, - 0x4c, 0x29, 0x94, 0xf9, 0x24, 0x73, 0x6d, 0x65, 0x3e, 0xe9, 0x6c, 0x58, 0xb6, 0x2e, 0x72, 0x32, - 0xa0, 0xbc, 0x2e, 0x19, 0x69, 0xb2, 0xf2, 0xba, 0x64, 0x66, 0xb0, 0x0a, 0xc7, 0x5d, 0xca, 0xee, - 0x8b, 0x3b, 0xee, 0xe9, 0xdc, 0xd6, 0xb8, 0xe3, 0x9e, 0x95, 0x4c, 0xba, 0x80, 0x74, 0x96, 0x44, - 0x9e, 0x8a, 0x1e, 0xfe, 0x38, 0x63, 0x8a, 0x52, 0xa9, 0x8a, 0x9d, 0xdb, 0x2f, 0xa1, 0x92, 0x5b, - 0xc9, 0xc8, 0xd2, 0x94, 0x5b, 0x99, 0x9f, 0x1e, 0x2a, 0xb7, 0x72, 0x51, 0xaa, 0xe7, 0x02, 0x9a, - 0x06, 0xa9, 0xe4, 0xa9, 0x86, 0xee, 0x64, 0xcf, 0x6d, 0xba, 0xad, 0xbb, 0x2f, 0x27, 0x0c, 0x9b, - 0x73, 0xc2, 0xfc, 0xf1, 0x74, 0xf0, 0x75, 0xce, 0xc4, 0xa7, 0x1b, 0x7c, 0xfb, 0x12, 0x94, 0xb2, - 0x9f, 0x10, 0x05, 0x74, 0xd0, 0x66, 0xd2, 0xc5, 0x97, 0x82, 0x44, 0x9d, 0xab, 0xd9, 0xc8, 0x80, - 0xd5, 0x71, 0x89, 0x7d, 0x17, 0xf1, 0xc3, 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x67, 0x70, - 0x62, 0x26, 0x51, 0x00, 0x00, + // 6761 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x7c, 0x4b, 0x8f, 0x1b, 0x49, + 0x72, 0x70, 0xf3, 0xd1, 0x6c, 0x32, 0x48, 0x36, 0xd9, 0xd9, 0x2f, 0x8a, 0x3d, 0x7a, 0xd5, 0x8e, + 0x46, 0x1a, 0x8d, 0x46, 0x33, 0xd2, 0xcc, 0x68, 0x66, 0x47, 0xab, 0xd9, 0xa5, 0xba, 0xa9, 0x16, + 0x77, 0xfa, 0xc1, 0xc9, 0xa6, 0xb4, 0x9a, 0xfd, 0x76, 0xbf, 0x72, 0x35, 0x2b, 0xc9, 0x2e, 0x4f, + 0xb1, 0xaa, 0xa6, 0xaa, 0xd8, 0xea, 0x86, 0x01, 0x1b, 0x58, 0x03, 0x86, 0x01, 0xc3, 0x17, 0x5f, + 0x6d, 0xc0, 0xf7, 0x85, 0x7d, 0xf0, 0xc9, 0x80, 0xcf, 0x5e, 0xc3, 0xc0, 0x02, 0xbe, 0xd8, 0x47, + 0x63, 0x7d, 0xf0, 0x0f, 0xf0, 0xc5, 0x07, 0x1f, 0x7c, 0x30, 0xf2, 0x51, 0x55, 0x59, 0x0f, 0x76, + 0xb7, 0xb4, 0x5a, 0x1b, 0x06, 0x7c, 0x22, 0x2b, 0x22, 0x32, 0x32, 0x32, 0x33, 0x22, 0x32, 0xf2, + 0x15, 0x50, 0x1d, 0xdb, 0x87, 0x63, 0xe7, 0xae, 0xe3, 0xda, 0xbe, 0x8d, 0xca, 0xec, 0x43, 0x73, + 0x0c, 0xe5, 0xc7, 0x80, 0xb6, 0x89, 0xbf, 0x47, 0x8c, 0xf1, 0xd1, 0xa1, 0xed, 0x62, 0xf2, 0xed, + 0x94, 0x78, 0x3e, 0xba, 0x0d, 0x4d, 0x62, 0x69, 0x87, 0x26, 0xe9, 0xe8, 0xc7, 0xc4, 0xf5, 0x0d, + 0x8f, 0xe8, 0xad, 0xdc, 0xb5, 0xdc, 0xad, 0x32, 0x4e, 0xc1, 0x51, 0x0b, 0x16, 0x34, 0x5d, 0x77, + 0x89, 0xe7, 0xb5, 0xf2, 0xd7, 0x72, 0xb7, 0x2a, 0x38, 0xf8, 0x54, 0x1e, 0xc2, 0x72, 0x8c, 0xb7, + 0xe7, 0xd8, 0x96, 0x47, 0xd0, 0xdb, 0x30, 0xef, 0x10, 0xe2, 0x7a, 0xad, 0xdc, 0xb5, 0xc2, 0xad, + 0xea, 0xfd, 0xc5, 0xbb, 0x81, 0x30, 0x77, 0xfb, 0x84, 0xb8, 0x98, 0x23, 0x95, 0x31, 0x54, 0x3a, + 0xee, 0x78, 0x3a, 0x21, 0x96, 0xef, 0xa1, 0xbb, 0x50, 0x76, 0x89, 0x67, 0x4f, 0xdd, 0x21, 0x61, + 0x72, 0x2c, 0xde, 0x47, 0x51, 0x29, 0x2c, 0x30, 0x38, 0xa4, 0x41, 0x6b, 0x50, 0x1a, 0x69, 0x13, + 0xc3, 0x3c, 0x65, 0x22, 0xd5, 0xb1, 0xf8, 0x42, 0x08, 0x8a, 0x96, 0x36, 0x21, 0xad, 0x02, 0x13, + 0x94, 0xfd, 0x57, 0x7e, 0x07, 0x16, 0x3b, 0xba, 0xde, 0xd7, 0xfc, 0xa3, 0xa0, 0xf5, 0xaf, 0x5a, + 0xdb, 0x2a, 0x94, 0x8e, 0xdd, 0x91, 0x6a, 0xe8, 0xa2, 0x03, 0xe6, 0x8f, 0xdd, 0x51, 0x4f, 0x47, + 0x0a, 0x14, 0x1d, 0xcd, 0x3f, 0x62, 0x95, 0xc5, 0x9b, 0x49, 0xeb, 0x62, 0x38, 0xe5, 0x06, 0x34, + 0xc2, 0xca, 0x45, 0xf7, 0x20, 0x28, 0x4e, 0xa7, 0x06, 0xef, 0xef, 0x1a, 0x66, 0xff, 0x95, 0x9f, + 0xe7, 0x60, 0x69, 0x8b, 0x98, 0xc4, 0x27, 0xbf, 0x01, 0x39, 0xa3, 0xce, 0x2a, 0xc4, 0x3a, 0x2b, + 0x90, 0xbf, 0x38, 0x5b, 0xfe, 0x50, 0xd8, 0x79, 0x49, 0xd8, 0x15, 0x40, 0xb2, 0xac, 0xbc, 0x59, + 0xca, 0x67, 0x80, 0x3a, 0xba, 0x9e, 0x54, 0x34, 0x5a, 0x07, 0x21, 0x2e, 0x13, 0x3f, 0xad, 0x0a, + 0x0c, 0xa7, 0xac, 0xc2, 0x72, 0xac, 0xa4, 0x60, 0xf8, 0x10, 0x56, 0x79, 0x35, 0xaf, 0xc3, 0xb3, + 0x05, 0x6b, 0xc9, 0xc2, 0x82, 0xed, 0x73, 0x58, 0xc1, 0xc4, 0x4b, 0x9b, 0x84, 0xa4, 0xe6, 0xb9, + 0x98, 0x9a, 0xa3, 0xb7, 0xa1, 0x3e, 0xb4, 0x27, 0x93, 0xa9, 0x65, 0x0c, 0x35, 0xdf, 0xb0, 0x2d, + 0xd1, 0xbb, 0x71, 0xa0, 0xb2, 0x0e, 0xab, 0x09, 0xbe, 0xa2, 0xc2, 0xbf, 0xc9, 0x41, 0xeb, 0xc0, + 0x1e, 0xf9, 0xaf, 0x58, 0xeb, 0x01, 0x54, 0x74, 0xc3, 0x25, 0xc3, 0xb0, 0xc6, 0xc5, 0xfb, 0x9f, + 0x44, 0x4d, 0x9d, 0xc5, 0x30, 0x42, 0x6c, 0x05, 0x85, 0x71, 0xc4, 0x47, 0xf9, 0x00, 0x50, 0x9a, + 0x00, 0x95, 0x20, 0xdf, 0xdb, 0x6b, 0xce, 0xa1, 0x05, 0x28, 0xec, 0x3f, 0x1b, 0x34, 0x73, 0xa8, + 0x0c, 0xc5, 0xc7, 0xfb, 0x83, 0xa7, 0xcd, 0xbc, 0xb2, 0x01, 0x97, 0x32, 0xaa, 0x12, 0x2d, 0xfb, + 0x1a, 0xd6, 0x0f, 0x8e, 0xa6, 0xbe, 0x6e, 0xbf, 0xb4, 0xde, 0x74, 0x6f, 0xb6, 0xa1, 0x95, 0x66, + 0x2d, 0xaa, 0xbd, 0x07, 0xab, 0x5d, 0xe6, 0xa4, 0x2e, 0x5c, 0x29, 0x55, 0x87, 0x64, 0x11, 0xc1, + 0xec, 0x05, 0xac, 0x6d, 0x19, 0xde, 0x2b, 0x71, 0xbb, 0x60, 0x13, 0x2e, 0xc1, 0x7a, 0x8a, 0xb3, + 0xa8, 0x74, 0x0c, 0x4d, 0x2e, 0xce, 0xae, 0xeb, 0x07, 0xd5, 0x6d, 0x40, 0x45, 0x9f, 0x4e, 0x1c, + 0xd5, 0x3f, 0x75, 0xb8, 0xb5, 0xcf, 0xe3, 0x32, 0x05, 0x0c, 0x4e, 0x1d, 0x82, 0xda, 0x50, 0x1e, + 0x19, 0x26, 0x61, 0xbe, 0x8d, 0x57, 0x16, 0x7e, 0x53, 0x9c, 0x61, 0xf9, 0xc4, 0x3d, 0xd6, 0x4c, + 0x66, 0xe0, 0x45, 0x1c, 0x7e, 0x2b, 0xcb, 0xb0, 0x24, 0x55, 0x24, 0x6a, 0x5f, 0x86, 0x25, 0x21, + 0x58, 0x54, 0x3d, 0x33, 0x6a, 0x09, 0x28, 0x48, 0x7f, 0x0f, 0x9a, 0x3d, 0xeb, 0xb7, 0xc9, 0xd0, + 0x97, 0x04, 0x7d, 0x43, 0x5e, 0x89, 0xce, 0x12, 0x9a, 0x7f, 0xe4, 0xb5, 0x0a, 0xa9, 0x59, 0x82, + 0xba, 0x15, 0x8e, 0xa4, 0xb2, 0x4a, 0x02, 0x08, 0xa9, 0xfe, 0x22, 0x07, 0xf5, 0x8e, 0xae, 0x3f, + 0x9e, 0x38, 0xe7, 0x8f, 0x15, 0x82, 0xa2, 0x63, 0xbb, 0xbe, 0x98, 0x27, 0xd8, 0x7f, 0xf4, 0x3d, + 0x28, 0xb2, 0x5e, 0x2e, 0x30, 0xe9, 0x6f, 0x45, 0x35, 0xc7, 0x98, 0xde, 0xdd, 0xb5, 0x2d, 0xc3, + 0xb7, 0x5d, 0xc3, 0x1a, 0xf7, 0x6d, 0xd3, 0x18, 0x9e, 0x62, 0x56, 0x4a, 0xf9, 0x00, 0x9a, 0x49, + 0x0c, 0xb5, 0x9c, 0x3e, 0xee, 0x36, 0xe7, 0xa8, 0xe5, 0xf4, 0xf7, 0x0f, 0xe2, 0x36, 0xd4, 0x64, + 0x13, 0x10, 0x63, 0x2c, 0x1a, 0xf0, 0x03, 0x68, 0x72, 0xef, 0xf4, 0xba, 0x4d, 0x60, 0x63, 0x18, + 0x71, 0x10, 0x6c, 0x07, 0xb0, 0x24, 0x24, 0xc3, 0xc6, 0x61, 0xc0, 0xf7, 0x06, 0xcc, 0xfb, 0x74, + 0x58, 0x85, 0xbb, 0x6c, 0x44, 0xad, 0x1d, 0x50, 0x30, 0xe6, 0x58, 0x5a, 0xfd, 0x70, 0xea, 0xba, + 0xc4, 0xe2, 0xf5, 0x94, 0x71, 0xf0, 0xa9, 0x74, 0xa1, 0x8c, 0xfb, 0x5f, 0xf6, 0x36, 0x6d, 0x6b, + 0x74, 0x86, 0x90, 0x57, 0xa1, 0xea, 0x92, 0x89, 0xed, 0x13, 0x35, 0x94, 0xb5, 0x82, 0x81, 0x83, + 0xfa, 0x54, 0xe2, 0x3f, 0x2b, 0x42, 0x85, 0xf2, 0x39, 0xf0, 0x35, 0x9f, 0x4d, 0xe0, 0x53, 0xc7, + 0x37, 0x26, 0x5c, 0xac, 0x02, 0x16, 0x5f, 0x54, 0x99, 0xa9, 0xcd, 0x33, 0x4c, 0x9e, 0x61, 0xc2, + 0x6f, 0xb4, 0x08, 0xf9, 0xa9, 0xc3, 0x06, 0xad, 0x8c, 0xf3, 0x53, 0x87, 0x57, 0x39, 0xb4, 0x5d, + 0x5d, 0x35, 0x9c, 0xe3, 0x8f, 0xd9, 0x34, 0x56, 0xa7, 0x55, 0x52, 0x50, 0xcf, 0x39, 0xfe, 0x38, + 0x4e, 0xf0, 0x80, 0xcd, 0x61, 0x32, 0xc1, 0x03, 0x4a, 0xe0, 0xb8, 0x64, 0x64, 0x9c, 0x70, 0x0e, + 0x25, 0x4e, 0xc0, 0x41, 0x01, 0x87, 0x88, 0xe0, 0x41, 0x6b, 0x21, 0x41, 0xf0, 0x80, 0xb6, 0xc3, + 0x23, 0xae, 0xa1, 0x99, 0xad, 0x32, 0x9f, 0x5b, 0xf9, 0x17, 0xfa, 0x0e, 0xd4, 0x5d, 0x32, 0x24, + 0xc6, 0x31, 0x11, 0xd2, 0x55, 0x58, 0x63, 0x6a, 0x01, 0x90, 0x71, 0x4f, 0x10, 0x3d, 0x68, 0x41, + 0x8a, 0xe8, 0x01, 0x25, 0xe2, 0x3c, 0x55, 0xcb, 0xf6, 0x8d, 0xd1, 0x69, 0xab, 0xca, 0x89, 0x38, + 0x70, 0x8f, 0xc1, 0xa8, 0x9c, 0x43, 0x6d, 0x78, 0x44, 0x54, 0x97, 0x3a, 0xea, 0x56, 0x8d, 0x91, + 0x00, 0x03, 0x31, 0xd7, 0x8d, 0x6e, 0xc0, 0x62, 0x48, 0xc0, 0x94, 0xa5, 0x55, 0x67, 0x34, 0xf5, + 0x80, 0x86, 0xc7, 0x26, 0x57, 0xa0, 0x4a, 0x2c, 0x5d, 0xb5, 0x47, 0xaa, 0xae, 0xf9, 0x5a, 0x6b, + 0x91, 0xd1, 0x54, 0x88, 0xa5, 0xef, 0x8f, 0xb6, 0x34, 0x5f, 0x43, 0x2b, 0x30, 0x4f, 0x5c, 0xd7, + 0x76, 0x5b, 0x0d, 0x86, 0xe1, 0x1f, 0xe8, 0x3a, 0x08, 0x69, 0xd4, 0x6f, 0xa7, 0xc4, 0x3d, 0x6d, + 0x35, 0x19, 0xb2, 0xca, 0x61, 0x5f, 0x51, 0x10, 0x1f, 0x0a, 0x8f, 0xf8, 0x82, 0x62, 0x89, 0x0b, + 0xc8, 0x40, 0x8c, 0x40, 0xf9, 0x1a, 0x8a, 0xd8, 0xf9, 0xc6, 0x40, 0xef, 0x40, 0x71, 0x68, 0x5b, + 0x23, 0xa1, 0xad, 0xb2, 0x67, 0x11, 0x3a, 0x88, 0x19, 0x1e, 0xbd, 0x0b, 0xf3, 0x1e, 0xd5, 0x24, + 0xa6, 0x25, 0xd5, 0xfb, 0xcb, 0x71, 0x42, 0xa6, 0x64, 0x98, 0x53, 0x28, 0xb7, 0x60, 0x71, 0x9b, + 0xf8, 0x94, 0x7b, 0x60, 0x13, 0x51, 0x44, 0x94, 0x93, 0x23, 0x22, 0xe5, 0x21, 0x34, 0x42, 0x4a, + 0xd1, 0x23, 0xb7, 0x60, 0xc1, 0x23, 0xee, 0x71, 0x66, 0x38, 0xcb, 0x08, 0x03, 0xb4, 0xf2, 0x63, + 0x66, 0xe6, 0x72, 0x35, 0xaf, 0xe6, 0x95, 0xda, 0x50, 0x36, 0x8d, 0x11, 0x61, 0xaa, 0x5f, 0xe0, + 0xaa, 0x1f, 0x7c, 0x2b, 0x4b, 0x2c, 0x8c, 0x94, 0x05, 0x53, 0x3a, 0x81, 0x07, 0x78, 0xed, 0x1a, + 0xa3, 0x40, 0x2e, 0xc6, 0xf8, 0xfd, 0x60, 0xce, 0xb8, 0x10, 0x63, 0xca, 0x44, 0x26, 0x17, 0x4c, + 0xee, 0x86, 0xd3, 0xc9, 0xc5, 0xb8, 0xac, 0xc2, 0x72, 0x8c, 0x5e, 0xb0, 0xb9, 0x03, 0x4d, 0xa6, + 0xbf, 0x17, 0x63, 0xb2, 0x0c, 0x4b, 0x12, 0xb5, 0x60, 0xf1, 0x21, 0xac, 0x84, 0x11, 0xcc, 0xc5, + 0xd8, 0xac, 0xc3, 0x6a, 0xa2, 0x84, 0x60, 0xf5, 0xcb, 0x5c, 0xd0, 0xd6, 0x1f, 0x93, 0x43, 0x57, + 0x0b, 0x38, 0x35, 0xa1, 0x30, 0x75, 0x4d, 0xc1, 0x85, 0xfe, 0x65, 0xda, 0x6e, 0x4f, 0x7d, 0xc2, + 0x26, 0x73, 0xba, 0x6c, 0x2a, 0x30, 0x67, 0x48, 0x41, 0x74, 0x3a, 0xf7, 0x68, 0xe5, 0x54, 0x67, + 0x68, 0xec, 0xc0, 0x63, 0xf2, 0xe0, 0x13, 0x7d, 0x0c, 0x6b, 0x16, 0x39, 0xf1, 0x8f, 0x6c, 0x47, + 0xf5, 0x5d, 0x63, 0x3c, 0x26, 0xae, 0xca, 0x57, 0x64, 0xcc, 0xbf, 0x95, 0xf1, 0x8a, 0xc0, 0x0e, + 0x38, 0x92, 0x8b, 0x83, 0xee, 0xc3, 0x6a, 0xb2, 0x94, 0x4e, 0x4c, 0xed, 0x54, 0xf8, 0xbc, 0xe5, + 0x78, 0xa1, 0x2d, 0x8a, 0xa2, 0x5d, 0x1e, 0x6b, 0x8c, 0x68, 0x64, 0x03, 0xea, 0xdb, 0xc4, 0x7f, + 0xee, 0x8e, 0x82, 0xc8, 0xe0, 0x23, 0x66, 0x3e, 0x0c, 0x20, 0x6c, 0xe2, 0x3a, 0x14, 0x8f, 0xdd, + 0x51, 0x60, 0x10, 0xf5, 0xc8, 0x20, 0x28, 0x11, 0x43, 0x29, 0x1f, 0xb2, 0x19, 0x3a, 0xe2, 0x82, + 0xae, 0x42, 0xe1, 0xd8, 0x0d, 0xcc, 0x3a, 0x51, 0x84, 0x62, 0xc4, 0x2c, 0x29, 0x55, 0xa3, 0x7c, + 0x14, 0xcc, 0x92, 0xaf, 0xc2, 0x26, 0x9c, 0x18, 0x65, 0x4e, 0xcf, 0x60, 0x65, 0x9b, 0xf8, 0x5b, + 0x64, 0x64, 0x58, 0x44, 0x3f, 0x20, 0x61, 0x28, 0xf3, 0xae, 0x08, 0x04, 0x78, 0x18, 0xb3, 0x1a, + 0xb1, 0x13, 0xa4, 0x74, 0xb0, 0xf8, 0xac, 0x1f, 0xae, 0x2c, 0xf3, 0xd2, 0xca, 0xb2, 0x03, 0xab, + 0x09, 0xb6, 0xa1, 0xd3, 0x28, 0x7a, 0xc4, 0x0f, 0x3a, 0x68, 0x25, 0xc5, 0x97, 0xd2, 0x32, 0x0a, + 0xe5, 0x0b, 0x58, 0xe9, 0xe8, 0x7a, 0x5a, 0xb2, 0x77, 0xa0, 0x40, 0x1d, 0x39, 0x6f, 0x67, 0x36, + 0x03, 0x4a, 0x40, 0x75, 0x35, 0x51, 0x5e, 0x34, 0xf9, 0x00, 0xd6, 0x79, 0x3f, 0xbc, 0x36, 0x6f, + 0xaa, 0xd7, 0x9a, 0x69, 0x8a, 0x70, 0x80, 0xfe, 0xa5, 0x51, 0x79, 0x9a, 0xa9, 0xa8, 0xf0, 0x31, + 0xb4, 0x30, 0x71, 0x4c, 0x6d, 0xf8, 0xfa, 0x35, 0xd2, 0xd5, 0x46, 0x06, 0x0f, 0x51, 0xc1, 0x2a, + 0xdb, 0x6d, 0x60, 0x9e, 0x7d, 0x42, 0xac, 0x30, 0x70, 0xfd, 0x92, 0x8d, 0xad, 0x04, 0x16, 0x63, + 0xf0, 0x11, 0x80, 0x17, 0x00, 0x83, 0x91, 0x90, 0x66, 0x89, 0xa8, 0x80, 0x44, 0xa6, 0x3c, 0x65, + 0x4b, 0xd1, 0x64, 0x1d, 0xe8, 0x1e, 0x54, 0x42, 0x22, 0xd1, 0x8a, 0x4c, 0x56, 0x11, 0x95, 0xb2, + 0xc6, 0x06, 0x36, 0x25, 0x96, 0xf2, 0xd3, 0x60, 0x61, 0xfa, 0x06, 0x2a, 0xc9, 0x18, 0xa1, 0x4b, + 0xc1, 0xb0, 0xa7, 0x6b, 0xde, 0x81, 0x75, 0xd1, 0xb9, 0x6f, 0xa2, 0x7d, 0xed, 0x70, 0xb8, 0xd3, + 0x35, 0x21, 0x68, 0x6e, 0x13, 0x5f, 0x04, 0xcd, 0x62, 0x98, 0x3a, 0xb0, 0x24, 0xc1, 0xc4, 0x18, + 0xdd, 0x81, 0xb2, 0x43, 0x21, 0x06, 0x09, 0x46, 0xa8, 0x29, 0x2d, 0x03, 0x38, 0x6d, 0x48, 0xa1, + 0x9c, 0x40, 0xb3, 0xa3, 0xeb, 0x31, 0xb6, 0xe8, 0x16, 0x94, 0x18, 0xfe, 0x54, 0x88, 0x9d, 0x2e, + 0x2f, 0xf0, 0xe8, 0x73, 0xb8, 0xe4, 0x92, 0x11, 0x75, 0xa7, 0x27, 0x86, 0xe7, 0x1b, 0xd6, 0x58, + 0x95, 0xd4, 0x83, 0xf7, 0xe0, 0x3a, 0x23, 0xe8, 0x0a, 0xfc, 0x41, 0xa4, 0x16, 0xcb, 0xb0, 0x24, + 0xd5, 0x2c, 0x5a, 0xf9, 0xb3, 0x1c, 0x2c, 0x8b, 0x7d, 0x90, 0xd7, 0x14, 0xe9, 0x03, 0x58, 0x76, + 0x68, 0x08, 0xe4, 0x1e, 0x93, 0xb4, 0x30, 0x28, 0x40, 0x45, 0x72, 0x04, 0xe3, 0x5d, 0x88, 0xc6, + 0x7b, 0x0d, 0x56, 0xe2, 0x32, 0x08, 0xe1, 0xfe, 0x32, 0x07, 0x2b, 0x62, 0x7c, 0xfe, 0x07, 0x3a, + 0x6c, 0x56, 0xcb, 0x0a, 0xb3, 0x5a, 0xc6, 0x77, 0x4f, 0x62, 0xe2, 0x86, 0xeb, 0xf3, 0x76, 0xa8, + 0x37, 0x1d, 0xcf, 0x33, 0xc6, 0x96, 0xac, 0xb8, 0x9f, 0x03, 0x68, 0x21, 0x50, 0xb4, 0xa8, 0x9d, + 0x6c, 0x91, 0x54, 0x4c, 0xa2, 0x56, 0xbe, 0x86, 0x8d, 0x4c, 0xce, 0x42, 0x37, 0x7f, 0x1d, 0xd6, + 0x2f, 0xa0, 0x1d, 0xea, 0xcb, 0x9b, 0x15, 0xfa, 0x32, 0x6c, 0x64, 0x72, 0x16, 0xbd, 0x35, 0x81, + 0xcb, 0xb2, 0x3a, 0xbc, 0xd1, 0xba, 0x33, 0xbc, 0xcd, 0x35, 0xb8, 0x32, 0xab, 0x3a, 0x21, 0xd0, + 0x4f, 0xe0, 0x4a, 0x6c, 0x5c, 0xdf, 0x6c, 0x6f, 0x5c, 0x87, 0xab, 0x33, 0xb9, 0xc7, 0x7c, 0xd1, + 0x01, 0x8b, 0xd1, 0x03, 0x5f, 0xf4, 0x88, 0xf9, 0xa2, 0x00, 0x16, 0xce, 0xd9, 0xa5, 0xb1, 0x69, + 0x1f, 0x6a, 0x66, 0xda, 0x30, 0xb6, 0x19, 0x1c, 0x0b, 0xbc, 0xf2, 0x05, 0xa0, 0x03, 0x5f, 0x73, + 0xe3, 0x4c, 0x5f, 0xa1, 0xfc, 0x2a, 0x2c, 0xc7, 0xca, 0x47, 0xdb, 0x32, 0x07, 0xbe, 0xed, 0xc4, + 0x45, 0x5d, 0xa1, 0x75, 0x45, 0x40, 0x41, 0xfa, 0xab, 0x02, 0x14, 0xfb, 0x62, 0x7b, 0xd6, 0x32, + 0x5d, 0x23, 0xd8, 0x4b, 0xa6, 0xff, 0xe9, 0xe2, 0xc6, 0xd1, 0x7c, 0xdf, 0xe5, 0x71, 0x67, 0x0d, + 0x8b, 0x2f, 0x36, 0x7c, 0xe3, 0x60, 0x69, 0x41, 0xff, 0xd2, 0xd2, 0x87, 0xc4, 0xf3, 0x45, 0x64, + 0xc9, 0xfe, 0xd3, 0xd0, 0xd5, 0xf0, 0xd4, 0x97, 0x86, 0x7f, 0xa4, 0xbb, 0xda, 0x4b, 0x16, 0x3f, + 0x96, 0x31, 0x18, 0xde, 0x8f, 0x04, 0x04, 0x5d, 0x01, 0x38, 0xd6, 0x4c, 0x43, 0xe7, 0x3b, 0x5f, + 0x25, 0xb6, 0x51, 0x25, 0x41, 0xd0, 0x87, 0xb0, 0x62, 0xd9, 0xaa, 0x31, 0x71, 0xa8, 0xd7, 0xf6, + 0x23, 0x4e, 0x0b, 0xdc, 0xf6, 0x2d, 0xbb, 0x27, 0x50, 0x21, 0xc7, 0x68, 0x35, 0x56, 0x8e, 0xed, + 0x4f, 0x5f, 0x06, 0xe0, 0x5b, 0x48, 0xaa, 0xe6, 0x59, 0x6c, 0x01, 0x5d, 0xc7, 0x15, 0x0e, 0xe9, + 0x78, 0x16, 0xda, 0x00, 0xf1, 0xa1, 0x1a, 0x3a, 0x5b, 0x39, 0x57, 0x70, 0x99, 0x03, 0x7a, 0xba, + 0xd8, 0x30, 0xf3, 0x89, 0x4b, 0x74, 0xb6, 0x60, 0x2e, 0xe3, 0xf0, 0x9b, 0x2e, 0x62, 0x3d, 0x5f, + 0x33, 0x09, 0x5b, 0x26, 0x97, 0x31, 0xff, 0x40, 0xb7, 0xa0, 0x69, 0x78, 0xea, 0xc8, 0xb5, 0x27, + 0x2a, 0x39, 0xf1, 0x89, 0x6b, 0x69, 0x26, 0x5b, 0x23, 0x97, 0xf1, 0xa2, 0xe1, 0x3d, 0x71, 0xed, + 0x49, 0x57, 0x40, 0x69, 0x17, 0x59, 0x62, 0x47, 0x4f, 0x35, 0x1c, 0xb6, 0x48, 0xae, 0x60, 0x08, + 0x40, 0x3d, 0x27, 0xdc, 0x34, 0x6f, 0x44, 0x9b, 0xe6, 0xe8, 0x0e, 0x20, 0xc3, 0x53, 0x83, 0x20, + 0xdd, 0xb0, 0x58, 0x8f, 0xb1, 0x95, 0x72, 0x19, 0x37, 0x0d, 0x6f, 0x8f, 0x23, 0x7a, 0x1c, 0xae, + 0xfc, 0x79, 0x0e, 0xaa, 0x5b, 0x84, 0x7a, 0x55, 0xde, 0xa9, 0x74, 0x4c, 0xd9, 0xa6, 0x83, 0x58, + 0x65, 0x88, 0xaf, 0x68, 0x13, 0x2d, 0x7f, 0xc6, 0x26, 0x1a, 0xba, 0x09, 0x0d, 0xd3, 0xb6, 0xe8, + 0xa2, 0x80, 0x17, 0x23, 0x81, 0x27, 0x5e, 0xe4, 0xe0, 0xbe, 0x80, 0xa2, 0x77, 0xa1, 0xe9, 0x1d, + 0xd9, 0xae, 0x2f, 0x53, 0x72, 0xe5, 0x68, 0x08, 0x78, 0x40, 0xaa, 0xfc, 0x75, 0x0e, 0xe6, 0xd9, + 0x06, 0x12, 0x5d, 0xb1, 0x4b, 0x41, 0x74, 0xd6, 0x5e, 0xe0, 0xcc, 0x08, 0x7a, 0xe6, 0xd1, 0xc4, + 0x77, 0xa1, 0xa6, 0x47, 0xcd, 0xa7, 0x42, 0xd0, 0xe6, 0xc5, 0x02, 0xf4, 0x10, 0x8b, 0x63, 0xa4, + 0x6c, 0xcb, 0xc6, 0xf6, 0x7c, 0x55, 0xcc, 0x72, 0x42, 0x81, 0x29, 0x88, 0xfb, 0x08, 0xe5, 0x01, + 0x5b, 0xe0, 0xbc, 0xf2, 0x0e, 0x99, 0xf2, 0x29, 0xdf, 0x46, 0xa0, 0xe5, 0x84, 0xcb, 0xb8, 0x60, + 0x41, 0x13, 0xd0, 0x73, 0x6e, 0x1f, 0x44, 0xaa, 0xf5, 0xa2, 0xdd, 0x36, 0xeb, 0xa8, 0x2b, 0x52, + 0x89, 0x82, 0xac, 0x12, 0xd4, 0xbb, 0xc4, 0x6a, 0x0b, 0x4e, 0x21, 0x8a, 0x50, 0xec, 0x13, 0xe2, + 0x32, 0xcb, 0xa0, 0x1c, 0x82, 0x98, 0xab, 0x8e, 0xc3, 0x6f, 0xf4, 0x19, 0xd4, 0x34, 0xc7, 0x31, + 0x4f, 0x83, 0xce, 0xe3, 0x7b, 0x2b, 0x52, 0xb7, 0x77, 0x28, 0x56, 0xcc, 0xd0, 0x55, 0x2d, 0xfa, + 0x08, 0xb7, 0x6d, 0x0a, 0xc9, 0x6d, 0x1b, 0x5a, 0xa7, 0xb4, 0x6d, 0xf3, 0x10, 0xea, 0xe4, 0x70, + 0xec, 0xa8, 0x93, 0xa9, 0xe9, 0x1b, 0x47, 0xb6, 0x23, 0x0e, 0x9f, 0xd6, 0xa2, 0x02, 0xdd, 0xc3, + 0xb1, 0xb3, 0x2b, 0xb0, 0xb8, 0x46, 0xa4, 0x2f, 0xd4, 0x81, 0x06, 0x5f, 0x56, 0xbb, 0x64, 0x64, + 0x92, 0xa1, 0x6f, 0xbb, 0x6c, 0x78, 0xab, 0xf7, 0x5b, 0x52, 0xef, 0x51, 0x02, 0x1c, 0xe0, 0xf1, + 0xa2, 0x1b, 0xfb, 0x46, 0x37, 0xa1, 0x68, 0x58, 0x23, 0x9b, 0xf9, 0xad, 0x58, 0x90, 0x4b, 0xe5, + 0xe4, 0xbb, 0x46, 0x8c, 0x80, 0xba, 0x73, 0xdf, 0x98, 0x10, 0xd7, 0x63, 0x8e, 0x2b, 0xe6, 0xce, + 0x07, 0x0c, 0x8e, 0x05, 0x9e, 0x06, 0xcf, 0xbe, 0xab, 0x59, 0x1e, 0xdb, 0x5e, 0x29, 0x27, 0xf9, + 0x0e, 0x02, 0x14, 0x8e, 0xa8, 0x68, 0x3f, 0xf3, 0x86, 0xf0, 0xbd, 0x23, 0xe6, 0xdb, 0x62, 0xfd, + 0xcc, 0x5a, 0x21, 0x9c, 0x3e, 0xdf, 0x4a, 0xe0, 0x1f, 0x68, 0x0b, 0x9a, 0x63, 0x57, 0x1b, 0x92, + 0xd1, 0xd4, 0x54, 0x5d, 0xe2, 0xd1, 0x69, 0x84, 0xf9, 0xbe, 0xea, 0xfd, 0x4b, 0xd2, 0x7c, 0x23, + 0x28, 0x30, 0x27, 0xc0, 0x8d, 0x71, 0x1c, 0x80, 0xee, 0x42, 0x45, 0x1b, 0x19, 0xaa, 0xa7, 0x8d, + 0x0c, 0xaf, 0x55, 0x65, 0xb6, 0xb5, 0x24, 0x0d, 0xf2, 0xc8, 0x38, 0xd0, 0x46, 0x06, 0x2e, 0x6b, + 0xfc, 0x8f, 0xa7, 0xfc, 0x7d, 0x0e, 0xaa, 0xd2, 0xd0, 0xa3, 0x4f, 0xa1, 0x62, 0x58, 0x6a, 0x2c, + 0x8e, 0x3c, 0x6b, 0xca, 0x2e, 0x1b, 0x96, 0x28, 0xf8, 0x7d, 0xa8, 0x93, 0x13, 0xda, 0x05, 0x71, + 0x0d, 0x3b, 0xab, 0x70, 0x8d, 0x17, 0x88, 0x18, 0x18, 0x13, 0x99, 0x41, 0xe1, 0x7c, 0x06, 0xbc, + 0x80, 0xb0, 0xfe, 0xdf, 0x85, 0x2a, 0xf7, 0x61, 0x3b, 0xc6, 0xc4, 0x98, 0xb9, 0x13, 0x88, 0xae, + 0x43, 0x6d, 0xa2, 0x9d, 0x44, 0x5e, 0x90, 0xdb, 0x5e, 0x75, 0xa2, 0x9d, 0x84, 0xce, 0xf2, 0x63, + 0x58, 0xf3, 0xc4, 0x11, 0x95, 0xea, 0x1f, 0xb9, 0xc4, 0x3b, 0xb2, 0x4d, 0x5d, 0x75, 0x86, 0xbe, + 0xf0, 0x65, 0x2b, 0x01, 0x76, 0x10, 0x20, 0xfb, 0x43, 0x5f, 0xf9, 0xcf, 0x79, 0x28, 0x07, 0x36, + 0x81, 0xbe, 0x03, 0x75, 0x6d, 0xea, 0x1f, 0xa9, 0x8e, 0xe6, 0x79, 0x2f, 0x6d, 0x57, 0x17, 0xde, + 0xbd, 0x46, 0x81, 0x7d, 0x01, 0x43, 0xd7, 0xa0, 0xaa, 0x13, 0x6f, 0xe8, 0x1a, 0x8e, 0x74, 0xd6, + 0x24, 0x83, 0xd0, 0x25, 0x28, 0x9b, 0xf6, 0x50, 0x33, 0x55, 0xcd, 0x0b, 0xb6, 0x93, 0xd8, 0x77, + 0x87, 0x79, 0xf4, 0x70, 0xae, 0x0a, 0xb6, 0xbb, 0x8a, 0x8c, 0x43, 0x23, 0x80, 0x77, 0xc4, 0x0e, + 0xe1, 0x3a, 0x2c, 0x38, 0x84, 0xb8, 0x94, 0x09, 0xdf, 0x35, 0x2a, 0xd1, 0xcf, 0x8e, 0x47, 0xe7, + 0x61, 0x86, 0x18, 0xbb, 0xf6, 0xd4, 0x61, 0x96, 0x53, 0xc1, 0x15, 0x0a, 0xd9, 0xa6, 0x00, 0x3a, + 0x0f, 0x33, 0x34, 0xf3, 0x66, 0x7c, 0x87, 0xbc, 0x4c, 0x01, 0xec, 0xe0, 0x6a, 0x0f, 0x96, 0x5c, + 0x32, 0xb1, 0x8f, 0x89, 0xea, 0xb8, 0xc6, 0xb1, 0xe6, 0xd3, 0xb9, 0x9c, 0x19, 0xc9, 0xe2, 0x7d, + 0x25, 0xed, 0x24, 0xee, 0x62, 0x46, 0xdb, 0xe7, 0xa4, 0x1d, 0x0f, 0x37, 0xdc, 0x38, 0x80, 0x4e, + 0xa3, 0xdc, 0x72, 0x46, 0xa6, 0xe6, 0xa8, 0xba, 0x36, 0x71, 0x0c, 0x6b, 0xcc, 0xec, 0xa7, 0x8c, + 0x9b, 0x0c, 0xf3, 0xc4, 0xd4, 0x9c, 0x2d, 0x0e, 0x47, 0x37, 0x60, 0xd1, 0x23, 0x96, 0xae, 0x8a, + 0x83, 0x39, 0xff, 0x94, 0xd9, 0x4a, 0x1d, 0xd7, 0x29, 0x74, 0x33, 0x00, 0xd2, 0x06, 0x8a, 0xb3, + 0x8b, 0xa1, 0xe6, 0x30, 0x7b, 0xa8, 0xe1, 0x0a, 0x87, 0x6c, 0x6a, 0xac, 0x81, 0xbc, 0x7b, 0x29, + 0xb6, 0xc6, 0xb0, 0xbc, 0xbf, 0x29, 0x72, 0x11, 0xf2, 0x86, 0xce, 0x02, 0x85, 0x0a, 0xce, 0x1b, + 0x3a, 0xfa, 0x1c, 0xea, 0xe2, 0xc4, 0xc0, 0xa4, 0x0a, 0xe6, 0xb5, 0x16, 0x93, 0x53, 0x97, 0xa4, + 0x7e, 0xb8, 0xe6, 0x44, 0x1f, 0x1e, 0x55, 0x07, 0x31, 0x8e, 0x62, 0xa4, 0x1a, 0x5c, 0x1d, 0xf8, + 0x60, 0x8a, 0x61, 0x7a, 0x1f, 0x50, 0x14, 0x7d, 0x58, 0x3e, 0x71, 0x47, 0xda, 0x90, 0xb0, 0x40, + 0xa2, 0x82, 0x97, 0xc2, 0x20, 0x24, 0x40, 0xd0, 0xa8, 0xef, 0xd8, 0x1d, 0xb1, 0x0d, 0xf7, 0x0a, + 0xdb, 0x21, 0x43, 0xd7, 0xa0, 0xa6, 0x99, 0xa6, 0xfd, 0x52, 0xa5, 0x8a, 0xab, 0x79, 0x2d, 0xc4, + 0x0f, 0x35, 0x18, 0x6c, 0xff, 0xa5, 0xd5, 0xf1, 0xd0, 0x3b, 0xd0, 0x70, 0x79, 0x58, 0xad, 0x06, + 0x1a, 0xb1, 0xcc, 0x7a, 0xb8, 0x2e, 0xc0, 0x7d, 0xa6, 0x18, 0xca, 0x3d, 0x68, 0x24, 0x06, 0x0c, + 0x95, 0xa1, 0xb8, 0xb7, 0xbf, 0xd7, 0xe5, 0x87, 0xc9, 0x9d, 0x9d, 0x9d, 0x66, 0x0e, 0x55, 0x61, + 0x01, 0x77, 0xfb, 0x3b, 0x9d, 0xcd, 0x6e, 0x33, 0xaf, 0x7c, 0x09, 0x35, 0xd9, 0xc1, 0xa3, 0x16, + 0x2c, 0xf0, 0xed, 0xcd, 0xe0, 0xfe, 0x49, 0xf0, 0xc9, 0x2c, 0x50, 0x50, 0xa9, 0xbe, 0x6f, 0x86, + 0x16, 0x28, 0x60, 0x03, 0xdf, 0x54, 0x7e, 0x3f, 0x07, 0x8b, 0x71, 0x7f, 0x4f, 0x8d, 0x32, 0x31, + 0x45, 0xa8, 0x43, 0xd3, 0x08, 0x56, 0x16, 0x65, 0xbc, 0x12, 0x9f, 0x0f, 0x36, 0x19, 0x0e, 0x3d, + 0x84, 0x76, 0xba, 0xd4, 0xd4, 0xa3, 0x71, 0x50, 0x78, 0x6c, 0xb9, 0x9e, 0x2c, 0xc9, 0xf0, 0x3d, + 0x5d, 0xf9, 0xab, 0x12, 0x54, 0xc2, 0xd9, 0xe3, 0xbf, 0xc1, 0xa4, 0xef, 0x42, 0x79, 0x42, 0x3c, + 0x4f, 0x1b, 0x8b, 0xe0, 0x2c, 0x36, 0xdd, 0xee, 0x0a, 0x0c, 0x0e, 0x69, 0x32, 0x5d, 0xc0, 0xfc, + 0xb9, 0x2e, 0xa0, 0x74, 0x86, 0x0b, 0x58, 0x38, 0xd3, 0x05, 0x94, 0x13, 0x2e, 0xe0, 0x16, 0x94, + 0xbe, 0x9d, 0x92, 0x29, 0xf1, 0xc4, 0x34, 0x27, 0xcd, 0xa4, 0x5f, 0x31, 0x38, 0x16, 0x78, 0x74, + 0x3b, 0xcb, 0x59, 0x70, 0x8b, 0xbd, 0xa0, 0x23, 0xa8, 0x5e, 0xd8, 0x11, 0xd4, 0xb2, 0x1c, 0x01, + 0x3b, 0x6b, 0xf3, 0x3c, 0xc3, 0xb6, 0xf8, 0xae, 0x05, 0xb3, 0xeb, 0x3a, 0xae, 0x09, 0x20, 0x1f, + 0xe1, 0x4f, 0x60, 0xcd, 0x9b, 0x3a, 0x74, 0x4a, 0x21, 0x3a, 0x75, 0x09, 0xda, 0xa1, 0x61, 0x1a, + 0x3e, 0x0d, 0xa7, 0x16, 0xd9, 0x3e, 0xff, 0x6a, 0x88, 0xdd, 0x94, 0x90, 0xb4, 0x8f, 0x68, 0xe0, + 0xc3, 0xf9, 0x72, 0xc3, 0x2e, 0x1f, 0x8e, 0x1d, 0xce, 0xf3, 0xfb, 0x50, 0xd5, 0xf4, 0x89, 0x11, + 0x54, 0xdb, 0x64, 0x0e, 0xf2, 0x4a, 0x46, 0x74, 0x72, 0xb7, 0x43, 0xc9, 0x78, 0xa0, 0x02, 0x5a, + 0xf8, 0x9f, 0x46, 0x75, 0xc1, 0xa9, 0x21, 0xb3, 0xf5, 0x3a, 0x0e, 0xbf, 0x29, 0x4e, 0x1b, 0x0e, + 0x89, 0xe3, 0x13, 0x5d, 0x18, 0x7b, 0xf8, 0x4d, 0x57, 0x73, 0x5a, 0x74, 0x05, 0x6c, 0x59, 0xb8, + 0x82, 0xe8, 0xf2, 0xd7, 0x32, 0xcc, 0xdb, 0x53, 0x5f, 0xfd, 0xb6, 0xb5, 0xc2, 0xcf, 0x8d, 0xec, + 0xa9, 0xff, 0x15, 0x5d, 0x40, 0x8d, 0x4c, 0xdb, 0xf1, 0x5a, 0xab, 0x0c, 0xc8, 0x3f, 0x94, 0xdb, + 0x00, 0x91, 0x70, 0xa8, 0x04, 0xf9, 0x67, 0x7d, 0x7e, 0x20, 0xbe, 0xb5, 0xff, 0xa3, 0xbd, 0x66, + 0x0e, 0x01, 0x94, 0xfa, 0x4f, 0x5e, 0xa8, 0x9b, 0x83, 0x66, 0x5e, 0xf9, 0x2d, 0x28, 0x07, 0x9a, + 0x8a, 0xde, 0x97, 0x44, 0xe7, 0xb1, 0xc4, 0x52, 0x4a, 0x9f, 0xa5, 0xd6, 0xdc, 0x80, 0xa2, 0x17, + 0x9c, 0x52, 0x67, 0x92, 0x32, 0xb4, 0xf2, 0x8b, 0x1c, 0x2c, 0x08, 0x08, 0x52, 0xa0, 0xb6, 0xb7, + 0x3f, 0xe8, 0x3d, 0xe9, 0x6d, 0x76, 0x06, 0xbd, 0xfd, 0x3d, 0x56, 0x4b, 0x11, 0xc7, 0x60, 0x34, + 0x10, 0x78, 0xd6, 0xdf, 0xea, 0x0c, 0xba, 0x8c, 0x71, 0x11, 0x8b, 0x2f, 0xba, 0x6a, 0xd9, 0xef, + 0x77, 0xf7, 0xc4, 0xcd, 0x0a, 0xf6, 0x1f, 0xbd, 0x05, 0x95, 0x2f, 0xbb, 0xdd, 0x7e, 0x67, 0xa7, + 0xf7, 0xbc, 0xcb, 0x4c, 0xb0, 0x88, 0x23, 0x00, 0x75, 0x69, 0xb8, 0xfb, 0x04, 0x77, 0x0f, 0x9e, + 0x32, 0x33, 0x2b, 0xe2, 0xe0, 0x93, 0x96, 0xdb, 0xea, 0x1d, 0x6c, 0x76, 0xf0, 0x56, 0x77, 0x8b, + 0x19, 0x58, 0x11, 0x47, 0x00, 0xda, 0xab, 0x83, 0xfd, 0x41, 0x67, 0x87, 0x99, 0x57, 0x11, 0xf3, + 0x0f, 0xe5, 0x01, 0x94, 0xb8, 0x95, 0x50, 0xbc, 0x61, 0x39, 0x53, 0x5f, 0x44, 0x2a, 0xfc, 0x83, + 0xca, 0x6d, 0x4f, 0x7d, 0x0a, 0x16, 0xcb, 0x03, 0xfe, 0xa5, 0x10, 0x28, 0xf1, 0x38, 0x15, 0xdd, + 0x85, 0x12, 0x0d, 0xbd, 0x8d, 0xb1, 0xe8, 0xdd, 0xb5, 0x64, 0x24, 0xbb, 0xc9, 0xb0, 0x58, 0x50, + 0xa1, 0xf7, 0xe2, 0x27, 0xab, 0xab, 0x49, 0xf2, 0xd8, 0xd9, 0xea, 0x2f, 0x72, 0x50, 0x93, 0xb9, + 0x50, 0x13, 0x1a, 0xda, 0x96, 0x45, 0x86, 0xbe, 0xea, 0x12, 0xdf, 0x3d, 0x0d, 0x3a, 0x5b, 0x00, + 0x31, 0x85, 0x51, 0x5b, 0x60, 0xc1, 0x52, 0x78, 0xcc, 0x5f, 0xc4, 0x65, 0x0a, 0xa0, 0x9c, 0xe8, + 0x04, 0xf7, 0x0d, 0x21, 0x8e, 0x66, 0x1a, 0xc7, 0x44, 0x4d, 0xdc, 0x6c, 0x59, 0x0a, 0x31, 0x3d, + 0x81, 0x40, 0x5b, 0x70, 0x65, 0x62, 0x58, 0xc6, 0x64, 0x3a, 0x51, 0x43, 0xbd, 0xa5, 0x71, 0x5f, + 0x54, 0x94, 0x8f, 0xd0, 0x5b, 0x82, 0xaa, 0x23, 0x13, 0x05, 0x5c, 0x94, 0x9f, 0xe7, 0xa1, 0x2a, + 0x35, 0xef, 0x7f, 0x69, 0x33, 0xd8, 0xe6, 0x0b, 0x19, 0xdb, 0xbe, 0xa1, 0x51, 0xe7, 0x14, 0x09, + 0xc7, 0x15, 0x11, 0x45, 0xb8, 0xa7, 0x81, 0x98, 0xd1, 0x45, 0x0c, 0xae, 0x90, 0x59, 0x17, 0x31, + 0xb8, 0x42, 0x86, 0xdf, 0xca, 0x7f, 0xe4, 0xa0, 0x12, 0xae, 0x6b, 0xd2, 0x51, 0x4b, 0x2e, 0x23, + 0x6a, 0xb9, 0x0c, 0xc0, 0x89, 0xa4, 0x43, 0x68, 0x1e, 0x55, 0xf5, 0x05, 0x8f, 0x89, 0x3f, 0x55, + 0x75, 0xc3, 0x1b, 0xda, 0xc7, 0xc4, 0x3d, 0x15, 0xfb, 0x13, 0xb5, 0x89, 0x3f, 0xdd, 0x0a, 0x60, + 0x34, 0x22, 0xa0, 0xb3, 0x2a, 0xed, 0xcf, 0x89, 0xad, 0x07, 0x07, 0xa2, 0x55, 0x01, 0xdb, 0xb5, + 0x75, 0xba, 0x22, 0x5f, 0x14, 0x91, 0x5c, 0x7c, 0xa6, 0xab, 0x73, 0x68, 0x27, 0xfb, 0xb2, 0x4a, + 0x29, 0xb8, 0x18, 0x12, 0x5c, 0x56, 0xa1, 0x13, 0xa1, 0x3f, 0x74, 0xd4, 0x89, 0xe7, 0x89, 0x88, + 0xb6, 0xe4, 0x0f, 0x9d, 0x5d, 0xcf, 0x53, 0x1e, 0x41, 0x55, 0x5a, 0x9b, 0xa1, 0xbb, 0xb0, 0x2c, + 0x2f, 0xe4, 0xe2, 0xb1, 0xc6, 0x92, 0xb4, 0x70, 0xe3, 0x81, 0x86, 0xf2, 0xef, 0x39, 0x68, 0x24, + 0x56, 0x67, 0x67, 0x87, 0x40, 0x62, 0x8d, 0x17, 0xa9, 0x58, 0x1d, 0x57, 0x05, 0x8c, 0x0d, 0xdf, + 0x55, 0xa8, 0x1e, 0x11, 0xd3, 0x21, 0xae, 0x6a, 0x5b, 0x66, 0xd0, 0x6d, 0xc0, 0x41, 0xfb, 0x96, + 0xc9, 0xa6, 0x34, 0x9d, 0x8c, 0x88, 0xeb, 0x6a, 0x26, 0x67, 0xc2, 0xaf, 0xc9, 0xd4, 0x02, 0x20, + 0xe3, 0x72, 0x0f, 0x56, 0xd8, 0xe5, 0x12, 0x71, 0x75, 0x4d, 0x0d, 0xe4, 0xe1, 0x9b, 0x27, 0xcb, + 0x32, 0xae, 0x2b, 0x64, 0x7b, 0x0f, 0x96, 0x4c, 0xdb, 0x1a, 0x9b, 0xec, 0xf2, 0x4a, 0x40, 0x5f, + 0xe2, 0xd3, 0x6f, 0x88, 0x10, 0xc4, 0xca, 0x47, 0xb0, 0xbe, 0xeb, 0x24, 0xda, 0x2d, 0xfc, 0xc5, + 0xcc, 0xd6, 0x2b, 0x7f, 0x9b, 0x83, 0xb5, 0x54, 0x29, 0x6e, 0x9d, 0xb3, 0xbb, 0x4c, 0x9e, 0x07, + 0xf9, 0x46, 0x75, 0x34, 0x73, 0xc4, 0xe7, 0x3a, 0xd1, 0x55, 0xd2, 0x5c, 0xf7, 0x3e, 0x2c, 0x8b, + 0xcb, 0x2f, 0xae, 0x71, 0xa8, 0x86, 0x6c, 0x8a, 0xc1, 0xbd, 0x68, 0x7d, 0x7f, 0xc4, 0x76, 0x54, + 0xc2, 0x89, 0xa8, 0x21, 0x91, 0xb3, 0x39, 0x89, 0xf7, 0x57, 0x2d, 0x20, 0x3d, 0xa0, 0x43, 0xfe, + 0x07, 0x39, 0x58, 0x4a, 0x35, 0x03, 0x7d, 0x37, 0xe1, 0x94, 0xaf, 0x4b, 0xf3, 0x58, 0x76, 0x4f, + 0x85, 0xfe, 0xf9, 0x41, 0xdc, 0x3f, 0x5f, 0x3b, 0xa3, 0x64, 0xcc, 0x55, 0x77, 0xa0, 0x2e, 0x56, + 0xf6, 0xa2, 0xeb, 0x67, 0xad, 0x7d, 0xa5, 0xde, 0xcd, 0xc7, 0x87, 0xe4, 0x0f, 0x73, 0x50, 0x13, + 0x3c, 0xc2, 0x6b, 0x5c, 0xaf, 0xc6, 0x82, 0x2a, 0xac, 0x6f, 0xfb, 0xd4, 0x11, 0x88, 0xcb, 0x7f, + 0xcc, 0xf4, 0x18, 0xa8, 0xcf, 0x36, 0x2b, 0x6f, 0xc0, 0xa2, 0x20, 0x90, 0x77, 0x20, 0xeb, 0xb8, + 0xce, 0x69, 0x82, 0xfd, 0xc7, 0x7f, 0xca, 0xc3, 0x86, 0xb0, 0x44, 0x93, 0x5f, 0x63, 0xdd, 0x67, + 0x91, 0x73, 0x30, 0x0f, 0xdd, 0x01, 0xa4, 0x99, 0x2f, 0xb5, 0x53, 0x8f, 0xc6, 0x7c, 0x8e, 0xe6, + 0x12, 0x75, 0x12, 0xdd, 0x71, 0xe7, 0x98, 0x4d, 0x8e, 0xd8, 0x25, 0x3a, 0xba, 0x07, 0xab, 0xc6, + 0xd8, 0xb2, 0x5d, 0x1a, 0x71, 0x32, 0xc9, 0x54, 0x93, 0x58, 0x63, 0xff, 0x28, 0x38, 0x8b, 0xe3, + 0xc8, 0x8e, 0x47, 0x45, 0xdc, 0x61, 0x18, 0xba, 0x66, 0x08, 0xf6, 0x89, 0xc3, 0x2a, 0x98, 0xc1, + 0xb3, 0x35, 0x03, 0xd7, 0xae, 0xf5, 0x80, 0x42, 0x54, 0xc5, 0x04, 0x76, 0x7b, 0x74, 0x95, 0x78, + 0x29, 0x54, 0x3c, 0xd5, 0xb0, 0xb4, 0xa1, 0x4f, 0xbd, 0x1a, 0x2b, 0x1e, 0xec, 0xb8, 0xae, 0x87, + 0x04, 0x3d, 0x81, 0x67, 0xa5, 0x99, 0xf3, 0xe2, 0x9d, 0xa9, 0x6a, 0xc6, 0xd8, 0x09, 0x36, 0x38, + 0xc5, 0xb5, 0x7d, 0x63, 0xec, 0xa0, 0xcf, 0xa1, 0x2d, 0x1a, 0x63, 0x91, 0x13, 0x5f, 0x65, 0xfb, + 0xcd, 0x63, 0x47, 0x9d, 0x10, 0xdf, 0x35, 0x86, 0xc2, 0x46, 0xd7, 0x38, 0xc5, 0x1e, 0x39, 0xf1, + 0x9f, 0xda, 0x4e, 0x6f, 0xec, 0xec, 0x32, 0xac, 0xf2, 0x8f, 0x79, 0x68, 0x67, 0x76, 0x2b, 0x1f, + 0xef, 0xff, 0xeb, 0xd5, 0xd7, 0xea, 0xd5, 0x3f, 0xc9, 0xc1, 0x6a, 0x66, 0xaf, 0xa2, 0x47, 0x09, + 0x3f, 0x70, 0x23, 0xb5, 0x07, 0x98, 0xa5, 0xdd, 0xa1, 0x2f, 0xf8, 0x3c, 0xee, 0x0b, 0xde, 0x3e, + 0xa7, 0x74, 0xcc, 0x1f, 0xdc, 0x87, 0xb5, 0x67, 0x1e, 0x61, 0x2b, 0x71, 0xc7, 0x64, 0x77, 0xf9, + 0xbd, 0x73, 0x7d, 0xf2, 0x3d, 0x58, 0x4d, 0x96, 0x39, 0xc7, 0x23, 0x2b, 0x3f, 0x05, 0xa0, 0x2b, + 0x7e, 0xc1, 0xfa, 0x36, 0x2c, 0xf1, 0xcd, 0x87, 0x89, 0xe0, 0x41, 0x97, 0x78, 0xbc, 0x44, 0x83, + 0x21, 0x02, 0xde, 0x1d, 0xb6, 0x1d, 0x32, 0xd1, 0x4e, 0x58, 0x48, 0x14, 0x1c, 0x72, 0xb0, 0xa9, + 0x4b, 0x00, 0x59, 0xed, 0xca, 0x4f, 0xa0, 0xd2, 0x0d, 0x97, 0x51, 0x6f, 0x9c, 0xbb, 0x0a, 0x45, + 0xca, 0x1d, 0xdd, 0x49, 0x0c, 0xd3, 0x4a, 0x7c, 0xbf, 0x3a, 0x31, 0x2a, 0xb3, 0xef, 0x26, 0x86, + 0xa2, 0x06, 0x83, 0x70, 0x0f, 0xa0, 0x17, 0xf5, 0x4e, 0x4a, 0xa6, 0x5c, 0x86, 0x4c, 0x1f, 0x42, + 0xa5, 0x17, 0xb6, 0xf8, 0x42, 0x25, 0x54, 0x28, 0xf6, 0xce, 0x69, 0x45, 0xef, 0x55, 0x5a, 0xd1, + 0x4b, 0xb6, 0xe2, 0x97, 0x39, 0x68, 0x26, 0xf5, 0x02, 0x7d, 0x96, 0xa8, 0x4d, 0x9a, 0xa8, 0xb2, + 0xf5, 0x2e, 0xac, 0xf9, 0x93, 0x78, 0xcd, 0x57, 0x67, 0x17, 0x94, 0xa5, 0x40, 0x0a, 0x14, 0xc9, + 0xe1, 0xd8, 0x49, 0xbf, 0xc7, 0xa1, 0xbd, 0x8e, 0x19, 0x8e, 0xd2, 0x18, 0x94, 0x26, 0xf5, 0xe6, + 0xa5, 0xc7, 0x68, 0x28, 0x4e, 0x79, 0x2c, 0x66, 0x96, 0x81, 0xe6, 0x8e, 0x89, 0xbf, 0x4b, 0x26, + 0x87, 0xc4, 0xf5, 0x8e, 0x0c, 0x69, 0x90, 0xe2, 0x11, 0x55, 0x2e, 0x1d, 0x51, 0x29, 0x1d, 0xe1, + 0x46, 0x93, 0x3c, 0xc2, 0x51, 0x3b, 0x9f, 0x45, 0xe8, 0x34, 0x92, 0x3c, 0xce, 0x75, 0x1a, 0xd9, + 0x82, 0x5f, 0xd4, 0x69, 0x64, 0x8a, 0x1c, 0x8c, 0xf4, 0x4f, 0xe1, 0xca, 0x8e, 0x6d, 0x8d, 0x77, + 0x68, 0x04, 0xf4, 0x8a, 0x01, 0xdd, 0x05, 0xc2, 0x59, 0xe5, 0x57, 0x39, 0xb8, 0x3c, 0x8b, 0xff, + 0x6f, 0x32, 0xf4, 0xbb, 0x0d, 0x4b, 0x6c, 0x03, 0x2b, 0x26, 0x1f, 0x8f, 0x3b, 0x1a, 0x14, 0x81, + 0xa5, 0x90, 0xfb, 0x21, 0xb4, 0x53, 0xb4, 0xae, 0x4a, 0x4e, 0x1c, 0xc3, 0x0d, 0x43, 0xe6, 0xf5, + 0x44, 0x21, 0xb7, 0xcb, 0xd1, 0xca, 0x9f, 0xe6, 0xa0, 0x35, 0xab, 0x81, 0xe8, 0x07, 0x89, 0x71, + 0x95, 0x5e, 0x26, 0x9c, 0xdd, 0xe9, 0xe1, 0xd0, 0x3e, 0x8a, 0x0f, 0xed, 0xcd, 0xf3, 0x19, 0xc4, + 0x46, 0xf7, 0x9f, 0x8b, 0xb0, 0x20, 0xe2, 0x3b, 0xf4, 0x25, 0x2c, 0x4f, 0x1c, 0x35, 0x75, 0xd8, + 0xc4, 0x25, 0xdb, 0x38, 0x23, 0xe8, 0xc4, 0x4b, 0x93, 0x54, 0xb8, 0xfb, 0x41, 0xd8, 0x32, 0x2e, + 0xd8, 0x7a, 0xea, 0xb4, 0x29, 0xd1, 0x90, 0xe4, 0x49, 0x64, 0xe1, 0xc2, 0x27, 0x91, 0x3f, 0x82, + 0xf5, 0x60, 0x49, 0x26, 0x26, 0x3f, 0xd5, 0x76, 0x82, 0x53, 0xe4, 0x84, 0x3b, 0xc9, 0x9c, 0x24, + 0xf1, 0xaa, 0x9b, 0x39, 0x55, 0x3f, 0x05, 0x34, 0xf5, 0x48, 0x34, 0xb5, 0x70, 0x7f, 0x3b, 0x9f, + 0x3c, 0x7f, 0x4a, 0xba, 0x28, 0xdc, 0x9c, 0x26, 0x3d, 0x63, 0xea, 0x8c, 0xa0, 0x94, 0x6c, 0xdd, + 0xec, 0x33, 0x82, 0xb0, 0x79, 0x3e, 0x33, 0x53, 0x75, 0x12, 0xda, 0xa9, 0x38, 0xa8, 0xbc, 0x7a, + 0x8e, 0x39, 0x8b, 0xe6, 0xa5, 0x9c, 0x8a, 0x06, 0x1b, 0x74, 0xdd, 0xa6, 0xf2, 0x15, 0x5d, 0x6a, + 0xdc, 0xf9, 0xc1, 0xa6, 0x72, 0xbe, 0x42, 0xe1, 0x96, 0x39, 0x03, 0xa3, 0x4c, 0xa1, 0xc4, 0x1b, + 0x86, 0x36, 0xa0, 0x62, 0x38, 0x6a, 0xec, 0x4a, 0x43, 0xd9, 0x70, 0x04, 0xf2, 0x1d, 0x68, 0x4c, + 0x34, 0xef, 0x1b, 0x11, 0x2c, 0xaa, 0x13, 0xc3, 0x12, 0xae, 0xa2, 0x4e, 0xc1, 0x3c, 0x50, 0xdc, + 0x35, 0xac, 0x14, 0x9d, 0x76, 0x22, 0x96, 0x13, 0x32, 0x9d, 0x76, 0xa2, 0xfc, 0x71, 0x0e, 0x20, + 0xba, 0x4f, 0xfa, 0x6b, 0x5e, 0xfa, 0xa5, 0x30, 0xd3, 0xf0, 0x7c, 0xf6, 0x6c, 0xa9, 0x82, 0xd9, + 0x7f, 0x76, 0x8f, 0x31, 0x5a, 0xad, 0x24, 0xef, 0x31, 0x32, 0x0c, 0x0e, 0x29, 0x94, 0x6d, 0x28, + 0xef, 0x6a, 0xfe, 0xf0, 0x88, 0x0a, 0x73, 0x33, 0x26, 0x8c, 0x34, 0xc7, 0x32, 0x8a, 0x73, 0xee, + 0x1f, 0x3f, 0x87, 0x5a, 0x2c, 0x78, 0xbe, 0x1b, 0x63, 0x26, 0xe9, 0xa4, 0x4c, 0x25, 0xf1, 0x5c, + 0x83, 0x92, 0x14, 0x90, 0xd7, 0xb1, 0xf8, 0x52, 0xfe, 0xad, 0x08, 0xb0, 0x69, 0x5b, 0xba, 0xc1, + 0x15, 0xff, 0x1e, 0x88, 0x17, 0x2f, 0x6a, 0x74, 0x89, 0x17, 0x25, 0x24, 0x3d, 0x20, 0x3e, 0xae, + 0x70, 0x2a, 0xda, 0xac, 0x4f, 0xa0, 0x16, 0x9e, 0x39, 0xd0, 0x42, 0xf9, 0x99, 0x85, 0xc2, 0xab, + 0x34, 0xb4, 0xd8, 0xf7, 0x60, 0x31, 0xb1, 0x52, 0x28, 0x24, 0xb7, 0x2c, 0xe5, 0xa6, 0xe0, 0x9a, + 0x26, 0x37, 0xff, 0x3e, 0x54, 0x83, 0xd2, 0xb4, 0xce, 0xe2, 0x6c, 0x41, 0x79, 0x31, 0x5a, 0xe3, + 0xa7, 0xe1, 0x53, 0x3e, 0xff, 0x94, 0x95, 0x9a, 0x9f, 0x59, 0xaa, 0x16, 0x12, 0xd2, 0x82, 0x5f, + 0xc0, 0x12, 0x5d, 0x06, 0xc4, 0x0b, 0x97, 0x66, 0x16, 0x6e, 0x90, 0x13, 0x7f, 0x53, 0x2e, 0x7f, + 0x15, 0xaa, 0xae, 0xf3, 0x8d, 0x41, 0xed, 0x6b, 0x6a, 0xfa, 0xcc, 0x76, 0xe7, 0x31, 0xb8, 0xfc, + 0xb9, 0xc1, 0xd4, 0xf4, 0xd1, 0x23, 0x80, 0xe8, 0x0d, 0x81, 0x38, 0x32, 0x95, 0x4e, 0x04, 0xa2, + 0xf1, 0x11, 0x66, 0x4e, 0x87, 0xb5, 0x12, 0x3e, 0x31, 0x40, 0x8f, 0x61, 0xd9, 0xa4, 0x26, 0x9e, + 0x90, 0xb0, 0x32, 0x53, 0xc2, 0x25, 0x46, 0x2e, 0xcb, 0xa8, 0x1c, 0x41, 0x25, 0xe4, 0x8d, 0x96, + 0xa1, 0x81, 0xf7, 0x9f, 0x0d, 0xba, 0xea, 0xe0, 0xeb, 0x7e, 0x57, 0x15, 0x87, 0x7c, 0xeb, 0xb0, + 0x2c, 0x01, 0x7b, 0x7b, 0x83, 0x2e, 0xde, 0xeb, 0xec, 0x34, 0x73, 0x09, 0x44, 0xf7, 0x85, 0x40, + 0xe4, 0xd1, 0x0a, 0x34, 0x25, 0xc4, 0xce, 0xfe, 0x66, 0x67, 0xa7, 0x59, 0x50, 0x46, 0xd0, 0x08, + 0x6b, 0xee, 0xf0, 0x47, 0xa9, 0xf7, 0x62, 0xca, 0x7c, 0x59, 0x6e, 0x79, 0x8c, 0x50, 0xd2, 0xe7, + 0x6b, 0x50, 0x0d, 0x5a, 0x6b, 0x84, 0xcf, 0x2e, 0x64, 0x90, 0xb2, 0x07, 0x95, 0x5d, 0xa2, 0x8b, + 0x1a, 0xde, 0x8b, 0xd5, 0xb0, 0x2e, 0x9f, 0x24, 0xe8, 0x29, 0xde, 0x2b, 0x30, 0x7f, 0xac, 0x99, + 0xd3, 0xe0, 0x55, 0x1a, 0xff, 0x50, 0x54, 0x68, 0x74, 0xbc, 0xbe, 0x4b, 0x1c, 0x62, 0x05, 0x5c, + 0x9b, 0x50, 0xd0, 0x3c, 0x4b, 0x44, 0x74, 0xf4, 0x2f, 0x35, 0x33, 0x4a, 0xa1, 0x85, 0x5b, 0xf4, + 0xfc, 0x0b, 0x29, 0x50, 0xa7, 0x13, 0x8a, 0x49, 0x46, 0xbe, 0x3a, 0xb1, 0x3d, 0x5f, 0xc4, 0x25, + 0xd5, 0xa9, 0x47, 0x76, 0xc8, 0xc8, 0xdf, 0xb5, 0xd9, 0x55, 0xc5, 0xba, 0xb8, 0x1a, 0x26, 0xd8, + 0x9f, 0xf9, 0xc2, 0xc7, 0x23, 0xe6, 0x48, 0xc4, 0x3e, 0xec, 0xbf, 0x72, 0x13, 0x1a, 0x3b, 0x6c, + 0x93, 0xd5, 0x25, 0x23, 0xc1, 0x20, 0x6c, 0x88, 0x38, 0x46, 0xe0, 0x0d, 0xf9, 0x87, 0x02, 0x2c, + 0x70, 0x02, 0x2f, 0xba, 0x9d, 0xa2, 0xf1, 0xc7, 0xc7, 0x29, 0x47, 0xc9, 0x94, 0x82, 0x53, 0x8b, + 0xdb, 0x29, 0x82, 0xf7, 0xa7, 0x50, 0x89, 0x4e, 0xd8, 0xf2, 0xc9, 0x6b, 0x29, 0x89, 0x81, 0xc3, + 0x11, 0x2d, 0xba, 0x01, 0x85, 0x89, 0x08, 0xcc, 0x62, 0x2b, 0x8d, 0x70, 0x24, 0x30, 0xc5, 0xa3, + 0xcf, 0x00, 0xa8, 0x85, 0xf3, 0xfe, 0x16, 0x06, 0x7e, 0x29, 0xe6, 0x1b, 0xe4, 0xa1, 0x60, 0x76, + 0xce, 0x01, 0xe8, 0x0b, 0xa8, 0xc7, 0xcc, 0x55, 0xd8, 0xf9, 0x19, 0xd2, 0xd5, 0x64, 0x8b, 0x45, + 0xf7, 0x60, 0x41, 0xdc, 0xdd, 0x13, 0x46, 0x2e, 0xa9, 0x4b, 0x6c, 0x80, 0x70, 0x40, 0x47, 0x85, + 0x15, 0x5b, 0xde, 0x2e, 0x19, 0x89, 0xc9, 0xf9, 0x92, 0x3c, 0x7f, 0xc6, 0xc6, 0x25, 0xd8, 0x0d, + 0x77, 0xc9, 0x08, 0x3d, 0x86, 0x46, 0xc2, 0x76, 0xc5, 0xf4, 0x7b, 0x86, 0xb8, 0x8b, 0x71, 0xf3, + 0x55, 0x7e, 0x96, 0x83, 0x4a, 0x78, 0xbf, 0x3a, 0x9c, 0x3d, 0x72, 0xd2, 0x44, 0xf6, 0x31, 0xc0, + 0x30, 0x74, 0x22, 0x62, 0xb4, 0x56, 0xb2, 0x1c, 0x0c, 0x96, 0xe8, 0xd0, 0x7b, 0xb0, 0xc0, 0xd5, + 0xc2, 0x13, 0xa3, 0x25, 0x5f, 0x1c, 0xe2, 0x08, 0x1c, 0x50, 0x28, 0x5f, 0x41, 0x49, 0x44, 0x65, + 0x59, 0x02, 0xc4, 0x5f, 0x68, 0xe4, 0x2f, 0xf6, 0x42, 0xe3, 0x5f, 0x72, 0xd0, 0x4c, 0x5e, 0xf1, + 0x41, 0xb7, 0x62, 0x96, 0xbc, 0x92, 0xbc, 0x0c, 0x24, 0x99, 0xb1, 0xfc, 0x78, 0x39, 0x7f, 0x81, + 0xc7, 0xcb, 0x19, 0x09, 0x25, 0x62, 0xaf, 0x16, 0x8a, 0xe7, 0xbd, 0x5a, 0x40, 0x1f, 0xc0, 0x82, + 0x4e, 0x46, 0x1a, 0x75, 0xf2, 0xf3, 0x67, 0x19, 0x52, 0x40, 0xa5, 0xfc, 0x51, 0x0e, 0x0a, 0xd8, + 0xd6, 0xd0, 0x22, 0xe4, 0xb5, 0x60, 0x3d, 0x9f, 0xd7, 0x3c, 0xf4, 0x16, 0x88, 0x09, 0xd6, 0x24, + 0x41, 0x40, 0x14, 0x01, 0xa8, 0x93, 0x99, 0x68, 0x0c, 0x25, 0x6e, 0x52, 0xf2, 0x2f, 0xe9, 0x9a, + 0x60, 0x31, 0x76, 0x73, 0x34, 0xb8, 0xb0, 0x37, 0x7f, 0xf6, 0x3b, 0x4b, 0xe5, 0x26, 0xbf, 0x2d, + 0x69, 0x6b, 0xe7, 0xbd, 0x9d, 0xe4, 0xcf, 0xc4, 0x18, 0x61, 0xf4, 0x4c, 0xcc, 0xb5, 0xb5, 0x8c, + 0x67, 0x62, 0x94, 0x88, 0xa1, 0x14, 0x0f, 0x0a, 0xcf, 0xdd, 0x51, 0xa6, 0x76, 0x2c, 0x42, 0xde, + 0xe5, 0x0b, 0xb9, 0x1a, 0xce, 0xbb, 0x3a, 0x0b, 0x19, 0xf9, 0xcd, 0x2f, 0x97, 0x07, 0x5f, 0x35, + 0x5c, 0xe6, 0x00, 0xcc, 0x1e, 0xcf, 0x8b, 0x7b, 0x65, 0xae, 0xcf, 0xc6, 0xa4, 0x86, 0xcb, 0x1c, + 0x80, 0x7d, 0x71, 0x45, 0x87, 0xdf, 0x69, 0xca, 0x1b, 0xba, 0xf2, 0xcb, 0x1c, 0x94, 0xf8, 0x95, + 0xec, 0x54, 0x1f, 0x6f, 0x40, 0x25, 0xda, 0x6d, 0x14, 0x0f, 0xed, 0xdd, 0x60, 0x7b, 0xf1, 0x2a, + 0x54, 0x69, 0xb4, 0x47, 0x2c, 0x7e, 0x6a, 0x54, 0xe0, 0x53, 0x36, 0x07, 0xb1, 0x53, 0xa3, 0x77, + 0xa1, 0x29, 0x08, 0x84, 0x4f, 0x16, 0x0a, 0x52, 0xc1, 0x0d, 0x0e, 0xef, 0x04, 0xe0, 0xd8, 0x2d, + 0xcc, 0xf9, 0xc4, 0x2d, 0xcc, 0x3b, 0x99, 0x0b, 0x0d, 0x71, 0xb6, 0x92, 0x5c, 0x4c, 0x28, 0x7f, + 0x97, 0x83, 0x0a, 0xbb, 0x6e, 0xda, 0xb3, 0x46, 0xf6, 0x6f, 0xe4, 0x32, 0xee, 0x4d, 0x68, 0x58, + 0xd3, 0x89, 0x2a, 0xdd, 0xb2, 0x15, 0x67, 0x91, 0x8b, 0xd6, 0x74, 0x22, 0xdf, 0x52, 0xbe, 0x04, + 0x65, 0x4b, 0x6c, 0x44, 0x05, 0x47, 0xdf, 0x16, 0xdf, 0x83, 0xa2, 0x6b, 0x7f, 0x8a, 0x0a, 0xef, + 0x21, 0xf0, 0xc3, 0xc6, 0xaa, 0x35, 0x9d, 0x74, 0x04, 0x48, 0xf9, 0x1e, 0xbb, 0x95, 0x8f, 0x8d, + 0x43, 0xda, 0x90, 0x40, 0xdb, 0x82, 0xfb, 0x9a, 0xa9, 0x47, 0x49, 0x61, 0x93, 0xf9, 0x7d, 0x4d, + 0xe5, 0x11, 0xcb, 0x73, 0x13, 0x96, 0x16, 0x2a, 0x78, 0xd1, 0xe2, 0xb7, 0x37, 0xa1, 0x1c, 0xf4, + 0x10, 0x02, 0x28, 0x6d, 0xef, 0xec, 0x3f, 0xee, 0xec, 0x34, 0xe7, 0x50, 0x05, 0xe6, 0x79, 0x8c, + 0xc2, 0xee, 0x2f, 0x74, 0xb6, 0x7e, 0xa8, 0xf6, 0xf6, 0x9a, 0x79, 0x54, 0x85, 0x05, 0xfa, 0x7f, + 0xff, 0xd9, 0xa0, 0x59, 0x40, 0x0b, 0x50, 0x78, 0x8e, 0x9f, 0x34, 0x8b, 0xb7, 0x7d, 0xa8, 0x4a, + 0x6b, 0x08, 0x76, 0xe1, 0x01, 0x77, 0x9f, 0xf4, 0x5e, 0x34, 0xe7, 0x50, 0x0d, 0xca, 0x7b, 0xdd, + 0xde, 0xf6, 0xd3, 0xc7, 0xfb, 0xb8, 0x99, 0xa3, 0x25, 0x06, 0x9d, 0x6d, 0xc1, 0xe7, 0x40, 0xed, + 0x77, 0x06, 0x4f, 0x9b, 0x05, 0x54, 0x87, 0xca, 0xe6, 0xfe, 0xee, 0xee, 0xb3, 0xbd, 0xde, 0xe0, + 0xeb, 0x66, 0x11, 0x2d, 0x41, 0xbd, 0xfb, 0x62, 0xa0, 0x46, 0xa0, 0x79, 0x1a, 0x83, 0xed, 0x74, + 0xf0, 0x76, 0x57, 0x02, 0x96, 0x6e, 0xbf, 0x0b, 0x95, 0x70, 0xb1, 0xc0, 0x6e, 0x5d, 0xed, 0x7d, + 0x2d, 0x5f, 0xbf, 0x02, 0x28, 0xf5, 0xf6, 0x9e, 0x77, 0xf1, 0xa0, 0x99, 0xbf, 0x7d, 0x1b, 0x9a, + 0xc9, 0xa5, 0x00, 0x2a, 0x41, 0xbe, 0xfb, 0x55, 0x73, 0x8e, 0xfe, 0x6e, 0x77, 0x9b, 0x39, 0xfa, + 0xbb, 0xd3, 0x6d, 0xe6, 0x6f, 0x7f, 0x20, 0x4e, 0x3a, 0xc5, 0xd4, 0x1e, 0x5d, 0xec, 0xa2, 0xfd, + 0xb0, 0xb9, 0xd9, 0xed, 0x0f, 0x38, 0x73, 0xdc, 0xfd, 0x61, 0x77, 0x93, 0x32, 0x7f, 0x06, 0xcb, + 0x19, 0xa1, 0x19, 0x6d, 0x46, 0x28, 0xad, 0xda, 0xd9, 0xda, 0x6a, 0xce, 0xd1, 0x18, 0x30, 0x02, + 0xe1, 0xee, 0xee, 0xfe, 0x73, 0x5a, 0xf1, 0x2a, 0x2c, 0xc9, 0x50, 0x71, 0x63, 0xec, 0xf6, 0xfb, + 0x50, 0x8f, 0xc5, 0x63, 0xb4, 0xcf, 0x76, 0xbb, 0x5b, 0xea, 0xee, 0x3e, 0x65, 0xd5, 0x80, 0x2a, + 0xfd, 0x08, 0xc8, 0x73, 0xb7, 0xef, 0x00, 0x44, 0x4e, 0x3f, 0xcc, 0x6c, 0x42, 0x3b, 0x61, 0xb7, + 0xbf, 0x8f, 0x85, 0xcc, 0xdd, 0x17, 0xec, 0x7f, 0xfe, 0xfe, 0xbf, 0x5e, 0x85, 0xf2, 0x36, 0xd5, + 0x89, 0x8e, 0x63, 0xa0, 0x1d, 0xa8, 0x4a, 0xef, 0x32, 0xd0, 0x5b, 0xb1, 0xa9, 0x28, 0xf1, 0xdc, + 0xa3, 0x7d, 0x79, 0x06, 0x56, 0x5c, 0xb7, 0x9e, 0x43, 0x3d, 0x80, 0xe8, 0xe5, 0x06, 0xda, 0x90, + 0xc9, 0x13, 0x8f, 0x3c, 0xda, 0x6f, 0x65, 0x23, 0x43, 0x56, 0x4f, 0xa0, 0x12, 0xbe, 0x57, 0x41, + 0xd2, 0xb2, 0x2e, 0xf9, 0xb0, 0xa5, 0xbd, 0x91, 0x89, 0x0b, 0xf9, 0xec, 0x40, 0x55, 0x4a, 0xb4, + 0x23, 0x37, 0x30, 0x9d, 0xb9, 0x47, 0x6e, 0x60, 0x56, 0x76, 0x9e, 0x39, 0xf4, 0x0c, 0x16, 0xe3, + 0x29, 0x76, 0xd0, 0x55, 0x79, 0x2d, 0x9d, 0x91, 0xb9, 0xa7, 0x7d, 0x6d, 0x36, 0x81, 0x2c, 0xa4, + 0x94, 0x54, 0x4a, 0x16, 0x32, 0x9d, 0xc7, 0x4a, 0x16, 0x32, 0x23, 0x13, 0x95, 0x32, 0x87, 0x30, + 0xd4, 0x63, 0xb9, 0x6b, 0xd0, 0x95, 0x98, 0x4b, 0x4c, 0x73, 0xbc, 0x3a, 0x13, 0x1f, 0xf2, 0xfc, + 0xff, 0xb0, 0x94, 0xca, 0x89, 0x83, 0x94, 0xf3, 0x73, 0xf3, 0xb4, 0xbf, 0x73, 0x26, 0x4d, 0xc8, + 0xff, 0xff, 0x41, 0x33, 0x99, 0xfb, 0x06, 0x49, 0xe7, 0xc3, 0x33, 0x52, 0xee, 0xb4, 0x95, 0xb3, + 0x48, 0xe4, 0x51, 0x8b, 0x67, 0xc2, 0x91, 0x47, 0x2d, 0x33, 0xad, 0x8e, 0x3c, 0x6a, 0x33, 0x92, + 0xe8, 0xcc, 0xa1, 0x17, 0xd0, 0x48, 0x24, 0xbb, 0x41, 0xf2, 0x60, 0x67, 0x66, 0xd8, 0x69, 0x5f, + 0x3f, 0x83, 0x22, 0xe4, 0xfc, 0x08, 0x4a, 0xdc, 0xb1, 0xa3, 0xf5, 0xd8, 0x60, 0x47, 0x4f, 0x29, + 0xda, 0xad, 0x34, 0x42, 0x56, 0x27, 0xe9, 0x39, 0x84, 0xac, 0x4e, 0xe9, 0x37, 0x19, 0xb2, 0x3a, + 0x65, 0xbd, 0xa1, 0x98, 0x43, 0x3f, 0x80, 0x05, 0x91, 0xce, 0x0b, 0xb5, 0x62, 0xf6, 0x21, 0xa5, + 0xed, 0x6a, 0x5f, 0xca, 0xc0, 0xc8, 0x6e, 0x21, 0x4a, 0x9e, 0x25, 0xbb, 0x85, 0x54, 0xfa, 0x2f, + 0xd9, 0x2d, 0x64, 0xe4, 0xdb, 0x9a, 0x43, 0x5b, 0x00, 0x51, 0xba, 0x17, 0x99, 0x55, 0x2a, 0x09, + 0x4c, 0x3b, 0xfb, 0xe5, 0x8c, 0x32, 0xf7, 0x61, 0x0e, 0x3d, 0x0c, 0xd3, 0xd9, 0x44, 0x97, 0x58, + 0xa5, 0x89, 0x32, 0xcc, 0xd1, 0xd6, 0x4e, 0x24, 0xda, 0x62, 0x85, 0x9f, 0x40, 0x25, 0xcc, 0x2f, + 0x24, 0x7b, 0xa6, 0x64, 0x76, 0x23, 0xd9, 0x33, 0xa5, 0x13, 0x12, 0xf1, 0x5e, 0x09, 0xb3, 0x0f, + 0xc5, 0x7a, 0x25, 0x99, 0xa8, 0x28, 0xd6, 0x2b, 0xe9, 0x84, 0x45, 0x73, 0xe8, 0x29, 0x54, 0xc2, + 0x8c, 0x41, 0xb2, 0x48, 0xc9, 0x3c, 0x46, 0xb2, 0x48, 0xe9, 0x14, 0x43, 0x73, 0xb7, 0x72, 0x54, + 0xf3, 0x78, 0xde, 0x1e, 0x59, 0xf3, 0x62, 0x29, 0x82, 0xda, 0xad, 0x34, 0x42, 0xf6, 0xda, 0x61, + 0x8a, 0x1e, 0x59, 0x90, 0x64, 0xe6, 0x9f, 0xf6, 0x46, 0x26, 0x4e, 0xd6, 0x39, 0x91, 0x94, 0x04, + 0x25, 0x14, 0x3d, 0xca, 0x66, 0x21, 0xeb, 0x5c, 0x22, 0x83, 0x49, 0xa8, 0xb5, 0x49, 0x0e, 0xf1, + 0x64, 0x25, 0x09, 0xad, 0x4d, 0x70, 0x08, 0xb5, 0x96, 0x31, 0x49, 0x09, 0x2c, 0xf3, 0x79, 0x2b, + 0x1b, 0x29, 0xb3, 0x8a, 0xf2, 0x85, 0xa0, 0x94, 0x5e, 0xcc, 0x60, 0x95, 0x91, 0x62, 0x84, 0xd9, + 0xb6, 0x94, 0x34, 0x04, 0xa5, 0x35, 0x43, 0x66, 0x76, 0x79, 0x06, 0x56, 0x1e, 0xaf, 0x30, 0xe5, + 0x87, 0x3c, 0x5e, 0xc9, 0xcc, 0x21, 0xf2, 0x78, 0xa5, 0x73, 0x84, 0xb0, 0x29, 0x27, 0x96, 0x3e, + 0x44, 0x9e, 0x72, 0xb2, 0x32, 0x91, 0xc8, 0x53, 0x4e, 0x76, 0xde, 0x91, 0xd0, 0x09, 0xda, 0x5a, + 0xd2, 0x09, 0x86, 0xeb, 0xb2, 0xa4, 0x13, 0x8c, 0xd6, 0x61, 0xbc, 0xa3, 0xa4, 0x54, 0x1f, 0x28, + 0xd5, 0xaf, 0x72, 0x3a, 0x13, 0xb9, 0xa3, 0xb2, 0xf2, 0x83, 0xcc, 0x09, 0xbb, 0xa0, 0xeb, 0xb6, + 0xb8, 0x5d, 0x44, 0x69, 0x3a, 0x12, 0x76, 0x21, 0xa7, 0xe2, 0x90, 0xec, 0x82, 0x72, 0x48, 0xd9, + 0x85, 0xc4, 0x64, 0x23, 0x13, 0x97, 0xe8, 0x93, 0x84, 0x18, 0xb1, 0xd4, 0x25, 0x89, 0x3e, 0x89, + 0x17, 0xc7, 0x6c, 0x61, 0x2b, 0x9d, 0x0b, 0x5c, 0x89, 0x11, 0xa7, 0x92, 0x58, 0xc8, 0xc3, 0x94, + 0x99, 0xf5, 0x83, 0xf3, 0x8c, 0x65, 0xe3, 0x90, 0x79, 0x66, 0xa5, 0xf9, 0x90, 0x79, 0x66, 0xa7, + 0xf1, 0x60, 0xd1, 0x40, 0x32, 0xe7, 0x86, 0x1c, 0x0d, 0xcc, 0x48, 0xf2, 0x21, 0x47, 0x03, 0x33, + 0x53, 0x76, 0xb0, 0x50, 0x26, 0x95, 0x70, 0x43, 0x0e, 0x65, 0x66, 0x65, 0xf4, 0x90, 0x43, 0x99, + 0xd9, 0x19, 0x3b, 0xe6, 0xd0, 0x3e, 0xd4, 0xe4, 0xe4, 0x1c, 0x28, 0x1e, 0xaf, 0x25, 0xf3, 0x50, + 0xb4, 0xaf, 0xcc, 0x42, 0xcb, 0x0c, 0xe5, 0xb4, 0x1a, 0x28, 0x1e, 0xa5, 0x9e, 0xc5, 0x30, 0x33, + 0x1b, 0x07, 0x0f, 0x5c, 0xe2, 0x09, 0x33, 0x50, 0x2a, 0x4a, 0x4d, 0xb1, 0xbd, 0x7e, 0x06, 0x85, + 0x3c, 0x70, 0xc9, 0x0c, 0x19, 0xf2, 0xc0, 0xcd, 0xc8, 0xc5, 0xd1, 0x56, 0xce, 0x22, 0x49, 0x2c, + 0x09, 0xc4, 0xe6, 0x5a, 0x7c, 0x49, 0x10, 0xcb, 0xf7, 0x90, 0x58, 0x12, 0x24, 0x92, 0x2b, 0x30, + 0x3e, 0x61, 0x3e, 0x01, 0x99, 0x4f, 0x32, 0xd1, 0x86, 0xcc, 0x27, 0x9d, 0x0a, 0x83, 0x8d, 0x8b, + 0x9c, 0x09, 0x40, 0x1e, 0x97, 0x8c, 0x1c, 0x19, 0xf2, 0xb8, 0x64, 0xa6, 0xaf, 0x10, 0x81, 0xbb, + 0xf4, 0xb4, 0x3f, 0x1e, 0xb8, 0xa7, 0x13, 0x5b, 0xc4, 0x03, 0xf7, 0xac, 0x4c, 0x12, 0x73, 0x48, + 0x67, 0x19, 0x64, 0x52, 0xbb, 0x87, 0x6f, 0x67, 0x74, 0x51, 0x2a, 0x4f, 0x41, 0xfb, 0xc6, 0x39, + 0x54, 0x72, 0x2d, 0x19, 0x29, 0x1a, 0xe4, 0x5a, 0x66, 0xe7, 0x86, 0x90, 0x6b, 0x39, 0x2b, 0xcf, + 0xc3, 0x1c, 0x9a, 0x04, 0x79, 0x64, 0x52, 0x15, 0xdd, 0xcc, 0xee, 0xdb, 0x74, 0x5d, 0xb7, 0xce, + 0x27, 0x0c, 0xab, 0x73, 0xc2, 0xe4, 0x31, 0xe9, 0xcd, 0xd7, 0x19, 0x1d, 0x9f, 0xae, 0xf0, 0xdd, + 0x0b, 0x50, 0xca, 0x71, 0x42, 0xb4, 0xa1, 0x83, 0x36, 0x92, 0x21, 0xbe, 0xb4, 0x49, 0xd4, 0x7e, + 0x2b, 0x1b, 0x19, 0xb0, 0x3a, 0x2c, 0xb1, 0xa4, 0xc8, 0x1f, 0xfd, 0x57, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x0c, 0xb2, 0x36, 0x62, 0x23, 0x59, 0x00, 0x00, } diff --git a/api/gobgp.proto b/api/gobgp.proto index 58bc89e5..ded9487d 100644 --- a/api/gobgp.proto +++ b/api/gobgp.proto @@ -703,16 +703,35 @@ message GracefulRestart { bool longlived_enabled = 6; } -message MpGracefulRestart { +message MpGracefulRestartConfig { bool enabled = 1; } +message MpGracefulRestartState { + bool enabled = 1; + bool received = 2; + bool advertised = 3; + bool end_of_rib_received = 4; + bool end_of_rib_sent = 5; +} +message MpGracefulRestart { + MpGracefulRestartConfig config = 1; + MpGracefulRestartState state = 2; +} + message AfiSafiConfig { uint32 family = 1; bool enabled = 2; } -message RouteSelectionOptions { +message AfiSafiState { + uint32 family = 1; + bool enabled = 2; + uint32 total_paths = 3; + uint32 total_prefixes = 4; +} + +message RouteSelectionOptionsConfig { bool always_compare_med = 1; bool ignore_as_path_length = 2; bool external_compare_router_id = 3; @@ -721,34 +740,94 @@ message RouteSelectionOptions { bool ignore_next_hop_igp_metric = 6; } +message RouteSelectionOptionsState { + bool always_compare_med = 1; + bool ignore_as_path_length = 2; + bool external_compare_router_id = 3; + bool advertise_inactive_routes = 4; + bool enable_aigp = 5; + bool ignore_next_hop_igp_metric = 6; +} + +message RouteSelectionOptions { + RouteSelectionOptionsConfig config = 1; + RouteSelectionOptionsState state = 2; +} + message UseMultiplePathsConfig { bool enabled = 1; } -message Ebgp { +message UseMultiplePathsState { + bool enabled = 1; +} + +message EbgpConfig { bool allow_multiple_as = 1; uint32 maximum_paths = 2; } -message Ibgp { +message EbgpState { + bool allow_multiple_as = 1; + uint32 maximum_paths = 2; +} + +message Ebgp { + EbgpConfig config = 1; + EbgpState state = 2; +} + +message IbgpConfig { uint32 maximum_paths = 1; } +message IbgpState { + uint32 maximum_paths = 1; +} + +message Ibgp { + IbgpConfig config = 1; + IbgpState state = 2; +} + message UseMultiplePaths { UseMultiplePathsConfig config = 1; - Ebgp ebgp = 2; - Ibgp ibgp = 3; + UseMultiplePathsState state = 2; + Ebgp ebgp = 3; + Ibgp ibgp = 4; } -message RouteTargetMembership { +message RouteTargetMembershipConfig { uint32 deferral_time = 1; } -message LongLivedGracefulRestart { +message RouteTargetMembershipState { + uint32 deferral_time = 1; +} + +message RouteTargetMembership { + RouteTargetMembershipConfig config = 1; + RouteTargetMembershipState state = 2; +} + +message LongLivedGracefulRestartConfig { bool enabled = 1; uint32 restart_time = 2; } +message LongLivedGracefulRestartState { + bool enabled = 1; + bool received = 2; + bool advertised = 3; + uint32 peer_restart_time = 4; + bool peer_restart_timer_expired = 5; +} + +message LongLivedGracefulRestart { + LongLivedGracefulRestartConfig config = 1; + LongLivedGracefulRestartState state = 2; +} + message AfiSafi { MpGracefulRestart mp_graceful_restart = 1; AfiSafiConfig config = 2; diff --git a/api/grpc_server.go b/api/grpc_server.go index 40a567e4..cb83b132 100644 --- a/api/grpc_server.go +++ b/api/grpc_server.go @@ -88,44 +88,138 @@ func (s *Server) Serve() error { return nil } -func NewPeerFromConfigStruct(pconf *config.Neighbor) *Peer { - var families []uint32 - for _, f := range pconf.AfiSafis { - if family, ok := bgp.AddressFamilyValueMap[string(f.Config.AfiSafiName)]; ok { - families = append(families, uint32(family)) - } +func NewMpGracefulRestartFromConfigStruct(c *config.MpGracefulRestart) *MpGracefulRestart { + return &MpGracefulRestart{ + Config: &MpGracefulRestartConfig{ + Enabled: c.Config.Enabled, + }, } - applyPolicy := &ApplyPolicy{} - applyPolicy.ImportPolicy = &PolicyAssignment{ - Type: PolicyType_IMPORT, - Default: RouteAction(pconf.ApplyPolicy.Config.DefaultImportPolicy.ToInt()), +} + +func NewAfiSafiConfigFromConfigStruct(c *config.AfiSafiConfig) *AfiSafiConfig { + return &AfiSafiConfig{ + Family: uint32(bgp.AddressFamilyValueMap[string(c.AfiSafiName)]), + Enabled: c.Enabled, } - for _, pname := range pconf.ApplyPolicy.Config.ImportPolicyList { - applyPolicy.ImportPolicy.Policies = append(applyPolicy.ImportPolicy.Policies, &Policy{Name: pname}) +} + +func NewApplyPolicyFromConfigStruct(c *config.ApplyPolicy) *ApplyPolicy { + applyPolicy := &ApplyPolicy{ + ImportPolicy: &PolicyAssignment{ + Type: PolicyType_IMPORT, + Default: RouteAction(c.Config.DefaultImportPolicy.ToInt()), + }, + ExportPolicy: &PolicyAssignment{ + Type: PolicyType_EXPORT, + Default: RouteAction(c.Config.DefaultExportPolicy.ToInt()), + }, + InPolicy: &PolicyAssignment{ + Type: PolicyType_IN, + Default: RouteAction(c.Config.DefaultInPolicy.ToInt()), + }, } - applyPolicy.ExportPolicy = &PolicyAssignment{ - Type: PolicyType_EXPORT, - Default: RouteAction(pconf.ApplyPolicy.Config.DefaultExportPolicy.ToInt()), + + for _, pname := range c.Config.ImportPolicyList { + applyPolicy.ImportPolicy.Policies = append(applyPolicy.ImportPolicy.Policies, &Policy{Name: pname}) } - for _, pname := range pconf.ApplyPolicy.Config.ExportPolicyList { + for _, pname := range c.Config.ExportPolicyList { applyPolicy.ExportPolicy.Policies = append(applyPolicy.ExportPolicy.Policies, &Policy{Name: pname}) } - applyPolicy.InPolicy = &PolicyAssignment{ - Type: PolicyType_IN, - Default: RouteAction(pconf.ApplyPolicy.Config.DefaultInPolicy.ToInt()), - } - for _, pname := range pconf.ApplyPolicy.Config.InPolicyList { + for _, pname := range c.Config.InPolicyList { applyPolicy.InPolicy.Policies = append(applyPolicy.InPolicy.Policies, &Policy{Name: pname}) } + + return applyPolicy +} + +func NewRouteSelectionOptionsFromConfigStruct(c *config.RouteSelectionOptions) *RouteSelectionOptions { + return &RouteSelectionOptions{ + Config: &RouteSelectionOptionsConfig{ + AlwaysCompareMed: c.Config.AlwaysCompareMed, + IgnoreAsPathLength: c.Config.IgnoreAsPathLength, + ExternalCompareRouterId: c.Config.ExternalCompareRouterId, + AdvertiseInactiveRoutes: c.Config.AdvertiseInactiveRoutes, + EnableAigp: c.Config.EnableAigp, + IgnoreNextHopIgpMetric: c.Config.IgnoreNextHopIgpMetric, + }, + } +} + +func NewUseMultiplePathsFromConfigStruct(c *config.UseMultiplePaths) *UseMultiplePaths { + return &UseMultiplePaths{ + Config: &UseMultiplePathsConfig{ + Enabled: c.Config.Enabled, + }, + Ebgp: &Ebgp{ + Config: &EbgpConfig{ + AllowMultipleAs: c.Ebgp.Config.AllowMultipleAs, + MaximumPaths: c.Ebgp.Config.MaximumPaths, + }, + }, + Ibgp: &Ibgp{ + Config: &IbgpConfig{ + MaximumPaths: c.Ibgp.Config.MaximumPaths, + }, + }, + } +} + +func NewPrefixLimitFromConfigStruct(c *config.AfiSafi) *PrefixLimit { + family, err := bgp.GetRouteFamily(string(c.Config.AfiSafiName)) + if err != nil || c.PrefixLimit.Config.MaxPrefixes == 0 { + return nil + } + + return &PrefixLimit{ + Family: uint32(family), + MaxPrefixes: c.PrefixLimit.Config.MaxPrefixes, + ShutdownThresholdPct: uint32(c.PrefixLimit.Config.ShutdownThresholdPct), + } +} + +func NewRouteTargetMembershipFromConfigStruct(c *config.RouteTargetMembership) *RouteTargetMembership { + return &RouteTargetMembership{ + Config: &RouteTargetMembershipConfig{ + DeferralTime: uint32(c.Config.DeferralTime), + }, + } +} + +func NewLongLivedGracefulRestartFromConfigStruct(c *config.LongLivedGracefulRestart) *LongLivedGracefulRestart { + return &LongLivedGracefulRestart{ + Config: &LongLivedGracefulRestartConfig{ + Enabled: c.Config.Enabled, + RestartTime: c.Config.RestartTime, + }, + } +} + +func NewAfiSafiFromConfigStruct(c *config.AfiSafi) *AfiSafi { + return &AfiSafi{ + MpGracefulRestart: NewMpGracefulRestartFromConfigStruct(&c.MpGracefulRestart), + Config: NewAfiSafiConfigFromConfigStruct(&c.Config), + ApplyPolicy: NewApplyPolicyFromConfigStruct(&c.ApplyPolicy), + RouteSelectionOptions: NewRouteSelectionOptionsFromConfigStruct(&c.RouteSelectionOptions), + UseMultiplePaths: NewUseMultiplePathsFromConfigStruct(&c.UseMultiplePaths), + PrefixLimits: NewPrefixLimitFromConfigStruct(c), + RouteTargetMembership: NewRouteTargetMembershipFromConfigStruct(&c.RouteTargetMembership), + LongLivedGracefulRestart: NewLongLivedGracefulRestartFromConfigStruct(&c.LongLivedGracefulRestart), + } +} + +func NewPeerFromConfigStruct(pconf *config.Neighbor) *Peer { + families := make([]uint32, 0, len(pconf.AfiSafis)) prefixLimits := make([]*PrefixLimit, 0, len(pconf.AfiSafis)) - for _, family := range pconf.AfiSafis { - if c := family.PrefixLimit.Config; c.MaxPrefixes > 0 { - k, _ := bgp.GetRouteFamily(string(family.Config.AfiSafiName)) - prefixLimits = append(prefixLimits, &PrefixLimit{ - Family: uint32(k), - MaxPrefixes: c.MaxPrefixes, - ShutdownThresholdPct: uint32(c.ShutdownThresholdPct), - }) + afiSafis := make([]*AfiSafi, 0, len(pconf.AfiSafis)) + for _, f := range pconf.AfiSafis { + if family, ok := bgp.AddressFamilyValueMap[string(f.Config.AfiSafiName)]; ok { + families = append(families, uint32(family)) + } + if prefixLimit := NewPrefixLimitFromConfigStruct(&f); prefixLimit != nil { + prefixLimits = append(prefixLimits, prefixLimit) + } + if afiSafi := NewAfiSafiFromConfigStruct(&f); afiSafi != nil { + afiSafis = append(afiSafis, afiSafi) } } @@ -136,13 +230,13 @@ func NewPeerFromConfigStruct(pconf *config.Neighbor) *Peer { localAddress = pconf.Transport.State.LocalAddress } var remoteCap, localCap [][]byte - for _, cap := range pconf.State.RemoteCapabilityList { - c, _ := cap.Serialize() - remoteCap = append(remoteCap, c) + for _, c := range pconf.State.RemoteCapabilityList { + cBuf, _ := c.Serialize() + remoteCap = append(remoteCap, cBuf) } - for _, cap := range pconf.State.LocalCapabilityList { - c, _ := cap.Serialize() - localCap = append(localCap, c) + for _, c := range pconf.State.LocalCapabilityList { + cBuf, _ := c.Serialize() + localCap = append(localCap, cBuf) } var removePrivateAs PeerConf_RemovePrivateAs switch pconf.Config.RemovePrivateAs { @@ -153,7 +247,7 @@ func NewPeerFromConfigStruct(pconf *config.Neighbor) *Peer { } return &Peer{ Families: families, - ApplyPolicy: applyPolicy, + ApplyPolicy: NewApplyPolicyFromConfigStruct(&pconf.ApplyPolicy), Conf: &PeerConf{ NeighborAddress: pconf.Config.NeighborAddress, Id: s.RemoteRouterId, @@ -236,6 +330,7 @@ func NewPeerFromConfigStruct(pconf *config.Neighbor) *Peer { RemotePort: uint32(pconf.Transport.Config.RemotePort), LocalAddress: pconf.Transport.Config.LocalAddress, }, + AfiSafis: afiSafis, } } @@ -860,6 +955,111 @@ func (s *Server) DeleteVrf(ctx context.Context, arg *DeleteVrfRequest) (*DeleteV return &DeleteVrfResponse{}, s.bgpServer.DeleteVrf(arg.Vrf.Name) } +func ReadMpGracefulRestartFromAPIStruct(c *config.MpGracefulRestart, a *MpGracefulRestart) { + if c == nil || a == nil { + return + } + if a.Config != nil { + c.Config.Enabled = a.Config.Enabled + } +} + +func ReadAfiSafiConfigFromAPIStruct(c *config.AfiSafiConfig, a *AfiSafiConfig) { + if c == nil || a == nil { + return + } + c.Enabled = a.Enabled +} + +func ReadPrefixLimitFromAPIStruct(c *config.PrefixLimit, a *PrefixLimit) { + if c == nil || a == nil { + return + } + c.Config.MaxPrefixes = a.MaxPrefixes + c.Config.ShutdownThresholdPct = config.Percentage(a.ShutdownThresholdPct) +} + +func ReadApplyPolicyFromAPIStruct(c *config.ApplyPolicy, a *ApplyPolicy) { + if c == nil || a == nil { + return + } + if a.ImportPolicy != nil { + c.Config.DefaultImportPolicy = config.IntToDefaultPolicyTypeMap[int(a.ImportPolicy.Default)] + for _, p := range a.ImportPolicy.Policies { + c.Config.ImportPolicyList = append(c.Config.ImportPolicyList, p.Name) + } + } + if a.ExportPolicy != nil { + c.Config.DefaultExportPolicy = config.IntToDefaultPolicyTypeMap[int(a.ExportPolicy.Default)] + for _, p := range a.ExportPolicy.Policies { + c.Config.ExportPolicyList = append(c.Config.ExportPolicyList, p.Name) + } + } + if a.InPolicy != nil { + c.Config.DefaultInPolicy = config.IntToDefaultPolicyTypeMap[int(a.InPolicy.Default)] + for _, p := range a.InPolicy.Policies { + c.Config.InPolicyList = append(c.Config.InPolicyList, p.Name) + } + } +} + +func ReadRouteSelectionOptionsFromAPIStruct(c *config.RouteSelectionOptions, a *RouteSelectionOptions) { + if c == nil || a == nil { + return + } + if a.Config != nil { + c.Config.AlwaysCompareMed = a.Config.AlwaysCompareMed + c.Config.IgnoreAsPathLength = a.Config.IgnoreAsPathLength + c.Config.ExternalCompareRouterId = a.Config.ExternalCompareRouterId + c.Config.AdvertiseInactiveRoutes = a.Config.AdvertiseInactiveRoutes + c.Config.EnableAigp = a.Config.EnableAigp + c.Config.IgnoreNextHopIgpMetric = a.Config.IgnoreNextHopIgpMetric + } +} + +func ReadUseMultiplePathsFromAPIStruct(c *config.UseMultiplePaths, a *UseMultiplePaths) { + if c == nil || a == nil { + return + } + if a.Config != nil { + c.Config.Enabled = a.Config.Enabled + } + if a.Ebgp != nil && a.Ebgp.Config != nil { + c.Ebgp = config.Ebgp{ + Config: config.EbgpConfig{ + AllowMultipleAs: a.Ebgp.Config.AllowMultipleAs, + MaximumPaths: a.Ebgp.Config.MaximumPaths, + }, + } + } + if a.Ibgp != nil && a.Ibgp.Config != nil { + c.Ibgp = config.Ibgp{ + Config: config.IbgpConfig{ + MaximumPaths: a.Ibgp.Config.MaximumPaths, + }, + } + } +} + +func ReadRouteTargetMembershipFromAPIStruct(c *config.RouteTargetMembership, a *RouteTargetMembership) { + if c == nil || a == nil { + return + } + if a.Config != nil { + c.Config.DeferralTime = uint16(a.Config.DeferralTime) + } +} + +func ReadLongLivedGracefulRestartFromAPIStruct(c *config.LongLivedGracefulRestart, a *LongLivedGracefulRestart) { + if c == nil || a == nil { + return + } + if a.Config != nil { + c.Config.Enabled = a.Config.Enabled + c.Config.RestartTime = a.Config.RestartTime + } +} + func NewNeighborFromAPIStruct(a *Peer) (*config.Neighbor, error) { pconf := &config.Neighbor{} if a.Conf != nil { @@ -885,11 +1085,11 @@ func NewNeighborFromAPIStruct(a *Peer) (*config.Neighbor, error) { f := func(bufs [][]byte) ([]bgp.ParameterCapabilityInterface, error) { var caps []bgp.ParameterCapabilityInterface for _, buf := range bufs { - cap, err := bgp.DecodeCapability(buf) + c, err := bgp.DecodeCapability(buf) if err != nil { return nil, err } - caps = append(caps, cap) + caps = append(caps, c) } return caps, nil } @@ -907,22 +1107,31 @@ func NewNeighborFromAPIStruct(a *Peer) (*config.Neighbor, error) { pconf.State.RemoteRouterId = a.Conf.Id - for _, f := range a.Families { - family := bgp.RouteFamily(f) - pconf.AfiSafis = append(pconf.AfiSafis, config.AfiSafi{ + for _, family := range a.Families { + afiSafi := config.AfiSafi{ Config: config.AfiSafiConfig{ - AfiSafiName: config.AfiSafiType(family.String()), + AfiSafiName: config.AfiSafiType(bgp.RouteFamily(family).String()), Enabled: true, }, - }) - } - for _, pl := range a.Conf.PrefixLimits { - for i, f := range pconf.AfiSafis { - if f.Config.AfiSafiName == config.AfiSafiType(bgp.RouteFamily(pl.Family).String()) { - pconf.AfiSafis[i].PrefixLimit.Config.MaxPrefixes = pl.MaxPrefixes - pconf.AfiSafis[i].PrefixLimit.Config.ShutdownThresholdPct = config.Percentage(pl.ShutdownThresholdPct) + } + for _, pl := range a.Conf.PrefixLimits { + if family == pl.Family { + ReadPrefixLimitFromAPIStruct(&afiSafi.PrefixLimit, pl) } } + for _, a := range a.AfiSafis { + if a.Config != nil && family == a.Config.Family { + ReadMpGracefulRestartFromAPIStruct(&afiSafi.MpGracefulRestart, a.MpGracefulRestart) + ReadAfiSafiConfigFromAPIStruct(&afiSafi.Config, a.Config) + ReadApplyPolicyFromAPIStruct(&afiSafi.ApplyPolicy, a.ApplyPolicy) + ReadRouteSelectionOptionsFromAPIStruct(&afiSafi.RouteSelectionOptions, a.RouteSelectionOptions) + ReadUseMultiplePathsFromAPIStruct(&afiSafi.UseMultiplePaths, a.UseMultiplePaths) + ReadPrefixLimitFromAPIStruct(&afiSafi.PrefixLimit, a.PrefixLimits) + ReadRouteTargetMembershipFromAPIStruct(&afiSafi.RouteTargetMembership, a.RouteTargetMembership) + ReadLongLivedGracefulRestartFromAPIStruct(&afiSafi.LongLivedGracefulRestart, a.LongLivedGracefulRestart) + } + } + pconf.AfiSafis = append(pconf.AfiSafis, afiSafi) } } @@ -955,26 +1164,7 @@ func NewNeighborFromAPIStruct(a *Peer) (*config.Neighbor, error) { pconf.GracefulRestart.Config.NotificationEnabled = a.GracefulRestart.NotificationEnabled pconf.GracefulRestart.Config.LongLivedEnabled = a.GracefulRestart.LonglivedEnabled } - if a.ApplyPolicy != nil { - if a.ApplyPolicy.ImportPolicy != nil { - pconf.ApplyPolicy.Config.DefaultImportPolicy = config.IntToDefaultPolicyTypeMap[int(a.ApplyPolicy.ImportPolicy.Default)] - for _, p := range a.ApplyPolicy.ImportPolicy.Policies { - pconf.ApplyPolicy.Config.ImportPolicyList = append(pconf.ApplyPolicy.Config.ImportPolicyList, p.Name) - } - } - if a.ApplyPolicy.ExportPolicy != nil { - pconf.ApplyPolicy.Config.DefaultExportPolicy = config.IntToDefaultPolicyTypeMap[int(a.ApplyPolicy.ExportPolicy.Default)] - for _, p := range a.ApplyPolicy.ExportPolicy.Policies { - pconf.ApplyPolicy.Config.ExportPolicyList = append(pconf.ApplyPolicy.Config.ExportPolicyList, p.Name) - } - } - if a.ApplyPolicy.InPolicy != nil { - pconf.ApplyPolicy.Config.DefaultInPolicy = config.IntToDefaultPolicyTypeMap[int(a.ApplyPolicy.InPolicy.Default)] - for _, p := range a.ApplyPolicy.InPolicy.Policies { - pconf.ApplyPolicy.Config.InPolicyList = append(pconf.ApplyPolicy.Config.InPolicyList, p.Name) - } - } - } + ReadApplyPolicyFromAPIStruct(&pconf.ApplyPolicy, a.ApplyPolicy) if a.Transport != nil { pconf.Transport.Config.LocalAddress = a.Transport.LocalAddress pconf.Transport.Config.PassiveMode = a.Transport.PassiveMode |