diff options
-rw-r--r-- | api/attribute.pb.go | 252 | ||||
-rw-r--r-- | api/attribute.proto | 5 | ||||
-rw-r--r-- | api/capability.pb.go | 111 | ||||
-rw-r--r-- | api/gobgp.pb.go | 1415 | ||||
-rw-r--r-- | api/gobgp.proto | 75 | ||||
-rw-r--r-- | cmd/gobgp/cmd/common.go | 121 | ||||
-rw-r--r-- | cmd/gobgp/cmd/global.go | 8 | ||||
-rw-r--r-- | cmd/gobgp/cmd/monitor.go | 8 | ||||
-rw-r--r-- | cmd/gobgp/cmd/neighbor.go | 28 | ||||
-rw-r--r-- | cmd/gobgp/cmd/policy.go | 7 | ||||
-rw-r--r-- | cmd/gobgp/cmd/rpki.go | 8 | ||||
-rw-r--r-- | docs/sources/lib.md | 2 | ||||
-rw-r--r-- | internal/pkg/apiutil/attribute.go | 8 | ||||
-rw-r--r-- | internal/pkg/apiutil/attribute_test.go | 102 | ||||
-rw-r--r-- | internal/pkg/apiutil/capability.go | 30 | ||||
-rw-r--r-- | internal/pkg/apiutil/capability_test.go | 38 | ||||
-rw-r--r-- | internal/pkg/apiutil/util.go | 17 | ||||
-rw-r--r-- | pkg/server/grpc_server.go | 36 | ||||
-rw-r--r-- | pkg/server/server.go | 22 |
19 files changed, 1257 insertions, 1036 deletions
diff --git a/api/attribute.pb.go b/api/attribute.pb.go index 886a8e6e..1f2185f3 100644 --- a/api/attribute.pb.go +++ b/api/attribute.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: attribute.proto -// DO NOT EDIT! package gobgpapi @@ -910,7 +909,7 @@ func (m *OpaqueNLRI) GetValue() []byte { } type MpReachNLRIAttribute struct { - Family uint32 `protobuf:"varint,1,opt,name=family" json:"family,omitempty"` + Family *Family `protobuf:"bytes,1,opt,name=family" json:"family,omitempty"` NextHops []string `protobuf:"bytes,2,rep,name=next_hops,json=nextHops" json:"next_hops,omitempty"` // Each NLRI must be one of: // - IPAddressPrefix @@ -934,11 +933,11 @@ func (m *MpReachNLRIAttribute) String() string { return proto.Compact func (*MpReachNLRIAttribute) ProtoMessage() {} func (*MpReachNLRIAttribute) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{32} } -func (m *MpReachNLRIAttribute) GetFamily() uint32 { +func (m *MpReachNLRIAttribute) GetFamily() *Family { if m != nil { return m.Family } - return 0 + return nil } func (m *MpReachNLRIAttribute) GetNextHops() []string { @@ -956,7 +955,7 @@ func (m *MpReachNLRIAttribute) GetNlris() []*google_protobuf.Any { } type MpUnreachNLRIAttribute struct { - Family uint32 `protobuf:"varint,1,opt,name=family" json:"family,omitempty"` + Family *Family `protobuf:"bytes,1,opt,name=family" json:"family,omitempty"` // The same as NLRI field of MpReachNLRIAttribute Nlris []*google_protobuf.Any `protobuf:"bytes,3,rep,name=nlris" json:"nlris,omitempty"` } @@ -966,11 +965,11 @@ func (m *MpUnreachNLRIAttribute) String() string { return proto.Compa func (*MpUnreachNLRIAttribute) ProtoMessage() {} func (*MpUnreachNLRIAttribute) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{33} } -func (m *MpUnreachNLRIAttribute) GetFamily() uint32 { +func (m *MpUnreachNLRIAttribute) GetFamily() *Family { if m != nil { return m.Family } - return 0 + return nil } func (m *MpUnreachNLRIAttribute) GetNlris() []*google_protobuf.Any { @@ -1966,122 +1965,123 @@ func init() { func init() { proto.RegisterFile("attribute.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ - // 1868 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xeb, 0x6f, 0x1b, 0xc7, - 0x11, 0x07, 0x8f, 0x94, 0x4c, 0x0e, 0x45, 0x49, 0xa6, 0x64, 0x81, 0x92, 0xe2, 0xc8, 0x5d, 0x37, - 0xad, 0xea, 0x36, 0x72, 0xab, 0x38, 0x6e, 0xed, 0xa0, 0x28, 0x18, 0x49, 0x49, 0xd8, 0x88, 0x32, - 0x73, 0x92, 0x55, 0x14, 0x28, 0xca, 0x2e, 0xef, 0x96, 0xa7, 0x85, 0xee, 0x95, 0xdb, 0x3d, 0x3d, - 0xfe, 0x84, 0x7e, 0x68, 0x91, 0x4f, 0x45, 0xff, 0x92, 0xfe, 0x67, 0xfd, 0x5e, 0xec, 0xeb, 0x1e, - 0xa2, 0xa8, 0x87, 0x53, 0x03, 0xfe, 0xb6, 0xb3, 0x9c, 0x9d, 0x99, 0xfd, 0xed, 0xcc, 0x6f, 0x86, - 0x07, 0x0b, 0x98, 0xf3, 0x84, 0x8e, 0x52, 0x4e, 0xb6, 0xe2, 0x24, 0xe2, 0x51, 0xbb, 0xee, 0x45, - 0x23, 0x2f, 0xc6, 0x31, 0x5d, 0x5b, 0xf5, 0xa2, 0xc8, 0xf3, 0xc9, 0x73, 0xb9, 0x3f, 0x4a, 0xc7, - 0xcf, 0x71, 0x78, 0xa9, 0x94, 0xd0, 0x2f, 0x60, 0xe1, 0x4d, 0x42, 0x3d, 0x1a, 0x76, 0xcd, 0xe9, - 0xf6, 0x0a, 0xcc, 0x46, 0x72, 0xab, 0x53, 0x79, 0x52, 0xd9, 0x6c, 0xd9, 0x5a, 0x42, 0xaf, 0xa0, - 0xd1, 0x65, 0x87, 0xc4, 0x0b, 0x48, 0xc8, 0xdb, 0x6d, 0xa8, 0xf1, 0xcb, 0x98, 0x68, 0x15, 0xb9, - 0x6e, 0x77, 0xe0, 0x41, 0x98, 0x06, 0x23, 0x92, 0xb0, 0x8e, 0xf5, 0xa4, 0xba, 0xd9, 0xb2, 0x8d, - 0x88, 0xbe, 0x84, 0x85, 0x2e, 0x1b, 0x60, 0x7e, 0x92, 0x7b, 0x79, 0x0e, 0x75, 0xa6, 0x6c, 0xb1, - 0x4e, 0xe5, 0x49, 0x75, 0xb3, 0xb9, 0xbd, 0xb4, 0x65, 0x02, 0xde, 0xca, 0xfc, 0xd8, 0x99, 0x12, - 0xfa, 0x14, 0x16, 0x0f, 0xc8, 0x05, 0xff, 0x26, 0x8a, 0x73, 0x23, 0xab, 0x50, 0x0f, 0xc9, 0x05, - 0x1f, 0x9e, 0x44, 0xb1, 0x8c, 0xa4, 0x61, 0x3f, 0x08, 0x95, 0x0e, 0x7a, 0x06, 0x2b, 0xfd, 0xd4, - 0xe7, 0x74, 0xef, 0x82, 0xf2, 0x5d, 0xca, 0x9c, 0xfc, 0xd0, 0x22, 0x54, 0x03, 0xe2, 0xea, 0xc8, - 0xc5, 0x12, 0x7d, 0x06, 0xed, 0xfd, 0xc8, 0xc1, 0xfe, 0x20, 0x21, 0xe3, 0x5c, 0xef, 0x31, 0x80, - 0x2f, 0x76, 0x87, 0x71, 0x42, 0xc6, 0x5a, 0xbd, 0xe1, 0x1b, 0x3d, 0xb4, 0x06, 0x9d, 0x2e, 0x8f, - 0x02, 0xea, 0x74, 0x3d, 0x2f, 0x21, 0x1e, 0xe6, 0x24, 0x3b, 0x8a, 0xfe, 0x00, 0x4b, 0x66, 0x37, - 0x4a, 0x72, 0x8b, 0xf3, 0x60, 0x61, 0x81, 0x8d, 0xb0, 0x64, 0x61, 0x26, 0x00, 0xc3, 0xae, 0x9b, - 0x10, 0xc6, 0x3a, 0x55, 0x15, 0xbd, 0x16, 0xd1, 0xef, 0x60, 0x79, 0x27, 0x0a, 0x82, 0x34, 0xa4, - 0x9c, 0x12, 0x96, 0x5b, 0x78, 0x02, 0x4d, 0x27, 0xdf, 0x97, 0xc0, 0xb5, 0xec, 0xe2, 0x16, 0xfa, - 0x39, 0x3c, 0x52, 0x0f, 0x2a, 0x5c, 0xf7, 0xdc, 0x92, 0x73, 0xea, 0x6a, 0x94, 0x2c, 0xea, 0xa2, - 0x4d, 0x58, 0xde, 0xf1, 0x53, 0xc6, 0x49, 0xb2, 0x4f, 0x19, 0x2f, 0xc1, 0x43, 0x5d, 0x65, 0xba, - 0x61, 0x8b, 0x25, 0xfa, 0x06, 0x16, 0x7a, 0x83, 0xae, 0x8a, 0x4c, 0x5c, 0x9d, 0x5e, 0x08, 0x6c, - 0x62, 0xb9, 0x1a, 0xfa, 0xc4, 0xe4, 0x49, 0x43, 0xed, 0xec, 0x93, 0x50, 0xa4, 0x90, 0x12, 0xe4, - 0x65, 0x1b, 0xb6, 0x96, 0x90, 0x07, 0x2b, 0xfb, 0x78, 0x44, 0x7c, 0xe2, 0x5e, 0x35, 0xb8, 0x02, - 0xb3, 0xbe, 0xf8, 0xc5, 0xdc, 0x49, 0x4b, 0x57, 0x1c, 0x59, 0xd3, 0x1d, 0x55, 0x4b, 0x8e, 0x3e, - 0x85, 0x87, 0x7b, 0xa1, 0x83, 0x63, 0x96, 0xfa, 0x98, 0xd3, 0x28, 0x3c, 0xd8, 0xb7, 0x7b, 0x45, - 0xb8, 0x2b, 0x65, 0xb8, 0x07, 0xf0, 0x91, 0x1d, 0xa5, 0x9c, 0xec, 0x52, 0xc6, 0x69, 0xe8, 0xa5, - 0x94, 0x9d, 0x90, 0xe4, 0xe8, 0x3c, 0x7a, 0xe3, 0x70, 0xc2, 0xbb, 0x87, 0xed, 0x65, 0x98, 0xc1, - 0x6e, 0x90, 0x55, 0x84, 0x12, 0xda, 0x6b, 0x50, 0xc7, 0x8c, 0x51, 0x2f, 0x24, 0xae, 0x8e, 0x2c, - 0x93, 0xd1, 0x1b, 0x58, 0x9f, 0xb4, 0x98, 0x5d, 0xba, 0x6c, 0xb0, 0x71, 0x17, 0x83, 0xdf, 0xc1, - 0xe3, 0x49, 0x83, 0x5f, 0x45, 0x69, 0xf2, 0xee, 0x31, 0xee, 0xc1, 0xea, 0x1e, 0x3f, 0x21, 0x49, - 0x48, 0xb8, 0x2e, 0xb7, 0x9e, 0x4b, 0x42, 0x4e, 0xc7, 0x94, 0x24, 0xd7, 0x16, 0xf8, 0x32, 0xcc, - 0x9c, 0x61, 0x3f, 0x25, 0xd2, 0xd2, 0x9c, 0xad, 0x04, 0xf4, 0x9f, 0x0a, 0x7c, 0xbc, 0x77, 0x3c, - 0x38, 0x30, 0xb6, 0xba, 0x29, 0x8f, 0x44, 0xc5, 0x45, 0x67, 0x24, 0xb9, 0x94, 0x31, 0xb7, 0x7f, - 0x0a, 0x56, 0xa2, 0x72, 0xaf, 0xb9, 0xbd, 0xbc, 0xa5, 0xd8, 0x68, 0xcb, 0xb0, 0xd1, 0x56, 0x37, - 0xbc, 0xb4, 0xad, 0xc4, 0x6d, 0x7f, 0x0e, 0x55, 0xc2, 0xa8, 0x34, 0xde, 0xdc, 0x7e, 0x9a, 0xb3, - 0xc1, 0xd4, 0x20, 0x6d, 0xa1, 0xdf, 0xfe, 0x09, 0xcc, 0x11, 0xad, 0x31, 0xe4, 0xd8, 0x93, 0x99, - 0xd0, 0xb2, 0x9b, 0x66, 0xef, 0x08, 0x7b, 0x22, 0x70, 0x99, 0x4f, 0x9d, 0x9a, 0xc2, 0x46, 0x0a, - 0xe8, 0xbf, 0x15, 0x58, 0x17, 0x81, 0xf7, 0xbb, 0x3b, 0xe2, 0x65, 0xce, 0x48, 0xc2, 0x29, 0x23, - 0x92, 0x76, 0x3e, 0x88, 0xa8, 0x37, 0xa0, 0x19, 0x60, 0x67, 0x68, 0x72, 0xb6, 0x26, 0x53, 0x05, - 0x02, 0xec, 0x98, 0x2c, 0x7a, 0x0c, 0x40, 0xe3, 0xec, 0xf7, 0x19, 0xf9, 0x7b, 0x83, 0xc6, 0xe6, - 0xe7, 0xbc, 0xa6, 0x66, 0x8b, 0x35, 0x85, 0x7e, 0xa8, 0xc0, 0xcf, 0xc4, 0xbd, 0x7b, 0xa1, 0xe3, - 0xa7, 0x8c, 0x9e, 0x11, 0x49, 0x94, 0x0e, 0x66, 0x7c, 0x2f, 0xf7, 0x7e, 0x1f, 0x08, 0xae, 0xde, - 0xc5, 0x9a, 0xbc, 0x4b, 0x39, 0xd4, 0xea, 0x95, 0x50, 0xd1, 0xbf, 0x2a, 0xd0, 0x29, 0xe6, 0x90, - 0xa1, 0xff, 0xf7, 0xff, 0x0e, 0xb7, 0x04, 0xf6, 0x77, 0x0b, 0x1e, 0x4a, 0xac, 0x06, 0x8a, 0xa8, - 0x3e, 0x8c, 0xcc, 0x58, 0x87, 0x06, 0x8d, 0x87, 0x9a, 0xf9, 0x54, 0x5e, 0xd4, 0x69, 0xac, 0xa9, - 0x14, 0x41, 0x2b, 0xfb, 0x51, 0xb2, 0xe6, 0x8c, 0x32, 0x60, 0x14, 0x04, 0x6f, 0x3e, 0x06, 0xf0, - 0xce, 0xb3, 0x5b, 0xcf, 0xaa, 0x5b, 0x7b, 0xe7, 0x05, 0x7a, 0x52, 0xf5, 0xf2, 0xa0, 0x58, 0x2f, - 0x3f, 0x54, 0x60, 0x55, 0xd3, 0xb7, 0x44, 0xe4, 0x6e, 0x0c, 0xae, 0xb0, 0xb2, 0x6e, 0xc1, 0xaa, - 0xcc, 0xf3, 0xd5, 0xe9, 0x3c, 0x5f, 0x2b, 0xf1, 0xfc, 0x77, 0xb0, 0x2a, 0x5f, 0xe4, 0x08, 0x27, - 0x1e, 0xe1, 0x7d, 0x22, 0xc7, 0x8d, 0x13, 0x1a, 0x4b, 0xbe, 0x57, 0xed, 0xb6, 0x92, 0xb5, 0x5b, - 0x11, 0x09, 0xbf, 0x25, 0x12, 0x8e, 0x52, 0x58, 0xfc, 0xca, 0x8f, 0xce, 0x0f, 0x63, 0xe2, 0x98, - 0x47, 0xbf, 0x96, 0x0c, 0xdf, 0xad, 0x33, 0xc9, 0xe9, 0x6a, 0x3c, 0x66, 0x84, 0x6b, 0x2e, 0xd2, - 0x12, 0xfa, 0x02, 0x9a, 0xc6, 0x6d, 0xbf, 0xbb, 0x33, 0x6d, 0xbe, 0x32, 0x2f, 0x66, 0x95, 0xfb, - 0xd7, 0xef, 0xe1, 0x91, 0x39, 0xbc, 0x13, 0x05, 0x71, 0x14, 0x8a, 0xb4, 0xe2, 0x24, 0x10, 0x10, - 0xe8, 0xd1, 0xa8, 0x65, 0x5b, 0x51, 0x5c, 0x66, 0xf0, 0x9a, 0x61, 0xf0, 0xbf, 0xc2, 0xc3, 0x89, - 0xe3, 0xd7, 0x46, 0xf0, 0x39, 0xcc, 0x50, 0x4e, 0x02, 0x35, 0xdf, 0x35, 0xb7, 0x37, 0xf2, 0x9c, - 0xbe, 0xd6, 0xbd, 0xad, 0xb4, 0xd1, 0x6b, 0x98, 0x33, 0xbf, 0xcb, 0x87, 0x79, 0x06, 0x33, 0x49, - 0xea, 0x13, 0x33, 0xf8, 0x5d, 0xff, 0x16, 0x4a, 0x05, 0x39, 0xb0, 0x70, 0x3c, 0x38, 0x28, 0x1d, - 0xbf, 0x5b, 0xf5, 0x65, 0x4e, 0xac, 0xdb, 0x9d, 0xbc, 0x00, 0x78, 0x13, 0xe3, 0xef, 0x53, 0x22, - 0xed, 0x2f, 0x42, 0xf5, 0x94, 0x5c, 0x4a, 0x07, 0x73, 0xb6, 0x58, 0x4e, 0x69, 0x7c, 0xe7, 0xb0, - 0xdc, 0x8f, 0x6d, 0x82, 0x9d, 0x13, 0x71, 0xac, 0x34, 0x40, 0x8f, 0x71, 0x40, 0xfd, 0x4b, 0x33, - 0x40, 0x2b, 0x49, 0x54, 0xad, 0x99, 0x56, 0x55, 0x54, 0x0d, 0xbb, 0xae, 0xc7, 0x55, 0x26, 0xc2, - 0x0d, 0xfd, 0x84, 0x0a, 0x0a, 0xba, 0x21, 0x5c, 0xa9, 0x82, 0xfe, 0x02, 0x2b, 0xfd, 0xf8, 0x6d, - 0x98, 0xdc, 0xdd, 0xf5, 0x7d, 0xac, 0xff, 0xa3, 0x02, 0x6b, 0xd9, 0xec, 0xc3, 0x04, 0xea, 0x74, - 0x4c, 0x9d, 0xbd, 0x0b, 0x4e, 0x42, 0x97, 0xb8, 0xed, 0xa7, 0xd0, 0xa2, 0x6c, 0xc8, 0x13, 0x1c, - 0x32, 0xca, 0xe9, 0x99, 0x4a, 0x90, 0xba, 0x3d, 0x47, 0xd9, 0x51, 0xb6, 0x27, 0x06, 0x73, 0x96, - 0x8e, 0x86, 0x32, 0x81, 0x54, 0x69, 0x3c, 0x60, 0xe9, 0xe8, 0x48, 0xe4, 0x90, 0xaa, 0xca, 0x6a, - 0x56, 0x95, 0x1b, 0xd0, 0x54, 0x63, 0xb6, 0x9a, 0x5e, 0x54, 0x55, 0xa8, 0xc9, 0xbb, 0x2b, 0x76, - 0xd0, 0xbf, 0x2b, 0xb0, 0xde, 0x1b, 0x9c, 0xbd, 0xd0, 0x74, 0xf3, 0x7f, 0x0f, 0x68, 0xea, 0x14, - 0x7e, 0x7b, 0x68, 0xff, 0xac, 0xc0, 0x7a, 0x3e, 0x83, 0x7d, 0x00, 0x58, 0x3d, 0x83, 0xf6, 0x31, - 0xf6, 0xa9, 0x2b, 0x87, 0xde, 0x2c, 0x8c, 0x65, 0x98, 0x61, 0x1c, 0x73, 0x53, 0xcb, 0x4a, 0x40, - 0x9f, 0x40, 0x6b, 0x27, 0xf2, 0xa3, 0xa4, 0xa8, 0xe6, 0x88, 0x0d, 0xa3, 0x26, 0x05, 0xf4, 0x6b, - 0x68, 0xc9, 0x51, 0x3a, 0x53, 0xdb, 0x80, 0x26, 0x4f, 0xc3, 0x90, 0xf8, 0xc3, 0x02, 0x3f, 0x80, - 0xda, 0x12, 0x51, 0xa3, 0x0e, 0xac, 0xec, 0x92, 0x31, 0x4e, 0x7d, 0xfe, 0x35, 0xe6, 0xe4, 0x1c, - 0x5f, 0x9a, 0xa3, 0xe8, 0x5b, 0x98, 0x57, 0x75, 0x76, 0x3f, 0x84, 0xb2, 0xf2, 0xab, 0x16, 0xcb, - 0xcf, 0x86, 0xc5, 0xbd, 0xc3, 0x9e, 0x6c, 0x48, 0x99, 0xb9, 0x4d, 0x58, 0xa4, 0x6c, 0xc8, 0x68, - 0xe8, 0xf9, 0x64, 0x88, 0x9d, 0x82, 0xc5, 0x79, 0xca, 0x0e, 0xe5, 0x76, 0xd7, 0x31, 0x36, 0x55, - 0x8b, 0xb3, 0x8a, 0x2d, 0x6e, 0x1b, 0x96, 0xf6, 0x0e, 0x7b, 0x41, 0x1c, 0x25, 0xbc, 0xd0, 0x57, - 0x44, 0xe5, 0x12, 0x36, 0xa4, 0x72, 0x5f, 0x8f, 0xec, 0x75, 0xc2, 0x94, 0x1e, 0x7a, 0x0b, 0x4b, - 0x7d, 0xec, 0xf4, 0xa3, 0x11, 0xf5, 0x29, 0xcf, 0xee, 0x2a, 0x7b, 0x34, 0x1b, 0x32, 0x4e, 0x9d, - 0xd3, 0x4b, 0x1d, 0x43, 0x9d, 0xb2, 0x43, 0x29, 0x8b, 0x1e, 0xcf, 0xc8, 0xf7, 0x29, 0x09, 0x1d, - 0x32, 0x0c, 0xd3, 0xc0, 0x4c, 0x4c, 0x66, 0xef, 0x20, 0x0d, 0xd0, 0x27, 0xf0, 0x50, 0x86, 0x90, - 0xf4, 0x71, 0x9e, 0x50, 0xe2, 0xbf, 0x2b, 0x76, 0x74, 0x08, 0x62, 0x89, 0x5e, 0xc1, 0xd2, 0x51, - 0x82, 0xc7, 0x63, 0xea, 0xd8, 0x98, 0xe7, 0xb8, 0x5e, 0xed, 0x7d, 0x6d, 0xa8, 0x25, 0x22, 0x03, - 0x84, 0x23, 0xcb, 0x96, 0x6b, 0xf4, 0x2d, 0x3c, 0xd2, 0x47, 0x05, 0x26, 0x85, 0x7c, 0x59, 0x83, - 0x3a, 0x27, 0x49, 0x40, 0x43, 0xec, 0x9b, 0xc8, 0x8d, 0x2c, 0x18, 0x86, 0xe1, 0x20, 0xf6, 0x95, - 0xa9, 0xba, 0xad, 0x25, 0xf4, 0x16, 0x90, 0x4d, 0x5c, 0x9a, 0x10, 0x87, 0xdf, 0x40, 0x1e, 0x57, - 0xc3, 0xba, 0x92, 0xd0, 0xd6, 0x44, 0x42, 0xff, 0x0d, 0x9e, 0x1a, 0xb3, 0x37, 0x71, 0xc0, 0xd4, - 0xbf, 0x76, 0xb7, 0x7b, 0x38, 0xce, 0x3d, 0xdc, 0x54, 0xca, 0xf7, 0x8e, 0xfc, 0x97, 0x19, 0xba, - 0x36, 0x09, 0x70, 0x72, 0x9a, 0x59, 0x6a, 0x43, 0xcd, 0x65, 0x8e, 0xe9, 0xca, 0x72, 0x8d, 0xbe, - 0x80, 0x85, 0xb7, 0xe1, 0x69, 0x18, 0x9d, 0x87, 0x45, 0xb5, 0x3b, 0xfe, 0x01, 0x3b, 0x86, 0x8f, - 0xcc, 0xa9, 0x6b, 0x3f, 0x1a, 0xbc, 0x9c, 0xfc, 0x68, 0x30, 0xad, 0x05, 0x94, 0x3e, 0x25, 0xec, - 0xc0, 0x62, 0x97, 0xbd, 0xf8, 0x91, 0x9f, 0x6d, 0xbe, 0x84, 0x95, 0x2e, 0x7b, 0xf1, 0xe3, 0xbe, - 0x86, 0x10, 0x58, 0x1a, 0x04, 0x8c, 0x1e, 0x49, 0x8a, 0xc9, 0x0d, 0x2c, 0xc3, 0xcc, 0xd8, 0xc7, - 0x9e, 0x79, 0x15, 0x25, 0x64, 0xb8, 0x59, 0x65, 0xdc, 0x54, 0xb1, 0x57, 0x0b, 0xc5, 0xae, 0xbf, - 0x88, 0xd4, 0x24, 0x94, 0x16, 0x75, 0xd1, 0x1f, 0xe1, 0x63, 0xe5, 0x42, 0xf2, 0xdd, 0x61, 0x3a, - 0x3a, 0xda, 0x3f, 0x2e, 0x7d, 0x45, 0x28, 0x4e, 0x06, 0x2d, 0x35, 0x19, 0xac, 0xc0, 0xac, 0x13, - 0x45, 0xa7, 0xd4, 0x3c, 0x89, 0x96, 0xd0, 0x6f, 0x61, 0x75, 0xc2, 0xd6, 0x40, 0x20, 0xed, 0x44, - 0xbe, 0xa8, 0xaf, 0x58, 0xaf, 0xb5, 0xad, 0x4c, 0x46, 0x5b, 0xb0, 0x32, 0x71, 0x50, 0xd2, 0xf4, - 0x14, 0x7a, 0xde, 0x85, 0xce, 0x84, 0xbe, 0x4e, 0xa5, 0x7b, 0xa4, 0xd0, 0x01, 0xcc, 0x17, 0xac, - 0x1c, 0xed, 0x1f, 0x5f, 0x7b, 0x76, 0x13, 0x6a, 0xdc, 0x3f, 0xbb, 0x79, 0xa2, 0x92, 0x1a, 0x68, - 0x17, 0x96, 0x0b, 0xf6, 0xf2, 0x27, 0xfb, 0x95, 0xb6, 0xa0, 0x52, 0xa7, 0x93, 0xa7, 0x4e, 0xd9, - 0xbb, 0xb6, 0xa2, 0x3b, 0xff, 0xcb, 0x0f, 0xb0, 0xf3, 0x97, 0x79, 0xe9, 0xe5, 0x7b, 0xe0, 0xa5, - 0x3f, 0xc3, 0x46, 0x6f, 0xf0, 0xf2, 0xbd, 0x14, 0xf6, 0x33, 0x58, 0xec, 0x52, 0x4f, 0x00, 0xdd, - 0xfb, 0x7a, 0xd0, 0x27, 0x3c, 0xa1, 0x8e, 0x48, 0xe4, 0x40, 0xae, 0x64, 0xa0, 0x35, 0x5b, 0x4b, - 0xe8, 0x35, 0xcc, 0x6b, 0xdd, 0xfb, 0x67, 0xd5, 0x2b, 0x68, 0x89, 0xb3, 0x79, 0xc0, 0x9b, 0xa5, - 0xe7, 0xbf, 0x29, 0x81, 0x52, 0x98, 0xdf, 0x17, 0xbd, 0xd7, 0xdc, 0x5b, 0xb6, 0x4c, 0xcf, 0x8f, - 0x46, 0x19, 0x62, 0xca, 0x7d, 0x53, 0xed, 0x49, 0xc8, 0x72, 0x4c, 0x5d, 0xcc, 0xf1, 0x6f, 0x4a, - 0x98, 0xee, 0x8a, 0x9d, 0xb2, 0xc2, 0xb6, 0x66, 0x83, 0x5c, 0x61, 0x1b, 0xfd, 0x49, 0xfc, 0xc3, - 0x2d, 0xb8, 0x2d, 0xc1, 0xfd, 0xfa, 0x3a, 0xb8, 0x0b, 0x39, 0x5c, 0x0e, 0xb8, 0x0c, 0xb9, 0x0d, - 0x8b, 0x1a, 0xbf, 0x77, 0xe4, 0xaf, 0xc9, 0x01, 0x68, 0x34, 0x2b, 0x71, 0xfb, 0xec, 0x7f, 0x01, - 0x00, 0x00, 0xff, 0xff, 0xf2, 0x23, 0xd6, 0xcf, 0xfa, 0x17, 0x00, 0x00, + // 1881 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0x4b, 0x73, 0x1b, 0xc7, + 0x11, 0x2e, 0x2c, 0x40, 0x0a, 0x68, 0x10, 0x24, 0x04, 0x52, 0x2c, 0x90, 0xb4, 0x4c, 0x65, 0x14, + 0x27, 0x8c, 0x12, 0x53, 0x09, 0x2d, 0x2b, 0x91, 0x5c, 0xa9, 0x14, 0x4c, 0xd2, 0x36, 0x62, 0x82, + 0x82, 0x97, 0x14, 0x53, 0xb9, 0x04, 0x19, 0xec, 0x0e, 0x96, 0x53, 0xdc, 0x97, 0x77, 0x66, 0xf9, + 0xf8, 0x09, 0x3e, 0x24, 0xa5, 0x53, 0x2a, 0xbf, 0x24, 0xff, 0x2c, 0xf7, 0xd4, 0xbc, 0xf6, 0x41, + 0xf0, 0x21, 0x4a, 0x51, 0x95, 0x6e, 0xdb, 0xb3, 0x3d, 0xdd, 0x3d, 0xdf, 0x74, 0x7f, 0xdd, 0xbb, + 0xb0, 0x80, 0x39, 0x4f, 0xe8, 0x38, 0xe5, 0x64, 0x33, 0x4e, 0x22, 0x1e, 0x75, 0xea, 0x5e, 0x34, + 0xf6, 0x62, 0x1c, 0xd3, 0xd5, 0x15, 0x2f, 0x8a, 0x3c, 0x9f, 0x3c, 0x95, 0xeb, 0xe3, 0x74, 0xf2, + 0x14, 0x87, 0x17, 0x4a, 0x69, 0xb5, 0x29, 0x95, 0x94, 0x80, 0x7e, 0x05, 0x0b, 0xaf, 0x12, 0xea, + 0xd1, 0xb0, 0x67, 0x4c, 0x75, 0x96, 0x61, 0x36, 0x92, 0x4b, 0xdd, 0xca, 0xa3, 0xca, 0x46, 0xcb, + 0xd6, 0x12, 0x7a, 0x01, 0x8d, 0x1e, 0x3b, 0x20, 0x5e, 0x40, 0x42, 0xde, 0xe9, 0x40, 0x8d, 0x5f, + 0xc4, 0x44, 0xab, 0xc8, 0xe7, 0x4e, 0x17, 0xee, 0x85, 0x69, 0x30, 0x26, 0x09, 0xeb, 0x5a, 0x8f, + 0xaa, 0x1b, 0x2d, 0xdb, 0x88, 0xe8, 0x6b, 0x58, 0xe8, 0xb1, 0x21, 0xe6, 0xc7, 0xb9, 0x97, 0xa7, + 0x50, 0x67, 0xca, 0x16, 0xeb, 0x56, 0x1e, 0x55, 0x37, 0x9a, 0x5b, 0x8b, 0x9b, 0x26, 0xfa, 0xcd, + 0xcc, 0x8f, 0x9d, 0x29, 0xa1, 0xcf, 0xa1, 0xbd, 0x4f, 0xce, 0xf9, 0x77, 0x51, 0x9c, 0x1b, 0x59, + 0x81, 0x7a, 0x48, 0xce, 0xf9, 0xe8, 0x38, 0x8a, 0x65, 0x24, 0x0d, 0xfb, 0x5e, 0xa8, 0x74, 0xd0, + 0x13, 0x58, 0x1e, 0xa4, 0x3e, 0xa7, 0xbb, 0xe7, 0x94, 0xef, 0x50, 0xe6, 0xe4, 0x9b, 0xda, 0x50, + 0x0d, 0x88, 0xab, 0x23, 0x17, 0x8f, 0xe8, 0x0b, 0xe8, 0xec, 0x45, 0x0e, 0xf6, 0x87, 0x09, 0x99, + 0xe4, 0x7a, 0x0f, 0x01, 0x7c, 0xb1, 0x3a, 0x8a, 0x13, 0x32, 0xd1, 0xea, 0x0d, 0xdf, 0xe8, 0xa1, + 0x55, 0xe8, 0xf6, 0x78, 0x14, 0x50, 0xa7, 0xe7, 0x79, 0x09, 0xf1, 0x30, 0x27, 0xd9, 0x56, 0xf4, + 0x27, 0x58, 0x34, 0xab, 0x51, 0x92, 0x5b, 0x9c, 0x07, 0x0b, 0x0b, 0x6c, 0x84, 0x25, 0x0b, 0x33, + 0x01, 0x18, 0x76, 0xdd, 0x84, 0x30, 0xd6, 0xad, 0xaa, 0xe8, 0xb5, 0x88, 0xfe, 0x00, 0x4b, 0xdb, + 0x51, 0x10, 0xa4, 0x21, 0xe5, 0x94, 0xb0, 0xdc, 0xc2, 0x23, 0x68, 0x3a, 0xf9, 0xba, 0x04, 0xae, + 0x65, 0x17, 0x97, 0xd0, 0x2f, 0xe1, 0x81, 0xba, 0x50, 0xe1, 0xba, 0xef, 0x96, 0x9c, 0x53, 0x57, + 0xa3, 0x64, 0x51, 0x17, 0x6d, 0xc0, 0xd2, 0xb6, 0x9f, 0x32, 0x4e, 0x92, 0x3d, 0xca, 0x78, 0x09, + 0x1e, 0xea, 0x2a, 0xd3, 0x0d, 0x5b, 0x3c, 0xa2, 0xef, 0x60, 0xa1, 0x3f, 0xec, 0xa9, 0xc8, 0xc4, + 0xd1, 0xe9, 0xb9, 0xc0, 0x26, 0x96, 0x4f, 0x23, 0x9f, 0x98, 0x3c, 0x69, 0xa8, 0x95, 0x3d, 0x12, + 0x8a, 0x14, 0x52, 0x82, 0x3c, 0x6c, 0xc3, 0xd6, 0x12, 0xf2, 0x60, 0x79, 0x0f, 0x8f, 0x89, 0x4f, + 0xdc, 0xcb, 0x06, 0x97, 0x61, 0xd6, 0x17, 0x6f, 0xcc, 0x99, 0xb4, 0x74, 0xc9, 0x91, 0x75, 0xbd, + 0xa3, 0x6a, 0xc9, 0xd1, 0xe7, 0x70, 0x7f, 0x37, 0x74, 0x70, 0xcc, 0x52, 0x1f, 0x73, 0x1a, 0x85, + 0xfb, 0x7b, 0x76, 0xbf, 0x08, 0x77, 0xa5, 0x0c, 0xf7, 0x10, 0x3e, 0xb1, 0xa3, 0x94, 0x93, 0x1d, + 0xca, 0x38, 0x0d, 0xbd, 0x94, 0xb2, 0x63, 0x92, 0x1c, 0x9e, 0x45, 0xaf, 0x1c, 0x4e, 0x78, 0xef, + 0xa0, 0xb3, 0x04, 0x33, 0xd8, 0x0d, 0xb2, 0x8a, 0x50, 0x42, 0x67, 0x15, 0xea, 0x98, 0x31, 0xea, + 0x85, 0xc4, 0xd5, 0x91, 0x65, 0x32, 0x7a, 0x05, 0x6b, 0xd3, 0x16, 0xb3, 0x43, 0x97, 0x0d, 0x36, + 0xde, 0xc6, 0xe0, 0x0f, 0xf0, 0x70, 0xda, 0xe0, 0x37, 0x51, 0x9a, 0xbc, 0x7b, 0x8c, 0xbb, 0xb0, + 0xb2, 0xcb, 0x8f, 0x49, 0x12, 0x12, 0xae, 0xcb, 0xad, 0xef, 0x92, 0x90, 0xd3, 0x09, 0x25, 0xc9, + 0x95, 0x05, 0xbe, 0x04, 0x33, 0xa7, 0xd8, 0x4f, 0x89, 0xb4, 0x34, 0x67, 0x2b, 0x01, 0xfd, 0xa7, + 0x02, 0x9f, 0xee, 0x1e, 0x0d, 0xf7, 0x8d, 0xad, 0x5e, 0xca, 0x23, 0x51, 0x71, 0xd1, 0x29, 0x49, + 0x2e, 0x64, 0xcc, 0x9d, 0x9f, 0x83, 0x95, 0xa8, 0xdc, 0x6b, 0x6e, 0x2d, 0x6d, 0x2a, 0x6a, 0xda, + 0x34, 0xd4, 0xb4, 0xd9, 0x0b, 0x2f, 0x6c, 0x2b, 0x71, 0x3b, 0x5f, 0x42, 0x95, 0x30, 0x2a, 0x8d, + 0x37, 0xb7, 0x1e, 0xe7, 0x6c, 0x70, 0x6d, 0x90, 0xb6, 0xd0, 0xef, 0xfc, 0x0c, 0xe6, 0x88, 0xd6, + 0x18, 0x71, 0xec, 0xc9, 0x4c, 0x68, 0xd9, 0x4d, 0xb3, 0x76, 0x88, 0x3d, 0x11, 0xb8, 0xcc, 0xa7, + 0x6e, 0x4d, 0x61, 0x23, 0x05, 0xf4, 0xdf, 0x0a, 0xac, 0x89, 0xc0, 0x07, 0xbd, 0x6d, 0x71, 0x33, + 0xa7, 0x24, 0xe1, 0x94, 0x11, 0x49, 0x3b, 0x1f, 0x45, 0xd4, 0xeb, 0xd0, 0x0c, 0xb0, 0x33, 0x32, + 0x39, 0x5b, 0x93, 0xa9, 0x02, 0x01, 0x76, 0x4c, 0x16, 0x3d, 0x04, 0xa0, 0x71, 0xf6, 0x7e, 0x46, + 0xbe, 0x6f, 0xd0, 0xd8, 0xbc, 0xce, 0x6b, 0x6a, 0xb6, 0x58, 0x53, 0xe8, 0x4d, 0x05, 0x7e, 0x21, + 0xce, 0xdd, 0x0f, 0x1d, 0x3f, 0x65, 0xf4, 0x94, 0x48, 0xa2, 0x74, 0x30, 0xe3, 0xbb, 0xb9, 0xf7, + 0xbb, 0x40, 0x70, 0xf9, 0x2c, 0xd6, 0xf4, 0x59, 0xca, 0xa1, 0x56, 0x2f, 0x85, 0x8a, 0xfe, 0x55, + 0x81, 0x6e, 0x31, 0x87, 0x0c, 0xfd, 0x7f, 0xf8, 0x7b, 0xb8, 0x25, 0xb0, 0x9f, 0x2c, 0xb8, 0x2f, + 0xb1, 0x1a, 0x2a, 0xa2, 0xfa, 0x38, 0x32, 0x63, 0x0d, 0x1a, 0x34, 0x1e, 0x69, 0xe6, 0x53, 0x79, + 0x51, 0xa7, 0xb1, 0xa6, 0x52, 0x04, 0xad, 0xec, 0xa5, 0x64, 0xcd, 0x19, 0x65, 0xc0, 0x28, 0x08, + 0xde, 0x7c, 0x08, 0xe0, 0x9d, 0x65, 0xa7, 0x9e, 0x55, 0xa7, 0xf6, 0xce, 0x0a, 0xf4, 0xa4, 0xea, + 0xe5, 0x5e, 0xb1, 0x5e, 0xde, 0x54, 0x60, 0x45, 0xd3, 0xb7, 0x44, 0xe4, 0xed, 0x18, 0x5c, 0x61, + 0x65, 0xdd, 0x82, 0x55, 0x99, 0xe7, 0xab, 0xd7, 0xf3, 0x7c, 0xad, 0xc4, 0xf3, 0x3f, 0xc0, 0x8a, + 0xbc, 0x91, 0x43, 0x9c, 0x78, 0x84, 0x0f, 0x88, 0x1c, 0x37, 0x8e, 0x69, 0x2c, 0xf9, 0x5e, 0xb5, + 0xdb, 0x4a, 0xd6, 0x6e, 0x45, 0x24, 0xfc, 0x96, 0x48, 0x38, 0x4a, 0xa1, 0xfd, 0x8d, 0x1f, 0x9d, + 0x1d, 0xc4, 0xc4, 0x31, 0x97, 0x7e, 0x25, 0x19, 0xbe, 0x5b, 0x67, 0x92, 0xd3, 0xd5, 0x64, 0xc2, + 0x08, 0xd7, 0x5c, 0xa4, 0x25, 0xf4, 0x15, 0x34, 0x8d, 0xdb, 0x41, 0x6f, 0xfb, 0xba, 0xf9, 0xca, + 0xdc, 0x98, 0x55, 0xee, 0x5f, 0x7f, 0x84, 0x07, 0x66, 0xf3, 0x76, 0x14, 0xc4, 0x51, 0x28, 0xd2, + 0x8a, 0x93, 0x40, 0x40, 0xa0, 0x47, 0xa3, 0x96, 0x6d, 0x45, 0x71, 0x99, 0xc1, 0x6b, 0x86, 0xc1, + 0xff, 0x06, 0xf7, 0xa7, 0xb6, 0x5f, 0x19, 0xc1, 0x97, 0x30, 0x43, 0x39, 0x09, 0xd4, 0x7c, 0xd7, + 0xdc, 0x5a, 0xcf, 0x73, 0xfa, 0x4a, 0xf7, 0xb6, 0xd2, 0x46, 0x2f, 0x61, 0xce, 0xbc, 0x97, 0x17, + 0xf3, 0x04, 0x66, 0x92, 0xd4, 0x27, 0x66, 0xf0, 0xbb, 0xfa, 0x2e, 0x94, 0x0a, 0x72, 0x60, 0xe1, + 0x68, 0xb8, 0x5f, 0xda, 0xfe, 0x76, 0xd5, 0x97, 0x39, 0xb1, 0x6e, 0x77, 0xf2, 0x0c, 0xe0, 0x55, + 0x8c, 0x7f, 0x4c, 0x89, 0xb4, 0xdf, 0x86, 0xea, 0x09, 0xb9, 0x90, 0x0e, 0xe6, 0x6c, 0xf1, 0x78, + 0x4d, 0xe3, 0xfb, 0xa9, 0x02, 0x4b, 0x83, 0xd8, 0x26, 0xd8, 0x39, 0x16, 0xfb, 0xf2, 0x11, 0x6a, + 0x03, 0x66, 0x27, 0x38, 0xa0, 0xfe, 0x85, 0x0e, 0xb2, 0x5d, 0xc0, 0x49, 0xae, 0xdb, 0xfa, 0xbd, + 0x28, 0x64, 0x33, 0xc0, 0xaa, 0x40, 0x1b, 0x76, 0x5d, 0x4f, 0xb0, 0x4c, 0x9c, 0x20, 0xf4, 0x13, + 0x2a, 0x58, 0xe9, 0x86, 0x13, 0x48, 0x15, 0x14, 0xc2, 0xf2, 0x20, 0x7e, 0x1d, 0x26, 0xef, 0x13, + 0xcc, 0x5d, 0xfc, 0xfd, 0xa3, 0x02, 0xab, 0xd9, 0x80, 0xc4, 0xc4, 0xd5, 0xd0, 0x09, 0x75, 0x76, + 0xcf, 0x39, 0x09, 0x5d, 0xe2, 0x76, 0x1e, 0x43, 0x8b, 0xb2, 0x11, 0x4f, 0x70, 0xc8, 0x28, 0xa7, + 0xa7, 0x2a, 0x8b, 0xea, 0xf6, 0x1c, 0x65, 0x87, 0xd9, 0x9a, 0x98, 0xde, 0x59, 0x3a, 0x1e, 0xc9, + 0x2c, 0x53, 0xf5, 0x73, 0x8f, 0xa5, 0xe3, 0x43, 0x91, 0x68, 0xaa, 0x74, 0xab, 0x59, 0xe9, 0xae, + 0x43, 0x53, 0xcd, 0xe2, 0x6a, 0xc4, 0x51, 0xa5, 0xa3, 0xc6, 0xf3, 0x9e, 0x58, 0x41, 0xff, 0xae, + 0xc0, 0x5a, 0x7f, 0x78, 0xfa, 0x4c, 0x73, 0xd2, 0xff, 0x3d, 0xa0, 0x6b, 0x47, 0xf5, 0xdb, 0x43, + 0xfb, 0x67, 0x05, 0xd6, 0xf2, 0x41, 0xed, 0x23, 0xc0, 0xea, 0x09, 0x74, 0x8e, 0xb0, 0x4f, 0x5d, + 0x39, 0x19, 0x67, 0x61, 0x2c, 0xc1, 0x0c, 0xe3, 0x98, 0x9b, 0x82, 0x57, 0x02, 0xfa, 0x0c, 0x5a, + 0xdb, 0x91, 0x1f, 0x25, 0x45, 0x35, 0x47, 0x2c, 0x18, 0x35, 0x29, 0xa0, 0xdf, 0x42, 0x4b, 0xce, + 0xdb, 0x99, 0xda, 0x3a, 0x34, 0x79, 0x1a, 0x86, 0xc4, 0x1f, 0x15, 0x48, 0x04, 0xd4, 0x92, 0x88, + 0x1a, 0x75, 0x61, 0x79, 0x87, 0x4c, 0x70, 0xea, 0xf3, 0x6f, 0x31, 0x27, 0x67, 0xf8, 0xc2, 0x6c, + 0x45, 0xdf, 0xc3, 0xbc, 0x2a, 0xc6, 0xbb, 0x21, 0x94, 0xd5, 0x68, 0xb5, 0x58, 0xa3, 0x36, 0xb4, + 0x77, 0x0f, 0xfa, 0xb2, 0x6b, 0x65, 0xe6, 0x36, 0xa0, 0x4d, 0xd9, 0x88, 0xd1, 0xd0, 0xf3, 0xc9, + 0x08, 0x3b, 0x05, 0x8b, 0xf3, 0x94, 0x1d, 0xc8, 0xe5, 0x9e, 0x63, 0x6c, 0xaa, 0x3e, 0x68, 0x15, + 0xfb, 0xe0, 0x16, 0x2c, 0xee, 0x1e, 0xf4, 0x83, 0x38, 0x4a, 0x78, 0xa1, 0xf9, 0x88, 0x5a, 0x26, + 0x6c, 0x44, 0xe5, 0xba, 0x9e, 0xeb, 0xeb, 0x84, 0x29, 0x3d, 0xf4, 0x1a, 0x16, 0x07, 0xd8, 0x19, + 0x44, 0x63, 0xea, 0x53, 0x9e, 0x9d, 0x55, 0x36, 0x72, 0x36, 0x62, 0x9c, 0x3a, 0x27, 0x17, 0x3a, + 0x86, 0x3a, 0x65, 0x07, 0x52, 0x16, 0x83, 0x00, 0x23, 0x3f, 0xa6, 0x24, 0x74, 0xc8, 0x28, 0x4c, + 0x03, 0x33, 0x56, 0x99, 0xb5, 0xfd, 0x34, 0x40, 0x9f, 0xc1, 0x7d, 0x19, 0x42, 0x32, 0xc0, 0x79, + 0x42, 0x89, 0x0f, 0x5c, 0xec, 0xe8, 0x10, 0xc4, 0x23, 0x7a, 0x01, 0x8b, 0x87, 0x09, 0x9e, 0x4c, + 0xa8, 0x63, 0x63, 0x9e, 0xe3, 0x7a, 0xb9, 0x41, 0x76, 0xa0, 0x96, 0x88, 0x0c, 0x10, 0x8e, 0x2c, + 0x5b, 0x3e, 0xa3, 0xef, 0xe1, 0x81, 0xde, 0x2a, 0x30, 0x29, 0xe4, 0xcb, 0x2a, 0xd4, 0x39, 0x49, + 0x02, 0x1a, 0x62, 0xdf, 0x44, 0x6e, 0x64, 0xd1, 0xe4, 0x18, 0x0e, 0x62, 0x5f, 0x99, 0xaa, 0xdb, + 0x5a, 0x42, 0xaf, 0x01, 0xd9, 0xc4, 0xa5, 0x09, 0x71, 0xf8, 0x0d, 0xe4, 0x71, 0x39, 0xac, 0x4b, + 0x09, 0x6d, 0x4d, 0x25, 0xf4, 0xdf, 0xe1, 0xb1, 0x31, 0x7b, 0x13, 0x07, 0x5c, 0xfb, 0xfd, 0x77, + 0xbb, 0x87, 0xa3, 0xdc, 0xc3, 0x4d, 0xa5, 0x7c, 0xe7, 0xc8, 0x7f, 0x9d, 0xa1, 0x6b, 0x93, 0x00, + 0x27, 0x27, 0x99, 0xa5, 0x0e, 0xd4, 0x5c, 0xe6, 0x98, 0xd6, 0x2d, 0x9f, 0xd1, 0x57, 0xb0, 0xf0, + 0x3a, 0x3c, 0x09, 0xa3, 0xb3, 0xb0, 0xa8, 0xf6, 0x96, 0x5f, 0x69, 0x47, 0xf0, 0x89, 0xd9, 0x75, + 0xe5, 0x9f, 0x85, 0xe7, 0xd3, 0x7f, 0x16, 0xae, 0x6b, 0x01, 0xa5, 0xff, 0x0d, 0xdb, 0xd0, 0xee, + 0xb1, 0x67, 0xef, 0xf9, 0x6f, 0xe7, 0x6b, 0x58, 0xee, 0xb1, 0x67, 0xef, 0xf7, 0xcb, 0x84, 0xc0, + 0xe2, 0x30, 0x60, 0xf4, 0x50, 0x52, 0x4c, 0x6e, 0x60, 0x09, 0x66, 0x26, 0x3e, 0xf6, 0xcc, 0xad, + 0x28, 0x21, 0xc3, 0xcd, 0x2a, 0xe3, 0xa6, 0x8a, 0xbd, 0x5a, 0x28, 0x76, 0xfd, 0xdb, 0xa4, 0x26, + 0xa1, 0xb4, 0xa8, 0x8b, 0xfe, 0x0c, 0x9f, 0x2a, 0x17, 0x92, 0xef, 0x0e, 0xd2, 0xf1, 0xe1, 0xde, + 0x51, 0xe9, 0x57, 0x43, 0x71, 0x7c, 0x68, 0xa9, 0xf1, 0x61, 0x19, 0x66, 0x9d, 0x28, 0x3a, 0xa1, + 0xe6, 0x4a, 0xb4, 0x84, 0x7e, 0x0f, 0x2b, 0x53, 0xb6, 0x86, 0x02, 0x69, 0x27, 0xf2, 0x45, 0x7d, + 0xc5, 0xfa, 0x59, 0xdb, 0xca, 0x64, 0xb4, 0x09, 0xcb, 0x53, 0x1b, 0x25, 0x4d, 0x5f, 0x43, 0xcf, + 0x3b, 0xd0, 0x9d, 0xd2, 0xd7, 0xa9, 0x74, 0x87, 0x14, 0xda, 0x87, 0xf9, 0x82, 0x95, 0xc3, 0xbd, + 0xa3, 0x2b, 0xf7, 0x6e, 0x40, 0x8d, 0xfb, 0xa7, 0x37, 0x8f, 0x5d, 0x52, 0x03, 0xed, 0xc0, 0x52, + 0xc1, 0x5e, 0x7e, 0x65, 0xbf, 0xd1, 0x16, 0x54, 0xea, 0x74, 0xf3, 0xd4, 0x29, 0x7b, 0xd7, 0x56, + 0x74, 0xe7, 0x7f, 0xfe, 0x11, 0x76, 0xfe, 0x32, 0x2f, 0x3d, 0xff, 0x00, 0xbc, 0xf4, 0x57, 0x58, + 0xef, 0x0f, 0x9f, 0x7f, 0x90, 0xc2, 0x7e, 0x02, 0xed, 0x1e, 0xf5, 0x04, 0xd0, 0xfd, 0x6f, 0x87, + 0x03, 0xc2, 0x13, 0xea, 0x88, 0x44, 0x0e, 0xe4, 0x93, 0x0c, 0xb4, 0x66, 0x6b, 0x09, 0xbd, 0x84, + 0x79, 0xad, 0x7b, 0xf7, 0xac, 0x7a, 0x01, 0x2d, 0xb1, 0xb7, 0x38, 0xb0, 0x16, 0xaf, 0xff, 0xa6, + 0x04, 0x4a, 0x61, 0x7e, 0x4f, 0xf4, 0x5e, 0x73, 0x6e, 0xd9, 0x32, 0x3d, 0x3f, 0x1a, 0x67, 0x88, + 0x29, 0xf7, 0x4d, 0xb5, 0x26, 0x21, 0xcb, 0x31, 0x75, 0x31, 0xc7, 0xbf, 0x2b, 0x61, 0xba, 0x23, + 0x56, 0xca, 0x0a, 0x5b, 0x9a, 0x0d, 0x72, 0x85, 0x2d, 0xf4, 0x17, 0xf1, 0x19, 0x5c, 0x70, 0x5b, + 0x82, 0xfb, 0xe5, 0x55, 0x70, 0x17, 0x72, 0xb8, 0x1c, 0x70, 0x19, 0x72, 0x1b, 0xda, 0x1a, 0xbf, + 0x77, 0xe4, 0xaf, 0xe9, 0x01, 0x68, 0x3c, 0x2b, 0x71, 0xfb, 0xe2, 0x7f, 0x01, 0x00, 0x00, 0xff, + 0xff, 0xc5, 0x72, 0x43, 0xec, 0x2c, 0x18, 0x00, 0x00, } diff --git a/api/attribute.proto b/api/attribute.proto index dea22b4f..c07ad05c 100644 --- a/api/attribute.proto +++ b/api/attribute.proto @@ -22,6 +22,7 @@ syntax = "proto3"; import "google/protobuf/any.proto"; +import "gobgp.proto"; package gobgpapi; @@ -267,7 +268,7 @@ message OpaqueNLRI { } message MpReachNLRIAttribute { - uint32 family = 1; + gobgpapi.Family family = 1; repeated string next_hops = 2; // Each NLRI must be one of: // - IPAddressPrefix @@ -287,7 +288,7 @@ message MpReachNLRIAttribute { } message MpUnreachNLRIAttribute { - uint32 family = 1; + gobgpapi.Family family = 1; // The same as NLRI field of MpReachNLRIAttribute repeated google.protobuf.Any nlris = 3; } diff --git a/api/capability.pb.go b/api/capability.pb.go index 9fcccbe8..d3a61769 100644 --- a/api/capability.pb.go +++ b/api/capability.pb.go @@ -1,6 +1,5 @@ -// Code generated by protoc-gen-go. +// Code generated by protoc-gen-go. DO NOT EDIT. // source: capability.proto -// DO NOT EDIT! package gobgpapi @@ -41,7 +40,7 @@ func (x AddPathMode) String() string { func (AddPathMode) EnumDescriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } type MultiProtocolCapability struct { - Family Family `protobuf:"varint,1,opt,name=family,enum=gobgpapi.Family" json:"family,omitempty"` + Family *Family `protobuf:"bytes,1,opt,name=family" json:"family,omitempty"` } func (m *MultiProtocolCapability) Reset() { *m = MultiProtocolCapability{} } @@ -49,11 +48,11 @@ func (m *MultiProtocolCapability) String() string { return proto.Comp func (*MultiProtocolCapability) ProtoMessage() {} func (*MultiProtocolCapability) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } -func (m *MultiProtocolCapability) GetFamily() Family { +func (m *MultiProtocolCapability) GetFamily() *Family { if m != nil { return m.Family } - return Family_RESERVED + return nil } type RouteRefreshCapability struct { @@ -73,11 +72,11 @@ func (*CarryingLabelInfoCapability) ProtoMessage() {} func (*CarryingLabelInfoCapability) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{2} } type ExtendedNexthopCapabilityTuple struct { - NlriFamily Family `protobuf:"varint,1,opt,name=nlri_family,json=nlriFamily,enum=gobgpapi.Family" json:"nlri_family,omitempty"` + NlriFamily *Family `protobuf:"bytes,1,opt,name=nlri_family,json=nlriFamily" json:"nlri_family,omitempty"` // Nexthop AFI must be either // gobgp.IPv4 or // gobgp.IPv6. - NexthopFamily Family `protobuf:"varint,2,opt,name=nexthop_family,json=nexthopFamily,enum=gobgpapi.Family" json:"nexthop_family,omitempty"` + NexthopFamily *Family `protobuf:"bytes,2,opt,name=nexthop_family,json=nexthopFamily" json:"nexthop_family,omitempty"` } func (m *ExtendedNexthopCapabilityTuple) Reset() { *m = ExtendedNexthopCapabilityTuple{} } @@ -85,18 +84,18 @@ func (m *ExtendedNexthopCapabilityTuple) String() string { return pro func (*ExtendedNexthopCapabilityTuple) ProtoMessage() {} func (*ExtendedNexthopCapabilityTuple) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{3} } -func (m *ExtendedNexthopCapabilityTuple) GetNlriFamily() Family { +func (m *ExtendedNexthopCapabilityTuple) GetNlriFamily() *Family { if m != nil { return m.NlriFamily } - return Family_RESERVED + return nil } -func (m *ExtendedNexthopCapabilityTuple) GetNexthopFamily() Family { +func (m *ExtendedNexthopCapabilityTuple) GetNexthopFamily() *Family { if m != nil { return m.NexthopFamily } - return Family_RESERVED + return nil } type ExtendedNexthopCapability struct { @@ -116,8 +115,8 @@ func (m *ExtendedNexthopCapability) GetTuples() []*ExtendedNexthopCapabilityTupl } type GracefulRestartCapabilityTuple struct { - Family Family `protobuf:"varint,1,opt,name=family,enum=gobgpapi.Family" json:"family,omitempty"` - Flags uint32 `protobuf:"varint,2,opt,name=flags" json:"flags,omitempty"` + Family *Family `protobuf:"bytes,1,opt,name=family" json:"family,omitempty"` + Flags uint32 `protobuf:"varint,2,opt,name=flags" json:"flags,omitempty"` } func (m *GracefulRestartCapabilityTuple) Reset() { *m = GracefulRestartCapabilityTuple{} } @@ -125,11 +124,11 @@ func (m *GracefulRestartCapabilityTuple) String() string { return pro func (*GracefulRestartCapabilityTuple) ProtoMessage() {} func (*GracefulRestartCapabilityTuple) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{5} } -func (m *GracefulRestartCapabilityTuple) GetFamily() Family { +func (m *GracefulRestartCapabilityTuple) GetFamily() *Family { if m != nil { return m.Family } - return Family_RESERVED + return nil } func (m *GracefulRestartCapabilityTuple) GetFlags() uint32 { @@ -188,7 +187,7 @@ func (m *FourOctetASNumberCapability) GetAs() uint32 { } type AddPathCapabilityTuple struct { - Family Family `protobuf:"varint,1,opt,name=family,enum=gobgpapi.Family" json:"family,omitempty"` + Family *Family `protobuf:"bytes,1,opt,name=family" json:"family,omitempty"` Mode AddPathMode `protobuf:"varint,2,opt,name=mode,enum=gobgpapi.AddPathMode" json:"mode,omitempty"` } @@ -197,11 +196,11 @@ func (m *AddPathCapabilityTuple) String() string { return proto.Compa func (*AddPathCapabilityTuple) ProtoMessage() {} func (*AddPathCapabilityTuple) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{8} } -func (m *AddPathCapabilityTuple) GetFamily() Family { +func (m *AddPathCapabilityTuple) GetFamily() *Family { if m != nil { return m.Family } - return Family_RESERVED + return nil } func (m *AddPathCapabilityTuple) GetMode() AddPathMode { @@ -236,9 +235,9 @@ func (*EnhancedRouteRefreshCapability) ProtoMessage() {} func (*EnhancedRouteRefreshCapability) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{10} } type LongLivedGracefulRestartCapabilityTuple struct { - Family Family `protobuf:"varint,1,opt,name=family,enum=gobgpapi.Family" json:"family,omitempty"` - Flags uint32 `protobuf:"varint,2,opt,name=flags" json:"flags,omitempty"` - Time uint32 `protobuf:"varint,3,opt,name=time" json:"time,omitempty"` + Family *Family `protobuf:"bytes,1,opt,name=family" json:"family,omitempty"` + Flags uint32 `protobuf:"varint,2,opt,name=flags" json:"flags,omitempty"` + Time uint32 `protobuf:"varint,3,opt,name=time" json:"time,omitempty"` } func (m *LongLivedGracefulRestartCapabilityTuple) Reset() { @@ -250,11 +249,11 @@ func (*LongLivedGracefulRestartCapabilityTuple) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{11} } -func (m *LongLivedGracefulRestartCapabilityTuple) GetFamily() Family { +func (m *LongLivedGracefulRestartCapabilityTuple) GetFamily() *Family { if m != nil { return m.Family } - return Family_RESERVED + return nil } func (m *LongLivedGracefulRestartCapabilityTuple) GetFlags() uint32 { @@ -344,37 +343,37 @@ func init() { proto.RegisterFile("capability.proto", fileDescriptor2) } var fileDescriptor2 = []byte{ // 520 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x54, 0xcd, 0x6f, 0xd3, 0x4e, - 0x10, 0xfd, 0x39, 0xc9, 0x2f, 0x82, 0x49, 0x13, 0xb9, 0x2b, 0x28, 0x29, 0x51, 0xa3, 0x68, 0x2f, - 0x04, 0x24, 0x22, 0xb5, 0x1c, 0xe0, 0x82, 0x44, 0x49, 0x5d, 0x88, 0x94, 0x8f, 0xca, 0x2d, 0xdc, - 0x50, 0xd9, 0xd8, 0x6b, 0x67, 0xc5, 0x7a, 0xd7, 0xb2, 0xd7, 0xa5, 0x39, 0x70, 0xe6, 0xc2, 0x1f, - 0x8d, 0xfc, 0x11, 0xdb, 0xa4, 0x72, 0x5b, 0x21, 0x71, 0x9b, 0xf1, 0xce, 0xbc, 0x79, 0x6f, 0xde, - 0xae, 0x41, 0xb7, 0x88, 0x4f, 0x96, 0x8c, 0x33, 0xb5, 0x1e, 0xf9, 0x81, 0x54, 0x12, 0x3d, 0x70, - 0xe5, 0xd2, 0xf5, 0x89, 0xcf, 0x9e, 0xb6, 0x92, 0x28, 0xfd, 0x8c, 0xc7, 0xf0, 0x64, 0x16, 0x71, - 0xc5, 0xce, 0xe2, 0xcc, 0x92, 0x7c, 0x9c, 0xf7, 0xa1, 0x21, 0x34, 0x1d, 0xe2, 0x31, 0xbe, 0xee, - 0x6a, 0x03, 0x6d, 0xd8, 0x39, 0xd2, 0x47, 0x1b, 0x88, 0xd1, 0x69, 0xf2, 0xdd, 0xcc, 0xce, 0x71, - 0x17, 0xf6, 0x4c, 0x19, 0x29, 0x6a, 0x52, 0x27, 0xa0, 0xe1, 0xaa, 0xc0, 0xc0, 0x07, 0xd0, 0x1b, - 0x93, 0x20, 0x58, 0x33, 0xe1, 0x4e, 0xc9, 0x92, 0xf2, 0x89, 0x70, 0x64, 0xe9, 0xf8, 0x97, 0x06, - 0x7d, 0xe3, 0x5a, 0x51, 0x61, 0x53, 0x7b, 0x4e, 0xaf, 0xd5, 0x4a, 0xfa, 0xc5, 0xe9, 0x45, 0xe4, - 0x73, 0x8a, 0x0e, 0xa1, 0x25, 0x78, 0xc0, 0x2e, 0xef, 0xa0, 0x02, 0x71, 0x51, 0x1a, 0xa3, 0xd7, - 0xd0, 0x11, 0x29, 0xd8, 0xa6, 0xab, 0x56, 0xd1, 0xd5, 0xce, 0xea, 0xd2, 0x14, 0x7f, 0x81, 0xfd, - 0x4a, 0x36, 0xe8, 0x1d, 0x34, 0x55, 0xcc, 0x28, 0xec, 0x6a, 0x83, 0xfa, 0xb0, 0x75, 0x34, 0x2c, - 0xd0, 0x6e, 0x97, 0x60, 0x66, 0x7d, 0xf8, 0x2b, 0xf4, 0x3f, 0x04, 0xc4, 0xa2, 0x4e, 0xc4, 0x4d, - 0x1a, 0x2a, 0x12, 0xa8, 0x6d, 0xb1, 0xf7, 0x5e, 0x39, 0x7a, 0x04, 0xff, 0x3b, 0x9c, 0xb8, 0x61, - 0x22, 0xad, 0x6d, 0xa6, 0x09, 0xfe, 0xa9, 0xc1, 0x7e, 0xe5, 0x88, 0xa2, 0x47, 0x2b, 0xf5, 0x20, - 0x04, 0x0d, 0xc5, 0x3c, 0x9a, 0x01, 0x25, 0x71, 0x49, 0x6b, 0x7d, 0x5b, 0xeb, 0xed, 0x0a, 0x72, - 0xad, 0x2f, 0xa1, 0x77, 0x2a, 0xa3, 0x60, 0x61, 0x29, 0xaa, 0x8e, 0xcf, 0xe7, 0x91, 0xb7, 0xa4, - 0x41, 0x89, 0x4a, 0x07, 0x6a, 0x64, 0xc3, 0xa3, 0x46, 0x42, 0xec, 0xc1, 0xde, 0xb1, 0x6d, 0x9f, - 0x11, 0xb5, 0xfa, 0xfb, 0x95, 0x3c, 0x87, 0x86, 0x27, 0x6d, 0x9a, 0x99, 0xfd, 0xb8, 0xa8, 0xcb, - 0x90, 0x67, 0xd2, 0xa6, 0x66, 0x52, 0x82, 0x67, 0xb0, 0x7b, 0x63, 0x1c, 0x7a, 0xb3, 0x65, 0xf0, - 0xe0, 0x06, 0x42, 0x95, 0xd8, 0x01, 0xf4, 0x0d, 0xb1, 0x22, 0xc2, 0xa2, 0x76, 0xc5, 0x3b, 0xf8, - 0x01, 0xcf, 0xa6, 0x52, 0xb8, 0x53, 0x76, 0x45, 0xed, 0x7f, 0x7b, 0x07, 0x72, 0x3f, 0xeb, 0x85, - 0x9f, 0x58, 0x02, 0xbe, 0x7b, 0x3c, 0x9a, 0x6c, 0x2d, 0xe0, 0xb0, 0x98, 0x7c, 0x4f, 0xf2, 0xf9, - 0x46, 0x0e, 0xa0, 0xf7, 0xc7, 0x26, 0x58, 0x68, 0x95, 0xdf, 0xfd, 0x5b, 0xd8, 0xfd, 0x24, 0xbe, - 0x09, 0xf9, 0x5d, 0x94, 0xc6, 0x23, 0x68, 0x58, 0xb1, 0x7f, 0xe9, 0xad, 0x48, 0xe2, 0x58, 0xe2, - 0x15, 0xe1, 0x51, 0x6a, 0xea, 0x8e, 0x99, 0x26, 0x2f, 0xa6, 0xd0, 0x2a, 0x79, 0x8a, 0xda, 0xf0, - 0x70, 0xb6, 0x38, 0x31, 0x2e, 0xe7, 0x8b, 0xb9, 0xa1, 0xff, 0x87, 0x74, 0xd8, 0x49, 0x52, 0xd3, - 0x18, 0x1b, 0x93, 0xcf, 0x86, 0xae, 0xe5, 0x05, 0xe7, 0xc6, 0xfc, 0x44, 0xaf, 0xe5, 0xe9, 0xfb, - 0xc5, 0xc5, 0x47, 0xbd, 0xbe, 0x6c, 0x26, 0x7f, 0xc2, 0x57, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, - 0xd6, 0xbd, 0xd3, 0xc3, 0x34, 0x05, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x54, 0x4d, 0x6f, 0xd3, 0x40, + 0x10, 0xc5, 0x49, 0x88, 0x60, 0xd2, 0x44, 0xee, 0x0a, 0x4a, 0x4a, 0xd4, 0x28, 0xda, 0x0b, 0x01, + 0x89, 0x48, 0x0d, 0x07, 0xb8, 0x20, 0x51, 0x52, 0x17, 0x22, 0xe5, 0xa3, 0x72, 0x0b, 0x37, 0x54, + 0x36, 0xf6, 0xc6, 0x59, 0xb1, 0xde, 0xb5, 0xec, 0x75, 0x69, 0x0e, 0x9c, 0xb9, 0xf0, 0xa3, 0x91, + 0x3f, 0x62, 0x9b, 0x54, 0x6e, 0x2b, 0xa4, 0xde, 0x66, 0xbc, 0x33, 0x6f, 0xde, 0x9b, 0xb7, 0x6b, + 0xd0, 0x2d, 0xe2, 0x91, 0x05, 0xe3, 0x4c, 0xad, 0x07, 0x9e, 0x2f, 0x95, 0x44, 0x8f, 0x1c, 0xb9, + 0x70, 0x3c, 0xe2, 0xb1, 0xe7, 0x8d, 0x38, 0x4a, 0x3e, 0xe3, 0x11, 0x3c, 0x9b, 0x86, 0x5c, 0xb1, + 0xd3, 0x28, 0xb3, 0x24, 0x1f, 0x65, 0x7d, 0xa8, 0x0f, 0xf5, 0x25, 0x71, 0x19, 0x5f, 0xb7, 0xb5, + 0x9e, 0xd6, 0x6f, 0x0c, 0xf5, 0xc1, 0x06, 0x62, 0x70, 0x12, 0x7f, 0x37, 0xd3, 0x73, 0xdc, 0x86, + 0x3d, 0x53, 0x86, 0x8a, 0x9a, 0x74, 0xe9, 0xd3, 0x60, 0x95, 0x63, 0xe0, 0x03, 0xe8, 0x8c, 0x88, + 0xef, 0xaf, 0x99, 0x70, 0x26, 0x64, 0x41, 0xf9, 0x58, 0x2c, 0x65, 0xe1, 0xf8, 0x8f, 0x06, 0x5d, + 0xe3, 0x4a, 0x51, 0x61, 0x53, 0x7b, 0x46, 0xaf, 0xd4, 0x4a, 0x7a, 0xf9, 0xe9, 0x79, 0xe8, 0x71, + 0x8a, 0x0e, 0xa1, 0x21, 0xb8, 0xcf, 0x2e, 0x6e, 0xa1, 0x02, 0x51, 0x51, 0x12, 0xa3, 0xb7, 0xd0, + 0x12, 0x09, 0xd8, 0xa6, 0xab, 0x52, 0xd2, 0xd5, 0x4c, 0xeb, 0x92, 0x14, 0x7f, 0x83, 0xfd, 0x52, + 0x36, 0xe8, 0x03, 0xd4, 0x55, 0xc4, 0x28, 0x68, 0x6b, 0xbd, 0x6a, 0xbf, 0x31, 0xec, 0xe7, 0x68, + 0x37, 0x4b, 0x30, 0xd3, 0x3e, 0xfc, 0x1d, 0xba, 0x9f, 0x7c, 0x62, 0xd1, 0x65, 0xc8, 0x4d, 0x1a, + 0x28, 0xe2, 0xab, 0x6d, 0xb1, 0x77, 0x5e, 0x39, 0x7a, 0x02, 0x0f, 0x97, 0x9c, 0x38, 0x41, 0x2c, + 0xad, 0x69, 0x26, 0x09, 0xfe, 0xad, 0xc1, 0x7e, 0xe9, 0x88, 0xbc, 0x47, 0x2b, 0xf4, 0x20, 0x04, + 0x35, 0xc5, 0x5c, 0x9a, 0x02, 0xc5, 0x71, 0x41, 0x6b, 0x75, 0x5b, 0xeb, 0xcd, 0x0a, 0x32, 0xad, + 0xaf, 0xa1, 0x73, 0x22, 0x43, 0x7f, 0x6e, 0x29, 0xaa, 0x8e, 0xce, 0x66, 0xa1, 0xbb, 0xa0, 0x7e, + 0x81, 0x4a, 0x0b, 0x2a, 0x64, 0xc3, 0xa3, 0x42, 0x02, 0xec, 0xc2, 0xde, 0x91, 0x6d, 0x9f, 0x12, + 0xb5, 0xfa, 0xff, 0x95, 0xbc, 0x84, 0x9a, 0x2b, 0xed, 0x44, 0x48, 0x6b, 0xf8, 0x34, 0xaf, 0x4b, + 0x91, 0xa7, 0xd2, 0xa6, 0x66, 0x5c, 0x82, 0xa7, 0xb0, 0x7b, 0x6d, 0x1c, 0x7a, 0xb7, 0x65, 0x70, + 0xef, 0x1a, 0x42, 0x99, 0xd8, 0x1e, 0x74, 0x0d, 0xb1, 0x22, 0xc2, 0xa2, 0x76, 0xc9, 0x3b, 0xf8, + 0x05, 0x2f, 0x26, 0x52, 0x38, 0x13, 0x76, 0x49, 0xed, 0xfb, 0xbd, 0x03, 0x99, 0x9f, 0xd5, 0xdc, + 0x4f, 0x2c, 0x01, 0xdf, 0x3e, 0x1e, 0x8d, 0xb7, 0x16, 0x70, 0x98, 0x4f, 0xbe, 0x23, 0xf9, 0x6c, + 0x23, 0x07, 0xd0, 0xf9, 0x67, 0x13, 0x2c, 0xb0, 0x8a, 0xef, 0xfe, 0x3d, 0xec, 0x7e, 0x11, 0x3f, + 0x84, 0xfc, 0x29, 0x0a, 0xe3, 0x11, 0xd4, 0xac, 0xc8, 0xbf, 0xe4, 0x56, 0xc4, 0x71, 0x24, 0xf1, + 0x92, 0xf0, 0x30, 0x31, 0x75, 0xc7, 0x4c, 0x92, 0x57, 0x13, 0x68, 0x14, 0x3c, 0x45, 0x4d, 0x78, + 0x3c, 0x9d, 0x1f, 0x1b, 0x17, 0xb3, 0xf9, 0xcc, 0xd0, 0x1f, 0x20, 0x1d, 0x76, 0xe2, 0xd4, 0x34, + 0x46, 0xc6, 0xf8, 0xab, 0xa1, 0x6b, 0x59, 0xc1, 0x99, 0x31, 0x3b, 0xd6, 0x2b, 0x59, 0xfa, 0x71, + 0x7e, 0xfe, 0x59, 0xaf, 0x2e, 0xea, 0xf1, 0x9f, 0xf0, 0xcd, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x3b, 0xec, 0xd3, 0x4d, 0x34, 0x05, 0x00, 0x00, } diff --git a/api/gobgp.pb.go b/api/gobgp.pb.go index 06910f77..ef0e165f 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. @@ -78,6 +77,7 @@ It has these top-level messages: DisableMrtRequest AddBmpRequest DeleteBmpRequest + Family RPKIValidation Path Destination @@ -264,88 +264,6 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package -// Constants for address families -type Family int32 - -const ( - Family_RESERVED Family = 0 - Family_IPv4 Family = 65537 - Family_IPv6 Family = 131073 - Family_IPv4_MC Family = 65538 - Family_IPv6_MC Family = 131074 - Family_IPv4_MPLS Family = 65540 - Family_IPv6_MPLS Family = 131076 - Family_IPv4_VPN Family = 65664 - Family_IPv6_VPN Family = 131200 - Family_IPv4_VPN_MC Family = 65665 - Family_IPv6_VPN_MC Family = 131201 - Family_VPLS Family = 1638465 - Family_EVPN Family = 1638470 - Family_RTC Family = 65668 - Family_IPv4_ENCAP Family = 65543 - Family_IPv6_ENCAP Family = 131079 - Family_FLOW_SPEC_IPv4 Family = 65669 - Family_FLOW_SPEC_IPv6 Family = 131205 - Family_FLOW_SPEC_IPv4_VPN Family = 65670 - Family_FLOW_SPEC_IPv6_VPN Family = 131206 - Family_FLOW_SPEC_L2_VPN Family = 1638534 - Family_OPAQUE Family = 1074594033 -) - -var Family_name = map[int32]string{ - 0: "RESERVED", - 65537: "IPv4", - 131073: "IPv6", - 65538: "IPv4_MC", - 131074: "IPv6_MC", - 65540: "IPv4_MPLS", - 131076: "IPv6_MPLS", - 65664: "IPv4_VPN", - 131200: "IPv6_VPN", - 65665: "IPv4_VPN_MC", - 131201: "IPv6_VPN_MC", - 1638465: "VPLS", - 1638470: "EVPN", - 65668: "RTC", - 65543: "IPv4_ENCAP", - 131079: "IPv6_ENCAP", - 65669: "FLOW_SPEC_IPv4", - 131205: "FLOW_SPEC_IPv6", - 65670: "FLOW_SPEC_IPv4_VPN", - 131206: "FLOW_SPEC_IPv6_VPN", - 1638534: "FLOW_SPEC_L2_VPN", - 1074594033: "OPAQUE", -} -var Family_value = map[string]int32{ - "RESERVED": 0, - "IPv4": 65537, - "IPv6": 131073, - "IPv4_MC": 65538, - "IPv6_MC": 131074, - "IPv4_MPLS": 65540, - "IPv6_MPLS": 131076, - "IPv4_VPN": 65664, - "IPv6_VPN": 131200, - "IPv4_VPN_MC": 65665, - "IPv6_VPN_MC": 131201, - "VPLS": 1638465, - "EVPN": 1638470, - "RTC": 65668, - "IPv4_ENCAP": 65543, - "IPv6_ENCAP": 131079, - "FLOW_SPEC_IPv4": 65669, - "FLOW_SPEC_IPv6": 131205, - "FLOW_SPEC_IPv4_VPN": 65670, - "FLOW_SPEC_IPv6_VPN": 131206, - "FLOW_SPEC_L2_VPN": 1638534, - "OPAQUE": 1074594033, -} - -func (x Family) String() string { - return proto.EnumName(Family_name, int32(x)) -} -func (Family) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } - type Resource int32 const ( @@ -374,7 +292,7 @@ var Resource_value = map[string]int32{ func (x Resource) String() string { return proto.EnumName(Resource_name, int32(x)) } -func (Resource) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } +func (Resource) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } // API representation of table.LookupOption type TableLookupOption int32 @@ -399,7 +317,7 @@ var TableLookupOption_value = map[string]int32{ func (x TableLookupOption) String() string { return proto.EnumName(TableLookupOption_name, int32(x)) } -func (TableLookupOption) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } +func (TableLookupOption) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } type DefinedType int32 @@ -438,7 +356,7 @@ var DefinedType_value = map[string]int32{ func (x DefinedType) String() string { return proto.EnumName(DefinedType_name, int32(x)) } -func (DefinedType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } +func (DefinedType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } type MatchType int32 @@ -462,7 +380,7 @@ var MatchType_value = map[string]int32{ func (x MatchType) String() string { return proto.EnumName(MatchType_name, int32(x)) } -func (MatchType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } +func (MatchType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } type AsPathLengthType int32 @@ -486,7 +404,7 @@ var AsPathLengthType_value = map[string]int32{ func (x AsPathLengthType) String() string { return proto.EnumName(AsPathLengthType_name, int32(x)) } -func (AsPathLengthType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } +func (AsPathLengthType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } type RouteAction int32 @@ -510,7 +428,7 @@ var RouteAction_value = map[string]int32{ func (x RouteAction) String() string { return proto.EnumName(RouteAction_name, int32(x)) } -func (RouteAction) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } +func (RouteAction) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } type CommunityActionType int32 @@ -534,7 +452,7 @@ var CommunityActionType_value = map[string]int32{ func (x CommunityActionType) String() string { return proto.EnumName(CommunityActionType_name, int32(x)) } -func (CommunityActionType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } +func (CommunityActionType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } type MedActionType int32 @@ -555,7 +473,7 @@ var MedActionType_value = map[string]int32{ func (x MedActionType) String() string { return proto.EnumName(MedActionType_name, int32(x)) } -func (MedActionType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } +func (MedActionType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } type PolicyDirection int32 @@ -579,7 +497,7 @@ var PolicyDirection_value = map[string]int32{ func (x PolicyDirection) String() string { return proto.EnumName(PolicyDirection_name, int32(x)) } -func (PolicyDirection) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } +func (PolicyDirection) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } type ResetPeerRequest_SoftResetDirection int32 @@ -639,6 +557,90 @@ func (AddBmpRequest_MonitoringPolicy) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{65, 0} } +type Family_Afi int32 + +const ( + Family_AFI_UNKNOWN Family_Afi = 0 + Family_AFI_IP Family_Afi = 1 + Family_AFI_IP6 Family_Afi = 2 + Family_AFI_L2VPN Family_Afi = 25 + Family_AFI_OPAQUE Family_Afi = 16397 +) + +var Family_Afi_name = map[int32]string{ + 0: "AFI_UNKNOWN", + 1: "AFI_IP", + 2: "AFI_IP6", + 25: "AFI_L2VPN", + 16397: "AFI_OPAQUE", +} +var Family_Afi_value = map[string]int32{ + "AFI_UNKNOWN": 0, + "AFI_IP": 1, + "AFI_IP6": 2, + "AFI_L2VPN": 25, + "AFI_OPAQUE": 16397, +} + +func (x Family_Afi) String() string { + return proto.EnumName(Family_Afi_name, int32(x)) +} +func (Family_Afi) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{67, 0} } + +type Family_Safi int32 + +const ( + Family_SAFI_UNKNOWN Family_Safi = 0 + Family_SAFI_UNICAST Family_Safi = 1 + Family_SAFI_MULTICAST Family_Safi = 2 + Family_SAFI_MPLS_LABEL Family_Safi = 4 + Family_SAFI_ENCAPSULATION Family_Safi = 7 + Family_SAFI_VPLS Family_Safi = 65 + Family_SAFI_EVPN Family_Safi = 70 + Family_SAFI_MPLS_VPN Family_Safi = 128 + Family_SAFI_MPLS_VPN_MULTICAST Family_Safi = 129 + Family_SAFI_ROUTE_TARGET_CONSTRAINTS Family_Safi = 132 + Family_SAFI_FLOW_SPEC_UNICAST Family_Safi = 133 + Family_SAFI_FLOW_SPEC_VPN Family_Safi = 134 + Family_SAFI_KEY_VALUE Family_Safi = 241 +) + +var Family_Safi_name = map[int32]string{ + 0: "SAFI_UNKNOWN", + 1: "SAFI_UNICAST", + 2: "SAFI_MULTICAST", + 4: "SAFI_MPLS_LABEL", + 7: "SAFI_ENCAPSULATION", + 65: "SAFI_VPLS", + 70: "SAFI_EVPN", + 128: "SAFI_MPLS_VPN", + 129: "SAFI_MPLS_VPN_MULTICAST", + 132: "SAFI_ROUTE_TARGET_CONSTRAINTS", + 133: "SAFI_FLOW_SPEC_UNICAST", + 134: "SAFI_FLOW_SPEC_VPN", + 241: "SAFI_KEY_VALUE", +} +var Family_Safi_value = map[string]int32{ + "SAFI_UNKNOWN": 0, + "SAFI_UNICAST": 1, + "SAFI_MULTICAST": 2, + "SAFI_MPLS_LABEL": 4, + "SAFI_ENCAPSULATION": 7, + "SAFI_VPLS": 65, + "SAFI_EVPN": 70, + "SAFI_MPLS_VPN": 128, + "SAFI_MPLS_VPN_MULTICAST": 129, + "SAFI_ROUTE_TARGET_CONSTRAINTS": 132, + "SAFI_FLOW_SPEC_UNICAST": 133, + "SAFI_FLOW_SPEC_VPN": 134, + "SAFI_KEY_VALUE": 241, +} + +func (x Family_Safi) String() string { + return proto.EnumName(Family_Safi_name, int32(x)) +} +func (Family_Safi) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{67, 1} } + type RPKIValidation_State int32 const ( @@ -664,7 +666,7 @@ var RPKIValidation_State_value = map[string]int32{ func (x RPKIValidation_State) String() string { return proto.EnumName(RPKIValidation_State_name, int32(x)) } -func (RPKIValidation_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{67, 0} } +func (RPKIValidation_State) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{68, 0} } type RPKIValidation_Reason int32 @@ -688,7 +690,7 @@ var RPKIValidation_Reason_value = map[string]int32{ func (x RPKIValidation_Reason) String() string { return proto.EnumName(RPKIValidation_Reason_name, int32(x)) } -func (RPKIValidation_Reason) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{67, 1} } +func (RPKIValidation_Reason) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{68, 1} } type PeerConf_RemovePrivateAs int32 @@ -712,7 +714,7 @@ var PeerConf_RemovePrivateAs_value = map[string]int32{ func (x PeerConf_RemovePrivateAs) String() string { return proto.EnumName(PeerConf_RemovePrivateAs_name, int32(x)) } -func (PeerConf_RemovePrivateAs) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{76, 0} } +func (PeerConf_RemovePrivateAs) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{77, 0} } type PeerGroupConf_RemovePrivateAs int32 @@ -737,7 +739,7 @@ func (x PeerGroupConf_RemovePrivateAs) String() string { return proto.EnumName(PeerGroupConf_RemovePrivateAs_name, int32(x)) } func (PeerGroupConf_RemovePrivateAs) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{77, 0} + return fileDescriptor0, []int{78, 0} } type PeerGroupState_RemovePrivateAs int32 @@ -763,7 +765,7 @@ func (x PeerGroupState_RemovePrivateAs) String() string { return proto.EnumName(PeerGroupState_RemovePrivateAs_name, int32(x)) } func (PeerGroupState_RemovePrivateAs) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{78, 0} + return fileDescriptor0, []int{79, 0} } type PeerState_SessionState int32 @@ -800,7 +802,7 @@ var PeerState_SessionState_value = map[string]int32{ func (x PeerState_SessionState) String() string { return proto.EnumName(PeerState_SessionState_name, int32(x)) } -func (PeerState_SessionState) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{81, 0} } +func (PeerState_SessionState) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{82, 0} } type PeerState_AdminState int32 @@ -824,7 +826,7 @@ var PeerState_AdminState_value = map[string]int32{ func (x PeerState_AdminState) String() string { return proto.EnumName(PeerState_AdminState_name, int32(x)) } -func (PeerState_AdminState) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{81, 1} } +func (PeerState_AdminState) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{82, 1} } type Conditions_RouteType int32 @@ -851,7 +853,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{122, 0} } +func (Conditions_RouteType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{123, 0} } type StartBgpRequest struct { Global *Global `protobuf:"bytes,1,opt,name=global" json:"global,omitempty"` @@ -1309,7 +1311,7 @@ func (m *AddPathResponse) GetUuid() []byte { type DeletePathRequest struct { Resource Resource `protobuf:"varint,1,opt,name=resource,enum=gobgpapi.Resource" json:"resource,omitempty"` VrfId string `protobuf:"bytes,2,opt,name=vrf_id,json=vrfId" json:"vrf_id,omitempty"` - Family uint32 `protobuf:"varint,3,opt,name=family" json:"family,omitempty"` + Family *Family `protobuf:"bytes,3,opt,name=family" json:"family,omitempty"` Path *Path `protobuf:"bytes,4,opt,name=path" json:"path,omitempty"` Uuid []byte `protobuf:"bytes,5,opt,name=uuid,proto3" json:"uuid,omitempty"` } @@ -1333,11 +1335,11 @@ func (m *DeletePathRequest) GetVrfId() string { return "" } -func (m *DeletePathRequest) GetFamily() uint32 { +func (m *DeletePathRequest) GetFamily() *Family { if m != nil { return m.Family } - return 0 + return nil } func (m *DeletePathRequest) GetPath() *Path { @@ -1357,7 +1359,7 @@ func (m *DeletePathRequest) GetUuid() []byte { type ListPathRequest struct { Type Resource `protobuf:"varint,1,opt,name=type,enum=gobgpapi.Resource" json:"type,omitempty"` Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` - Family uint32 `protobuf:"varint,3,opt,name=family" json:"family,omitempty"` + Family *Family `protobuf:"bytes,3,opt,name=family" json:"family,omitempty"` Prefixes []*TableLookupPrefix `protobuf:"bytes,4,rep,name=prefixes" json:"prefixes,omitempty"` } @@ -1380,11 +1382,11 @@ func (m *ListPathRequest) GetName() string { return "" } -func (m *ListPathRequest) GetFamily() uint32 { +func (m *ListPathRequest) GetFamily() *Family { if m != nil { return m.Family } - return 0 + return nil } func (m *ListPathRequest) GetPrefixes() []*TableLookupPrefix { @@ -1444,7 +1446,7 @@ func (m *AddPathStreamRequest) GetPaths() []*Path { type GetTableRequest struct { Type Resource `protobuf:"varint,1,opt,name=type,enum=gobgpapi.Resource" json:"type,omitempty"` - Family uint32 `protobuf:"varint,2,opt,name=family" json:"family,omitempty"` + Family *Family `protobuf:"bytes,2,opt,name=family" json:"family,omitempty"` Name string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` } @@ -1460,11 +1462,11 @@ func (m *GetTableRequest) GetType() Resource { return Resource_GLOBAL } -func (m *GetTableRequest) GetFamily() uint32 { +func (m *GetTableRequest) GetFamily() *Family { if m != nil { return m.Family } - return 0 + return nil } func (m *GetTableRequest) GetName() string { @@ -1509,7 +1511,7 @@ func (m *GetTableResponse) GetNumAccepted() uint64 { type MonitorTableRequest struct { Type Resource `protobuf:"varint,1,opt,name=type,enum=gobgpapi.Resource" json:"type,omitempty"` Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` - Family uint32 `protobuf:"varint,3,opt,name=family" json:"family,omitempty"` + Family *Family `protobuf:"bytes,3,opt,name=family" json:"family,omitempty"` Current bool `protobuf:"varint,4,opt,name=current" json:"current,omitempty"` PostPolicy bool `protobuf:"varint,5,opt,name=post_policy,json=postPolicy" json:"post_policy,omitempty"` } @@ -1533,11 +1535,11 @@ func (m *MonitorTableRequest) GetName() string { return "" } -func (m *MonitorTableRequest) GetFamily() uint32 { +func (m *MonitorTableRequest) GetFamily() *Family { if m != nil { return m.Family } - return 0 + return nil } func (m *MonitorTableRequest) GetCurrent() bool { @@ -2063,7 +2065,7 @@ func (m *DeleteRpkiRequest) GetPort() uint32 { } type ListRpkiRequest struct { - Family uint32 `protobuf:"varint,1,opt,name=family" json:"family,omitempty"` + Family *Family `protobuf:"bytes,1,opt,name=family" json:"family,omitempty"` } func (m *ListRpkiRequest) Reset() { *m = ListRpkiRequest{} } @@ -2071,11 +2073,11 @@ func (m *ListRpkiRequest) String() string { return proto.CompactTextS func (*ListRpkiRequest) ProtoMessage() {} func (*ListRpkiRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{55} } -func (m *ListRpkiRequest) GetFamily() uint32 { +func (m *ListRpkiRequest) GetFamily() *Family { if m != nil { return m.Family } - return 0 + return nil } type ListRpkiResponse struct { @@ -2175,7 +2177,7 @@ func (m *ResetRpkiRequest) GetSoft() bool { } type ListRpkiTableRequest struct { - Family uint32 `protobuf:"varint,1,opt,name=family" json:"family,omitempty"` + Family *Family `protobuf:"bytes,1,opt,name=family" json:"family,omitempty"` } func (m *ListRpkiTableRequest) Reset() { *m = ListRpkiTableRequest{} } @@ -2183,11 +2185,11 @@ func (m *ListRpkiTableRequest) String() string { return proto.Compact func (*ListRpkiTableRequest) ProtoMessage() {} func (*ListRpkiTableRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{60} } -func (m *ListRpkiTableRequest) GetFamily() uint32 { +func (m *ListRpkiTableRequest) GetFamily() *Family { if m != nil { return m.Family } - return 0 + return nil } type ListRpkiTableResponse struct { @@ -2350,6 +2352,30 @@ func (m *DeleteBmpRequest) GetPort() uint32 { return 0 } +type Family struct { + Afi Family_Afi `protobuf:"varint,1,opt,name=afi,enum=gobgpapi.Family_Afi" json:"afi,omitempty"` + Safi Family_Safi `protobuf:"varint,2,opt,name=safi,enum=gobgpapi.Family_Safi" json:"safi,omitempty"` +} + +func (m *Family) Reset() { *m = Family{} } +func (m *Family) String() string { return proto.CompactTextString(m) } +func (*Family) ProtoMessage() {} +func (*Family) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{67} } + +func (m *Family) GetAfi() Family_Afi { + if m != nil { + return m.Afi + } + return Family_AFI_UNKNOWN +} + +func (m *Family) GetSafi() Family_Safi { + if m != nil { + return m.Safi + } + return Family_SAFI_UNKNOWN +} + type RPKIValidation struct { State RPKIValidation_State `protobuf:"varint,1,opt,name=state,enum=gobgpapi.RPKIValidation_State" json:"state,omitempty"` Reason RPKIValidation_Reason `protobuf:"varint,2,opt,name=reason,enum=gobgpapi.RPKIValidation_Reason" json:"reason,omitempty"` @@ -2361,7 +2387,7 @@ type RPKIValidation struct { func (m *RPKIValidation) Reset() { *m = RPKIValidation{} } func (m *RPKIValidation) String() string { return proto.CompactTextString(m) } func (*RPKIValidation) ProtoMessage() {} -func (*RPKIValidation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{67} } +func (*RPKIValidation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{68} } func (m *RPKIValidation) GetState() RPKIValidation_State { if m != nil { @@ -2407,7 +2433,7 @@ type Path struct { Validation int32 `protobuf:"varint,6,opt,name=validation" json:"validation,omitempty"` ValidationDetail *RPKIValidation `protobuf:"bytes,7,opt,name=validation_detail,json=validationDetail" json:"validation_detail,omitempty"` NoImplicitWithdraw bool `protobuf:"varint,8,opt,name=no_implicit_withdraw,json=noImplicitWithdraw" json:"no_implicit_withdraw,omitempty"` - Family uint32 `protobuf:"varint,9,opt,name=family" json:"family,omitempty"` + Family *Family `protobuf:"bytes,9,opt,name=family" json:"family,omitempty"` SourceAsn uint32 `protobuf:"varint,10,opt,name=source_asn,json=sourceAsn" json:"source_asn,omitempty"` SourceId string `protobuf:"bytes,11,opt,name=source_id,json=sourceId" json:"source_id,omitempty"` Filtered bool `protobuf:"varint,12,opt,name=filtered" json:"filtered,omitempty"` @@ -2441,7 +2467,7 @@ type Path struct { func (m *Path) Reset() { *m = Path{} } func (m *Path) String() string { return proto.CompactTextString(m) } func (*Path) ProtoMessage() {} -func (*Path) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{68} } +func (*Path) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{69} } func (m *Path) GetNlri() []byte { if m != nil { @@ -2499,11 +2525,11 @@ func (m *Path) GetNoImplicitWithdraw() bool { return false } -func (m *Path) GetFamily() uint32 { +func (m *Path) GetFamily() *Family { if m != nil { return m.Family } - return 0 + return nil } func (m *Path) GetSourceAsn() uint32 { @@ -2598,7 +2624,7 @@ type Destination struct { func (m *Destination) Reset() { *m = Destination{} } func (m *Destination) String() string { return proto.CompactTextString(m) } func (*Destination) ProtoMessage() {} -func (*Destination) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{69} } +func (*Destination) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{70} } func (m *Destination) GetPrefix() string { if m != nil { @@ -2623,7 +2649,7 @@ type TableLookupPrefix struct { func (m *TableLookupPrefix) Reset() { *m = TableLookupPrefix{} } func (m *TableLookupPrefix) String() string { return proto.CompactTextString(m) } func (*TableLookupPrefix) ProtoMessage() {} -func (*TableLookupPrefix) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{70} } +func (*TableLookupPrefix) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{71} } func (m *TableLookupPrefix) GetPrefix() string { if m != nil { @@ -2660,7 +2686,7 @@ type Peer struct { func (m *Peer) Reset() { *m = Peer{} } func (m *Peer) String() string { return proto.CompactTextString(m) } func (*Peer) ProtoMessage() {} -func (*Peer) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{71} } +func (*Peer) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{72} } func (m *Peer) GetFamilies() []uint32 { if m != nil { @@ -2767,7 +2793,7 @@ type PeerGroup struct { func (m *PeerGroup) Reset() { *m = PeerGroup{} } func (m *PeerGroup) String() string { return proto.CompactTextString(m) } func (*PeerGroup) ProtoMessage() {} -func (*PeerGroup) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{72} } +func (*PeerGroup) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{73} } func (m *PeerGroup) GetFamilies() []uint32 { if m != nil { @@ -2861,7 +2887,7 @@ type DynamicNeighbor struct { func (m *DynamicNeighbor) Reset() { *m = DynamicNeighbor{} } func (m *DynamicNeighbor) String() string { return proto.CompactTextString(m) } func (*DynamicNeighbor) ProtoMessage() {} -func (*DynamicNeighbor) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{73} } +func (*DynamicNeighbor) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{74} } func (m *DynamicNeighbor) GetPrefix() string { if m != nil { @@ -2886,7 +2912,7 @@ type ApplyPolicy struct { func (m *ApplyPolicy) Reset() { *m = ApplyPolicy{} } func (m *ApplyPolicy) String() string { return proto.CompactTextString(m) } func (*ApplyPolicy) ProtoMessage() {} -func (*ApplyPolicy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{74} } +func (*ApplyPolicy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{75} } func (m *ApplyPolicy) GetInPolicy() *PolicyAssignment { if m != nil { @@ -2910,21 +2936,21 @@ func (m *ApplyPolicy) GetImportPolicy() *PolicyAssignment { } type PrefixLimit struct { - Family uint32 `protobuf:"varint,1,opt,name=family" json:"family,omitempty"` - MaxPrefixes uint32 `protobuf:"varint,2,opt,name=max_prefixes,json=maxPrefixes" json:"max_prefixes,omitempty"` - ShutdownThresholdPct uint32 `protobuf:"varint,3,opt,name=shutdown_threshold_pct,json=shutdownThresholdPct" json:"shutdown_threshold_pct,omitempty"` + Family *Family `protobuf:"bytes,1,opt,name=family" json:"family,omitempty"` + MaxPrefixes uint32 `protobuf:"varint,2,opt,name=max_prefixes,json=maxPrefixes" json:"max_prefixes,omitempty"` + ShutdownThresholdPct uint32 `protobuf:"varint,3,opt,name=shutdown_threshold_pct,json=shutdownThresholdPct" json:"shutdown_threshold_pct,omitempty"` } func (m *PrefixLimit) Reset() { *m = PrefixLimit{} } func (m *PrefixLimit) String() string { return proto.CompactTextString(m) } func (*PrefixLimit) ProtoMessage() {} -func (*PrefixLimit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{75} } +func (*PrefixLimit) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{76} } -func (m *PrefixLimit) GetFamily() uint32 { +func (m *PrefixLimit) GetFamily() *Family { if m != nil { return m.Family } - return 0 + return nil } func (m *PrefixLimit) GetMaxPrefixes() uint32 { @@ -2971,7 +2997,7 @@ type PeerConf struct { func (m *PeerConf) Reset() { *m = PeerConf{} } func (m *PeerConf) String() string { return proto.CompactTextString(m) } func (*PeerConf) ProtoMessage() {} -func (*PeerConf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{76} } +func (*PeerConf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{77} } func (m *PeerConf) GetAuthPassword() string { if m != nil { @@ -3121,7 +3147,7 @@ type PeerGroupConf struct { func (m *PeerGroupConf) Reset() { *m = PeerGroupConf{} } func (m *PeerGroupConf) String() string { return proto.CompactTextString(m) } func (*PeerGroupConf) ProtoMessage() {} -func (*PeerGroupConf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{77} } +func (*PeerGroupConf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{78} } func (m *PeerGroupConf) GetAuthPassword() string { if m != nil { @@ -3203,7 +3229,7 @@ type PeerGroupState struct { func (m *PeerGroupState) Reset() { *m = PeerGroupState{} } func (m *PeerGroupState) String() string { return proto.CompactTextString(m) } func (*PeerGroupState) ProtoMessage() {} -func (*PeerGroupState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{78} } +func (*PeerGroupState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{79} } func (m *PeerGroupState) GetAuthPassword() string { if m != nil { @@ -3290,7 +3316,7 @@ type EbgpMultihop struct { func (m *EbgpMultihop) Reset() { *m = EbgpMultihop{} } func (m *EbgpMultihop) String() string { return proto.CompactTextString(m) } func (*EbgpMultihop) ProtoMessage() {} -func (*EbgpMultihop) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{79} } +func (*EbgpMultihop) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{80} } func (m *EbgpMultihop) GetEnabled() bool { if m != nil { @@ -3314,7 +3340,7 @@ type RouteReflector struct { func (m *RouteReflector) Reset() { *m = RouteReflector{} } func (m *RouteReflector) String() string { return proto.CompactTextString(m) } func (*RouteReflector) ProtoMessage() {} -func (*RouteReflector) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{80} } +func (*RouteReflector) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{81} } func (m *RouteReflector) GetRouteReflectorClient() bool { if m != nil { @@ -3356,7 +3382,7 @@ type PeerState struct { func (m *PeerState) Reset() { *m = PeerState{} } func (m *PeerState) String() string { return proto.CompactTextString(m) } func (*PeerState) ProtoMessage() {} -func (*PeerState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{81} } +func (*PeerState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{82} } func (m *PeerState) GetAuthPassword() string { if m != nil { @@ -3506,7 +3532,7 @@ type Messages struct { func (m *Messages) Reset() { *m = Messages{} } func (m *Messages) String() string { return proto.CompactTextString(m) } func (*Messages) ProtoMessage() {} -func (*Messages) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{82} } +func (*Messages) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{83} } func (m *Messages) GetReceived() *Message { if m != nil { @@ -3535,7 +3561,7 @@ type Message struct { func (m *Message) Reset() { *m = Message{} } func (m *Message) String() string { return proto.CompactTextString(m) } func (*Message) ProtoMessage() {} -func (*Message) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{83} } +func (*Message) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{84} } func (m *Message) GetNotification() uint64 { if m != nil { @@ -3594,7 +3620,7 @@ type Queues struct { func (m *Queues) Reset() { *m = Queues{} } func (m *Queues) String() string { return proto.CompactTextString(m) } func (*Queues) ProtoMessage() {} -func (*Queues) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{84} } +func (*Queues) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{85} } func (m *Queues) GetInput() uint32 { if m != nil { @@ -3618,7 +3644,7 @@ type Timers struct { func (m *Timers) Reset() { *m = Timers{} } func (m *Timers) String() string { return proto.CompactTextString(m) } func (*Timers) ProtoMessage() {} -func (*Timers) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{85} } +func (*Timers) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{86} } func (m *Timers) GetConfig() *TimersConfig { if m != nil { @@ -3644,7 +3670,7 @@ type TimersConfig struct { func (m *TimersConfig) Reset() { *m = TimersConfig{} } func (m *TimersConfig) String() string { return proto.CompactTextString(m) } func (*TimersConfig) ProtoMessage() {} -func (*TimersConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{86} } +func (*TimersConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{87} } func (m *TimersConfig) GetConnectRetry() uint64 { if m != nil { @@ -3687,7 +3713,7 @@ type TimersState struct { func (m *TimersState) Reset() { *m = TimersState{} } func (m *TimersState) String() string { return proto.CompactTextString(m) } func (*TimersState) ProtoMessage() {} -func (*TimersState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{87} } +func (*TimersState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{88} } func (m *TimersState) GetConnectRetry() uint64 { if m != nil { @@ -3751,7 +3777,7 @@ type Transport struct { func (m *Transport) Reset() { *m = Transport{} } func (m *Transport) String() string { return proto.CompactTextString(m) } func (*Transport) ProtoMessage() {} -func (*Transport) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{88} } +func (*Transport) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{89} } func (m *Transport) GetLocalAddress() string { if m != nil { @@ -3809,7 +3835,7 @@ type RouteServer struct { func (m *RouteServer) Reset() { *m = RouteServer{} } func (m *RouteServer) String() string { return proto.CompactTextString(m) } func (*RouteServer) ProtoMessage() {} -func (*RouteServer) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{89} } +func (*RouteServer) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{90} } func (m *RouteServer) GetRouteServerClient() bool { if m != nil { @@ -3835,7 +3861,7 @@ type GracefulRestart struct { func (m *GracefulRestart) Reset() { *m = GracefulRestart{} } func (m *GracefulRestart) String() string { return proto.CompactTextString(m) } func (*GracefulRestart) ProtoMessage() {} -func (*GracefulRestart) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{90} } +func (*GracefulRestart) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{91} } func (m *GracefulRestart) GetEnabled() bool { if m != nil { @@ -3921,7 +3947,7 @@ type MpGracefulRestartConfig struct { 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{91} } +func (*MpGracefulRestartConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{92} } func (m *MpGracefulRestartConfig) GetEnabled() bool { if m != nil { @@ -3941,7 +3967,7 @@ type MpGracefulRestartState struct { 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{92} } +func (*MpGracefulRestartState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{93} } func (m *MpGracefulRestartState) GetEnabled() bool { if m != nil { @@ -3986,7 +4012,7 @@ type MpGracefulRestart struct { 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{93} } +func (*MpGracefulRestart) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{94} } func (m *MpGracefulRestart) GetConfig() *MpGracefulRestartConfig { if m != nil { @@ -4003,20 +4029,20 @@ func (m *MpGracefulRestart) GetState() *MpGracefulRestartState { } type AfiSafiConfig struct { - Family uint32 `protobuf:"varint,1,opt,name=family" json:"family,omitempty"` - Enabled bool `protobuf:"varint,2,opt,name=enabled" json:"enabled,omitempty"` + Family *Family `protobuf:"bytes,1,opt,name=family" json:"family,omitempty"` + Enabled bool `protobuf:"varint,2,opt,name=enabled" json:"enabled,omitempty"` } 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{94} } +func (*AfiSafiConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{95} } -func (m *AfiSafiConfig) GetFamily() uint32 { +func (m *AfiSafiConfig) GetFamily() *Family { if m != nil { return m.Family } - return 0 + return nil } func (m *AfiSafiConfig) GetEnabled() bool { @@ -4027,22 +4053,22 @@ func (m *AfiSafiConfig) GetEnabled() bool { } 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"` + Family *Family `protobuf:"bytes,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{95} } +func (*AfiSafiState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{96} } -func (m *AfiSafiState) GetFamily() uint32 { +func (m *AfiSafiState) GetFamily() *Family { if m != nil { return m.Family } - return 0 + return nil } func (m *AfiSafiState) GetEnabled() bool { @@ -4079,7 +4105,7 @@ type RouteSelectionOptionsConfig struct { 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{96} } +func (*RouteSelectionOptionsConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{97} } func (m *RouteSelectionOptionsConfig) GetAlwaysCompareMed() bool { if m != nil { @@ -4143,7 +4169,7 @@ type RouteSelectionOptionsState struct { 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{97} } +func (*RouteSelectionOptionsState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{98} } func (m *RouteSelectionOptionsState) GetAlwaysCompareMed() bool { if m != nil { @@ -4202,7 +4228,7 @@ type RouteSelectionOptions struct { 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{98} } +func (*RouteSelectionOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{99} } func (m *RouteSelectionOptions) GetConfig() *RouteSelectionOptionsConfig { if m != nil { @@ -4225,7 +4251,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{99} } +func (*UseMultiplePathsConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{100} } func (m *UseMultiplePathsConfig) GetEnabled() bool { if m != nil { @@ -4241,7 +4267,7 @@ type UseMultiplePathsState struct { 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{100} } +func (*UseMultiplePathsState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{101} } func (m *UseMultiplePathsState) GetEnabled() bool { if m != nil { @@ -4258,7 +4284,7 @@ type EbgpConfig struct { 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{101} } +func (*EbgpConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{102} } func (m *EbgpConfig) GetAllowMultipleAs() bool { if m != nil { @@ -4282,7 +4308,7 @@ type EbgpState struct { 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{102} } +func (*EbgpState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{103} } func (m *EbgpState) GetAllowMultipleAs() bool { if m != nil { @@ -4306,7 +4332,7 @@ type Ebgp struct { 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{103} } +func (*Ebgp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{104} } func (m *Ebgp) GetConfig() *EbgpConfig { if m != nil { @@ -4329,7 +4355,7 @@ type IbgpConfig struct { 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{104} } +func (*IbgpConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{105} } func (m *IbgpConfig) GetMaximumPaths() uint32 { if m != nil { @@ -4345,7 +4371,7 @@ type IbgpState struct { 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{105} } +func (*IbgpState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{106} } func (m *IbgpState) GetMaximumPaths() uint32 { if m != nil { @@ -4362,7 +4388,7 @@ type Ibgp struct { 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{106} } +func (*Ibgp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{107} } func (m *Ibgp) GetConfig() *IbgpConfig { if m != nil { @@ -4388,7 +4414,7 @@ type UseMultiplePaths struct { 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{107} } +func (*UseMultiplePaths) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{108} } func (m *UseMultiplePaths) GetConfig() *UseMultiplePathsConfig { if m != nil { @@ -4425,7 +4451,7 @@ type RouteTargetMembershipConfig struct { 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{108} } +func (*RouteTargetMembershipConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{109} } func (m *RouteTargetMembershipConfig) GetDeferralTime() uint32 { if m != nil { @@ -4441,7 +4467,7 @@ type RouteTargetMembershipState struct { 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{109} } +func (*RouteTargetMembershipState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{110} } func (m *RouteTargetMembershipState) GetDeferralTime() uint32 { if m != nil { @@ -4458,7 +4484,7 @@ type RouteTargetMembership struct { 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{110} } +func (*RouteTargetMembership) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{111} } func (m *RouteTargetMembership) GetConfig() *RouteTargetMembershipConfig { if m != nil { @@ -4483,7 +4509,7 @@ func (m *LongLivedGracefulRestartConfig) Reset() { *m = LongLivedGracefu func (m *LongLivedGracefulRestartConfig) String() string { return proto.CompactTextString(m) } func (*LongLivedGracefulRestartConfig) ProtoMessage() {} func (*LongLivedGracefulRestartConfig) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{111} + return fileDescriptor0, []int{112} } func (m *LongLivedGracefulRestartConfig) GetEnabled() bool { @@ -4511,7 +4537,7 @@ type LongLivedGracefulRestartState struct { 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{112} } +func (*LongLivedGracefulRestartState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{113} } func (m *LongLivedGracefulRestartState) GetEnabled() bool { if m != nil { @@ -4556,7 +4582,7 @@ type LongLivedGracefulRestart struct { 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{113} } +func (*LongLivedGracefulRestart) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{114} } func (m *LongLivedGracefulRestart) GetConfig() *LongLivedGracefulRestartConfig { if m != nil { @@ -4599,7 +4625,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{114} } +func (*AfiSafi) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{115} } func (m *AfiSafi) GetMpGracefulRestart() *MpGracefulRestart { if m != nil { @@ -4672,7 +4698,7 @@ type AddPathsConfig struct { func (m *AddPathsConfig) Reset() { *m = AddPathsConfig{} } func (m *AddPathsConfig) String() string { return proto.CompactTextString(m) } func (*AddPathsConfig) ProtoMessage() {} -func (*AddPathsConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{115} } +func (*AddPathsConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{116} } func (m *AddPathsConfig) GetReceive() bool { if m != nil { @@ -4696,7 +4722,7 @@ type AddPathsState struct { func (m *AddPathsState) Reset() { *m = AddPathsState{} } func (m *AddPathsState) String() string { return proto.CompactTextString(m) } func (*AddPathsState) ProtoMessage() {} -func (*AddPathsState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{116} } +func (*AddPathsState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{117} } func (m *AddPathsState) GetReceive() bool { if m != nil { @@ -4720,7 +4746,7 @@ type AddPaths struct { func (m *AddPaths) Reset() { *m = AddPaths{} } func (m *AddPaths) String() string { return proto.CompactTextString(m) } func (*AddPaths) ProtoMessage() {} -func (*AddPaths) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{117} } +func (*AddPaths) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{118} } func (m *AddPaths) GetConfig() *AddPathsConfig { if m != nil { @@ -4745,7 +4771,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{118} } +func (*Prefix) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{119} } func (m *Prefix) GetIpPrefix() string { if m != nil { @@ -4778,7 +4804,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{119} } +func (*DefinedSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{120} } func (m *DefinedSet) GetType() DefinedType { if m != nil { @@ -4816,7 +4842,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{120} } +func (*MatchSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{121} } func (m *MatchSet) GetType() MatchType { if m != nil { @@ -4840,7 +4866,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{121} } +func (*AsPathLength) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{122} } func (m *AsPathLength) GetType() AsPathLengthType { if m != nil { @@ -4867,13 +4893,13 @@ type Conditions struct { RouteType Conditions_RouteType `protobuf:"varint,8,opt,name=route_type,json=routeType,enum=gobgpapi.Conditions_RouteType" json:"route_type,omitempty"` LargeCommunitySet *MatchSet `protobuf:"bytes,9,opt,name=large_community_set,json=largeCommunitySet" json:"large_community_set,omitempty"` NextHopInList []string `protobuf:"bytes,10,rep,name=next_hop_in_list,json=nextHopInList" json:"next_hop_in_list,omitempty"` - AfiSafiIn []Family `protobuf:"varint,11,rep,packed,name=afi_safi_in,json=afiSafiIn,enum=gobgpapi.Family" json:"afi_safi_in,omitempty"` + AfiSafiIn []*Family `protobuf:"bytes,11,rep,name=afi_safi_in,json=afiSafiIn" json:"afi_safi_in,omitempty"` } 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{122} } +func (*Conditions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{123} } func (m *Conditions) GetPrefixSet() *MatchSet { if m != nil { @@ -4945,7 +4971,7 @@ func (m *Conditions) GetNextHopInList() []string { return nil } -func (m *Conditions) GetAfiSafiIn() []Family { +func (m *Conditions) GetAfiSafiIn() []*Family { if m != nil { return m.AfiSafiIn } @@ -4960,7 +4986,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{123} } +func (*CommunityAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{124} } func (m *CommunityAction) GetType() CommunityActionType { if m != nil { @@ -4984,7 +5010,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{124} } +func (*MedAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{125} } func (m *MedAction) GetType() MedActionType { if m != nil { @@ -5009,7 +5035,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{125} } +func (*AsPrependAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{126} } func (m *AsPrependAction) GetAsn() uint32 { if m != nil { @@ -5040,7 +5066,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{126} } +func (*NexthopAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{127} } func (m *NexthopAction) GetAddress() string { if m != nil { @@ -5063,7 +5089,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{127} } +func (*LocalPrefAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{128} } func (m *LocalPrefAction) GetValue() uint32 { if m != nil { @@ -5086,7 +5112,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{128} } +func (*Actions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{129} } func (m *Actions) GetRouteAction() RouteAction { if m != nil { @@ -5153,7 +5179,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{129} } +func (*Statement) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{130} } func (m *Statement) GetName() string { if m != nil { @@ -5184,7 +5210,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{130} } +func (*Policy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{131} } func (m *Policy) GetName() string { if m != nil { @@ -5210,7 +5236,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{131} } +func (*PolicyAssignment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{132} } func (m *PolicyAssignment) GetName() string { if m != nil { @@ -5248,7 +5274,7 @@ type RoutingPolicy struct { func (m *RoutingPolicy) Reset() { *m = RoutingPolicy{} } func (m *RoutingPolicy) String() string { return proto.CompactTextString(m) } func (*RoutingPolicy) ProtoMessage() {} -func (*RoutingPolicy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{132} } +func (*RoutingPolicy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{133} } func (m *RoutingPolicy) GetDefinedSets() []*DefinedSet { if m != nil { @@ -5275,7 +5301,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{133} } +func (*Roa) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{134} } func (m *Roa) GetAs() uint32 { if m != nil { @@ -5335,7 +5361,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{134} } +func (*Vrf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{135} } func (m *Vrf) GetName() string { if m != nil { @@ -5380,7 +5406,7 @@ type DefaultRouteDistance struct { func (m *DefaultRouteDistance) Reset() { *m = DefaultRouteDistance{} } func (m *DefaultRouteDistance) String() string { return proto.CompactTextString(m) } func (*DefaultRouteDistance) ProtoMessage() {} -func (*DefaultRouteDistance) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{135} } +func (*DefaultRouteDistance) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{136} } func (m *DefaultRouteDistance) GetExternalRouteDistance() uint32 { if m != nil { @@ -5413,7 +5439,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{136} } +func (*Global) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{137} } func (m *Global) GetAs() uint32 { if m != nil { @@ -5501,7 +5527,7 @@ type Confederation struct { func (m *Confederation) Reset() { *m = Confederation{} } func (m *Confederation) String() string { return proto.CompactTextString(m) } func (*Confederation) ProtoMessage() {} -func (*Confederation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{137} } +func (*Confederation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{138} } func (m *Confederation) GetEnabled() bool { if m != nil { @@ -5532,7 +5558,7 @@ type RPKIConf struct { func (m *RPKIConf) Reset() { *m = RPKIConf{} } func (m *RPKIConf) String() string { return proto.CompactTextString(m) } func (*RPKIConf) ProtoMessage() {} -func (*RPKIConf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{138} } +func (*RPKIConf) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{139} } func (m *RPKIConf) GetAddress() string { if m != nil { @@ -5571,7 +5597,7 @@ type RPKIState struct { func (m *RPKIState) Reset() { *m = RPKIState{} } func (m *RPKIState) String() string { return proto.CompactTextString(m) } func (*RPKIState) ProtoMessage() {} -func (*RPKIState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{139} } +func (*RPKIState) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{140} } func (m *RPKIState) GetUptime() int64 { if m != nil { @@ -5700,7 +5726,7 @@ type Rpki struct { func (m *Rpki) Reset() { *m = Rpki{} } func (m *Rpki) String() string { return proto.CompactTextString(m) } func (*Rpki) ProtoMessage() {} -func (*Rpki) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{140} } +func (*Rpki) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{141} } func (m *Rpki) GetConf() *RPKIConf { if m != nil { @@ -5784,6 +5810,7 @@ func init() { proto.RegisterType((*DisableMrtRequest)(nil), "gobgpapi.DisableMrtRequest") proto.RegisterType((*AddBmpRequest)(nil), "gobgpapi.AddBmpRequest") proto.RegisterType((*DeleteBmpRequest)(nil), "gobgpapi.DeleteBmpRequest") + proto.RegisterType((*Family)(nil), "gobgpapi.Family") proto.RegisterType((*RPKIValidation)(nil), "gobgpapi.RPKIValidation") proto.RegisterType((*Path)(nil), "gobgpapi.Path") proto.RegisterType((*Destination)(nil), "gobgpapi.Destination") @@ -5858,7 +5885,6 @@ func init() { proto.RegisterType((*RPKIConf)(nil), "gobgpapi.RPKIConf") proto.RegisterType((*RPKIState)(nil), "gobgpapi.RPKIState") proto.RegisterType((*Rpki)(nil), "gobgpapi.Rpki") - proto.RegisterEnum("gobgpapi.Family", Family_name, Family_value) proto.RegisterEnum("gobgpapi.Resource", Resource_name, Resource_value) proto.RegisterEnum("gobgpapi.TableLookupOption", TableLookupOption_name, TableLookupOption_value) proto.RegisterEnum("gobgpapi.DefinedType", DefinedType_name, DefinedType_value) @@ -5870,6 +5896,8 @@ func init() { proto.RegisterEnum("gobgpapi.PolicyDirection", PolicyDirection_name, PolicyDirection_value) proto.RegisterEnum("gobgpapi.ResetPeerRequest_SoftResetDirection", ResetPeerRequest_SoftResetDirection_name, ResetPeerRequest_SoftResetDirection_value) proto.RegisterEnum("gobgpapi.AddBmpRequest_MonitoringPolicy", AddBmpRequest_MonitoringPolicy_name, AddBmpRequest_MonitoringPolicy_value) + proto.RegisterEnum("gobgpapi.Family_Afi", Family_Afi_name, Family_Afi_value) + proto.RegisterEnum("gobgpapi.Family_Safi", Family_Safi_name, Family_Safi_value) proto.RegisterEnum("gobgpapi.RPKIValidation_State", RPKIValidation_State_name, RPKIValidation_State_value) proto.RegisterEnum("gobgpapi.RPKIValidation_Reason", RPKIValidation_Reason_name, RPKIValidation_Reason_value) proto.RegisterEnum("gobgpapi.PeerConf_RemovePrivateAs", PeerConf_RemovePrivateAs_name, PeerConf_RemovePrivateAs_value) @@ -7937,482 +7965,485 @@ var _GobgpApi_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("gobgp.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 7620 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7c, 0x4b, 0x8c, 0x1c, 0x47, - 0x72, 0xa8, 0xfa, 0x33, 0x3d, 0xdd, 0xd1, 0xbf, 0x9a, 0x9c, 0x21, 0x67, 0x38, 0x94, 0x48, 0xaa, - 0x56, 0x22, 0xa9, 0x91, 0x38, 0xfc, 0x48, 0x1a, 0x6a, 0xa9, 0xa5, 0xa4, 0xe6, 0x4c, 0x73, 0xd8, - 0xcb, 0x99, 0xee, 0x56, 0x4d, 0x93, 0xa2, 0x16, 0x4f, 0xa8, 0xad, 0xe9, 0xca, 0xee, 0xa9, 0xa7, - 0xea, 0xaa, 0x52, 0x55, 0xf5, 0x68, 0x06, 0x0f, 0x78, 0x20, 0xb5, 0x9f, 0xf7, 0x80, 0x87, 0xbd, - 0xbc, 0x77, 0x7c, 0x86, 0x2f, 0x36, 0x0c, 0x63, 0xe1, 0xe3, 0xfa, 0xe0, 0x93, 0x6d, 0xc0, 0x36, - 0x0c, 0x2f, 0xe0, 0xa3, 0x7d, 0xf3, 0xc9, 0x57, 0x1f, 0x7c, 0x31, 0x0c, 0x9f, 0x8c, 0xfc, 0x54, - 0x55, 0x56, 0x55, 0x77, 0xcf, 0x90, 0xe2, 0xee, 0x7a, 0x81, 0x3d, 0x75, 0x67, 0x44, 0x64, 0x64, - 0x64, 0x66, 0x64, 0x64, 0x44, 0x66, 0x56, 0x40, 0x79, 0x68, 0xef, 0x0f, 0x9d, 0x75, 0xc7, 0xb5, - 0x7d, 0x1b, 0x15, 0x69, 0x41, 0x73, 0x8c, 0xd5, 0x73, 0x43, 0xdb, 0x1e, 0x9a, 0xf8, 0x3a, 0x85, - 0xef, 0x8f, 0x07, 0xd7, 0x35, 0xeb, 0x98, 0x11, 0xad, 0x9e, 0x4f, 0xa2, 0xf0, 0xc8, 0xf1, 0x39, - 0x52, 0xfe, 0x10, 0xea, 0x7b, 0xbe, 0xe6, 0xfa, 0xf7, 0x86, 0x8e, 0x82, 0xbf, 0x1a, 0x63, 0xcf, - 0x47, 0x57, 0xa1, 0x30, 0x34, 0xed, 0x7d, 0xcd, 0x5c, 0xc9, 0x5c, 0xca, 0x5c, 0x2d, 0xdf, 0x92, - 0xd6, 0x83, 0x56, 0xd6, 0xb7, 0x29, 0x5c, 0xe1, 0x78, 0x59, 0x82, 0xda, 0x9e, 0x6f, 0x3b, 0x51, - 0x5d, 0xb9, 0x0e, 0xd5, 0x6d, 0x2c, 0x30, 0x93, 0xef, 0x40, 0x2d, 0x00, 0x78, 0x8e, 0x6d, 0x79, - 0xf8, 0x39, 0xd8, 0xbf, 0x07, 0xb5, 0x86, 0xae, 0x77, 0x31, 0x76, 0x03, 0xd1, 0x64, 0xc8, 0x3b, - 0x18, 0xbb, 0xbc, 0x66, 0x2d, 0xaa, 0x49, 0x89, 0x28, 0x4e, 0x7e, 0x08, 0x0b, 0x5b, 0xd8, 0xc4, - 0x3e, 0x16, 0x2b, 0xae, 0xc0, 0xbc, 0xa6, 0xeb, 0x2e, 0xf6, 0x3c, 0x5a, 0xb7, 0xa4, 0x04, 0x45, - 0xf4, 0x2a, 0x94, 0x0c, 0xcb, 0xc7, 0xee, 0x40, 0xeb, 0xe3, 0x95, 0x2c, 0xc5, 0x45, 0x00, 0xf9, - 0x33, 0xa8, 0xef, 0x18, 0x9e, 0x7f, 0x3a, 0x56, 0x6b, 0x20, 0x61, 0x4b, 0xdb, 0x37, 0x71, 0x43, - 0x3f, 0xc4, 0xae, 0x6f, 0x78, 0x58, 0xa7, 0x1c, 0x8b, 0x4a, 0x0a, 0x2e, 0x6f, 0x80, 0x14, 0x31, - 0xe6, 0x23, 0x73, 0x9a, 0xde, 0xfd, 0x10, 0x16, 0x1e, 0x39, 0xba, 0x16, 0xef, 0xdd, 0x29, 0x2a, - 0xa2, 0x2b, 0x20, 0xe9, 0xb6, 0xea, 0xd9, 0x03, 0x5f, 0x75, 0xb1, 0x87, 0x7d, 0xd5, 0xb0, 0xb8, - 0x70, 0x55, 0xdd, 0xde, 0xb3, 0x07, 0xbe, 0x42, 0xa0, 0x2d, 0x4b, 0xde, 0x04, 0x24, 0xb6, 0xc0, - 0x65, 0xbb, 0x06, 0x8b, 0x16, 0xc6, 0xba, 0x97, 0xe0, 0x90, 0x61, 0xdd, 0xa3, 0x28, 0x91, 0xc9, - 0x3f, 0x67, 0x40, 0xa2, 0xff, 0x4f, 0x37, 0x72, 0x6f, 0x40, 0xb5, 0x6f, 0x8f, 0x46, 0x63, 0xcb, - 0xe8, 0x6b, 0xbe, 0x61, 0x5b, 0x7c, 0x22, 0xe2, 0x40, 0x84, 0x20, 0x4f, 0x5a, 0x5f, 0xc9, 0xd1, - 0x46, 0xe9, 0x7f, 0xf4, 0x10, 0x4a, 0xba, 0xe1, 0xe2, 0x3e, 0xad, 0x95, 0xbf, 0x94, 0xb9, 0x5a, - 0xbb, 0x75, 0x2d, 0xea, 0x7f, 0x52, 0x84, 0xf5, 0x50, 0xc6, 0xad, 0xa0, 0x92, 0x12, 0xd5, 0x97, - 0xaf, 0x03, 0x4a, 0x13, 0xa0, 0x02, 0x64, 0x5b, 0x6d, 0xe9, 0x15, 0x34, 0x0f, 0xb9, 0xce, 0xa3, - 0x9e, 0x94, 0x41, 0x45, 0xc8, 0xdf, 0xeb, 0xf4, 0x1e, 0x48, 0x59, 0xf9, 0x11, 0x2c, 0xee, 0x1d, - 0x8c, 0x7d, 0xdd, 0xfe, 0xda, 0x7a, 0x89, 0x1d, 0x95, 0xaf, 0xc1, 0x42, 0x93, 0x2a, 0xcc, 0xa9, - 0x98, 0xca, 0x3d, 0x40, 0x5b, 0x86, 0x77, 0x6a, 0xfa, 0x53, 0x0a, 0xf1, 0x00, 0xd0, 0xae, 0x6d, - 0x19, 0xbe, 0xed, 0x9e, 0x8e, 0xeb, 0x0a, 0xcc, 0xf7, 0xc7, 0xae, 0x8b, 0x2d, 0x9f, 0xeb, 0x55, - 0x50, 0x94, 0xbf, 0x0b, 0x8b, 0x31, 0x4e, 0xcf, 0xa1, 0xee, 0x2d, 0x58, 0xe4, 0x26, 0x60, 0xdb, - 0xb5, 0xc7, 0xa1, 0x89, 0xba, 0x05, 0x40, 0xd0, 0xea, 0x90, 0x00, 0x39, 0x83, 0xc5, 0x38, 0x03, - 0x46, 0x5f, 0x72, 0x82, 0xbf, 0xf2, 0x3b, 0x70, 0x36, 0xb2, 0x0b, 0x31, 0x6e, 0x08, 0xf2, 0x96, - 0x36, 0xc2, 0xbc, 0x43, 0xf4, 0xbf, 0x3c, 0x86, 0xb3, 0xd1, 0x2a, 0xf8, 0xb6, 0x6d, 0x9f, 0x7e, - 0xf1, 0x3d, 0x80, 0xe5, 0x54, 0xb3, 0x2f, 0xb6, 0x02, 0x35, 0x38, 0xd7, 0xd0, 0xf5, 0xad, 0x63, - 0x4b, 0x1b, 0x19, 0xfd, 0x36, 0x36, 0x86, 0x07, 0xfb, 0x76, 0x38, 0x8b, 0x5b, 0x20, 0xe9, 0x0c, - 0xa3, 0x5a, 0x1c, 0xc5, 0x7b, 0x72, 0x2e, 0xea, 0x49, 0xb2, 0x6e, 0x5d, 0x8f, 0x03, 0xe4, 0xff, - 0xc1, 0xec, 0xb3, 0xe6, 0x1f, 0x04, 0x7c, 0xd7, 0xa1, 0xe8, 0x62, 0xcf, 0x1e, 0xbb, 0x7d, 0x36, - 0x9a, 0xb5, 0x5b, 0x28, 0xb6, 0x18, 0x29, 0x46, 0x09, 0x69, 0xd0, 0x19, 0x28, 0x1c, 0xba, 0x03, - 0xd5, 0xd0, 0xb9, 0x0a, 0xce, 0x1d, 0xba, 0x83, 0x96, 0x4e, 0x35, 0x43, 0xf3, 0x0f, 0xe8, 0x42, - 0x8f, 0x6b, 0x06, 0x69, 0x8b, 0xe2, 0xe4, 0x37, 0xa1, 0x1e, 0x36, 0xce, 0x47, 0x08, 0x41, 0x7e, - 0x3c, 0x36, 0x74, 0xda, 0x72, 0x45, 0xa1, 0xff, 0xe5, 0x9f, 0x67, 0xc2, 0xed, 0xe0, 0xe5, 0xcb, - 0x79, 0x16, 0x0a, 0x03, 0x6d, 0x64, 0x98, 0xc7, 0x54, 0xd2, 0xaa, 0xc2, 0x4b, 0xa1, 0xfc, 0xf9, - 0xe9, 0xf2, 0x87, 0xc2, 0xce, 0x09, 0xc2, 0xfe, 0x7e, 0x86, 0x6f, 0x37, 0x82, 0xa8, 0x97, 0x21, - 0xef, 0x1f, 0x3b, 0xb3, 0xc4, 0xa4, 0xf8, 0x50, 0x89, 0xb3, 0x91, 0x12, 0x4f, 0x95, 0xef, 0x36, - 0x14, 0x1d, 0x17, 0x0f, 0x8c, 0x23, 0xec, 0xad, 0xe4, 0x2f, 0xe5, 0xae, 0x96, 0x6f, 0x9d, 0x8f, - 0xf8, 0xf6, 0x88, 0x21, 0xd9, 0xb1, 0xed, 0x2f, 0xc7, 0x4e, 0x97, 0x12, 0x29, 0x21, 0xb1, 0xfc, - 0x90, 0xef, 0x5a, 0xe2, 0xa8, 0xdf, 0x86, 0xb2, 0x8e, 0x3d, 0xdf, 0xb0, 0x98, 0x2d, 0x61, 0x6a, - 0x74, 0x46, 0x50, 0xa3, 0x08, 0xa9, 0x88, 0x94, 0xf2, 0x8f, 0x32, 0xb0, 0xc4, 0xa7, 0x70, 0xcf, - 0x77, 0xb1, 0x36, 0x7a, 0xc9, 0xb3, 0xf3, 0x06, 0xcc, 0x91, 0x91, 0xf6, 0x56, 0x72, 0xb4, 0x8b, - 0xc9, 0x69, 0x60, 0x48, 0x19, 0x43, 0x7d, 0x1b, 0xfb, 0xb4, 0xd3, 0xcf, 0x3b, 0xe4, 0xd1, 0xf0, - 0x66, 0x63, 0xc3, 0x1b, 0x4c, 0x45, 0x4e, 0xb0, 0x27, 0xc7, 0x20, 0x45, 0xcd, 0xf0, 0x91, 0xbb, - 0x02, 0x75, 0x6b, 0x3c, 0x52, 0xc5, 0xd1, 0x23, 0x1a, 0x93, 0x57, 0x6a, 0xd6, 0x78, 0x24, 0x0c, - 0x1b, 0x3a, 0x07, 0x45, 0x42, 0x48, 0x75, 0x6a, 0x8e, 0x52, 0xcc, 0x5b, 0xe3, 0x11, 0xe9, 0x05, - 0x7a, 0x1d, 0x2a, 0x04, 0xa5, 0xf5, 0xfb, 0xd8, 0xf1, 0xb1, 0xbe, 0x52, 0xa0, 0xe8, 0xb2, 0x35, - 0x1e, 0x35, 0x38, 0x48, 0xfe, 0xc3, 0x4c, 0x68, 0x7f, 0x5f, 0xa8, 0x9b, 0xcf, 0xa3, 0x59, 0xc2, - 0x26, 0x90, 0x8f, 0x6d, 0x02, 0xe8, 0x22, 0x94, 0x1d, 0xdb, 0xf3, 0x55, 0xc7, 0x36, 0x8d, 0xfe, - 0x31, 0xed, 0x46, 0x51, 0x01, 0x02, 0xea, 0x52, 0x88, 0x7c, 0x07, 0x96, 0xe2, 0x52, 0x0a, 0xdb, - 0x04, 0xe9, 0x78, 0x66, 0x86, 0x31, 0xb8, 0x01, 0xd5, 0x86, 0xae, 0x3f, 0x76, 0x07, 0x41, 0xdf, - 0x2e, 0x42, 0xee, 0xd0, 0x1d, 0xf0, 0x3a, 0xd5, 0xa8, 0x0e, 0x21, 0x21, 0x18, 0xf9, 0x32, 0x48, - 0xcc, 0x2c, 0x08, 0x95, 0x26, 0xed, 0x03, 0x6f, 0x40, 0x8d, 0x68, 0xfc, 0x09, 0x54, 0xb7, 0xd8, - 0xba, 0xa5, 0x54, 0x5c, 0xec, 0x13, 0x25, 0x38, 0x02, 0x89, 0x68, 0x3f, 0xed, 0xbc, 0xe0, 0x7a, - 0xf3, 0xf1, 0x49, 0xf9, 0xc6, 0x9c, 0x90, 0xe3, 0xd1, 0x1d, 0x38, 0xe7, 0xe2, 0x01, 0x76, 0x55, - 0x7c, 0x64, 0x10, 0x45, 0x19, 0xaa, 0x9e, 0xaf, 0xf9, 0x78, 0x84, 0x2d, 0xdf, 0xe3, 0x5b, 0xcb, - 0x32, 0x25, 0x68, 0x72, 0xfc, 0x5e, 0x88, 0x96, 0xbf, 0xc9, 0xc0, 0x22, 0xb7, 0x89, 0x2f, 0xd8, - 0xfa, 0x75, 0x58, 0x74, 0xc8, 0x0e, 0xe4, 0x1e, 0xe2, 0x74, 0xbb, 0x28, 0x40, 0x45, 0x4d, 0x22, - 0x09, 0x72, 0x9a, 0x69, 0x72, 0xcf, 0x8d, 0xfc, 0x95, 0xaf, 0xc0, 0x02, 0x35, 0x25, 0x31, 0x09, - 0x26, 0x8d, 0xed, 0x47, 0x80, 0x44, 0xc2, 0x28, 0x8a, 0x38, 0x9d, 0xac, 0xf2, 0x9f, 0x65, 0x00, - 0xed, 0x61, 0x56, 0xdf, 0xc0, 0x5e, 0xd0, 0xd4, 0x6d, 0xa8, 0xe8, 0x78, 0x60, 0x58, 0x58, 0x57, - 0x3d, 0xec, 0x13, 0x6f, 0x86, 0x18, 0x89, 0x25, 0xd1, 0x6e, 0x51, 0xec, 0x1e, 0xf6, 0x89, 0xd9, - 0x0a, 0xfe, 0x7b, 0xe8, 0x1d, 0x28, 0x3a, 0x9c, 0xd7, 0x4a, 0x96, 0x56, 0x4a, 0xb7, 0x1d, 0x52, - 0xa0, 0xef, 0x41, 0x59, 0xf3, 0x3c, 0x63, 0x68, 0xb1, 0x11, 0x62, 0xa6, 0x68, 0x35, 0x59, 0xa1, - 0x11, 0x92, 0x28, 0x22, 0xb9, 0xbc, 0x4b, 0x2d, 0xa4, 0x20, 0x09, 0x17, 0xfe, 0x7d, 0x28, 0x0b, - 0xc2, 0xf3, 0x21, 0x98, 0x2c, 0x3b, 0x44, 0xb2, 0xcb, 0xfb, 0xb0, 0xcc, 0xe6, 0xfd, 0x65, 0x71, - 0x0c, 0xe6, 0x35, 0x1b, 0xcd, 0xeb, 0x63, 0x38, 0x43, 0xa6, 0x2b, 0xdd, 0xc2, 0x5b, 0x31, 0x73, - 0x73, 0x26, 0xc5, 0xba, 0x77, 0xec, 0xcc, 0xb0, 0x38, 0x72, 0x07, 0xce, 0x26, 0xf9, 0x72, 0x55, - 0x78, 0xc1, 0xc1, 0x78, 0x40, 0x5d, 0xcb, 0x50, 0x47, 0x03, 0x31, 0x6f, 0x42, 0x29, 0xd4, 0xe8, - 0xb4, 0x77, 0x17, 0x91, 0x47, 0x54, 0xf2, 0x17, 0x81, 0x67, 0xf9, 0x12, 0x98, 0x4d, 0x18, 0xd1, - 0x35, 0x58, 0x22, 0x3d, 0x4f, 0x31, 0x9f, 0xb4, 0x58, 0xbe, 0xcf, 0x46, 0x5f, 0xa0, 0xe5, 0x83, - 0xf4, 0x02, 0xdd, 0x7a, 0x02, 0xab, 0xa1, 0x81, 0x12, 0x14, 0x94, 0xb7, 0x7e, 0x07, 0x20, 0xd2, - 0x54, 0xce, 0x71, 0x96, 0x5e, 0x0b, 0xd4, 0xf2, 0x08, 0x5e, 0x13, 0xed, 0xcf, 0x4b, 0x65, 0x3e, - 0x61, 0x00, 0xff, 0x3b, 0x9c, 0x8f, 0x2c, 0x48, 0xba, 0xb1, 0x09, 0xe3, 0x88, 0x6e, 0x8b, 0x61, - 0x65, 0x96, 0x6a, 0xec, 0xb9, 0x64, 0xfb, 0x13, 0x43, 0xc8, 0x1f, 0xc0, 0xab, 0x93, 0xdb, 0xe2, - 0xf3, 0xf0, 0x6d, 0x86, 0xed, 0x09, 0xac, 0x06, 0x86, 0xec, 0x25, 0x4f, 0xc8, 0x0f, 0xa8, 0x27, - 0xaf, 0x38, 0x5f, 0x1a, 0x27, 0xc7, 0x79, 0x08, 0xf2, 0x8e, 0xed, 0xfa, 0xdc, 0xe7, 0xa1, 0xff, - 0xd1, 0x2a, 0x14, 0x4d, 0x63, 0x80, 0x7d, 0x83, 0x7b, 0x3d, 0x39, 0x25, 0x2c, 0xcb, 0x8d, 0xc0, - 0x01, 0x7f, 0x61, 0xf6, 0xf2, 0x5b, 0x6c, 0x7b, 0x15, 0x19, 0x44, 0x0e, 0x48, 0x46, 0x74, 0x40, - 0xe4, 0x3b, 0xcc, 0x43, 0x65, 0xa4, 0x7c, 0xcc, 0x2f, 0x43, 0x81, 0xee, 0x47, 0x13, 0x42, 0x4d, - 0x4a, 0xc7, 0xb1, 0x44, 0x52, 0x16, 0x76, 0xbf, 0xb8, 0xa4, 0xf7, 0xc2, 0x50, 0xfc, 0xc5, 0x79, - 0xf4, 0xf8, 0xd1, 0xc9, 0x8b, 0x4f, 0xc7, 0x84, 0x83, 0x12, 0x79, 0x9d, 0x59, 0x11, 0xc2, 0x34, - 0xe6, 0x05, 0x4e, 0x1b, 0xc8, 0x0f, 0x98, 0x25, 0x11, 0xe8, 0x23, 0xc7, 0xc6, 0xb5, 0xb5, 0xb4, - 0x63, 0xa3, 0xd8, 0x9a, 0x42, 0x30, 0xf2, 0x2f, 0x33, 0x80, 0xd8, 0x38, 0xfe, 0x00, 0xef, 0xbb, - 0x5a, 0xd0, 0x90, 0x04, 0xb9, 0xb1, 0x6b, 0x72, 0xf1, 0xc9, 0x5f, 0xe2, 0x12, 0xba, 0xf6, 0xd8, - 0xc7, 0x2a, 0x31, 0xfa, 0x6c, 0x33, 0x2d, 0x29, 0x40, 0x41, 0x64, 0x33, 0xa0, 0x47, 0x0a, 0x87, - 0xd8, 0xf5, 0xc8, 0x1a, 0x64, 0x6e, 0x66, 0x50, 0x44, 0xef, 0xc1, 0x59, 0x0b, 0x1f, 0xf9, 0x07, - 0xb6, 0xa3, 0xfa, 0xae, 0x31, 0x1c, 0x12, 0x47, 0x88, 0x36, 0xc9, 0xdd, 0xce, 0x25, 0x8e, 0xed, - 0x31, 0x24, 0x13, 0x07, 0xdd, 0x82, 0x33, 0xc9, 0x5a, 0x3a, 0x36, 0x35, 0xe6, 0x8d, 0x56, 0x95, - 0xc5, 0x78, 0xa5, 0x2d, 0x82, 0x92, 0x87, 0x20, 0xb1, 0xda, 0xbb, 0x6e, 0xb8, 0xd4, 0xce, 0x43, - 0x49, 0x1f, 0x8f, 0x1c, 0x35, 0xdc, 0xcf, 0xe6, 0x94, 0x22, 0x01, 0x10, 0xa9, 0xc9, 0x5a, 0x18, - 0x18, 0x26, 0x16, 0x36, 0xb0, 0xb0, 0x4c, 0x70, 0xf4, 0x6c, 0xf1, 0x50, 0x63, 0xbe, 0x50, 0x5e, - 0x09, 0xcb, 0xf2, 0x22, 0x2c, 0x70, 0xd5, 0x89, 0x5a, 0x92, 0xff, 0x22, 0x43, 0x3d, 0xdb, 0x7b, - 0x23, 0xe7, 0xc5, 0x34, 0xe1, 0x7b, 0x7c, 0xd3, 0xcd, 0x51, 0x13, 0x76, 0x35, 0x9a, 0xad, 0x18, - 0xd3, 0x75, 0xee, 0x78, 0x1b, 0xd6, 0x90, 0x3b, 0x30, 0xb4, 0x96, 0xbc, 0x09, 0x52, 0x12, 0x83, - 0xe6, 0x21, 0xd7, 0x55, 0x9a, 0xd2, 0x2b, 0xa8, 0x08, 0xf9, 0x6e, 0x67, 0x2f, 0x76, 0x1e, 0x86, - 0x4a, 0x30, 0xb7, 0xd3, 0xd9, 0x6c, 0xec, 0x48, 0x39, 0x42, 0xd7, 0xd8, 0xd9, 0x91, 0xf2, 0xf2, - 0x27, 0x81, 0xa7, 0xfd, 0xa2, 0x9d, 0x90, 0xff, 0x20, 0x07, 0x35, 0xa5, 0xfb, 0xb0, 0xf5, 0x58, - 0x33, 0x0d, 0x9d, 0x45, 0x44, 0xef, 0xc1, 0x1c, 0xdd, 0xa8, 0xb8, 0x37, 0x71, 0x41, 0x50, 0xc3, - 0x18, 0x21, 0xdb, 0xd9, 0x14, 0x46, 0x8c, 0x6e, 0x43, 0xc1, 0xc5, 0x9a, 0x17, 0x9a, 0xf4, 0x8b, - 0x53, 0xab, 0x29, 0x94, 0x4c, 0xe1, 0xe4, 0xe8, 0x0a, 0xcc, 0x8f, 0x34, 0xbf, 0x7f, 0x80, 0x75, - 0xee, 0xc1, 0x25, 0xf4, 0x3e, 0xc0, 0xa2, 0x1b, 0x50, 0x19, 0x5b, 0xbc, 0xa0, 0x6a, 0x41, 0x74, - 0x9d, 0xa0, 0x2e, 0x87, 0x24, 0x0d, 0x0f, 0x7d, 0x00, 0x52, 0x54, 0xc3, 0xc4, 0xd6, 0x90, 0xc6, - 0x78, 0x13, 0x6a, 0xd5, 0x43, 0xb2, 0x1d, 0x4a, 0x25, 0x77, 0x61, 0x8e, 0xf6, 0x0e, 0xd5, 0x00, - 0xf6, 0x7a, 0x8d, 0x5e, 0x53, 0x6d, 0x77, 0xda, 0x64, 0x66, 0x16, 0xa1, 0x1e, 0x94, 0x7b, 0xea, - 0xfd, 0xce, 0xa3, 0xf6, 0x96, 0x94, 0x41, 0x75, 0x28, 0x33, 0xe0, 0xe3, 0xc6, 0x4e, 0x6b, 0x4b, - 0xca, 0xa2, 0x05, 0xa8, 0x32, 0x40, 0xab, 0xcd, 0x40, 0x39, 0xf9, 0x43, 0x28, 0xb0, 0x8e, 0x13, - 0x6a, 0xa5, 0xd9, 0xd8, 0xeb, 0xf4, 0x02, 0x9e, 0x55, 0x28, 0x51, 0x40, 0x5b, 0x6d, 0xec, 0x49, - 0x19, 0x52, 0x99, 0x17, 0x77, 0x9a, 0xed, 0x6d, 0x7a, 0x16, 0xfa, 0x0f, 0x73, 0x90, 0xef, 0xf2, - 0x93, 0x0d, 0xcb, 0x74, 0x8d, 0xe0, 0x18, 0x86, 0xfc, 0x27, 0x56, 0xc6, 0xd1, 0x7c, 0xdf, 0x65, - 0xab, 0xbc, 0xa2, 0xf0, 0x12, 0xdd, 0xac, 0x87, 0xc1, 0x9e, 0x41, 0xfe, 0x92, 0xda, 0xfb, 0xd8, - 0x0b, 0xc2, 0x47, 0xfa, 0x9f, 0x18, 0x0a, 0xc3, 0x53, 0xbf, 0x36, 0xfc, 0x03, 0xdd, 0xd5, 0xbe, - 0x0e, 0x62, 0x47, 0xc3, 0xfb, 0x8c, 0x43, 0xd0, 0x05, 0x80, 0xc3, 0x70, 0xf2, 0x68, 0x0c, 0x3c, - 0xa7, 0x08, 0x10, 0xd4, 0x84, 0x85, 0xa8, 0xa4, 0xea, 0xd8, 0xd7, 0x0c, 0x73, 0x65, 0x9e, 0x5a, - 0xb0, 0x95, 0x69, 0x3a, 0xa0, 0x48, 0x51, 0x95, 0x2d, 0x5a, 0x03, 0xdd, 0x80, 0x25, 0xcb, 0x56, - 0x8d, 0x91, 0x43, 0x9c, 0x7b, 0x3f, 0x12, 0xa8, 0xc8, 0xe2, 0x1e, 0xcb, 0x6e, 0x71, 0x54, 0x28, - 0x58, 0x64, 0x5d, 0x4b, 0xb1, 0x38, 0xf9, 0x35, 0x00, 0x16, 0x63, 0xab, 0x9a, 0x67, 0xad, 0x00, - 0xc5, 0x95, 0x18, 0xa4, 0xe1, 0x59, 0xc4, 0xc0, 0x70, 0xb4, 0xa1, 0xaf, 0x94, 0x99, 0x11, 0x61, - 0x80, 0x96, 0xce, 0x0d, 0x8c, 0x8f, 0x5d, 0xac, 0xaf, 0x54, 0x68, 0xcb, 0x61, 0x19, 0x2d, 0xd1, - 0x75, 0x61, 0xe2, 0x95, 0x2a, 0x45, 0xb0, 0x02, 0xba, 0x0a, 0x92, 0xe1, 0xa9, 0x03, 0xd7, 0x1e, - 0xa9, 0xf8, 0xc8, 0xc7, 0xae, 0xa5, 0x99, 0x2b, 0x35, 0x4a, 0x50, 0x33, 0xbc, 0xfb, 0xae, 0x3d, - 0x6a, 0x72, 0x28, 0x19, 0xe9, 0xe0, 0x40, 0x50, 0x35, 0x9c, 0x95, 0x3a, 0x6d, 0x1a, 0x02, 0x50, - 0xcb, 0x09, 0x8f, 0xad, 0xa4, 0xe8, 0xd8, 0x0a, 0xbd, 0x03, 0xc8, 0xf0, 0xd4, 0xc0, 0xb2, 0x1a, - 0x16, 0x1d, 0xb7, 0x95, 0x05, 0x76, 0x30, 0x69, 0x78, 0x6d, 0x86, 0x68, 0x31, 0x38, 0x99, 0x2b, - 0x43, 0xc7, 0x96, 0x6f, 0x0c, 0x0c, 0xec, 0xae, 0x20, 0xda, 0x75, 0x01, 0x82, 0xde, 0x02, 0xc9, - 0xb4, 0xfb, 0x9a, 0xa9, 0x0a, 0x54, 0x8b, 0x94, 0xaa, 0x4e, 0xe1, 0xad, 0x88, 0xf4, 0x3a, 0x14, - 0x35, 0xeb, 0x58, 0xa5, 0xda, 0xb6, 0x14, 0xba, 0xfd, 0xf6, 0xd0, 0xc4, 0xeb, 0xc1, 0x65, 0xd7, - 0x7a, 0xc3, 0x3a, 0x56, 0xe6, 0x35, 0xeb, 0xb8, 0x4d, 0xd4, 0xf0, 0x5d, 0x00, 0x52, 0x81, 0xab, - 0xe2, 0x99, 0x30, 0xe4, 0x4b, 0x57, 0x29, 0x69, 0xd6, 0x71, 0x97, 0x92, 0xc9, 0x0f, 0xa1, 0x2c, - 0x1e, 0xc6, 0x10, 0x55, 0xa6, 0xe7, 0x61, 0xdc, 0x74, 0xf1, 0x52, 0x74, 0xdc, 0x94, 0x9d, 0x75, - 0xdc, 0x34, 0x82, 0x85, 0xd4, 0x01, 0xdb, 0x54, 0x96, 0x9f, 0x40, 0xd5, 0xa4, 0x74, 0xaa, 0xed, - 0x08, 0x9e, 0xe8, 0xe4, 0xc3, 0xba, 0x0e, 0x25, 0x51, 0x2a, 0xa6, 0x50, 0x92, 0xff, 0x25, 0x0f, - 0xf9, 0x2e, 0xc6, 0x2e, 0x55, 0x1a, 0xa2, 0x7a, 0x24, 0x6a, 0x25, 0xa1, 0x6e, 0x55, 0x09, 0xcb, - 0xe8, 0x03, 0xa8, 0x68, 0x8e, 0x63, 0x1e, 0x07, 0x67, 0x33, 0xd9, 0xe4, 0x11, 0x5e, 0x83, 0x60, - 0xf9, 0xce, 0x50, 0xd6, 0xa2, 0x02, 0xba, 0x0c, 0xf9, 0xbe, 0x6d, 0x0d, 0xf8, 0x41, 0x2d, 0x8a, - 0x9f, 0x82, 0x6f, 0xda, 0xd6, 0x40, 0xa1, 0x78, 0xf4, 0x21, 0x54, 0xf1, 0xfe, 0xd0, 0x51, 0x47, - 0x63, 0xd3, 0x37, 0x0e, 0x6c, 0x87, 0x9f, 0x8c, 0x9e, 0x8d, 0x2a, 0x34, 0xf7, 0x87, 0xce, 0x2e, - 0xc7, 0x2a, 0x15, 0x2c, 0x94, 0x50, 0x03, 0xea, 0xcc, 0x4d, 0x70, 0xf1, 0xc0, 0xc4, 0x7d, 0xdf, - 0x76, 0xa9, 0x05, 0x88, 0x2f, 0x5d, 0x42, 0xa0, 0x04, 0x78, 0xa5, 0xe6, 0xc6, 0xca, 0xe8, 0xad, - 0x60, 0xbb, 0x28, 0x4c, 0x3a, 0xae, 0x8f, 0xed, 0x11, 0x57, 0xa1, 0x40, 0xdc, 0x56, 0xd7, 0xe3, - 0xf6, 0x41, 0x08, 0xee, 0x7b, 0x14, 0xae, 0x70, 0x3c, 0x09, 0xa9, 0x7c, 0x57, 0xb3, 0x3c, 0xba, - 0x5f, 0x15, 0x93, 0x8c, 0x7b, 0x01, 0x4a, 0x89, 0xa8, 0xc8, 0x48, 0xb3, 0xae, 0x70, 0x7f, 0xb4, - 0x94, 0x1c, 0x69, 0xda, 0x8f, 0x3d, 0x8a, 0x54, 0x98, 0x73, 0xc4, 0x0a, 0x68, 0x0b, 0xa4, 0xa1, - 0xab, 0xf5, 0xf1, 0x60, 0x6c, 0xaa, 0x2e, 0xf6, 0x7c, 0xcd, 0xf5, 0xa9, 0xd9, 0x88, 0x9d, 0xd8, - 0x6f, 0x73, 0x0a, 0x85, 0x11, 0x28, 0xf5, 0x61, 0x1c, 0x80, 0xd6, 0xa1, 0xa4, 0x0d, 0x0c, 0xd5, - 0xd3, 0x06, 0x86, 0xb7, 0x52, 0xa6, 0x7a, 0xba, 0x20, 0x4c, 0xf3, 0xc0, 0xd8, 0xd3, 0x06, 0x86, - 0x52, 0xd4, 0xd8, 0x1f, 0x0f, 0x5d, 0x87, 0x92, 0xa6, 0xeb, 0x2a, 0xd3, 0xeb, 0x4a, 0x72, 0x92, - 0xf9, 0xe1, 0xad, 0xa7, 0x14, 0x35, 0xfe, 0x4f, 0xfe, 0x8f, 0x3c, 0x94, 0xc2, 0xab, 0x8b, 0x5f, - 0x91, 0xd2, 0xbd, 0x1d, 0x53, 0xba, 0xe5, 0x09, 0x57, 0x2f, 0xff, 0x85, 0x34, 0xef, 0x1d, 0xc8, - 0x1b, 0xd6, 0xc0, 0xe6, 0x8a, 0xb7, 0x32, 0x41, 0x58, 0xa6, 0x7d, 0x94, 0xea, 0x77, 0xca, 0xf7, - 0xad, 0x94, 0xef, 0x01, 0xd4, 0x13, 0x77, 0x56, 0x53, 0x2d, 0xeb, 0x6b, 0xb1, 0x4b, 0x3c, 0x7e, - 0xed, 0x1f, 0xdd, 0x15, 0xfe, 0x6d, 0x06, 0xca, 0x82, 0xfe, 0xa1, 0xdb, 0x50, 0x32, 0x2c, 0x35, - 0x76, 0xe0, 0x38, 0x2b, 0xb4, 0x2e, 0x1a, 0x16, 0xaf, 0xf8, 0x31, 0x54, 0xf1, 0x11, 0x19, 0xfd, - 0xb8, 0x9a, 0xcf, 0xaa, 0x5c, 0x61, 0x15, 0x22, 0x06, 0xc6, 0x48, 0x64, 0x90, 0x3b, 0x99, 0x01, - 0xab, 0xc0, 0x8f, 0xd5, 0xff, 0x27, 0x94, 0xd9, 0x2e, 0xb3, 0x63, 0x8c, 0x8c, 0xa9, 0xe1, 0x1e, - 0x7a, 0x1d, 0x2a, 0x23, 0xed, 0x48, 0x0d, 0xaf, 0x85, 0x98, 0xff, 0x5d, 0x1e, 0x69, 0x47, 0x5d, - 0x0e, 0x22, 0x31, 0x97, 0xc7, 0x2f, 0xbb, 0x55, 0xff, 0xc0, 0xc5, 0xde, 0x81, 0x6d, 0xea, 0xaa, - 0xd3, 0xf7, 0x79, 0x70, 0xb6, 0x14, 0x60, 0x7b, 0x01, 0xb2, 0xdb, 0xf7, 0xe5, 0x3f, 0x2e, 0x40, - 0x31, 0xd8, 0x0d, 0xd0, 0x77, 0xa0, 0xaa, 0x8d, 0xfd, 0x03, 0xd5, 0xd1, 0x3c, 0xef, 0x6b, 0xdb, - 0xd5, 0xf9, 0xac, 0x54, 0x08, 0xb0, 0xcb, 0x61, 0xe8, 0x12, 0xbd, 0x50, 0xea, 0xbb, 0x86, 0x23, - 0x5c, 0x4e, 0x8b, 0x20, 0x74, 0x0e, 0x8a, 0xcc, 0x45, 0xd0, 0xbc, 0x20, 0x30, 0xa4, 0xe5, 0x86, - 0x47, 0xbc, 0x87, 0xd0, 0x81, 0x09, 0x42, 0x8c, 0x3c, 0xe5, 0x50, 0x0f, 0xe0, 0x0d, 0x1e, 0x6a, - 0x2c, 0xc3, 0x3c, 0xd5, 0x01, 0xcd, 0xe3, 0xf1, 0x5f, 0x81, 0x14, 0x1b, 0x5e, 0x42, 0x39, 0x0a, - 0x09, 0xe5, 0x20, 0xce, 0x19, 0x45, 0xd3, 0xc0, 0x6a, 0x9e, 0xd6, 0x2c, 0x12, 0x00, 0x8d, 0xfe, - 0xda, 0xb0, 0xe0, 0xe2, 0x91, 0x7d, 0x88, 0x55, 0xc7, 0x35, 0x0e, 0x35, 0x9f, 0x38, 0x78, 0x74, - 0x7d, 0xd6, 0x6e, 0xc9, 0xe9, 0xed, 0x71, 0x5d, 0xa1, 0xb4, 0x5d, 0x46, 0xda, 0xf0, 0x94, 0xba, - 0x1b, 0x07, 0x10, 0xdf, 0x8a, 0x2d, 0xda, 0x81, 0xa9, 0x39, 0xaa, 0xae, 0x8d, 0x1c, 0xc3, 0x1a, - 0xd2, 0xa5, 0x5b, 0x54, 0x24, 0x8a, 0xb9, 0x6f, 0x6a, 0xce, 0x16, 0x83, 0xa3, 0x37, 0xa1, 0xe6, - 0x61, 0x4b, 0x57, 0xf9, 0x4d, 0xbe, 0x7f, 0xcc, 0x5d, 0xcb, 0x2a, 0x81, 0x6e, 0x06, 0x40, 0xe2, - 0x06, 0x91, 0x76, 0x7c, 0xac, 0xf6, 0x35, 0x87, 0x2f, 0xc5, 0x29, 0x6e, 0x10, 0xa3, 0xdb, 0xd4, - 0x1c, 0x62, 0x71, 0xd8, 0xa0, 0x93, 0x3a, 0x95, 0x19, 0x75, 0xd8, 0xdc, 0x90, 0x2a, 0x35, 0xc8, - 0x1a, 0x3a, 0x75, 0x45, 0x4b, 0x4a, 0xd6, 0xd0, 0xd1, 0x1d, 0xa8, 0x32, 0x05, 0x53, 0x4d, 0xa2, - 0x8c, 0xde, 0x4a, 0x8d, 0xb2, 0x11, 0x4c, 0x90, 0xa0, 0xaa, 0x4a, 0xc5, 0x89, 0x0a, 0x1e, 0x51, - 0x1d, 0x3e, 0xe7, 0x7c, 0x56, 0x99, 0x6f, 0x5a, 0x61, 0x13, 0xcf, 0xa7, 0xf4, 0x1a, 0xa0, 0xc8, - 0x7d, 0x0d, 0x5f, 0xf5, 0x48, 0x94, 0x72, 0x21, 0xf4, 0x62, 0x03, 0x04, 0x89, 0x3e, 0x0e, 0xdd, - 0x01, 0xf5, 0x54, 0x4b, 0xf4, 0x52, 0x06, 0x5d, 0x82, 0x8a, 0x66, 0x9a, 0xf6, 0xd7, 0x2a, 0x51, - 0x72, 0xcd, 0x0b, 0xdc, 0x53, 0x0a, 0xeb, 0x7c, 0x6d, 0x35, 0x3c, 0x74, 0x19, 0xea, 0x2e, 0x76, - 0x4c, 0xad, 0x8f, 0xd5, 0x40, 0x7b, 0x16, 0xd9, 0x4d, 0x3e, 0x07, 0x77, 0xa9, 0x12, 0xc9, 0x37, - 0xa1, 0x9e, 0x98, 0x5c, 0x12, 0x27, 0xf3, 0x68, 0x8a, 0x07, 0xc7, 0x19, 0x54, 0x86, 0x79, 0xa5, - 0xd9, 0xdd, 0x69, 0x6c, 0x36, 0xa5, 0xac, 0xfc, 0x27, 0x39, 0xa8, 0xc6, 0xf6, 0xb0, 0x5f, 0xc3, - 0x7a, 0x99, 0xba, 0x08, 0x2e, 0x43, 0x3d, 0x5a, 0x04, 0x2a, 0x3d, 0xcd, 0x60, 0x2b, 0xa1, 0x1a, - 0xae, 0x84, 0xb6, 0x36, 0xc2, 0xb3, 0x57, 0xc3, 0xde, 0xf4, 0xd5, 0x70, 0x65, 0xca, 0xbe, 0xfd, - 0x9b, 0x59, 0x12, 0x2f, 0x32, 0x5d, 0xff, 0x96, 0x83, 0x5a, 0x7c, 0x17, 0xff, 0xad, 0x9f, 0xaf, - 0xde, 0xf4, 0xf9, 0xba, 0x3a, 0xcd, 0x75, 0xf9, 0x0d, 0xd9, 0xb0, 0x8b, 0x50, 0xf6, 0x6d, 0x5f, - 0x33, 0xb9, 0x7f, 0x50, 0x66, 0x0b, 0x95, 0x82, 0xa8, 0x37, 0x40, 0xf8, 0x70, 0x82, 0x60, 0x4f, - 0xab, 0x30, 0x3e, 0x8c, 0x26, 0x78, 0xd2, 0xf0, 0x02, 0x13, 0xff, 0x10, 0x2a, 0xa2, 0xd3, 0x88, - 0x56, 0x60, 0x9e, 0x1d, 0x3e, 0xea, 0xfc, 0x35, 0x4e, 0x50, 0xa4, 0xbb, 0x2a, 0xa7, 0x52, 0x7d, - 0xdf, 0x0c, 0x77, 0x55, 0x0e, 0xeb, 0xf9, 0xa6, 0xfc, 0xa3, 0x0c, 0xd4, 0xe2, 0x3e, 0x24, 0xd9, - 0x68, 0x13, 0x6e, 0xa7, 0xda, 0x37, 0x8d, 0xe0, 0x54, 0xbf, 0xa8, 0x2c, 0xc5, 0x7d, 0xcc, 0x4d, - 0x8a, 0x43, 0x1f, 0xc2, 0x6a, 0xba, 0xd6, 0xd8, 0xf3, 0xb1, 0x1b, 0xbd, 0x8c, 0x58, 0x4e, 0xd6, - 0xa4, 0xf8, 0x96, 0x2e, 0xff, 0xd1, 0x3c, 0xf3, 0xdb, 0x7f, 0x5d, 0x6a, 0xbc, 0x0e, 0xc5, 0x11, - 0xf6, 0x3c, 0x6d, 0x88, 0x3d, 0xee, 0x91, 0x0b, 0xae, 0xdd, 0x2e, 0xc7, 0x28, 0x21, 0xcd, 0xc4, - 0x6d, 0x7d, 0xee, 0xc4, 0x6d, 0xbd, 0x30, 0x63, 0x5b, 0x9f, 0x9f, 0xb9, 0xad, 0x17, 0x13, 0x0b, - 0xe3, 0x2a, 0x14, 0xbe, 0x1a, 0xe3, 0x31, 0xf6, 0xb8, 0xd7, 0x2c, 0x38, 0xe6, 0x9f, 0x52, 0xb8, - 0xc2, 0xf1, 0x68, 0x6d, 0xd2, 0x12, 0x62, 0x1a, 0x7c, 0xca, 0x85, 0x51, 0x3e, 0xf5, 0xc2, 0xa8, - 0x4c, 0x5a, 0x18, 0x4d, 0xa8, 0x7a, 0xd8, 0xf3, 0x0c, 0xdb, 0x62, 0x57, 0xf3, 0x74, 0xff, 0xad, - 0xdd, 0xba, 0x34, 0x21, 0xe6, 0x5d, 0xdf, 0x63, 0x84, 0x2c, 0x04, 0xa9, 0x78, 0x42, 0x09, 0xbd, - 0x0f, 0x67, 0xbd, 0xb1, 0x43, 0x1c, 0x49, 0xac, 0x93, 0x2d, 0x5f, 0xdb, 0x37, 0x4c, 0xc3, 0x27, - 0x91, 0x5c, 0x8d, 0x9e, 0xd3, 0x9f, 0x09, 0xb1, 0x9b, 0x02, 0x12, 0x7d, 0x0c, 0x65, 0x4d, 0x1f, - 0x19, 0x41, 0xdb, 0xf5, 0xe4, 0xf1, 0x6c, 0xd4, 0x76, 0x83, 0x90, 0xb1, 0x96, 0x41, 0x0b, 0xff, - 0x93, 0x98, 0xd1, 0xc5, 0x7d, 0x6c, 0x1c, 0x62, 0x76, 0xc8, 0x54, 0x55, 0xc2, 0x32, 0xc1, 0x85, - 0x0f, 0x5d, 0x16, 0x18, 0x2e, 0x28, 0xa3, 0x0b, 0x00, 0x5a, 0xf4, 0xec, 0x36, 0xd8, 0xb7, 0x43, - 0x08, 0x5a, 0x84, 0x39, 0x7b, 0xec, 0xab, 0x5f, 0xf1, 0xb3, 0xa4, 0xbc, 0x3d, 0xf6, 0x3f, 0x45, - 0x4b, 0x30, 0x37, 0x30, 0x6d, 0xc7, 0xa3, 0xa7, 0x47, 0x55, 0x85, 0x15, 0x64, 0x0b, 0x2a, 0xe2, - 0xc0, 0x90, 0xc5, 0xff, 0xa8, 0xfd, 0xb0, 0xdd, 0xf9, 0xac, 0xcd, 0x8e, 0xbd, 0x5b, 0x5b, 0x3b, - 0x4d, 0x66, 0x13, 0x36, 0x3b, 0xed, 0x76, 0x73, 0xb3, 0x27, 0x65, 0x11, 0x40, 0xa1, 0xb1, 0xd9, - 0x6b, 0x3d, 0x6e, 0x4a, 0x39, 0x54, 0x81, 0x62, 0xa7, 0xdb, 0x6c, 0xef, 0x35, 0xdb, 0x3d, 0x29, - 0x8f, 0xea, 0x50, 0x26, 0xa5, 0xcd, 0x4e, 0xfb, 0x7e, 0x4b, 0xd9, 0x95, 0xe6, 0x08, 0xa0, 0xb9, - 0xd7, 0x6b, 0xdc, 0xdb, 0x69, 0xed, 0x3d, 0x68, 0x6e, 0x49, 0x05, 0x79, 0x0d, 0x20, 0x1a, 0x0c, - 0x54, 0x80, 0xec, 0xa3, 0x2e, 0x6b, 0x68, 0x8b, 0x34, 0x99, 0x21, 0xbc, 0xbb, 0xf7, 0x9f, 0xa8, - 0xa4, 0x1d, 0xf9, 0x87, 0x50, 0x0c, 0x96, 0x07, 0xba, 0x26, 0x0c, 0x15, 0x0b, 0x4a, 0x16, 0x52, - 0x8b, 0x48, 0x18, 0xbd, 0x37, 0x21, 0xef, 0x05, 0xaf, 0x33, 0x27, 0x92, 0x52, 0xb4, 0xfc, 0xd7, - 0x19, 0x98, 0xe7, 0x10, 0x24, 0x43, 0xc5, 0xb2, 0x7d, 0x63, 0x10, 0x3c, 0x14, 0xcd, 0xd0, 0x3b, - 0x8b, 0x18, 0x8c, 0x44, 0x14, 0x63, 0xfa, 0x64, 0x91, 0x32, 0xce, 0x2b, 0xbc, 0x84, 0x10, 0xe4, - 0x6d, 0x07, 0x5b, 0xfc, 0x9e, 0x83, 0xfe, 0x47, 0xaf, 0x42, 0xe9, 0x4b, 0x8c, 0x1d, 0xcd, 0x34, - 0x0e, 0x31, 0x7f, 0xeb, 0x14, 0x01, 0x88, 0x1d, 0x75, 0xf1, 0x80, 0xc4, 0x0e, 0xc1, 0x2b, 0x27, - 0x5e, 0x24, 0xf5, 0x74, 0xc3, 0xeb, 0x6b, 0xae, 0x1e, 0x3e, 0x71, 0x8a, 0x00, 0x64, 0x16, 0xa9, - 0x4d, 0xa7, 0x6b, 0x3a, 0xaf, 0xb0, 0x82, 0xbc, 0x01, 0x05, 0xb6, 0x34, 0x09, 0xde, 0xb0, 0x9c, - 0xb1, 0xcf, 0x43, 0x1e, 0x56, 0x20, 0x72, 0xdb, 0x63, 0x9f, 0x80, 0xf9, 0xeb, 0x2d, 0x56, 0x92, - 0x31, 0x14, 0x58, 0xac, 0x8d, 0xd6, 0xa1, 0xd0, 0xb7, 0xad, 0x81, 0x31, 0xe4, 0xa3, 0x7b, 0x36, - 0x19, 0x8d, 0x6f, 0x52, 0xac, 0xc2, 0xa9, 0xd0, 0xdb, 0xc1, 0x29, 0x53, 0xea, 0x2c, 0x83, 0x91, - 0x8b, 0xe7, 0x4c, 0x64, 0x98, 0x2b, 0x22, 0x17, 0x62, 0x74, 0xfb, 0xb6, 0x65, 0xe1, 0xbe, 0xaf, - 0xba, 0xd8, 0x77, 0x8f, 0x83, 0xc1, 0xe6, 0x40, 0x85, 0xc0, 0x88, 0x91, 0xa2, 0x51, 0x17, 0xbd, - 0x69, 0x65, 0xe3, 0x5d, 0x24, 0x00, 0xc2, 0x89, 0x78, 0xbf, 0xe1, 0x60, 0xaa, 0x89, 0x7b, 0xa6, - 0x85, 0x10, 0xd3, 0xe2, 0x08, 0xb4, 0x05, 0x17, 0x46, 0x86, 0x65, 0x8c, 0xc6, 0x23, 0x35, 0x5c, - 0x27, 0x24, 0x80, 0x8c, 0xaa, 0xb2, 0x19, 0x7a, 0x95, 0x53, 0x35, 0x44, 0xa2, 0x80, 0x8b, 0xfc, - 0xf3, 0x2c, 0x94, 0x85, 0xee, 0xfd, 0x96, 0x76, 0x83, 0x1e, 0xed, 0xe3, 0xa1, 0xed, 0x1b, 0x1a, - 0xb1, 0x77, 0x91, 0x70, 0x4c, 0x11, 0x51, 0x84, 0x7b, 0x10, 0x88, 0x49, 0xf5, 0x9e, 0xd2, 0x14, - 0x02, 0xbd, 0x27, 0x25, 0x62, 0xa4, 0x48, 0x10, 0x4c, 0x31, 0x4c, 0x21, 0xc3, 0xb2, 0xfc, 0xef, - 0x19, 0x28, 0x85, 0x67, 0x33, 0xe9, 0x90, 0x26, 0x33, 0x21, 0xa4, 0x79, 0x0d, 0x80, 0x11, 0x09, - 0xd7, 0x62, 0x2c, 0x10, 0xeb, 0x72, 0x1e, 0x23, 0x7f, 0xac, 0x92, 0xc5, 0x60, 0x1f, 0x62, 0xf7, - 0x98, 0xdf, 0xf9, 0x56, 0x46, 0xfe, 0x78, 0x2b, 0x80, 0x11, 0x37, 0x84, 0x6c, 0xe5, 0x64, 0x3c, - 0x47, 0xb6, 0x1e, 0xdc, 0x91, 0x96, 0x39, 0x6c, 0xd7, 0xd6, 0x31, 0xd9, 0x5c, 0x78, 0x48, 0x18, - 0xdf, 0x5e, 0xab, 0x0c, 0x1a, 0x48, 0x73, 0x11, 0xca, 0x9c, 0x8c, 0x8a, 0xc3, 0x36, 0x58, 0x1e, - 0x4c, 0x52, 0x79, 0x96, 0x61, 0xde, 0xef, 0x3b, 0xea, 0xc8, 0xf3, 0xb8, 0x73, 0x59, 0xf0, 0xfb, - 0xce, 0xae, 0xe7, 0xc9, 0x77, 0xa1, 0x2c, 0x9c, 0x2f, 0xa1, 0x75, 0x58, 0x14, 0x0f, 0xa3, 0xe2, - 0x0e, 0xce, 0x82, 0x70, 0xf8, 0xc4, 0xbc, 0x1b, 0xf9, 0x17, 0x39, 0xa8, 0x27, 0x4e, 0x98, 0x66, - 0xfb, 0x5d, 0xfc, 0x9c, 0x2a, 0x52, 0xb1, 0xaa, 0x52, 0xe6, 0x30, 0x3a, 0x7d, 0x17, 0xa1, 0x7c, - 0x80, 0x4d, 0x07, 0xbb, 0xaa, 0x6d, 0x99, 0xc1, 0xb0, 0x01, 0x03, 0x75, 0x2c, 0xf3, 0x98, 0x8c, - 0xac, 0x8e, 0x07, 0xd8, 0x75, 0x35, 0x93, 0x31, 0xc9, 0x53, 0x26, 0x95, 0x00, 0x48, 0xb9, 0xdc, - 0x84, 0x25, 0xd1, 0x18, 0xaa, 0x81, 0x3c, 0xec, 0x8a, 0x6a, 0x51, 0xc4, 0x35, 0xb9, 0x6c, 0x6f, - 0xc3, 0x82, 0x69, 0x5b, 0x43, 0xa2, 0xc3, 0x7a, 0x48, 0x5f, 0x60, 0x7b, 0x7e, 0x88, 0x08, 0x88, - 0xd7, 0x60, 0x81, 0x5e, 0xe1, 0xa8, 0x74, 0x44, 0x3c, 0x35, 0xd4, 0xaa, 0xaa, 0x52, 0xa7, 0x08, - 0x3a, 0xa6, 0x1e, 0x95, 0x65, 0x0d, 0x16, 0xa8, 0x03, 0x13, 0xeb, 0x39, 0x73, 0x64, 0x68, 0x68, - 0xa0, 0x08, 0xbd, 0xbf, 0xc2, 0xa3, 0x05, 0x4e, 0x1b, 0xf9, 0xe3, 0x35, 0x81, 0x92, 0x38, 0x1d, - 0xe1, 0x6d, 0x8c, 0x40, 0x09, 0x94, 0x92, 0xdd, 0xc6, 0x08, 0xa4, 0x08, 0xf2, 0x54, 0xbb, 0xd8, - 0x7d, 0x15, 0xfd, 0x2f, 0xbf, 0x0b, 0xcb, 0xbb, 0x4e, 0x62, 0xde, 0xb8, 0xbd, 0x9b, 0x3a, 0x7b, - 0xf2, 0x5f, 0x65, 0xe0, 0x6c, 0xaa, 0x16, 0xb3, 0x2e, 0xd3, 0xa7, 0x5c, 0xf4, 0x1b, 0xd8, 0xdb, - 0x9f, 0x68, 0xe7, 0x8b, 0xfb, 0x06, 0x7c, 0xaa, 0x05, 0xdf, 0xe0, 0x1a, 0x2c, 0x12, 0xc7, 0xca, - 0x1e, 0xa8, 0xae, 0xb1, 0xaf, 0x86, 0x6c, 0xf2, 0xc1, 0xb7, 0x3b, 0x7a, 0x67, 0xa0, 0x18, 0xfb, - 0x4a, 0xb4, 0x91, 0xd6, 0x05, 0x72, 0xba, 0xa7, 0xb2, 0xf9, 0xae, 0x04, 0xa4, 0x7b, 0x44, 0x65, - 0x7f, 0x9a, 0x81, 0x85, 0x54, 0x37, 0xd0, 0x77, 0x13, 0x9b, 0xca, 0xeb, 0xc2, 0x3e, 0x3c, 0x79, - 0xa4, 0xc2, 0xfd, 0x65, 0x23, 0xbe, 0xbf, 0x5c, 0x9a, 0x51, 0x33, 0xb6, 0xd5, 0x34, 0xa0, 0xca, - 0x4f, 0x57, 0xf9, 0xd0, 0x4f, 0x3b, 0x04, 0x14, 0x46, 0x37, 0x1b, 0x9f, 0x92, 0xff, 0x9d, 0x81, - 0x0a, 0xe7, 0xc1, 0x26, 0xe2, 0xb9, 0x59, 0x24, 0x03, 0xb6, 0xdc, 0x29, 0x02, 0xb6, 0xfc, 0xa4, - 0x80, 0xed, 0xff, 0xe5, 0xe0, 0x3c, 0xb7, 0x24, 0x26, 0x7b, 0x74, 0xc5, 0xee, 0xba, 0x82, 0x7d, - 0xf4, 0x1d, 0x40, 0x9a, 0xf9, 0xb5, 0x76, 0xec, 0x11, 0x47, 0xd9, 0xd1, 0x5c, 0xac, 0x8e, 0x42, - 0x6d, 0x91, 0x18, 0x66, 0x93, 0x21, 0x76, 0xb1, 0x8e, 0x6e, 0xc2, 0x19, 0x63, 0x68, 0xd9, 0x2e, - 0x71, 0xd3, 0xa9, 0x64, 0xc1, 0x1d, 0x3c, 0x7f, 0xcb, 0xca, 0x90, 0x0d, 0x8f, 0x88, 0xc8, 0xee, - 0xdd, 0x49, 0xa0, 0x15, 0xdc, 0xa2, 0x86, 0x4d, 0xd0, 0xe5, 0x49, 0x03, 0x2d, 0xa6, 0x5d, 0xcb, - 0x01, 0x05, 0x6f, 0x8a, 0x0a, 0xec, 0xb6, 0x74, 0x74, 0x07, 0xce, 0x85, 0x8a, 0xa7, 0x1a, 0x96, - 0xd6, 0xf7, 0x89, 0x55, 0x66, 0xab, 0x9b, 0x2b, 0xdc, 0x72, 0x48, 0xd0, 0xe2, 0x78, 0xb6, 0xc8, - 0xc9, 0x08, 0xb2, 0xc1, 0x54, 0x35, 0x63, 0xe8, 0x04, 0xd7, 0xe0, 0xfc, 0xd3, 0x32, 0x63, 0xe8, - 0xa0, 0x3b, 0xb0, 0xca, 0x3b, 0x63, 0xe1, 0x23, 0x5f, 0xa5, 0xb7, 0xb1, 0x43, 0x47, 0x1d, 0x61, - 0xdf, 0x35, 0xfa, 0xdc, 0xc6, 0x9c, 0x65, 0x14, 0x6d, 0x7c, 0xe4, 0x3f, 0xb0, 0x9d, 0xd6, 0xd0, - 0xd9, 0xa5, 0x58, 0x74, 0x17, 0xce, 0xeb, 0xec, 0xf9, 0x89, 0xba, 0x8f, 0x3d, 0x9f, 0x8d, 0x85, - 0x17, 0x0c, 0x31, 0xb5, 0x39, 0x45, 0x65, 0x85, 0x93, 0xdc, 0xc3, 0xec, 0x23, 0x80, 0x70, 0x0a, - 0xe4, 0xff, 0x9b, 0x83, 0xd5, 0x89, 0xb3, 0xc2, 0xd4, 0xe5, 0x77, 0x93, 0xf2, 0x1b, 0x99, 0x94, - 0x0c, 0x9c, 0x99, 0x38, 0x29, 0xe8, 0x6e, 0xc2, 0x0a, 0xbd, 0x99, 0xba, 0x05, 0x9a, 0xb4, 0xb6, - 0x42, 0x4b, 0x74, 0x27, 0x6e, 0x89, 0xde, 0x38, 0xa1, 0x76, 0xcc, 0x1a, 0xdd, 0x82, 0xb3, 0x8f, - 0x3c, 0x4c, 0x0f, 0x4f, 0x1c, 0x93, 0x7e, 0x95, 0xe3, 0x9d, 0xb8, 0x23, 0xdc, 0x84, 0x33, 0xc9, - 0x3a, 0x27, 0xec, 0x07, 0xf2, 0x17, 0x00, 0xcd, 0xfd, 0xa1, 0xc3, 0x59, 0xaf, 0xc1, 0x02, 0x3b, - 0xd7, 0x1d, 0x71, 0x1e, 0x24, 0x2a, 0x67, 0x35, 0xea, 0x14, 0x11, 0xf0, 0x6e, 0xd0, 0x93, 0xe6, - 0x91, 0x76, 0x44, 0x1d, 0xca, 0xe0, 0x42, 0x9f, 0x6e, 0xfc, 0x1c, 0xc8, 0xee, 0x9a, 0xfe, 0x1b, - 0x94, 0x08, 0x7b, 0x26, 0xc5, 0x4b, 0xe7, 0xae, 0x42, 0x9e, 0x70, 0x47, 0xef, 0x24, 0xa6, 0x69, - 0x29, 0x7e, 0x6d, 0x99, 0x98, 0x95, 0xb7, 0xe2, 0xb3, 0xb2, 0x18, 0x27, 0x8e, 0x4d, 0xc2, 0x4d, - 0x80, 0x56, 0x34, 0x3a, 0x29, 0x99, 0x32, 0x13, 0x64, 0xba, 0x01, 0xa5, 0x56, 0xd8, 0xe3, 0x53, - 0xd5, 0x50, 0x21, 0xdf, 0x3a, 0xa1, 0x17, 0xad, 0xe7, 0xe9, 0x45, 0x2b, 0xd9, 0x8b, 0x5f, 0x66, - 0x40, 0x4a, 0xea, 0x05, 0xfa, 0x20, 0xd1, 0x9a, 0xb0, 0x4d, 0x4e, 0xd6, 0xbb, 0xb0, 0xe5, 0xf7, - 0xe3, 0x2d, 0x5f, 0x9c, 0x5e, 0x31, 0xf6, 0x62, 0x40, 0x86, 0x3c, 0xde, 0x1f, 0x3a, 0xe9, 0xaf, - 0xd5, 0xc8, 0xa8, 0x2b, 0x14, 0x47, 0x68, 0x0c, 0x42, 0x93, 0xfa, 0x22, 0xac, 0x45, 0x69, 0x08, - 0x4e, 0xbe, 0xc7, 0xf7, 0xb5, 0x9e, 0xe6, 0x0e, 0xb1, 0xbf, 0x8b, 0x47, 0xfb, 0xd8, 0xf5, 0x0e, - 0x0c, 0x61, 0x92, 0xe2, 0xfe, 0x68, 0x26, 0xed, 0x8f, 0xca, 0x0d, 0x6e, 0x85, 0x93, 0x3c, 0xc2, - 0x59, 0x3b, 0x99, 0x45, 0x68, 0x34, 0x92, 0x3c, 0x4e, 0x34, 0x1a, 0x93, 0x05, 0x3f, 0xad, 0xd1, - 0x98, 0x28, 0x72, 0x30, 0xd3, 0x5f, 0xc0, 0x85, 0x1d, 0xdb, 0x1a, 0xee, 0x10, 0xff, 0xeb, 0x39, - 0xdd, 0xc9, 0x53, 0x04, 0x03, 0xf2, 0x3f, 0x65, 0xe0, 0xb5, 0x69, 0xfc, 0x7f, 0x95, 0x8e, 0xe7, - 0x44, 0x97, 0x3d, 0x3f, 0xd9, 0x65, 0xff, 0x10, 0x56, 0x53, 0xb4, 0xae, 0x8a, 0x8f, 0x1c, 0xc3, - 0x0d, 0x03, 0x8e, 0xe5, 0x44, 0x25, 0xb7, 0xc9, 0xd0, 0xf2, 0xff, 0xcf, 0xc0, 0xca, 0xb4, 0x0e, - 0xa2, 0x4f, 0x12, 0xf3, 0x2a, 0x1c, 0xf5, 0xcf, 0x1e, 0xf4, 0x70, 0x6a, 0xef, 0xc6, 0xa7, 0xf6, - 0xca, 0xc9, 0x0c, 0x62, 0xb3, 0xfb, 0xb3, 0x39, 0x98, 0xe7, 0xde, 0x25, 0x7a, 0x08, 0x8b, 0x23, - 0x47, 0x4d, 0x3d, 0x37, 0x60, 0x92, 0x9d, 0x9f, 0xe1, 0xf2, 0x2a, 0x0b, 0xa3, 0x94, 0xb3, 0x7d, - 0x3d, 0xec, 0x59, 0x36, 0xf9, 0x58, 0x24, 0xe6, 0x11, 0x87, 0x1d, 0x49, 0xbe, 0x4a, 0xc9, 0x9d, - 0xfa, 0x55, 0xca, 0x67, 0xb0, 0x1c, 0x04, 0xb4, 0x7c, 0xf3, 0xe3, 0x8f, 0xb6, 0x82, 0x03, 0xee, - 0x8b, 0x27, 0x6c, 0x92, 0xca, 0x19, 0x77, 0xe2, 0x56, 0xfd, 0x00, 0xd0, 0xd8, 0xc3, 0xd1, 0xd6, - 0xc2, 0xec, 0xed, 0x5c, 0xf2, 0x19, 0x40, 0xd2, 0x44, 0x29, 0xd2, 0x38, 0x69, 0x19, 0x53, 0xd7, - 0xaf, 0x85, 0x64, 0xef, 0xa6, 0x5f, 0xbf, 0x86, 0xdd, 0xf3, 0xe9, 0x32, 0x55, 0x47, 0xe1, 0x3a, - 0xe5, 0x4f, 0x55, 0x2e, 0x9e, 0xb0, 0x9c, 0x79, 0xf7, 0x52, 0x46, 0x45, 0x83, 0xf3, 0x24, 0xea, - 0x55, 0x59, 0x3c, 0x9c, 0x9a, 0x77, 0xf6, 0xb4, 0x45, 0x3e, 0x59, 0xa1, 0x94, 0x15, 0x73, 0x9a, - 0x7e, 0xc7, 0x1e, 0x92, 0x94, 0x4e, 0xf1, 0x90, 0xa4, 0x19, 0x7e, 0xd8, 0x2c, 0xb8, 0x26, 0x7c, - 0x51, 0x07, 0xcb, 0x9f, 0x17, 0xd1, 0x39, 0x28, 0xd2, 0x53, 0xf9, 0x91, 0x76, 0xc4, 0x2d, 0xcb, - 0x3c, 0x29, 0xef, 0x6a, 0x47, 0xf2, 0x16, 0x7d, 0xbb, 0x1d, 0xf7, 0x56, 0x9e, 0x9f, 0xcb, 0x97, - 0x50, 0x0c, 0xb8, 0xa0, 0x1b, 0x89, 0x95, 0xba, 0x92, 0xee, 0x46, 0x42, 0xa1, 0xaf, 0xc5, 0x57, - 0xe6, 0x72, 0xba, 0x42, 0x6c, 0x25, 0x8e, 0xa1, 0xc0, 0xdf, 0x24, 0x9e, 0x87, 0x92, 0xe1, 0xa8, - 0xb1, 0xc7, 0x33, 0x45, 0x23, 0x78, 0xb0, 0x78, 0x19, 0xea, 0x23, 0xcd, 0xfb, 0x92, 0xbb, 0xe5, - 0xea, 0x88, 0x7f, 0xce, 0x5e, 0x55, 0xaa, 0x04, 0xcc, 0x5c, 0xf2, 0x5d, 0xc3, 0x4a, 0xd1, 0x69, - 0x47, 0x3c, 0xee, 0x13, 0xe9, 0xb4, 0x23, 0xf9, 0x67, 0x19, 0x80, 0xe8, 0x33, 0xad, 0x6f, 0xf9, - 0xa9, 0x18, 0x81, 0x99, 0x86, 0xe7, 0xd3, 0xa7, 0xda, 0x25, 0x85, 0xfe, 0xa7, 0x5f, 0xed, 0xc5, - 0x3f, 0x79, 0x96, 0x92, 0x6a, 0x2f, 0x7c, 0xe7, 0xbc, 0x0d, 0xc5, 0x5d, 0xcd, 0xef, 0x1f, 0x10, - 0x61, 0xae, 0xc4, 0x84, 0x11, 0xdc, 0x11, 0x4a, 0x71, 0xc2, 0x57, 0x6b, 0x8f, 0xa1, 0x12, 0x0b, - 0x53, 0xd6, 0x63, 0xcc, 0x84, 0xe5, 0x2b, 0x52, 0x09, 0x3c, 0xcf, 0x42, 0x41, 0x08, 0x7d, 0xaa, - 0x0a, 0x2f, 0xc9, 0x7f, 0x37, 0x07, 0xb0, 0x69, 0x5b, 0xba, 0xc1, 0x6c, 0xc4, 0x4d, 0x00, 0xbe, - 0xb2, 0xa3, 0x2f, 0xe0, 0x50, 0x42, 0xd2, 0x3d, 0xec, 0x2b, 0x25, 0x46, 0x45, 0xba, 0xf5, 0x3e, - 0x54, 0xc2, 0x1b, 0x35, 0x52, 0x29, 0x3b, 0xb5, 0x52, 0xf8, 0x22, 0x98, 0x54, 0xfb, 0x1e, 0xd4, - 0x12, 0x31, 0x59, 0x2e, 0x79, 0x36, 0x2e, 0x76, 0x45, 0xa9, 0x68, 0x62, 0xf7, 0x6f, 0x41, 0x39, - 0xa8, 0x4d, 0xda, 0xcc, 0x4f, 0x17, 0x94, 0x55, 0x23, 0x2d, 0xde, 0x0e, 0xb3, 0x55, 0xf8, 0xc7, - 0xb4, 0xd6, 0xdc, 0xd4, 0x5a, 0x95, 0x90, 0x90, 0x54, 0xfc, 0x08, 0x16, 0x48, 0xc0, 0x15, 0xaf, - 0x5c, 0x98, 0x5a, 0xb9, 0x8e, 0x8f, 0xfc, 0x4d, 0xb1, 0xfe, 0x45, 0x28, 0xbb, 0xce, 0x97, 0x06, - 0x31, 0x45, 0x63, 0xd3, 0xa7, 0x66, 0x6e, 0x4e, 0x01, 0x97, 0x7d, 0x59, 0x34, 0x36, 0x7d, 0x74, - 0x17, 0x20, 0xfa, 0x7e, 0x85, 0x5f, 0x93, 0x0b, 0x57, 0x5d, 0xd1, 0xfc, 0x70, 0x8b, 0x48, 0xa6, - 0xb5, 0x14, 0x7e, 0xde, 0x82, 0xee, 0xc1, 0xa2, 0x49, 0xac, 0x61, 0x42, 0xc2, 0xd2, 0x54, 0x09, - 0x17, 0x28, 0x79, 0x4c, 0xc6, 0x2b, 0x20, 0x45, 0x51, 0xa5, 0xa5, 0x52, 0xb5, 0x07, 0xaa, 0xf6, - 0x55, 0x8b, 0x07, 0x93, 0xd6, 0x0e, 0xd1, 0xff, 0x1b, 0x50, 0x0e, 0x1e, 0xdf, 0xa9, 0x86, 0x45, - 0xdf, 0xfc, 0xd4, 0xc4, 0x25, 0x70, 0x9f, 0x1e, 0xdf, 0x28, 0x25, 0xfe, 0xfa, 0xae, 0x65, 0xc9, - 0x07, 0x50, 0x0a, 0xc5, 0x46, 0x8b, 0x50, 0x57, 0x3a, 0x8f, 0x7a, 0x4d, 0xb5, 0xf7, 0x79, 0x37, - 0xfc, 0xce, 0x60, 0x19, 0x16, 0x05, 0x60, 0xab, 0xdd, 0x6b, 0x2a, 0xed, 0xc6, 0x8e, 0x94, 0x49, - 0x20, 0x9a, 0x4f, 0x38, 0x22, 0x8b, 0x96, 0x40, 0x12, 0x10, 0xfc, 0x53, 0x11, 0x79, 0x00, 0xf5, - 0xb0, 0x53, 0x0d, 0x96, 0x73, 0xe5, 0x66, 0x6c, 0x9d, 0xbc, 0x26, 0x0e, 0x6a, 0x8c, 0x50, 0x58, - 0x2a, 0x97, 0xa0, 0x1c, 0x0c, 0xa4, 0x11, 0x7e, 0x4d, 0x24, 0x82, 0xe4, 0x36, 0x94, 0x76, 0xb1, - 0xce, 0x5b, 0x78, 0x3b, 0xd6, 0xc2, 0xb2, 0x78, 0x1b, 0xa6, 0xa7, 0x78, 0x2f, 0xc1, 0xdc, 0xa1, - 0x66, 0x8e, 0xd9, 0xda, 0xce, 0x29, 0xac, 0x20, 0xab, 0x50, 0x6f, 0x78, 0x5d, 0x17, 0x3b, 0xd8, - 0x0a, 0xb8, 0x4a, 0x90, 0xd3, 0x3c, 0x8b, 0xfb, 0xd5, 0xe4, 0x2f, 0x59, 0xc1, 0x84, 0x42, 0x0b, - 0xaf, 0x99, 0x58, 0x09, 0xc9, 0x50, 0x25, 0xdb, 0xba, 0x89, 0x07, 0xbe, 0x3a, 0xb2, 0xbd, 0xe0, - 0x63, 0xad, 0xf2, 0xd8, 0xc3, 0x3b, 0x78, 0xe0, 0xef, 0xda, 0x9e, 0x2f, 0xdf, 0x85, 0x2a, 0x7f, - 0x3c, 0xcf, 0xd9, 0xcf, 0xfc, 0x6e, 0xc6, 0xc3, 0xe6, 0x80, 0x7b, 0xa0, 0xf4, 0xbf, 0x7c, 0x05, - 0xea, 0x3b, 0xf4, 0xa2, 0xc0, 0xc5, 0x03, 0xce, 0x20, 0xec, 0x08, 0xbf, 0x0a, 0x63, 0x1d, 0xf9, - 0xfb, 0x1c, 0xcc, 0x33, 0x02, 0x2f, 0x7a, 0x25, 0xaa, 0xf5, 0xc3, 0x2b, 0xbf, 0x5a, 0xea, 0x95, - 0x28, 0xa3, 0xe6, 0xaf, 0x44, 0x39, 0xef, 0xdb, 0x50, 0x8a, 0xae, 0xa6, 0xb3, 0xc9, 0xe7, 0xa1, - 0x89, 0x89, 0x53, 0x22, 0x5a, 0xf4, 0x26, 0xe4, 0x46, 0xdc, 0x3d, 0x8e, 0xc5, 0x7b, 0xe1, 0x4c, - 0x28, 0x04, 0x8f, 0x3e, 0x00, 0x20, 0xc6, 0x83, 0x8d, 0x37, 0xb7, 0x1d, 0xe7, 0x62, 0x66, 0x47, - 0x9c, 0x0a, 0x6a, 0x42, 0x18, 0x00, 0x7d, 0x04, 0xd5, 0x98, 0x25, 0xe0, 0x26, 0x64, 0x86, 0x74, - 0x15, 0xd1, 0x18, 0xa0, 0x9b, 0x30, 0xcf, 0xbf, 0x6e, 0xe0, 0xf6, 0x43, 0x50, 0x97, 0xd8, 0x04, - 0x29, 0x01, 0x1d, 0x11, 0x96, 0x5f, 0xdb, 0xb8, 0x78, 0xc0, 0x5d, 0xa4, 0x73, 0xa2, 0x17, 0x13, - 0x9b, 0x97, 0xe0, 0x46, 0xc7, 0xc5, 0x03, 0x74, 0x0f, 0xea, 0x09, 0xb3, 0xc0, 0x9d, 0xa0, 0x19, - 0xe2, 0xd6, 0xe2, 0x96, 0x41, 0xfe, 0x26, 0x03, 0xa5, 0xf0, 0x9b, 0xde, 0x89, 0x1f, 0xb8, 0xbe, - 0x07, 0xd0, 0x0f, 0xed, 0x13, 0x9f, 0xad, 0xa5, 0x49, 0xb6, 0x4b, 0x11, 0xe8, 0xd0, 0xdb, 0x30, - 0xcf, 0xd4, 0xc2, 0xe3, 0xb3, 0x25, 0x3e, 0xe0, 0x65, 0x08, 0x25, 0xa0, 0x90, 0x3f, 0x85, 0x02, - 0xf7, 0x8d, 0x27, 0x09, 0xf0, 0x2e, 0x40, 0x2c, 0x73, 0x40, 0x6e, 0xda, 0x17, 0xc9, 0x02, 0x19, - 0x0d, 0xf8, 0x93, 0xef, 0x5d, 0x5f, 0xea, 0xf7, 0xbb, 0xb1, 0xaf, 0xfb, 0xf3, 0xa7, 0xf8, 0xba, - 0xbf, 0xa6, 0xe3, 0x81, 0x36, 0x36, 0xfd, 0x60, 0xb9, 0xcc, 0xcd, 0x5a, 0x2e, 0x55, 0x4e, 0xcc, - 0x8a, 0xf2, 0x21, 0x54, 0x09, 0x36, 0xfa, 0xb6, 0xee, 0xd7, 0x93, 0x93, 0x40, 0xfe, 0x3f, 0x19, - 0xc8, 0x29, 0xb6, 0x86, 0x6a, 0x90, 0xd5, 0x82, 0x93, 0x9b, 0xac, 0x46, 0x53, 0xa1, 0x31, 0xff, - 0xc0, 0xc4, 0x81, 0x3f, 0x17, 0x01, 0x88, 0x21, 0x1b, 0x69, 0x14, 0xc5, 0x53, 0x7e, 0xb0, 0x92, - 0xf0, 0xc4, 0x3a, 0x1f, 0x7b, 0x62, 0x1d, 0x7c, 0x1b, 0x92, 0xda, 0xae, 0x95, 0xee, 0xc3, 0x56, - 0xf4, 0x42, 0x5f, 0xfe, 0xd3, 0x0c, 0xe4, 0x1e, 0xbb, 0x83, 0x89, 0xd3, 0xf8, 0x06, 0x64, 0x5d, - 0x5d, 0xd0, 0xce, 0xf4, 0x63, 0xd3, 0xac, 0xab, 0xa3, 0x9b, 0x50, 0xe2, 0x6f, 0xa4, 0x5d, 0x9f, - 0x7f, 0x9f, 0x37, 0xe5, 0x65, 0x2a, 0x23, 0x53, 0xe8, 0x87, 0xf9, 0xfc, 0x5d, 0xb6, 0xeb, 0xf3, - 0x79, 0x9e, 0x52, 0x85, 0x91, 0x29, 0x3e, 0x7f, 0xcc, 0xca, 0x1e, 0xdd, 0x65, 0x0d, 0x5d, 0xfe, - 0x69, 0x06, 0x96, 0xb6, 0xd8, 0x7c, 0xd2, 0x39, 0xde, 0x32, 0x3c, 0x5f, 0xb3, 0xfa, 0x18, 0x6d, - 0x40, 0x78, 0xd0, 0xcc, 0xce, 0x90, 0x55, 0x9d, 0xa3, 0xf8, 0x58, 0x9f, 0x09, 0xd0, 0xa9, 0x7a, - 0xf4, 0xca, 0x7a, 0x42, 0x3d, 0x36, 0x19, 0x67, 0x02, 0x74, 0xac, 0x9e, 0xfc, 0xe7, 0x79, 0x28, - 0xb0, 0xcc, 0x79, 0xa9, 0x19, 0x3d, 0x0f, 0xa5, 0xe8, 0x10, 0x9c, 0x7f, 0x8c, 0xea, 0x06, 0xa7, - 0xde, 0x17, 0xa1, 0x4c, 0xfc, 0x05, 0x6c, 0xb1, 0xbb, 0xdc, 0x1c, 0xf3, 0x6f, 0x18, 0x88, 0xde, - 0xe5, 0xbe, 0x05, 0x12, 0x27, 0xe0, 0xbb, 0x0c, 0x5f, 0x13, 0x25, 0xa5, 0xce, 0xe0, 0x8d, 0x00, - 0x1c, 0xfb, 0xd2, 0x63, 0x2e, 0xf1, 0xa5, 0xc7, 0x3b, 0x13, 0x03, 0x58, 0x7e, 0xe3, 0x99, 0x0a, - 0x52, 0xbf, 0x98, 0x1e, 0x47, 0xcf, 0x3f, 0xcf, 0x51, 0xf5, 0x94, 0x68, 0xba, 0x07, 0x67, 0x83, - 0x15, 0x9b, 0x18, 0x63, 0x66, 0x64, 0x2f, 0xc4, 0x16, 0x5b, 0x6a, 0x72, 0x95, 0x25, 0x7d, 0xd2, - 0x94, 0xdf, 0xa5, 0x8f, 0x1e, 0x06, 0x58, 0xc7, 0x2e, 0x7b, 0x28, 0x53, 0x4a, 0x6e, 0x13, 0x9b, - 0x22, 0x5a, 0x89, 0x53, 0xbf, 0xa4, 0xef, 0x2b, 0x92, 0x67, 0x17, 0xe5, 0xd3, 0x9e, 0x5d, 0xc8, - 0x36, 0x54, 0x63, 0xf2, 0xcd, 0x38, 0xed, 0x8a, 0x7f, 0xbd, 0x97, 0x4d, 0x7d, 0xbd, 0xf7, 0x06, - 0xd4, 0xd8, 0xd1, 0x80, 0xaa, 0x79, 0x6a, 0x18, 0x85, 0x55, 0x95, 0x0a, 0x83, 0x36, 0x3c, 0xe2, - 0x8d, 0xca, 0x4d, 0x28, 0x06, 0x56, 0x60, 0x86, 0x4f, 0x93, 0x78, 0x6c, 0x90, 0x4d, 0x3e, 0x36, - 0x90, 0x7f, 0x2f, 0x0f, 0x25, 0xc2, 0x27, 0xbc, 0x92, 0xe4, 0x0f, 0x32, 0x32, 0xd4, 0x4b, 0x9b, - 0xf4, 0x20, 0x83, 0xf9, 0x6f, 0x61, 0x99, 0x2c, 0x98, 0xb1, 0xc3, 0x5d, 0xaf, 0xec, 0xd8, 0x61, - 0x4d, 0xf6, 0x6d, 0x57, 0x57, 0x0d, 0xe7, 0xf0, 0x3d, 0x7e, 0x14, 0x07, 0x0c, 0xd4, 0x72, 0x0e, - 0xdf, 0x8b, 0x13, 0x6c, 0x70, 0x73, 0x10, 0x11, 0x6c, 0xd0, 0x3c, 0x47, 0x2c, 0x14, 0xa3, 0x1c, - 0xf8, 0x0b, 0x09, 0x06, 0x0a, 0x38, 0x44, 0x04, 0x1b, 0xfc, 0x32, 0x3f, 0x22, 0xd8, 0x20, 0xfd, - 0xf0, 0xb0, 0x6b, 0x68, 0x26, 0xbf, 0xbc, 0xe7, 0x25, 0xf4, 0x1d, 0xa8, 0x06, 0x07, 0x8b, 0x8c, - 0x77, 0x89, 0x76, 0xa6, 0x12, 0x00, 0x29, 0xf7, 0x04, 0xd1, 0x06, 0xd5, 0xa3, 0x38, 0xd1, 0x06, - 0x21, 0x62, 0x3c, 0x55, 0xfa, 0x40, 0x81, 0xa9, 0x4a, 0x4e, 0xa9, 0x30, 0x60, 0x9b, 0xc2, 0x88, - 0x9c, 0x7d, 0xad, 0x7f, 0x80, 0x59, 0xaa, 0x39, 0xfa, 0xd6, 0x30, 0xa7, 0x00, 0x05, 0xd1, 0xf4, - 0x04, 0xe8, 0x4d, 0xa8, 0x85, 0x04, 0x34, 0x35, 0x00, 0x7d, 0x69, 0x98, 0x53, 0xaa, 0x01, 0x0d, - 0xcb, 0x17, 0x70, 0x01, 0xca, 0xfc, 0xb6, 0x5c, 0xd7, 0x7c, 0x8d, 0x7e, 0x77, 0x9a, 0x53, 0x4a, - 0xf4, 0xa6, 0x7c, 0x4b, 0xf3, 0x35, 0xe2, 0x92, 0x62, 0xd7, 0xb5, 0x5d, 0xfa, 0x56, 0x30, 0xa7, - 0xb0, 0x02, 0x7a, 0x1d, 0xb8, 0x34, 0xea, 0x57, 0x63, 0xec, 0x1e, 0xd3, 0xa7, 0x80, 0x39, 0xa5, - 0xcc, 0x60, 0x9f, 0x12, 0x10, 0x9b, 0x0a, 0x0f, 0xfb, 0x9c, 0x62, 0x81, 0x09, 0x48, 0x41, 0x94, - 0x40, 0xfe, 0x1c, 0xf2, 0x8a, 0xf3, 0xa5, 0x11, 0xee, 0x44, 0x99, 0xd9, 0x3b, 0xd1, 0x8c, 0x9b, - 0x87, 0x50, 0xc9, 0xf8, 0x39, 0xc9, 0xda, 0x8f, 0x72, 0x50, 0x60, 0x21, 0x13, 0xaa, 0x40, 0x51, - 0x69, 0xee, 0x35, 0x95, 0xc7, 0xcd, 0x2d, 0xe9, 0x15, 0x04, 0x90, 0x6f, 0x75, 0x0f, 0xdf, 0x93, - 0x9e, 0x3d, 0xcd, 0xf3, 0xff, 0x1b, 0xd2, 0xb3, 0xa7, 0x45, 0x54, 0x85, 0x79, 0x02, 0x57, 0x77, - 0x37, 0xa5, 0x6f, 0x9e, 0xe6, 0x79, 0x71, 0x83, 0x15, 0x8b, 0xa8, 0x0e, 0x25, 0x86, 0xed, 0xee, - 0xec, 0x49, 0x3f, 0x7e, 0x9a, 0xe7, 0x80, 0x8d, 0x00, 0x50, 0x44, 0x35, 0x28, 0x52, 0x8a, 0xc7, - 0xdd, 0xb6, 0xf4, 0xf4, 0x59, 0x9e, 0x97, 0x37, 0x78, 0xb9, 0x88, 0x16, 0xa0, 0x1c, 0xe0, 0x09, - 0xd3, 0x67, 0xcf, 0xf2, 0x1c, 0xb4, 0x11, 0x81, 0x8a, 0x44, 0xa2, 0xc7, 0x84, 0xe3, 0x5f, 0x3e, - 0xd5, 0xc9, 0xff, 0x26, 0xa9, 0xfd, 0x37, 0x4f, 0x75, 0x54, 0x82, 0x9c, 0xd2, 0xdb, 0x94, 0x7e, - 0xfc, 0x2c, 0x8f, 0x24, 0x00, 0xca, 0xa8, 0xd9, 0xde, 0x6c, 0x74, 0xa5, 0xff, 0xf5, 0x34, 0x80, - 0x6c, 0x84, 0x90, 0x22, 0x5a, 0x82, 0xda, 0xfd, 0x9d, 0xce, 0x67, 0xea, 0x5e, 0xb7, 0xb9, 0xa9, - 0xd2, 0xee, 0xfe, 0xe4, 0x59, 0x3e, 0x05, 0xdd, 0x90, 0x7e, 0xf2, 0xac, 0x88, 0x56, 0x00, 0xc5, - 0x69, 0xa9, 0xc8, 0x3f, 0x7d, 0x96, 0x4f, 0x61, 0x36, 0x38, 0xa6, 0x88, 0xce, 0x82, 0x14, 0x61, - 0x76, 0x6e, 0x71, 0xb8, 0x8e, 0x6a, 0x50, 0xe8, 0x74, 0x1b, 0x9f, 0x3e, 0x6a, 0x4a, 0xff, 0xfa, - 0xec, 0x17, 0x4f, 0xf3, 0x6b, 0x9b, 0x50, 0x0c, 0x72, 0x95, 0x21, 0x80, 0xc2, 0xf6, 0x4e, 0xe7, - 0x5e, 0x63, 0x47, 0x7a, 0x25, 0x4a, 0x43, 0x40, 0xdf, 0x4e, 0x36, 0xb6, 0xbe, 0xaf, 0xb6, 0xda, - 0x52, 0x16, 0x95, 0x61, 0x9e, 0xfc, 0xef, 0x3c, 0xea, 0xb1, 0xfc, 0x04, 0x8f, 0x95, 0xfb, 0x52, - 0x7e, 0x6d, 0x27, 0xf6, 0x45, 0x2e, 0xdb, 0x27, 0x90, 0x04, 0x95, 0x9d, 0x4e, 0xe7, 0xe1, 0xa3, - 0xae, 0xda, 0x7c, 0xd2, 0xd8, 0xec, 0x49, 0xaf, 0xa0, 0x05, 0xa8, 0x72, 0xc8, 0x4e, 0xa7, 0xbd, - 0xdd, 0x54, 0xa4, 0x0c, 0x42, 0x50, 0xe3, 0xa0, 0xbd, 0x07, 0x1d, 0xa5, 0xd7, 0x54, 0xa4, 0xec, - 0xda, 0x37, 0x19, 0x28, 0x0b, 0xa7, 0x54, 0xf4, 0xed, 0xa6, 0xd2, 0xbc, 0xdf, 0x7a, 0x22, 0xbd, - 0x42, 0x34, 0xa5, 0xdd, 0x6c, 0x6d, 0x3f, 0xb8, 0xd7, 0x21, 0xb5, 0xe7, 0x21, 0xd7, 0x6b, 0x6c, - 0x73, 0xb1, 0xf6, 0xd4, 0x6e, 0xa3, 0xf7, 0x40, 0xca, 0xa1, 0x2a, 0x94, 0x36, 0x3b, 0xbb, 0xbb, - 0x8f, 0xda, 0xad, 0xde, 0xe7, 0x12, 0x99, 0xc3, 0x6a, 0xf3, 0x49, 0x4f, 0x8d, 0x40, 0x73, 0x24, - 0x14, 0xdf, 0x69, 0x28, 0xdb, 0x4d, 0x01, 0x58, 0x60, 0xac, 0x9f, 0xf4, 0xd4, 0x07, 0x9d, 0xae, - 0x34, 0xbf, 0xf6, 0x16, 0x94, 0xc2, 0xc3, 0x29, 0xfa, 0x86, 0xbd, 0xfd, 0xb9, 0xf8, 0x98, 0x1d, - 0xa0, 0xd0, 0x6a, 0x3f, 0x6e, 0x2a, 0x3d, 0x29, 0xbb, 0xb6, 0x06, 0x52, 0xf2, 0xe8, 0x09, 0x15, - 0x20, 0xdb, 0xfc, 0x54, 0x7a, 0x85, 0xfc, 0x6e, 0x37, 0xa5, 0x0c, 0xf9, 0xdd, 0x69, 0x4a, 0xd9, - 0xb5, 0xeb, 0xfc, 0x09, 0x17, 0x8f, 0xf7, 0xa2, 0x67, 0xf2, 0xf4, 0xf1, 0xeb, 0x66, 0xb3, 0xdb, - 0x63, 0xcc, 0x95, 0xe6, 0xf7, 0xe9, 0xa3, 0xd8, 0xb5, 0x47, 0xb0, 0x38, 0x21, 0x5e, 0x27, 0x9d, - 0x0a, 0x65, 0x57, 0x1b, 0x5b, 0x64, 0xd9, 0x2c, 0x81, 0x14, 0x81, 0x94, 0xe6, 0x6e, 0xe7, 0x31, - 0x69, 0xf8, 0x0c, 0x2c, 0x88, 0x50, 0xfe, 0xfe, 0x7e, 0xed, 0x1a, 0x54, 0x63, 0x41, 0x3a, 0x19, - 0xc1, 0xdd, 0xe6, 0x96, 0xba, 0xdb, 0x21, 0xac, 0xea, 0x50, 0x26, 0x85, 0x80, 0x3c, 0xb3, 0xb6, - 0x01, 0xf5, 0x84, 0xc3, 0x1f, 0x7f, 0xd1, 0x4b, 0x86, 0x63, 0xb7, 0xdb, 0x51, 0xb8, 0xf4, 0xcd, - 0x27, 0xf4, 0x7f, 0xf6, 0xd6, 0x3f, 0xbe, 0x0a, 0xc5, 0x6d, 0x62, 0x01, 0x1a, 0x8e, 0x81, 0xee, - 0x42, 0x31, 0xc8, 0x93, 0x8c, 0xce, 0xc5, 0xc2, 0x14, 0x31, 0x77, 0xf2, 0xea, 0xd9, 0x94, 0x13, - 0xd9, 0x1c, 0x39, 0xfe, 0x31, 0xfa, 0x10, 0xe6, 0x79, 0xa6, 0x64, 0xb4, 0x22, 0xd6, 0x16, 0x93, - 0x27, 0xcf, 0xa8, 0x5c, 0x60, 0x39, 0x94, 0x91, 0xe0, 0x50, 0xc4, 0xd2, 0x2c, 0xaf, 0xae, 0xa4, - 0x11, 0xdc, 0xfc, 0x7e, 0x08, 0xf3, 0x3c, 0x83, 0x2a, 0x4a, 0x9c, 0x16, 0x47, 0x59, 0x5d, 0xa7, - 0xb6, 0xdc, 0x00, 0x88, 0x72, 0xa6, 0xa2, 0xf3, 0xa2, 0x6f, 0x94, 0xc8, 0xb0, 0x3c, 0x95, 0xc5, - 0x26, 0x14, 0x83, 0x44, 0xc7, 0xe2, 0xc0, 0x25, 0xb2, 0x2a, 0xaf, 0xae, 0x4e, 0x42, 0xb1, 0x2e, - 0xdc, 0xc8, 0xa0, 0x6d, 0x80, 0x28, 0x2d, 0xaa, 0x28, 0x47, 0x2a, 0x17, 0xf2, 0xea, 0xab, 0x93, - 0x91, 0x7c, 0x34, 0x3e, 0x86, 0x52, 0x98, 0x13, 0x18, 0xad, 0x4e, 0x4f, 0x14, 0x3c, 0xb5, 0x3b, - 0x4d, 0xa8, 0x88, 0x19, 0x7f, 0x91, 0x70, 0x34, 0x35, 0x21, 0x13, 0xf0, 0xac, 0x81, 0x8d, 0x32, - 0xfc, 0x8a, 0x1d, 0x4a, 0xe5, 0xfd, 0x9d, 0x31, 0xb0, 0x65, 0x21, 0xeb, 0x2f, 0x12, 0xfa, 0x9d, - 0x4e, 0x06, 0x3c, 0x95, 0xc9, 0x0e, 0x94, 0x85, 0xd4, 0xbc, 0x22, 0x93, 0x74, 0xee, 0xdf, 0xd5, - 0xd7, 0xa6, 0x60, 0xc3, 0x69, 0x6a, 0x42, 0x45, 0xcc, 0xd6, 0x2b, 0x0e, 0xce, 0x84, 0x2c, 0xbe, - 0x53, 0x85, 0x7a, 0x08, 0xf5, 0x44, 0xa6, 0x5e, 0x74, 0x69, 0x92, 0xea, 0x9d, 0x8a, 0xd9, 0x63, - 0xa8, 0x27, 0x32, 0xea, 0x8a, 0xcc, 0x26, 0xe7, 0xf8, 0x5d, 0x7d, 0x7d, 0x06, 0x05, 0xd7, 0xa4, - 0x4f, 0x01, 0xa5, 0xf3, 0xeb, 0xa2, 0xef, 0xc4, 0x7a, 0x3c, 0x39, 0xfb, 0xee, 0x54, 0x51, 0x3f, - 0x62, 0x4b, 0x55, 0xf3, 0x0f, 0x50, 0xfa, 0x62, 0x27, 0xa8, 0x7c, 0x6e, 0x02, 0x86, 0x8b, 0x14, - 0xad, 0x56, 0xc2, 0x22, 0xbd, 0x5a, 0x05, 0x2e, 0x27, 0xad, 0x56, 0xc2, 0x20, 0xb9, 0x5a, 0x85, - 0xea, 0xab, 0x93, 0x50, 0xa1, 0x1a, 0xb4, 0xc2, 0x7b, 0x2f, 0x96, 0xd7, 0x15, 0x5d, 0x48, 0xc9, - 0x1c, 0x4b, 0xf8, 0x3a, 0x4d, 0x9a, 0xab, 0x19, 0xd4, 0x80, 0x62, 0x90, 0x36, 0x55, 0x94, 0x27, - 0x91, 0xb1, 0x55, 0x94, 0x27, 0x95, 0x65, 0xb5, 0x03, 0x15, 0x31, 0xaf, 0x28, 0x4a, 0x6b, 0x71, - 0x8c, 0xd5, 0x85, 0x69, 0xe8, 0xb0, 0x7b, 0xdf, 0x85, 0x02, 0x4b, 0x36, 0x8a, 0xe2, 0xb7, 0x69, - 0x51, 0x8e, 0xd0, 0xa9, 0xc3, 0xfb, 0x31, 0x94, 0xc2, 0xac, 0xa3, 0xa2, 0xf9, 0x49, 0xa6, 0x22, - 0x9d, 0xca, 0xe0, 0x13, 0x98, 0xe7, 0x89, 0x46, 0x45, 0x15, 0x89, 0x67, 0x28, 0x5d, 0x3d, 0x37, - 0x01, 0x13, 0x4a, 0xff, 0x31, 0x94, 0xc2, 0xac, 0x7e, 0xa2, 0x08, 0xc9, 0x5c, 0xa4, 0xb3, 0x2c, - 0xa0, 0x98, 0xbc, 0x4f, 0x1c, 0xcf, 0x09, 0x49, 0x45, 0xa7, 0xb2, 0x69, 0x01, 0x44, 0x89, 0xf2, - 0x44, 0x65, 0x4d, 0x65, 0x05, 0x15, 0x4d, 0x7a, 0x3a, 0x13, 0xe8, 0x8d, 0x0c, 0xb1, 0x84, 0x42, - 0x82, 0x4f, 0xd1, 0x88, 0xa5, 0xf3, 0x7e, 0x4e, 0x95, 0x67, 0x9b, 0x2a, 0xad, 0x70, 0x09, 0x19, - 0x57, 0xda, 0x54, 0x3e, 0xcb, 0xa9, 0x8c, 0x76, 0x83, 0x7c, 0x57, 0x02, 0xaf, 0xd7, 0x93, 0x63, - 0x74, 0x7a, 0x76, 0x8f, 0x58, 0x02, 0x5a, 0x81, 0xd9, 0xc5, 0xf8, 0x70, 0xa4, 0x59, 0x5d, 0x9a, - 0x4e, 0x90, 0x30, 0xd5, 0xd1, 0x19, 0x71, 0xdc, 0x54, 0x27, 0x73, 0x4d, 0x9e, 0x6c, 0xaa, 0x23, - 0x4e, 0x29, 0x53, 0x7d, 0x6a, 0x66, 0x0a, 0x54, 0x63, 0xc9, 0x2b, 0xc5, 0x29, 0x98, 0x94, 0x01, - 0x73, 0xf5, 0xe2, 0x54, 0x7c, 0xd8, 0xcf, 0x3d, 0x96, 0x40, 0x3e, 0x79, 0x66, 0xfc, 0xc6, 0x04, - 0xc5, 0x4f, 0xa5, 0x54, 0x9c, 0x2a, 0xe8, 0xe7, 0x61, 0x2a, 0xf9, 0x24, 0xdf, 0x2b, 0x93, 0x17, - 0xc3, 0xe9, 0x59, 0x0f, 0x59, 0x9a, 0xbe, 0x14, 0xe3, 0x37, 0x27, 0xad, 0x81, 0x34, 0xdb, 0xcb, - 0x27, 0x91, 0x89, 0x03, 0x33, 0x21, 0x99, 0xa4, 0x38, 0x30, 0xd3, 0x73, 0x4d, 0xce, 0x72, 0x73, - 0x79, 0x1e, 0xc9, 0xc4, 0x0e, 0x26, 0xe4, 0x32, 0x3c, 0xd9, 0xd9, 0xa4, 0xf5, 0x53, 0xdb, 0xd7, - 0x69, 0x58, 0xf0, 0xed, 0x8b, 0x32, 0x48, 0x58, 0x41, 0xb1, 0xfa, 0xea, 0x24, 0x54, 0x38, 0x32, - 0xa1, 0x6f, 0x96, 0x94, 0x23, 0x95, 0x1c, 0xf2, 0x14, 0xbe, 0x19, 0xe5, 0x91, 0xf6, 0xcd, 0x4e, - 0xc3, 0x24, 0xf0, 0x55, 0x29, 0x8b, 0xa4, 0xaf, 0x7a, 0x1a, 0x06, 0x7c, 0x3d, 0x85, 0x29, 0x1c, - 0x93, 0xeb, 0x29, 0x99, 0x0b, 0x32, 0xb9, 0x9e, 0x52, 0xb9, 0x1f, 0x99, 0xad, 0x15, 0x72, 0x3b, - 0x8a, 0x3d, 0x4b, 0xa7, 0x7c, 0x9c, 0xd5, 0xb3, 0x30, 0xa7, 0xa2, 0xd8, 0xb3, 0x64, 0xa2, 0xc5, - 0x99, 0xaa, 0x12, 0xe6, 0x4a, 0x8c, 0xa9, 0x4a, 0x32, 0x83, 0xe2, 0x54, 0x16, 0x6c, 0x17, 0xbf, - 0x37, 0x72, 0x12, 0xbb, 0x78, 0x94, 0xa5, 0xf0, 0xe4, 0x5d, 0x9c, 0xd4, 0x4e, 0xed, 0xe2, 0x27, - 0x33, 0xd8, 0x2f, 0xd0, 0xf2, 0xbb, 0xff, 0x19, 0x00, 0x00, 0xff, 0xff, 0x98, 0xac, 0x98, 0xe1, - 0xcc, 0x67, 0x00, 0x00, + // 7674 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7c, 0x4b, 0x8c, 0x1b, 0x49, + 0x72, 0xa8, 0xf8, 0x69, 0x36, 0x19, 0x24, 0x9b, 0xd5, 0xd9, 0xad, 0xfe, 0x69, 0xf4, 0x99, 0xda, + 0x19, 0x49, 0xd3, 0x33, 0x6a, 0x7d, 0x66, 0x46, 0x9a, 0x95, 0x56, 0x33, 0x43, 0x75, 0x53, 0x2d, + 0x8e, 0xd8, 0x24, 0xa7, 0xc8, 0xd6, 0x68, 0x16, 0x6f, 0x50, 0x5b, 0xcd, 0x4a, 0xb2, 0xeb, 0x0d, + 0x59, 0x55, 0x53, 0x55, 0x6c, 0x75, 0xe3, 0x5d, 0xf6, 0xed, 0xbe, 0xb7, 0x97, 0x87, 0x05, 0x1e, + 0xec, 0x9b, 0xed, 0x9b, 0x01, 0xc3, 0x58, 0xf8, 0xe0, 0x83, 0x6d, 0xc0, 0x80, 0x01, 0xfb, 0x60, + 0x03, 0x86, 0x17, 0xf0, 0xd5, 0x80, 0x0f, 0x3e, 0xf9, 0xe0, 0x8b, 0x0f, 0xbe, 0x18, 0x86, 0x4f, + 0x46, 0x7e, 0xaa, 0x2a, 0xab, 0x8a, 0x64, 0xb7, 0x34, 0xda, 0x5d, 0x2f, 0xb0, 0x27, 0x32, 0x23, + 0x22, 0x23, 0x23, 0x33, 0x23, 0x23, 0x23, 0x23, 0xb3, 0x02, 0x8a, 0x03, 0xeb, 0x60, 0x60, 0x6f, + 0xd9, 0x8e, 0xe5, 0x59, 0x28, 0x4f, 0x0b, 0x9a, 0x6d, 0x6c, 0xac, 0x0f, 0x2c, 0x6b, 0x30, 0xc4, + 0x37, 0x29, 0xfc, 0x60, 0xdc, 0xbf, 0xa9, 0x99, 0x27, 0x8c, 0x68, 0xe3, 0x42, 0x1c, 0x85, 0x47, + 0xb6, 0xc7, 0x91, 0xf2, 0x03, 0xa8, 0x74, 0x3c, 0xcd, 0xf1, 0x1e, 0x0d, 0x6c, 0x05, 0x7f, 0x33, + 0xc6, 0xae, 0x87, 0xae, 0x43, 0x6e, 0x30, 0xb4, 0x0e, 0xb4, 0xe1, 0x5a, 0xea, 0x4a, 0xea, 0x7a, + 0xf1, 0x8e, 0xb4, 0xe5, 0xb7, 0xb2, 0xb5, 0x4b, 0xe1, 0x0a, 0xc7, 0xcb, 0x12, 0x2c, 0x74, 0x3c, + 0xcb, 0x0e, 0xeb, 0xca, 0x15, 0x28, 0xef, 0x62, 0x81, 0x99, 0x7c, 0x1f, 0x16, 0x7c, 0x80, 0x6b, + 0x5b, 0xa6, 0x8b, 0x5f, 0x82, 0xfd, 0x07, 0xb0, 0x50, 0xd5, 0xf5, 0x36, 0xc6, 0x8e, 0x2f, 0x9a, + 0x0c, 0x59, 0x1b, 0x63, 0x87, 0xd7, 0x5c, 0x08, 0x6b, 0x52, 0x22, 0x8a, 0x93, 0x9f, 0xc2, 0xe2, + 0x0e, 0x1e, 0x62, 0x0f, 0x8b, 0x15, 0xd7, 0x60, 0x5e, 0xd3, 0x75, 0x07, 0xbb, 0x2e, 0xad, 0x5b, + 0x50, 0xfc, 0x22, 0x7a, 0x03, 0x0a, 0x86, 0xe9, 0x61, 0xa7, 0xaf, 0xf5, 0xf0, 0x5a, 0x9a, 0xe2, + 0x42, 0x80, 0xfc, 0x05, 0x54, 0x1a, 0x86, 0xeb, 0x9d, 0x8d, 0xd5, 0x26, 0x48, 0xd8, 0xd4, 0x0e, + 0x86, 0xb8, 0xaa, 0x1f, 0x61, 0xc7, 0x33, 0x5c, 0xac, 0x53, 0x8e, 0x79, 0x25, 0x01, 0x97, 0xef, + 0x82, 0x14, 0x32, 0xe6, 0x23, 0x73, 0x96, 0xde, 0xfd, 0x00, 0x16, 0xf7, 0x6d, 0x5d, 0x8b, 0xf6, + 0xee, 0x0c, 0x15, 0xd1, 0x35, 0x90, 0x74, 0x4b, 0x75, 0xad, 0xbe, 0xa7, 0x3a, 0xd8, 0xc5, 0x9e, + 0x6a, 0x98, 0x5c, 0xb8, 0xb2, 0x6e, 0x75, 0xac, 0xbe, 0xa7, 0x10, 0x68, 0xdd, 0x94, 0xb7, 0x01, + 0x89, 0x2d, 0x70, 0xd9, 0x6e, 0xc0, 0x92, 0x89, 0xb1, 0xee, 0xc6, 0x38, 0xa4, 0x58, 0xf7, 0x28, + 0x4a, 0x64, 0xf2, 0xcf, 0x29, 0x90, 0xe8, 0xff, 0xb3, 0x8d, 0xdc, 0x5b, 0x50, 0xee, 0x59, 0xa3, + 0xd1, 0xd8, 0x34, 0x7a, 0x9a, 0x67, 0x58, 0x26, 0x9f, 0x88, 0x28, 0x10, 0x21, 0xc8, 0x92, 0xd6, + 0xd7, 0x32, 0xb4, 0x51, 0xfa, 0x1f, 0x3d, 0x85, 0x82, 0x6e, 0x38, 0xb8, 0x47, 0x6b, 0x65, 0xaf, + 0xa4, 0xae, 0x2f, 0xdc, 0xb9, 0x11, 0xf6, 0x3f, 0x2e, 0xc2, 0x56, 0x20, 0xe3, 0x8e, 0x5f, 0x49, + 0x09, 0xeb, 0xcb, 0x37, 0x01, 0x25, 0x09, 0x50, 0x0e, 0xd2, 0xf5, 0xa6, 0x74, 0x0e, 0xcd, 0x43, + 0xa6, 0xb5, 0xdf, 0x95, 0x52, 0x28, 0x0f, 0xd9, 0x47, 0xad, 0xee, 0x13, 0x29, 0x2d, 0xef, 0xc3, + 0x52, 0xe7, 0x70, 0xec, 0xe9, 0xd6, 0x0b, 0xf3, 0x35, 0x76, 0x54, 0xbe, 0x01, 0x8b, 0x35, 0xaa, + 0x30, 0x67, 0x62, 0x2a, 0x77, 0x01, 0xed, 0x18, 0xee, 0x99, 0xe9, 0xcf, 0x28, 0xc4, 0x13, 0x40, + 0x7b, 0x96, 0x69, 0x78, 0x96, 0x73, 0x36, 0xae, 0x6b, 0x30, 0xdf, 0x1b, 0x3b, 0x0e, 0x36, 0x3d, + 0xae, 0x57, 0x7e, 0x51, 0xfe, 0x2e, 0x2c, 0x45, 0x38, 0xbd, 0x84, 0xba, 0xd7, 0x61, 0x89, 0x9b, + 0x80, 0x5d, 0xc7, 0x1a, 0x07, 0x26, 0xea, 0x0e, 0x00, 0x41, 0xab, 0x03, 0x02, 0xe4, 0x0c, 0x96, + 0xa2, 0x0c, 0x18, 0x7d, 0xc1, 0xf6, 0xff, 0xca, 0xef, 0xc1, 0x4a, 0x68, 0x17, 0x22, 0xdc, 0x10, + 0x64, 0x4d, 0x6d, 0x84, 0x79, 0x87, 0xe8, 0x7f, 0x79, 0x0c, 0x2b, 0xe1, 0x2a, 0xf8, 0xb6, 0x6d, + 0x9f, 0x7d, 0xf1, 0x3d, 0x81, 0xd5, 0x44, 0xb3, 0xaf, 0xb6, 0x02, 0x35, 0x58, 0xaf, 0xea, 0xfa, + 0xce, 0x89, 0xa9, 0x8d, 0x8c, 0x5e, 0x13, 0x1b, 0x83, 0xc3, 0x03, 0x2b, 0x98, 0xc5, 0x1d, 0x90, + 0x74, 0x86, 0x51, 0x4d, 0x8e, 0xe2, 0x3d, 0x59, 0x0f, 0x7b, 0x12, 0xaf, 0x5b, 0xd1, 0xa3, 0x00, + 0xf9, 0x7f, 0x31, 0xfb, 0xac, 0x79, 0x87, 0x3e, 0xdf, 0x2d, 0xc8, 0x3b, 0xd8, 0xb5, 0xc6, 0x4e, + 0x8f, 0x8d, 0xe6, 0xc2, 0x1d, 0x14, 0x59, 0x8c, 0x14, 0xa3, 0x04, 0x34, 0xe8, 0x3c, 0xe4, 0x8e, + 0x9c, 0xbe, 0x6a, 0xe8, 0x5c, 0x05, 0xe7, 0x8e, 0x9c, 0x7e, 0x5d, 0xa7, 0x9a, 0xa1, 0x79, 0x87, + 0x74, 0xa1, 0x47, 0x35, 0x83, 0xb4, 0x45, 0x71, 0xf2, 0xdb, 0x50, 0x09, 0x1a, 0xe7, 0x23, 0x84, + 0x20, 0x3b, 0x1e, 0x1b, 0x3a, 0x6d, 0xb9, 0xa4, 0xd0, 0xff, 0xf2, 0x5f, 0xa4, 0x82, 0xed, 0xe0, + 0xf5, 0xcb, 0x79, 0x1d, 0x72, 0x7d, 0x6d, 0x64, 0x0c, 0x4f, 0xb8, 0xa4, 0xc2, 0x56, 0xf6, 0x98, + 0xc2, 0x15, 0x8e, 0x0f, 0x7a, 0x94, 0x9d, 0xde, 0xa3, 0x40, 0xfc, 0x39, 0x41, 0xfc, 0x3f, 0x4e, + 0xf1, 0x0d, 0x48, 0x10, 0xfe, 0x2a, 0x64, 0xbd, 0x13, 0x7b, 0x96, 0xe0, 0x14, 0x1f, 0xa8, 0x75, + 0x3a, 0x54, 0xeb, 0x97, 0x90, 0xf8, 0x1e, 0xe4, 0x6d, 0x07, 0xf7, 0x8d, 0x63, 0xec, 0xae, 0x65, + 0xaf, 0x64, 0xae, 0x17, 0xef, 0x5c, 0x08, 0x69, 0xbb, 0xc4, 0xd8, 0x34, 0x2c, 0xeb, 0xeb, 0xb1, + 0xdd, 0xa6, 0x44, 0x4a, 0x40, 0x2c, 0x3f, 0xe5, 0x3b, 0x9b, 0x38, 0x33, 0xf7, 0xa0, 0xa8, 0x63, + 0xd7, 0x33, 0x4c, 0x66, 0x6f, 0x98, 0xaa, 0x9d, 0x17, 0x54, 0x2d, 0x44, 0x2a, 0x22, 0xa5, 0xfc, + 0xe3, 0x14, 0x2c, 0xf3, 0x69, 0xee, 0x78, 0x0e, 0xd6, 0x46, 0xaf, 0x79, 0x06, 0xdf, 0x82, 0x39, + 0x32, 0xf6, 0xee, 0x5a, 0x86, 0x76, 0x31, 0x3e, 0x31, 0x0c, 0x29, 0xbf, 0x80, 0xca, 0x2e, 0xf6, + 0x68, 0xa7, 0x5f, 0x76, 0x12, 0xc2, 0x01, 0x4f, 0x9f, 0x32, 0xe0, 0xfe, 0x74, 0x65, 0x04, 0x2b, + 0x74, 0x02, 0x52, 0xd8, 0x30, 0x1f, 0xcb, 0x6b, 0x50, 0x31, 0xc7, 0x23, 0x55, 0x1c, 0x4f, 0xa2, + 0x55, 0x59, 0x65, 0xc1, 0x1c, 0x8f, 0x84, 0x81, 0x44, 0xeb, 0x90, 0x27, 0x84, 0x54, 0xef, 0xe6, + 0x28, 0xc5, 0xbc, 0x39, 0x1e, 0x91, 0x7e, 0xa1, 0x37, 0xa1, 0x44, 0x50, 0x5a, 0xaf, 0x87, 0x6d, + 0x0f, 0xeb, 0x6b, 0x39, 0x8a, 0x2e, 0x9a, 0xe3, 0x51, 0x95, 0x83, 0xe4, 0x3f, 0x4b, 0x05, 0x56, + 0xfb, 0x95, 0x3a, 0xfe, 0xed, 0xb4, 0x4f, 0xd8, 0x4c, 0xb2, 0x91, 0xcd, 0x04, 0x5d, 0x86, 0xa2, + 0x6d, 0xb9, 0x9e, 0x6a, 0x5b, 0x43, 0xa3, 0x77, 0x42, 0x3b, 0x96, 0x57, 0x80, 0x80, 0xda, 0x14, + 0x22, 0xdf, 0x87, 0xe5, 0xa8, 0xdc, 0xc2, 0x76, 0x43, 0x86, 0x22, 0x35, 0xc3, 0xa8, 0xdc, 0x82, + 0x72, 0x55, 0xd7, 0x9f, 0x39, 0x7d, 0xbf, 0xb7, 0x97, 0x21, 0x73, 0xe4, 0xf4, 0x79, 0x9d, 0x72, + 0x58, 0x87, 0x90, 0x10, 0x8c, 0x7c, 0x15, 0x24, 0x66, 0x5e, 0x84, 0x4a, 0x93, 0xf6, 0x93, 0xb7, + 0x60, 0x81, 0xac, 0x8a, 0x53, 0xa8, 0xee, 0xb0, 0xd5, 0x4e, 0xa9, 0xb8, 0xd8, 0xa7, 0x4a, 0x70, + 0x0c, 0x12, 0x59, 0x21, 0xb4, 0xf3, 0x82, 0x0b, 0xcf, 0xc7, 0x27, 0xe1, 0x63, 0x73, 0x42, 0x8e, + 0x47, 0xf7, 0x61, 0xdd, 0xc1, 0x7d, 0xec, 0xa8, 0xf8, 0xd8, 0x20, 0xaa, 0x33, 0x50, 0x5d, 0x4f, + 0xf3, 0xf0, 0x08, 0x9b, 0x9e, 0xcb, 0xb7, 0xa8, 0x55, 0x4a, 0x50, 0xe3, 0xf8, 0x4e, 0x80, 0x96, + 0x7f, 0x94, 0x82, 0x25, 0x6e, 0x5b, 0x5f, 0xb1, 0xf5, 0x9b, 0xb0, 0x64, 0x93, 0x9d, 0xcc, 0x39, + 0xc2, 0xc9, 0x76, 0x91, 0x8f, 0x0a, 0x9b, 0x44, 0x12, 0x64, 0xb4, 0xe1, 0x90, 0x7b, 0x80, 0xe4, + 0xaf, 0x7c, 0x0d, 0x16, 0xa9, 0xb9, 0x89, 0x48, 0x30, 0x69, 0x6c, 0x3f, 0x06, 0x24, 0x12, 0x86, + 0xa7, 0x91, 0xb3, 0xc9, 0x2a, 0xff, 0x79, 0x0a, 0x50, 0x07, 0xb3, 0xfa, 0x06, 0x76, 0xfd, 0xa6, + 0xee, 0x41, 0x49, 0xc7, 0x7d, 0xc3, 0xc4, 0xba, 0xea, 0x62, 0x8f, 0x78, 0x45, 0xc4, 0x90, 0x2c, + 0x8b, 0xb6, 0x8d, 0x62, 0x3b, 0xd8, 0x23, 0xa6, 0xcd, 0xff, 0xef, 0xa2, 0xf7, 0x20, 0x6f, 0x73, + 0x5e, 0x6b, 0x69, 0x5a, 0x29, 0xd9, 0x76, 0x40, 0x81, 0xbe, 0x07, 0x45, 0xcd, 0x75, 0x8d, 0x81, + 0xc9, 0x46, 0x88, 0x99, 0xab, 0x8d, 0x78, 0x85, 0x6a, 0x40, 0xa2, 0x88, 0xe4, 0xf2, 0x1e, 0xb5, + 0xa2, 0x82, 0x24, 0x5c, 0xf8, 0x0f, 0xa1, 0x28, 0x08, 0xcf, 0x87, 0x60, 0xb2, 0xec, 0x10, 0xca, + 0x2e, 0x1f, 0xc0, 0x2a, 0x9b, 0xf7, 0xd7, 0xc5, 0xd1, 0x9f, 0xd7, 0x74, 0x38, 0xaf, 0xcf, 0xe0, + 0x3c, 0x99, 0xae, 0x64, 0x0b, 0xef, 0x44, 0x0c, 0xd0, 0xf9, 0x04, 0xeb, 0xee, 0x89, 0x3d, 0xc3, + 0x06, 0xc9, 0x2d, 0x58, 0x89, 0xf3, 0xe5, 0xaa, 0xf0, 0x8a, 0x83, 0xf1, 0x84, 0xba, 0xa8, 0x81, + 0x8e, 0xfa, 0x62, 0xde, 0x86, 0x42, 0xa0, 0xd1, 0x49, 0x2f, 0x31, 0x24, 0x0f, 0xa9, 0xe4, 0xaf, + 0x7c, 0x0f, 0xf5, 0x35, 0x30, 0x9b, 0x30, 0xa2, 0x9b, 0xb0, 0x4c, 0x7a, 0x9e, 0x60, 0x3e, 0x69, + 0xb1, 0x7c, 0xc6, 0x46, 0x5f, 0xa0, 0xe5, 0x83, 0xf4, 0x0a, 0xdd, 0x7a, 0x0e, 0x1b, 0x81, 0x81, + 0x12, 0x14, 0x94, 0xb7, 0x7e, 0x1f, 0x20, 0xd4, 0x54, 0xce, 0x71, 0x96, 0x5e, 0x0b, 0xd4, 0xf2, + 0x08, 0x2e, 0x8a, 0xf6, 0xe7, 0xb5, 0x32, 0x9f, 0x30, 0x80, 0xff, 0x13, 0x2e, 0x84, 0x16, 0x24, + 0xd9, 0xd8, 0x84, 0x71, 0x44, 0xf7, 0xc4, 0xe3, 0x69, 0x9a, 0x6a, 0xec, 0x7a, 0xbc, 0xfd, 0x89, + 0x47, 0xd1, 0xef, 0xc3, 0x1b, 0x93, 0xdb, 0xe2, 0xf3, 0xf0, 0x6d, 0x86, 0xed, 0x39, 0x6c, 0xf8, + 0x86, 0xec, 0x35, 0x4f, 0xc8, 0xf7, 0xe9, 0x89, 0x40, 0xb1, 0xbf, 0x36, 0x4e, 0x3f, 0x2f, 0x22, + 0xc8, 0xda, 0x96, 0xc3, 0x0e, 0x8b, 0x65, 0x85, 0xfe, 0x47, 0x1b, 0x90, 0x1f, 0x1a, 0x7d, 0xec, + 0x19, 0xdc, 0x0f, 0xca, 0x28, 0x41, 0x59, 0xae, 0xfa, 0x8e, 0xfc, 0x2b, 0xb3, 0x97, 0x1f, 0xb0, + 0xed, 0x55, 0x64, 0x10, 0xba, 0x24, 0xa9, 0xd9, 0x2e, 0x89, 0x7c, 0x9f, 0xf9, 0xb5, 0xac, 0x32, + 0x9f, 0x85, 0xab, 0x90, 0xa3, 0x3b, 0xd4, 0x84, 0x43, 0x2c, 0xa5, 0xe3, 0x58, 0x22, 0x3b, 0x3b, + 0xd0, 0xbf, 0xba, 0xec, 0x8f, 0x82, 0x43, 0xfe, 0xab, 0xf3, 0xe8, 0xf2, 0xa0, 0xcc, 0xab, 0x4f, + 0xd0, 0x84, 0x10, 0x8c, 0xfc, 0x29, 0xb3, 0x2b, 0x84, 0x69, 0xc4, 0x53, 0x3c, 0xfb, 0xd0, 0x7e, + 0xc4, 0xac, 0x8d, 0xc0, 0x21, 0x74, 0x7e, 0x1c, 0x4b, 0x4b, 0x3a, 0x3f, 0x8a, 0xa5, 0x29, 0x04, + 0x23, 0xff, 0x3c, 0x05, 0x88, 0x8d, 0xec, 0xf7, 0xf1, 0x81, 0xa3, 0xf9, 0x4d, 0x4b, 0x90, 0x19, + 0x3b, 0x43, 0xde, 0x21, 0xf2, 0x97, 0xb8, 0x8d, 0x8e, 0x35, 0xf6, 0xb0, 0x4a, 0x36, 0x06, 0xb6, + 0xe1, 0x16, 0x14, 0xa0, 0x20, 0xb2, 0x61, 0xd0, 0xf0, 0xc5, 0x11, 0x76, 0x5c, 0xb2, 0x4e, 0x33, + 0xb4, 0xc3, 0x7e, 0x11, 0x7d, 0x00, 0x2b, 0x26, 0x3e, 0xf6, 0x0e, 0x2d, 0x5b, 0xf5, 0x1c, 0x63, + 0x30, 0x20, 0xce, 0x12, 0x6d, 0x92, 0xbb, 0xa6, 0xcb, 0x1c, 0xdb, 0x65, 0x48, 0x26, 0x0e, 0xba, + 0x03, 0xe7, 0xe3, 0xb5, 0x74, 0x3c, 0xd4, 0x98, 0xc7, 0x5a, 0x56, 0x96, 0xa2, 0x95, 0x76, 0x08, + 0x4a, 0x1e, 0x80, 0xc4, 0x6a, 0xef, 0x39, 0xc1, 0x72, 0xbc, 0x00, 0x05, 0x7d, 0x3c, 0xb2, 0xd5, + 0x60, 0xcf, 0x9b, 0x53, 0xf2, 0x04, 0x40, 0xa4, 0x26, 0xeb, 0xa5, 0x6f, 0x0c, 0xb1, 0xb0, 0xc9, + 0x05, 0x65, 0x82, 0xa3, 0x71, 0xcc, 0x23, 0x8d, 0xf9, 0x4b, 0x59, 0x25, 0x28, 0xcb, 0x4b, 0xb0, + 0xc8, 0x95, 0x29, 0x6c, 0x49, 0xfe, 0xab, 0x14, 0xf5, 0x7e, 0x1f, 0x8d, 0xec, 0x57, 0xd3, 0x8d, + 0xef, 0xf1, 0x8d, 0x39, 0x43, 0xcd, 0xdc, 0xf5, 0x70, 0xb6, 0x22, 0x4c, 0xb7, 0xb8, 0x73, 0x6e, + 0x98, 0x03, 0xee, 0xe4, 0xd0, 0x5a, 0xf2, 0x36, 0x48, 0x71, 0x0c, 0x9a, 0x87, 0x4c, 0x5b, 0xa9, + 0x49, 0xe7, 0x50, 0x1e, 0xb2, 0xed, 0x56, 0x27, 0x12, 0x7b, 0x43, 0x05, 0x98, 0x6b, 0xb4, 0xb6, + 0xab, 0x0d, 0x29, 0x43, 0xe8, 0xaa, 0x8d, 0x86, 0x94, 0x95, 0x3f, 0xf5, 0xbd, 0xf1, 0x57, 0xed, + 0x84, 0xfc, 0x8f, 0x19, 0xc8, 0x31, 0xed, 0x44, 0x57, 0x21, 0xa3, 0xf5, 0x0d, 0xee, 0x67, 0x2c, + 0xc7, 0x95, 0x77, 0xab, 0xda, 0x37, 0x14, 0x42, 0x40, 0x1c, 0x12, 0x97, 0x10, 0xa6, 0xe3, 0x0e, + 0x09, 0x27, 0xec, 0x68, 0x7d, 0x43, 0xa1, 0x24, 0x72, 0x1b, 0x32, 0xd5, 0xbe, 0x81, 0x2a, 0x50, + 0xac, 0x3e, 0xae, 0xab, 0xfb, 0xcd, 0xa7, 0xcd, 0xd6, 0x17, 0x4d, 0xe9, 0x1c, 0x02, 0xc8, 0x11, + 0x40, 0xbd, 0x2d, 0xa5, 0x50, 0x11, 0xe6, 0xd9, 0xff, 0xbb, 0x52, 0x1a, 0x95, 0xa1, 0x40, 0x0a, + 0x8d, 0x3b, 0xcf, 0xda, 0x4d, 0x69, 0x1d, 0x49, 0x00, 0xa4, 0xd8, 0x6a, 0x57, 0x3f, 0xdf, 0xaf, + 0x49, 0x3f, 0xfd, 0x61, 0x4a, 0xfe, 0x59, 0x1a, 0xb2, 0xa4, 0x01, 0x24, 0x41, 0xa9, 0x13, 0x65, + 0x1a, 0x42, 0xea, 0xdb, 0x55, 0x3a, 0x78, 0x08, 0x16, 0x28, 0x64, 0x6f, 0xbf, 0xd1, 0x65, 0xb0, + 0x34, 0x5a, 0x82, 0x0a, 0x83, 0xb5, 0x1b, 0x1d, 0xb5, 0x51, 0x7d, 0x54, 0x6b, 0x48, 0x59, 0xb4, + 0x02, 0x88, 0x02, 0x6b, 0xcd, 0xed, 0x6a, 0xbb, 0xb3, 0xdf, 0xa8, 0x76, 0xeb, 0xad, 0xa6, 0x34, + 0x4f, 0xc4, 0xa1, 0xf0, 0x67, 0xed, 0x46, 0x47, 0xaa, 0x06, 0xc5, 0x1a, 0x91, 0xee, 0x31, 0x42, + 0x50, 0x0e, 0x59, 0x11, 0xd0, 0x0f, 0x53, 0xe8, 0x0d, 0x58, 0x8d, 0xc0, 0x84, 0xb6, 0xff, 0x77, + 0x0a, 0xc9, 0x70, 0x91, 0x62, 0x95, 0xd6, 0x7e, 0xb7, 0xa6, 0x76, 0xab, 0xca, 0x6e, 0xad, 0xab, + 0x6e, 0xb7, 0x9a, 0x9d, 0xae, 0x52, 0xad, 0x37, 0xbb, 0x1d, 0xe9, 0xff, 0xa4, 0xd0, 0x05, 0x58, + 0xa1, 0x34, 0x8f, 0x1b, 0xad, 0x2f, 0xd4, 0x4e, 0xbb, 0xb6, 0x1d, 0x74, 0xe8, 0xff, 0xa6, 0xd0, + 0x2a, 0x17, 0x34, 0x44, 0x92, 0x76, 0x7f, 0x92, 0x42, 0x4b, 0xbc, 0xab, 0x4f, 0x6b, 0x5f, 0xaa, + 0xcf, 0xaa, 0x8d, 0xfd, 0x9a, 0xf4, 0x6f, 0x29, 0xf9, 0xf7, 0x33, 0xb0, 0xa0, 0xb4, 0x9f, 0xd6, + 0x9f, 0x69, 0x43, 0x43, 0x67, 0x87, 0xe4, 0x0f, 0x60, 0x8e, 0x7a, 0x2a, 0x7c, 0x9a, 0x2f, 0x09, + 0x36, 0x26, 0x42, 0xc8, 0x5c, 0x1b, 0x85, 0x11, 0xa3, 0x7b, 0x90, 0x73, 0xb0, 0xe6, 0x06, 0x7b, + 0xfa, 0xe5, 0xa9, 0xd5, 0x14, 0x4a, 0xa6, 0x70, 0x72, 0x74, 0x0d, 0xe6, 0x47, 0x9a, 0xd7, 0x3b, + 0xc4, 0x3a, 0x77, 0xe1, 0x63, 0x46, 0xcd, 0xc7, 0xa2, 0x5b, 0x50, 0x1a, 0x9b, 0xbc, 0xa0, 0x6a, + 0x7e, 0x08, 0x26, 0x46, 0x5d, 0x0c, 0x48, 0xaa, 0x2e, 0xfa, 0x08, 0xa4, 0xb0, 0xc6, 0x10, 0x9b, + 0x03, 0x7a, 0xec, 0x9f, 0x50, 0xab, 0x12, 0x90, 0x35, 0x28, 0x95, 0xdc, 0x86, 0x39, 0xda, 0x3b, + 0xb4, 0x00, 0xd0, 0xe9, 0x56, 0xbb, 0x35, 0xb5, 0xd9, 0x6a, 0x92, 0x65, 0x47, 0x74, 0x83, 0x97, + 0xbb, 0xea, 0xe3, 0xd6, 0x7e, 0x73, 0x47, 0x4a, 0x11, 0xe5, 0x65, 0xc0, 0x67, 0xd5, 0x46, 0x7d, + 0x47, 0x4a, 0xa3, 0x45, 0x28, 0x33, 0x40, 0xbd, 0xc9, 0x40, 0x19, 0xf9, 0x01, 0xe4, 0x58, 0xc7, + 0x09, 0xb5, 0x52, 0xab, 0x76, 0x5a, 0x5d, 0x9f, 0x67, 0x19, 0x0a, 0x14, 0xd0, 0x54, 0xab, 0x1d, + 0x29, 0x45, 0x2a, 0xf3, 0x62, 0xa3, 0xd6, 0xdc, 0xa5, 0x41, 0xf5, 0x7f, 0x99, 0x83, 0x6c, 0x9b, + 0x07, 0xc4, 0xcc, 0xa1, 0x63, 0xf8, 0xf1, 0x3c, 0xf2, 0x1f, 0xad, 0x40, 0xce, 0xd6, 0x3c, 0xcf, + 0x61, 0x26, 0xbc, 0xa4, 0xf0, 0x12, 0xf5, 0xd6, 0x06, 0xbe, 0xd3, 0x40, 0xfe, 0x92, 0xda, 0x07, + 0xd8, 0xf5, 0xe3, 0x07, 0xf4, 0x3f, 0xd9, 0x05, 0x0c, 0x57, 0x7d, 0x61, 0x78, 0x87, 0xba, 0xa3, + 0xbd, 0xf0, 0x83, 0x07, 0x86, 0xfb, 0x05, 0x87, 0xa0, 0x4b, 0x00, 0x47, 0xc1, 0xe4, 0xd1, 0xb0, + 0xc8, 0x9c, 0x22, 0x40, 0x50, 0x0d, 0x16, 0xc3, 0x92, 0xaa, 0x63, 0x4f, 0x33, 0x86, 0x6b, 0xf3, + 0x74, 0x7b, 0x5a, 0x9b, 0xa6, 0x03, 0x8a, 0x14, 0x56, 0xd9, 0xa1, 0x35, 0xd0, 0x2d, 0x58, 0x36, + 0x2d, 0xd5, 0x18, 0xd9, 0xe4, 0x74, 0xe7, 0x85, 0x02, 0xe5, 0xd9, 0xc1, 0xd7, 0xb4, 0xea, 0x1c, + 0x15, 0x08, 0x16, 0x6e, 0xa6, 0x85, 0x53, 0x42, 0x27, 0x17, 0x01, 0x58, 0x20, 0x46, 0xd5, 0x5c, + 0x73, 0x0d, 0xa8, 0x6d, 0x2b, 0x30, 0x48, 0xd5, 0x35, 0xc9, 0x7e, 0xc2, 0xd1, 0x86, 0xbe, 0x56, + 0x64, 0x7b, 0x06, 0x03, 0xd4, 0x75, 0xbe, 0x9f, 0x78, 0xd8, 0xc1, 0xfa, 0x5a, 0x89, 0xca, 0x12, + 0x94, 0xd1, 0x32, 0x5d, 0x29, 0x43, 0xbc, 0x56, 0xa6, 0x08, 0x56, 0x40, 0xd7, 0x41, 0x32, 0x5c, + 0xb5, 0xef, 0x58, 0x23, 0x15, 0x1f, 0x7b, 0xd8, 0x31, 0xb5, 0xe1, 0xda, 0x02, 0x25, 0x58, 0x30, + 0xdc, 0xc7, 0x8e, 0x35, 0xaa, 0x71, 0x28, 0x19, 0x7b, 0x3f, 0xd6, 0xac, 0x1a, 0xf6, 0x5a, 0x85, + 0x36, 0x0d, 0x3e, 0xa8, 0x6e, 0x07, 0xf1, 0x4f, 0x29, 0x8c, 0x7f, 0xa2, 0xf7, 0x00, 0x19, 0xae, + 0xea, 0x6f, 0xa4, 0x86, 0x49, 0x47, 0x72, 0x6d, 0x91, 0xc5, 0xbc, 0x0d, 0xb7, 0xc9, 0x10, 0x75, + 0x06, 0x27, 0xb3, 0x67, 0xe8, 0xd8, 0xf4, 0x8c, 0xbe, 0x81, 0x9d, 0x35, 0x44, 0xbb, 0x2e, 0x40, + 0xd0, 0x3b, 0x20, 0x0d, 0xad, 0x9e, 0x36, 0x54, 0x05, 0xaa, 0x25, 0x4a, 0x55, 0xa1, 0xf0, 0x7a, + 0x48, 0x7a, 0x13, 0xf2, 0x9a, 0x79, 0xa2, 0x52, 0xfd, 0x5b, 0x0e, 0x4e, 0x82, 0xd6, 0x60, 0x88, + 0xb7, 0xfc, 0x7b, 0xd4, 0xad, 0xaa, 0x79, 0xa2, 0xcc, 0x6b, 0xe6, 0x49, 0x93, 0x28, 0xe6, 0xfb, + 0x00, 0xa4, 0x02, 0x57, 0xce, 0xf3, 0x41, 0x14, 0x20, 0x59, 0xa5, 0xa0, 0x99, 0x27, 0x6d, 0x4a, + 0x26, 0x3f, 0x85, 0xa2, 0x18, 0xb1, 0x23, 0xca, 0x4d, 0xc3, 0xa8, 0x7c, 0xa7, 0xe2, 0xa5, 0x30, + 0x4a, 0x99, 0x9e, 0x15, 0xa5, 0x1c, 0xc1, 0x62, 0x22, 0x2e, 0x3b, 0x95, 0xe5, 0xa7, 0x50, 0x1e, + 0x52, 0x3a, 0xd5, 0xb2, 0x85, 0xc3, 0xc9, 0xe4, 0x18, 0x6f, 0x8b, 0x92, 0x28, 0xa5, 0xa1, 0x50, + 0x92, 0xff, 0x35, 0x0b, 0xd9, 0x36, 0xc6, 0x0e, 0x55, 0x1a, 0xa2, 0x7a, 0x06, 0x66, 0xd1, 0x8f, + 0xb2, 0x12, 0x94, 0xd1, 0x47, 0x50, 0xd2, 0x6c, 0x7b, 0x78, 0xe2, 0x87, 0xeb, 0xd2, 0xf1, 0xc8, + 0x6f, 0x95, 0x60, 0xb9, 0x23, 0x50, 0xd4, 0xc2, 0x02, 0xba, 0x0a, 0xd9, 0x9e, 0x65, 0xf6, 0x79, + 0xa4, 0x10, 0x45, 0x2f, 0x58, 0xb6, 0x2d, 0xb3, 0xaf, 0x50, 0x3c, 0x7a, 0x00, 0x65, 0x7c, 0x30, + 0xb0, 0xd5, 0xd1, 0x78, 0xe8, 0x19, 0x87, 0x96, 0xcd, 0x43, 0xec, 0x2b, 0x61, 0x85, 0xda, 0xc1, + 0xc0, 0xde, 0xe3, 0x58, 0xa5, 0x84, 0x85, 0x12, 0xaa, 0x42, 0x85, 0x79, 0x85, 0x0e, 0xee, 0x0f, + 0x71, 0xcf, 0xb3, 0x1c, 0x6a, 0x13, 0xa2, 0x8b, 0x99, 0x10, 0x28, 0x3e, 0x5e, 0x59, 0x70, 0x22, + 0x65, 0xf4, 0x8e, 0xbf, 0x81, 0xe4, 0x26, 0xdd, 0x04, 0x45, 0x76, 0x8d, 0xeb, 0x90, 0x23, 0x27, + 0x19, 0xc7, 0xe5, 0x16, 0x43, 0x58, 0xc3, 0x5d, 0x0a, 0x57, 0x38, 0x9e, 0x9c, 0xb2, 0x3d, 0x47, + 0x33, 0x5d, 0xea, 0x9e, 0xe4, 0xe3, 0x8c, 0xbb, 0x3e, 0x4a, 0x09, 0xa9, 0xc8, 0x48, 0xb3, 0xae, + 0xf0, 0x03, 0x49, 0x21, 0x3e, 0xd2, 0xb4, 0x1f, 0x1d, 0x8a, 0x54, 0x98, 0x2f, 0xcc, 0x0a, 0x68, + 0x07, 0xa4, 0x81, 0xa3, 0xf5, 0x70, 0x7f, 0x3c, 0x54, 0x1d, 0xec, 0x7a, 0x9a, 0xe3, 0x51, 0xb3, + 0x11, 0xb9, 0x0c, 0xda, 0xe5, 0x14, 0x0a, 0x23, 0x50, 0x2a, 0x83, 0x28, 0x00, 0x6d, 0x41, 0x41, + 0xeb, 0x1b, 0x2a, 0x71, 0x73, 0xdc, 0xb5, 0x22, 0xd5, 0xd3, 0x45, 0x61, 0x9a, 0xfb, 0x06, 0x75, + 0x83, 0xf2, 0x1a, 0xfb, 0xe3, 0xa2, 0x9b, 0x50, 0xd0, 0x74, 0x5d, 0x65, 0x7a, 0x5d, 0x8a, 0x4f, + 0x32, 0x8f, 0xf9, 0xbb, 0x4a, 0x5e, 0xe3, 0xff, 0xe4, 0xff, 0xcc, 0x42, 0x21, 0xb8, 0x15, 0xfb, + 0x05, 0x29, 0xdd, 0xbb, 0x11, 0xa5, 0x5b, 0x9d, 0x70, 0xab, 0xf7, 0xdf, 0x48, 0xf3, 0xde, 0x83, + 0xac, 0x61, 0xf6, 0x2d, 0xae, 0x78, 0x6b, 0x13, 0x84, 0x65, 0xda, 0x47, 0xa9, 0x7e, 0xa3, 0x7c, + 0xdf, 0x4a, 0xf9, 0x9e, 0x40, 0x25, 0x76, 0x1d, 0x3a, 0xd5, 0xb2, 0x5e, 0x8c, 0xdc, 0x0f, 0xf3, + 0x17, 0x25, 0xe1, 0x35, 0xf4, 0xdf, 0xa6, 0xa0, 0x28, 0xe8, 0x1f, 0xba, 0x07, 0x05, 0xc3, 0x54, + 0x23, 0x31, 0xe8, 0x59, 0xd1, 0x96, 0xbc, 0x61, 0xf2, 0x8a, 0x9f, 0x40, 0x19, 0x1f, 0x93, 0xd1, + 0x8f, 0xaa, 0xf9, 0xac, 0xca, 0x25, 0x56, 0x21, 0x64, 0x60, 0x8c, 0x44, 0x06, 0x99, 0xd3, 0x19, + 0xb0, 0x0a, 0xfc, 0xa6, 0xe5, 0xff, 0xa7, 0xa0, 0xc8, 0xb6, 0x99, 0x86, 0x31, 0x32, 0x5e, 0xe2, + 0xc0, 0x8f, 0xde, 0x84, 0xd2, 0x48, 0x3b, 0x56, 0x83, 0x0b, 0x46, 0x76, 0x02, 0x2b, 0x8e, 0xb4, + 0xe3, 0x36, 0x07, 0x91, 0x53, 0xb7, 0xcb, 0x9f, 0x56, 0xa8, 0xde, 0xa1, 0x83, 0xdd, 0x43, 0x6b, + 0xa8, 0xab, 0x76, 0xcf, 0xe3, 0xc7, 0xf3, 0x65, 0x1f, 0xdb, 0xf5, 0x91, 0xed, 0x9e, 0x27, 0xff, + 0x61, 0x0e, 0xf2, 0xfe, 0x06, 0x81, 0xbe, 0x03, 0x65, 0x6d, 0xec, 0x1d, 0xaa, 0xb6, 0xe6, 0xba, + 0x2f, 0x2c, 0x47, 0xe7, 0x13, 0x55, 0x22, 0xc0, 0x36, 0x87, 0xa1, 0x2b, 0xf4, 0x6a, 0xb2, 0xe7, + 0x18, 0xb6, 0xf0, 0x14, 0x42, 0x04, 0xa1, 0x75, 0xc8, 0x33, 0xaf, 0x41, 0x73, 0xfd, 0xd0, 0x00, + 0x2d, 0x57, 0x5d, 0xe2, 0x50, 0x04, 0x3e, 0x8d, 0x7f, 0xc8, 0xcc, 0x52, 0x0e, 0x15, 0x1f, 0x5e, + 0xe5, 0x87, 0xcd, 0x55, 0x98, 0xa7, 0x6a, 0xa1, 0xb9, 0x3c, 0x02, 0x90, 0x23, 0xc5, 0xaa, 0x1b, + 0xd3, 0x97, 0x5c, 0x4c, 0x5f, 0x88, 0xbf, 0x46, 0xd1, 0xf4, 0x68, 0x3d, 0x4f, 0x6b, 0xe6, 0x09, + 0x80, 0x9e, 0xff, 0x9b, 0xb0, 0xe8, 0xe0, 0x91, 0x75, 0x84, 0x55, 0xdb, 0x31, 0x8e, 0x34, 0x8f, + 0xf8, 0x7c, 0x74, 0xc9, 0x2e, 0xdc, 0x91, 0x93, 0x3b, 0xe6, 0x96, 0x42, 0x69, 0xdb, 0x8c, 0xb4, + 0xea, 0x2a, 0x15, 0x27, 0x0a, 0x20, 0xee, 0x16, 0x5b, 0xc7, 0xfd, 0xa1, 0x66, 0xab, 0xba, 0x36, + 0xb2, 0x0d, 0x73, 0x40, 0x57, 0x73, 0x5e, 0x91, 0x28, 0xe6, 0xf1, 0x50, 0xb3, 0x77, 0x18, 0x1c, + 0xbd, 0x0d, 0x0b, 0x2e, 0x36, 0x75, 0x95, 0xbf, 0x1b, 0xf1, 0x4e, 0xb8, 0xb7, 0x59, 0x26, 0xd0, + 0x6d, 0x1f, 0x48, 0x3c, 0x23, 0xd2, 0x8e, 0x87, 0xd5, 0x9e, 0x66, 0xf3, 0xd5, 0x39, 0xc5, 0x33, + 0x62, 0x74, 0xdb, 0x9a, 0x4d, 0x8c, 0x10, 0x1b, 0x74, 0x52, 0xa7, 0x34, 0xa3, 0x0e, 0x9b, 0x1b, + 0x52, 0x65, 0x01, 0xd2, 0x86, 0x4e, 0xbd, 0xd3, 0x82, 0x92, 0x36, 0x74, 0x74, 0x1f, 0xca, 0x4c, + 0xc1, 0xd4, 0x21, 0x51, 0x4f, 0x77, 0x6d, 0x81, 0xb2, 0x11, 0xac, 0x92, 0xa0, 0xbc, 0x4a, 0xc9, + 0x0e, 0x0b, 0x2e, 0x51, 0x1d, 0x3e, 0xe7, 0x7c, 0x56, 0x99, 0xbb, 0x5a, 0x62, 0x13, 0xcf, 0xa7, + 0xf4, 0x06, 0xa0, 0xd0, 0xa3, 0x0d, 0xde, 0x90, 0x49, 0x94, 0x72, 0x31, 0x70, 0x6c, 0x7d, 0x04, + 0x39, 0xa2, 0x1c, 0x39, 0x7d, 0xea, 0xbc, 0x16, 0xe8, 0xd5, 0x1d, 0xba, 0x02, 0x25, 0x6d, 0x38, + 0xb4, 0x5e, 0xa8, 0x44, 0xc9, 0x35, 0xd7, 0xf7, 0x58, 0x29, 0xac, 0xf5, 0xc2, 0xac, 0xba, 0xe8, + 0x2a, 0x54, 0x1c, 0x6c, 0x0f, 0xb5, 0x1e, 0x56, 0x7d, 0xed, 0x59, 0x62, 0xef, 0x46, 0x38, 0xb8, + 0x4d, 0x95, 0x48, 0xbe, 0x0d, 0x95, 0xd8, 0xe4, 0xa2, 0x3c, 0x64, 0xf9, 0x91, 0x8b, 0x87, 0x47, + 0x68, 0x68, 0x41, 0xa9, 0xb5, 0x1b, 0xd5, 0xed, 0x9a, 0x94, 0x96, 0xff, 0x28, 0x03, 0xe5, 0xc8, + 0xb6, 0xf6, 0x4b, 0x58, 0x2f, 0x53, 0x17, 0xc1, 0x55, 0xa8, 0x84, 0x8b, 0x40, 0xa5, 0xf1, 0x2c, + 0xb6, 0x12, 0xca, 0xc1, 0x4a, 0x68, 0x6a, 0x23, 0x3c, 0x7b, 0x35, 0x74, 0xa6, 0xaf, 0x86, 0x6b, + 0x53, 0xb6, 0xf2, 0x5f, 0xcd, 0x92, 0x78, 0x95, 0xe9, 0xfa, 0xf7, 0x0c, 0x2c, 0x44, 0x37, 0xf6, + 0x5f, 0xfb, 0xf9, 0xea, 0x4e, 0x9f, 0xaf, 0xeb, 0xd3, 0xbc, 0x99, 0x5f, 0x91, 0x0d, 0xbb, 0x0c, + 0x45, 0xcf, 0xf2, 0xb4, 0x21, 0x77, 0x19, 0x8a, 0x6c, 0xa1, 0x52, 0x10, 0x75, 0x10, 0x08, 0x1f, + 0x4e, 0xe0, 0xef, 0x69, 0x25, 0xc6, 0x87, 0xd1, 0xf8, 0x8f, 0x63, 0x5e, 0x61, 0xe2, 0x9f, 0x42, + 0x49, 0xf4, 0x23, 0xd1, 0x1a, 0xcc, 0xb3, 0xf0, 0xb3, 0xce, 0xdf, 0x7e, 0xf9, 0x45, 0xba, 0xab, + 0x72, 0x2a, 0xd5, 0xf3, 0x86, 0xc1, 0xae, 0xca, 0x61, 0x5d, 0x6f, 0x28, 0xff, 0x38, 0x05, 0x0b, + 0x51, 0xb7, 0x92, 0x6c, 0xb4, 0x31, 0x4f, 0x54, 0xed, 0x0d, 0x0d, 0xff, 0xee, 0x27, 0xaf, 0x2c, + 0x47, 0xdd, 0xce, 0x6d, 0x8a, 0x43, 0x0f, 0x60, 0x23, 0x59, 0x6b, 0xec, 0x7a, 0xd8, 0x09, 0xdf, + 0xd8, 0xac, 0xc6, 0x6b, 0x52, 0x7c, 0x5d, 0x97, 0xff, 0x60, 0x9e, 0xb9, 0xf2, 0xbf, 0x2c, 0x35, + 0xde, 0x82, 0xfc, 0x08, 0xbb, 0xae, 0x36, 0xc0, 0x2e, 0x77, 0xd2, 0x05, 0x6f, 0x6f, 0x8f, 0x63, + 0x94, 0x80, 0x66, 0xe2, 0xb6, 0x3e, 0x77, 0xea, 0xb6, 0x9e, 0x9b, 0xb1, 0xad, 0xcf, 0xcf, 0xdc, + 0xd6, 0xf3, 0xb1, 0x85, 0x71, 0x1d, 0x72, 0xdf, 0x8c, 0xf1, 0x18, 0xbb, 0xc9, 0x60, 0xcf, 0xe7, + 0x14, 0xae, 0x70, 0x3c, 0xda, 0x9c, 0xb4, 0x84, 0x98, 0x06, 0x9f, 0x71, 0x61, 0x14, 0xcf, 0xbc, + 0x30, 0x4a, 0x93, 0x16, 0x46, 0x0d, 0xca, 0x2e, 0x76, 0x5d, 0xc3, 0x32, 0xd9, 0x03, 0x0e, 0xba, + 0xff, 0x2e, 0xdc, 0xb9, 0x32, 0xe1, 0x18, 0xbc, 0xd5, 0x61, 0x84, 0xec, 0x54, 0x52, 0x72, 0x85, + 0x12, 0xfa, 0x10, 0x56, 0xdc, 0xb1, 0x4d, 0x7c, 0x4b, 0xac, 0x93, 0x2d, 0x5f, 0x3b, 0x30, 0x86, + 0x86, 0x47, 0x0e, 0x77, 0x0b, 0xf4, 0xa6, 0xe6, 0x7c, 0x80, 0xdd, 0x16, 0x90, 0xe8, 0x13, 0x28, + 0x6a, 0xfa, 0xc8, 0xf0, 0xdb, 0xae, 0xc4, 0x63, 0xb8, 0x61, 0xdb, 0x55, 0x42, 0xc6, 0x5a, 0x06, + 0x2d, 0xf8, 0x4f, 0x8e, 0x91, 0x0e, 0xee, 0x61, 0xe3, 0x08, 0xb3, 0xb8, 0x53, 0x59, 0x09, 0xca, + 0x04, 0x17, 0x3c, 0x90, 0x5a, 0x64, 0x38, 0xbf, 0x8c, 0x2e, 0x01, 0x68, 0xe1, 0x23, 0x6f, 0x7f, + 0xdf, 0x0e, 0x20, 0x68, 0x09, 0xe6, 0xac, 0xb1, 0xa7, 0x7e, 0xc3, 0xc3, 0x4b, 0x59, 0x6b, 0xec, + 0x7d, 0x8e, 0x96, 0x61, 0xae, 0x3f, 0xb4, 0x6c, 0x97, 0x06, 0x94, 0xca, 0x0a, 0x2b, 0xc8, 0x26, + 0x94, 0xc4, 0x81, 0x21, 0x8b, 0x3f, 0x8c, 0xe1, 0xe7, 0x21, 0x5b, 0xdf, 0x69, 0xd4, 0x98, 0x4d, + 0xd8, 0x6e, 0x35, 0x9b, 0xb5, 0xed, 0xae, 0x94, 0xa6, 0xf7, 0x05, 0xdb, 0xdd, 0xfa, 0xb3, 0x9a, + 0x94, 0x41, 0x25, 0xc8, 0xb7, 0xda, 0xb5, 0x66, 0xa7, 0xd6, 0xec, 0x4a, 0x59, 0x54, 0x81, 0x22, + 0x29, 0x6d, 0xb7, 0x9a, 0x8f, 0xeb, 0xca, 0x9e, 0x34, 0x47, 0x00, 0xb5, 0x4e, 0xb7, 0xfa, 0xa8, + 0x51, 0xef, 0x3c, 0xa9, 0xed, 0x48, 0x39, 0x79, 0x13, 0x20, 0x1c, 0x0c, 0x94, 0x83, 0xf4, 0x7e, + 0x9b, 0x35, 0xb4, 0x43, 0x9a, 0x4c, 0x11, 0xde, 0xed, 0xc7, 0xcf, 0x55, 0xd2, 0x8e, 0xfc, 0x03, + 0xc8, 0xfb, 0xcb, 0x03, 0xdd, 0x10, 0x86, 0x8a, 0xf9, 0xf7, 0x8b, 0x89, 0x45, 0x24, 0x8c, 0xde, + 0xdb, 0x90, 0x75, 0xfd, 0xb7, 0xc0, 0x13, 0x49, 0x29, 0x5a, 0xfe, 0x9b, 0x14, 0xcc, 0x73, 0x08, + 0x92, 0xa1, 0x64, 0x5a, 0x9e, 0xd1, 0xf7, 0x9f, 0x25, 0xa7, 0xe8, 0xad, 0x55, 0x04, 0x46, 0x4e, + 0x5d, 0x63, 0xfa, 0x40, 0x96, 0x32, 0xce, 0x2a, 0xbc, 0x84, 0x10, 0x64, 0x2d, 0x1b, 0x9b, 0xfc, + 0xa6, 0x8b, 0xfe, 0x47, 0x6f, 0x40, 0xe1, 0x6b, 0x8c, 0x6d, 0x6d, 0x68, 0x1c, 0x61, 0xfe, 0x46, + 0x2e, 0x04, 0x10, 0x3b, 0xea, 0xe0, 0x3e, 0x39, 0x3b, 0xf8, 0xaf, 0xe3, 0x78, 0x91, 0xd4, 0xd3, + 0x0d, 0xb7, 0xa7, 0x39, 0x7a, 0xf0, 0x34, 0x2e, 0x04, 0x90, 0x59, 0xa4, 0x36, 0x9d, 0xae, 0xe9, + 0xac, 0xc2, 0x0a, 0xf2, 0x5d, 0xc8, 0xb1, 0xa5, 0x49, 0xf0, 0x86, 0x69, 0x8f, 0x99, 0xf9, 0x2c, + 0x2b, 0xac, 0x40, 0xe4, 0xb6, 0xc6, 0x1e, 0x01, 0x33, 0xab, 0xcc, 0x4b, 0x32, 0x86, 0x1c, 0x3b, + 0x7e, 0xa3, 0x2d, 0xc8, 0xf5, 0x2c, 0xb3, 0x6f, 0x0c, 0xf8, 0xe8, 0xae, 0xc4, 0x0f, 0xe8, 0xdb, + 0x14, 0xab, 0x70, 0x2a, 0xf4, 0xae, 0x1f, 0x78, 0x4a, 0x84, 0x37, 0x18, 0xb9, 0x18, 0x7a, 0x22, + 0xc3, 0x5c, 0x12, 0xb9, 0x10, 0xa3, 0xdb, 0xb3, 0x4c, 0x13, 0xf7, 0x3c, 0xd5, 0xc1, 0x9e, 0x73, + 0xe2, 0x0f, 0x36, 0x07, 0x2a, 0x04, 0x46, 0x8c, 0x14, 0x3d, 0x75, 0xd1, 0xfb, 0x78, 0x36, 0xde, + 0x79, 0x02, 0x20, 0x9c, 0x88, 0xf7, 0x1b, 0x0c, 0xa6, 0x1a, 0xbb, 0x69, 0x5c, 0x0c, 0x30, 0x75, + 0x8e, 0x40, 0x3b, 0x70, 0x69, 0x64, 0x98, 0xc6, 0x68, 0x3c, 0x52, 0x83, 0x75, 0x42, 0xce, 0x94, + 0x61, 0x55, 0x36, 0x43, 0x6f, 0x70, 0xaa, 0xaa, 0x48, 0xe4, 0x73, 0x91, 0x7f, 0x96, 0x86, 0xa2, + 0xd0, 0xbd, 0x5f, 0xd3, 0x6e, 0xd0, 0xf8, 0x3f, 0x1e, 0x58, 0x9e, 0xa1, 0x11, 0x7b, 0x17, 0x0a, + 0xc7, 0x14, 0x11, 0x85, 0xb8, 0x27, 0xbe, 0x98, 0x54, 0xef, 0x29, 0x4d, 0xce, 0xd7, 0x7b, 0x52, + 0x22, 0x46, 0x8a, 0x1c, 0x82, 0x29, 0x86, 0x29, 0x64, 0x50, 0x96, 0xff, 0x23, 0x05, 0x85, 0x20, + 0x5c, 0x93, 0x3c, 0xd2, 0xa4, 0x26, 0x1c, 0x69, 0x2e, 0x02, 0x30, 0x22, 0xe1, 0x62, 0x94, 0x1d, + 0xc4, 0xda, 0x9c, 0xc7, 0xc8, 0x1b, 0xab, 0x64, 0x31, 0x58, 0x47, 0xd8, 0x39, 0xe1, 0xef, 0x00, + 0x4a, 0x23, 0x6f, 0xbc, 0xe3, 0xc3, 0x88, 0x1b, 0x42, 0xb6, 0x72, 0x32, 0x9e, 0x23, 0x4b, 0xf7, + 0x6f, 0xc9, 0x8b, 0x1c, 0xb6, 0x67, 0xe9, 0x98, 0x6c, 0x2e, 0xfc, 0x48, 0x18, 0xdd, 0x5e, 0xcb, + 0x0c, 0xea, 0x4b, 0x73, 0x19, 0x8a, 0x9c, 0x8c, 0x8a, 0xc3, 0x36, 0x58, 0x7e, 0x98, 0xa4, 0xf2, + 0xac, 0xc2, 0xbc, 0xd7, 0xb3, 0xd5, 0x91, 0xeb, 0x72, 0xe7, 0x32, 0xe7, 0xf5, 0xec, 0x3d, 0xd7, + 0x95, 0x1f, 0x42, 0x51, 0x08, 0x39, 0xa1, 0x2d, 0x58, 0x12, 0xe3, 0x53, 0x51, 0x07, 0x67, 0x51, + 0x88, 0x47, 0x31, 0xef, 0x46, 0xfe, 0x93, 0x0c, 0x54, 0x62, 0x41, 0xa7, 0xd9, 0x7e, 0x17, 0x0f, + 0x5d, 0x85, 0x2a, 0x56, 0x56, 0x8a, 0x1c, 0x46, 0xa7, 0xef, 0x32, 0x14, 0x0f, 0xf1, 0xd0, 0xc6, + 0x8e, 0x6a, 0x99, 0x43, 0x7f, 0xd8, 0x80, 0x81, 0x5a, 0xe6, 0xf0, 0x84, 0x8c, 0xac, 0x8e, 0xfb, + 0xd8, 0x71, 0xb4, 0x21, 0x63, 0x92, 0xa5, 0x4c, 0x4a, 0x3e, 0x90, 0x72, 0xb9, 0x0d, 0xcb, 0xa2, + 0x31, 0x54, 0x7d, 0x79, 0xd8, 0x3d, 0xd6, 0x92, 0x88, 0xab, 0x71, 0xd9, 0xde, 0x85, 0xc5, 0xa1, + 0x65, 0x0e, 0x88, 0x0e, 0xeb, 0x01, 0x7d, 0x8e, 0xed, 0xf9, 0x01, 0xc2, 0x27, 0xde, 0x84, 0x45, + 0x7a, 0xab, 0xa3, 0xd2, 0x11, 0x71, 0xd5, 0x40, 0xab, 0xca, 0x4a, 0x85, 0x22, 0xe8, 0x98, 0xba, + 0x54, 0x96, 0x4d, 0x58, 0xa4, 0x0e, 0x4c, 0xa4, 0xe7, 0xcc, 0x91, 0xa1, 0x47, 0x03, 0x45, 0xe8, + 0xfd, 0x35, 0x7e, 0x5a, 0xe0, 0xb4, 0xa1, 0x3f, 0xbe, 0x20, 0x50, 0x12, 0xa7, 0x23, 0xb8, 0xa0, + 0x11, 0x28, 0x81, 0x52, 0xb2, 0x0b, 0x1a, 0x81, 0x14, 0x41, 0x96, 0x6a, 0x17, 0xbb, 0xc2, 0xa2, + 0xff, 0xe5, 0xf7, 0x61, 0x75, 0xcf, 0x8e, 0xcd, 0x1b, 0xb7, 0x77, 0x53, 0x67, 0x4f, 0xfe, 0xeb, + 0x14, 0xac, 0x24, 0x6a, 0x31, 0xeb, 0x32, 0x7d, 0xca, 0x45, 0xbf, 0x81, 0xbd, 0x10, 0x0b, 0x77, + 0xbe, 0xa8, 0x6f, 0xc0, 0xa7, 0x5a, 0xf0, 0x0d, 0x6e, 0xc0, 0x12, 0x71, 0xac, 0xac, 0xbe, 0xea, + 0x18, 0x07, 0x6a, 0xc0, 0x26, 0xeb, 0x7f, 0x29, 0xa6, 0xb7, 0xfa, 0x8a, 0x71, 0xa0, 0x84, 0x1b, + 0x69, 0x45, 0x20, 0xa7, 0x7b, 0x2a, 0x9b, 0xef, 0x92, 0x4f, 0xda, 0x21, 0x2a, 0xfb, 0x93, 0x14, + 0x2c, 0x26, 0xba, 0x81, 0xbe, 0x1b, 0xdb, 0x54, 0xde, 0x14, 0xf6, 0xe1, 0xc9, 0x23, 0x15, 0xec, + 0x2f, 0x77, 0xa3, 0xfb, 0xcb, 0x95, 0x19, 0x35, 0x23, 0x5b, 0x4d, 0x07, 0xca, 0x3c, 0xe0, 0xca, + 0x87, 0xfe, 0xec, 0x61, 0x41, 0x61, 0xbc, 0xd3, 0xd1, 0x49, 0xfa, 0x9d, 0x14, 0x94, 0x38, 0xd7, + 0x8e, 0x7f, 0x97, 0xf2, 0x6d, 0x99, 0xc6, 0x0f, 0x75, 0x99, 0x33, 0x1c, 0xea, 0xb2, 0x93, 0x0e, + 0x75, 0xbf, 0x9d, 0x81, 0x0b, 0xdc, 0xda, 0x0c, 0xd9, 0xf3, 0x3d, 0x76, 0x45, 0xe6, 0xef, 0xb5, + 0xef, 0x01, 0xd2, 0x86, 0x2f, 0xb4, 0x13, 0x97, 0x38, 0xd3, 0xb6, 0xe6, 0x60, 0x75, 0x14, 0x68, + 0x94, 0xc4, 0x30, 0xdb, 0x0c, 0xb1, 0x87, 0x75, 0x74, 0x1b, 0xce, 0x1b, 0x03, 0xd3, 0x72, 0x88, + 0x2b, 0x4f, 0x25, 0xf3, 0x2f, 0xf3, 0xf9, 0xab, 0x68, 0x86, 0xac, 0xba, 0x44, 0x44, 0x76, 0x81, + 0x4f, 0x0e, 0x63, 0xfe, 0xe5, 0x6b, 0xd0, 0x04, 0x5d, 0xc2, 0xf4, 0x30, 0xc6, 0x34, 0x70, 0xd5, + 0xa7, 0xe0, 0x4d, 0x51, 0x81, 0x9d, 0xba, 0x8e, 0xee, 0xc3, 0x7a, 0xa0, 0x9c, 0xaa, 0x61, 0x6a, + 0x3d, 0x8f, 0x58, 0x6e, 0x66, 0x01, 0xb8, 0x52, 0xae, 0x06, 0x04, 0x75, 0x8e, 0x67, 0x86, 0x80, + 0x8c, 0x20, 0x1b, 0x4c, 0x55, 0x33, 0x06, 0xb6, 0x7f, 0x9f, 0xce, 0x3f, 0x76, 0x34, 0x06, 0x36, + 0xba, 0x0f, 0x1b, 0xbc, 0x33, 0x26, 0x3e, 0xf6, 0x54, 0x7a, 0x89, 0x3b, 0xb0, 0xd5, 0x11, 0xf6, + 0x1c, 0xa3, 0xc7, 0xed, 0xd0, 0x0a, 0xa3, 0x68, 0xe2, 0x63, 0xef, 0x89, 0x65, 0xd7, 0x07, 0xf6, + 0x1e, 0xc5, 0xa2, 0x87, 0x70, 0x41, 0x67, 0x8f, 0x94, 0xd4, 0x03, 0xec, 0x7a, 0x6c, 0x2c, 0x5c, + 0x7f, 0x88, 0xa9, 0x5d, 0xca, 0x2b, 0x6b, 0x9c, 0xe4, 0x11, 0x66, 0x9f, 0x9c, 0x04, 0x53, 0x20, + 0xff, 0x56, 0x06, 0x36, 0x26, 0xce, 0x0a, 0x53, 0xa0, 0xdf, 0x4c, 0xca, 0xaf, 0x64, 0x52, 0x52, + 0x70, 0x7e, 0xe2, 0xa4, 0xa0, 0x87, 0x31, 0x4b, 0xf5, 0x76, 0xe2, 0xf2, 0x68, 0xd2, 0xda, 0x0a, + 0xac, 0xd5, 0xfd, 0xa8, 0xb5, 0x7a, 0xeb, 0x94, 0xda, 0x11, 0x8b, 0x75, 0x07, 0x56, 0xf6, 0x5d, + 0x4c, 0x03, 0x2c, 0xf6, 0x90, 0x7e, 0x27, 0xe6, 0x9e, 0xba, 0x6b, 0xdc, 0x86, 0xf3, 0xf1, 0x3a, + 0xa7, 0xec, 0x19, 0xf2, 0x57, 0x00, 0xb5, 0x83, 0x81, 0xcd, 0x59, 0x6f, 0xc2, 0x22, 0x8b, 0xfd, + 0x8e, 0x38, 0x0f, 0x72, 0x72, 0x67, 0x35, 0x2a, 0x14, 0xe1, 0xf3, 0xae, 0xd2, 0x68, 0xf4, 0x48, + 0x3b, 0xa6, 0x4e, 0xa7, 0xff, 0x0e, 0x80, 0x3a, 0x07, 0x1c, 0xc8, 0xae, 0xa8, 0xfe, 0x07, 0x14, + 0x08, 0x7b, 0x26, 0xc5, 0x6b, 0xe7, 0xae, 0x42, 0x96, 0x70, 0x47, 0xef, 0xc5, 0xa6, 0x69, 0x39, + 0x7a, 0xdb, 0x19, 0x9b, 0x95, 0x77, 0xa2, 0xb3, 0xb2, 0x14, 0x25, 0x8e, 0x4c, 0xc2, 0x6d, 0x80, + 0x7a, 0x38, 0x3a, 0x09, 0x99, 0x52, 0x13, 0x64, 0xba, 0x05, 0x85, 0x7a, 0xd0, 0xe3, 0x33, 0xd5, + 0x50, 0x21, 0x5b, 0x3f, 0xa5, 0x17, 0xf5, 0x97, 0xe9, 0x45, 0x3d, 0xde, 0x8b, 0x9f, 0xa7, 0x40, + 0x8a, 0xeb, 0x05, 0xfa, 0x28, 0xd6, 0x9a, 0xb0, 0x95, 0x4e, 0xd6, 0xbb, 0xa0, 0xe5, 0x0f, 0xa3, + 0x2d, 0x5f, 0x9e, 0x5e, 0x31, 0xf2, 0xd0, 0x40, 0x86, 0x2c, 0x3e, 0x18, 0xd8, 0xc9, 0xef, 0x27, + 0xc9, 0xa8, 0x2b, 0x14, 0x47, 0x68, 0x0c, 0x42, 0x93, 0xf8, 0x22, 0xb1, 0x4e, 0x69, 0x08, 0x4e, + 0x7e, 0xc4, 0xf7, 0xb5, 0xae, 0xe6, 0x0c, 0xb0, 0xb7, 0x87, 0x47, 0x07, 0xd8, 0x71, 0x0f, 0x0d, + 0x61, 0x92, 0xa2, 0x3e, 0x6b, 0x2a, 0xe9, 0xb3, 0xca, 0x55, 0x6e, 0x85, 0xe3, 0x3c, 0x82, 0x59, + 0x3b, 0x9d, 0x45, 0x60, 0x34, 0xe2, 0x3c, 0x4e, 0x35, 0x1a, 0x93, 0x05, 0x3f, 0xab, 0xd1, 0x98, + 0x28, 0xb2, 0x3f, 0xd3, 0x5f, 0xc1, 0xa5, 0x86, 0x65, 0x0e, 0x1a, 0xc4, 0x47, 0x7b, 0x49, 0x97, + 0xf3, 0x0c, 0x07, 0x06, 0xf9, 0x9f, 0x52, 0x70, 0x71, 0x1a, 0xff, 0x5f, 0xa4, 0x73, 0x3a, 0xd1, + 0xad, 0xcf, 0x4e, 0x76, 0xeb, 0x1f, 0xc0, 0x46, 0x82, 0xd6, 0x51, 0xf1, 0xb1, 0x6d, 0x38, 0xc1, + 0xa1, 0x64, 0x35, 0x56, 0xc9, 0xa9, 0x31, 0xb4, 0xfc, 0xbb, 0x29, 0x58, 0x9b, 0xd6, 0x41, 0xf4, + 0x69, 0x6c, 0x5e, 0x85, 0xeb, 0x80, 0xd9, 0x83, 0x1e, 0x4c, 0xed, 0xc3, 0xe8, 0xd4, 0x5e, 0x3b, + 0x9d, 0x41, 0x64, 0x76, 0x7f, 0x3a, 0x07, 0xf3, 0xdc, 0xdf, 0x44, 0x4f, 0x61, 0x69, 0x64, 0xab, + 0x89, 0x57, 0x0a, 0x4c, 0xb2, 0x0b, 0x33, 0xdc, 0x62, 0x65, 0x71, 0x94, 0x70, 0xc8, 0x6f, 0x06, + 0x3d, 0x4b, 0xc7, 0xdf, 0x98, 0x44, 0xbc, 0xe6, 0xa0, 0x23, 0xf1, 0xc7, 0x2c, 0x99, 0x33, 0x3f, + 0x66, 0xf9, 0x02, 0x56, 0xfd, 0x43, 0x2f, 0xdf, 0xfc, 0xf8, 0x5b, 0x2f, 0x3f, 0x08, 0x7e, 0xf9, + 0x94, 0x4d, 0x52, 0x39, 0xef, 0x4c, 0xdc, 0xaa, 0x9f, 0x00, 0x1a, 0xbb, 0x38, 0xdc, 0x5a, 0x98, + 0xbd, 0x9d, 0x8b, 0xbf, 0x1e, 0x88, 0x9b, 0x28, 0x45, 0x1a, 0xc7, 0x2d, 0x63, 0xe2, 0x8a, 0x36, + 0x17, 0xef, 0xdd, 0xf4, 0x2b, 0xda, 0xa0, 0x7b, 0x1e, 0x5d, 0xa6, 0xea, 0x28, 0x58, 0xa7, 0xfc, + 0x85, 0xcb, 0xe5, 0x53, 0x96, 0x33, 0xef, 0x5e, 0xc2, 0xa8, 0x68, 0x70, 0x81, 0x9c, 0x8c, 0x55, + 0x76, 0x66, 0x4e, 0xcc, 0x3b, 0x7b, 0x11, 0x23, 0x9f, 0xae, 0x50, 0xca, 0xda, 0x70, 0x9a, 0x7e, + 0x47, 0xde, 0x9f, 0x14, 0xce, 0xf0, 0xfe, 0xa4, 0x16, 0x7c, 0x6a, 0x2f, 0xb8, 0x26, 0x7c, 0x51, + 0xfb, 0xcb, 0x9f, 0x17, 0xd1, 0x3a, 0xe4, 0x69, 0xe4, 0x7e, 0xa4, 0x1d, 0x73, 0xcb, 0x32, 0x4f, + 0xca, 0x7b, 0xda, 0xb1, 0xbc, 0x43, 0x5f, 0xf8, 0x47, 0xbd, 0x95, 0x97, 0xe7, 0xf2, 0x35, 0xe4, + 0x7d, 0x2e, 0xe8, 0x56, 0x6c, 0xa5, 0xae, 0x25, 0xbb, 0x11, 0x53, 0xe8, 0x1b, 0xd1, 0x95, 0xb9, + 0x9a, 0xac, 0x10, 0x59, 0x89, 0x63, 0xc8, 0xf1, 0xa7, 0x8c, 0x17, 0xa0, 0x60, 0xd8, 0x6a, 0xe4, + 0xcd, 0x4d, 0xde, 0xf0, 0xdf, 0x39, 0x5e, 0x85, 0xca, 0x48, 0x73, 0xbf, 0xe6, 0x6e, 0xb9, 0x3a, + 0xe2, 0x09, 0x16, 0xca, 0x4a, 0x99, 0x80, 0x99, 0x4b, 0xbe, 0x67, 0x98, 0x09, 0x3a, 0xed, 0x98, + 0x9f, 0xfb, 0x44, 0x3a, 0xed, 0x58, 0xfe, 0x69, 0x0a, 0x20, 0xfc, 0xe0, 0xef, 0x5b, 0x7e, 0x74, + 0x48, 0x60, 0x43, 0xc3, 0xf5, 0xe8, 0x9b, 0xef, 0x82, 0x42, 0xff, 0xd3, 0xef, 0x3f, 0xa3, 0x1f, + 0xd8, 0x4b, 0x71, 0xb5, 0x17, 0xbe, 0xaa, 0xdf, 0x85, 0xfc, 0x9e, 0xe6, 0xf5, 0x0e, 0x89, 0x30, + 0xd7, 0x22, 0xc2, 0x08, 0xee, 0x08, 0xa5, 0x38, 0xe5, 0xfb, 0xc7, 0x67, 0x50, 0x8a, 0x1c, 0x53, + 0xb6, 0x22, 0xcc, 0x84, 0xe5, 0x2b, 0x52, 0x09, 0x3c, 0x57, 0x20, 0x27, 0x1c, 0x7d, 0xca, 0x0a, + 0x2f, 0xc9, 0x7f, 0x37, 0x07, 0xb0, 0x6d, 0x99, 0xba, 0xc1, 0x6c, 0xc4, 0x6d, 0x00, 0xbe, 0xb2, + 0xc3, 0x6f, 0x29, 0x51, 0x4c, 0xd2, 0x0e, 0xf6, 0x94, 0x02, 0xa3, 0x22, 0xdd, 0xfa, 0x10, 0x4a, + 0xc1, 0xad, 0x1b, 0xa9, 0x94, 0x9e, 0x5a, 0x29, 0x78, 0x48, 0x4c, 0xaa, 0x7d, 0x0f, 0x16, 0x62, + 0x67, 0xb2, 0x4c, 0x3c, 0x7e, 0x2e, 0x76, 0x45, 0x29, 0x69, 0x62, 0xf7, 0xef, 0x40, 0xd1, 0xaf, + 0x4d, 0xda, 0xcc, 0x4e, 0x17, 0x94, 0x55, 0x23, 0x2d, 0xde, 0x0b, 0xf2, 0xa7, 0x78, 0x27, 0xb4, + 0xd6, 0xdc, 0xd4, 0x5a, 0xa5, 0x80, 0x90, 0x54, 0xfc, 0x18, 0x16, 0xc9, 0x81, 0x2b, 0x5a, 0x39, + 0x37, 0xb5, 0x72, 0x05, 0x1f, 0x7b, 0xdb, 0x62, 0xfd, 0xcb, 0x50, 0x74, 0xec, 0xaf, 0x0d, 0x62, + 0x8a, 0xc6, 0x43, 0x8f, 0x9a, 0xb9, 0x39, 0x05, 0x1c, 0xf6, 0x45, 0xda, 0x78, 0xe8, 0xa1, 0x87, + 0x00, 0xe1, 0x57, 0x4e, 0xfc, 0x2a, 0x5d, 0xb8, 0x0e, 0x0b, 0xe7, 0x87, 0x5b, 0x44, 0x32, 0xad, + 0x85, 0xe0, 0x23, 0x28, 0xf4, 0x08, 0x96, 0x86, 0xc4, 0x1a, 0xc6, 0x24, 0x2c, 0x4c, 0x95, 0x70, + 0x91, 0x92, 0x47, 0x64, 0xbc, 0x06, 0x52, 0x78, 0xaa, 0x34, 0x55, 0xaa, 0xf6, 0x40, 0xd5, 0xbe, + 0x6c, 0xf2, 0xc3, 0xa4, 0xd9, 0x20, 0xfa, 0x7f, 0x0b, 0x8a, 0xfe, 0x9b, 0x3d, 0xd5, 0x30, 0xf9, + 0xbb, 0xa0, 0x64, 0x18, 0xa7, 0xc0, 0x1f, 0xed, 0xd5, 0x4d, 0xf9, 0x10, 0x0a, 0x81, 0xd8, 0x68, + 0x09, 0x2a, 0xfc, 0xab, 0x91, 0x2f, 0xdb, 0xc1, 0x07, 0x0b, 0xab, 0xb0, 0x24, 0x00, 0xeb, 0xcd, + 0x6e, 0x4d, 0x69, 0x56, 0x1b, 0x52, 0x2a, 0x86, 0xa8, 0x3d, 0xe7, 0x88, 0x34, 0x5a, 0x06, 0x49, + 0x40, 0xf0, 0x0f, 0x8a, 0xe4, 0x3e, 0x54, 0x82, 0x4e, 0x55, 0x59, 0x16, 0xa0, 0xdb, 0x91, 0x75, + 0x72, 0x51, 0x1c, 0xd4, 0x08, 0xa1, 0xb0, 0x54, 0xae, 0x40, 0xd1, 0x1f, 0x48, 0x23, 0xf8, 0xe6, + 0x4c, 0x04, 0xc9, 0x4d, 0x28, 0xec, 0x61, 0x9d, 0xb7, 0xf0, 0x6e, 0xa4, 0x85, 0x55, 0xf1, 0xc6, + 0x4c, 0x4f, 0xf0, 0x5e, 0x86, 0xb9, 0x23, 0x6d, 0x38, 0x66, 0x6b, 0x3b, 0xa3, 0xb0, 0x82, 0xac, + 0x42, 0xa5, 0xea, 0xb6, 0x1d, 0x6c, 0x63, 0xd3, 0xe7, 0x2a, 0x41, 0x46, 0x73, 0x4d, 0xee, 0x57, + 0x93, 0xbf, 0x64, 0x05, 0x13, 0x0a, 0x2d, 0xb8, 0x8a, 0x62, 0x25, 0x24, 0x43, 0x99, 0x6c, 0xeb, + 0x43, 0xdc, 0xf7, 0xd4, 0x91, 0xe5, 0xfa, 0x1f, 0xf9, 0x15, 0xc7, 0x2e, 0x6e, 0xe0, 0xbe, 0xb7, + 0x67, 0xb9, 0x9e, 0xfc, 0x10, 0xca, 0xfc, 0xcd, 0x3d, 0x67, 0x3f, 0xf3, 0xeb, 0x2a, 0x17, 0x0f, + 0xfb, 0xdc, 0x03, 0xa5, 0xff, 0xe5, 0x6b, 0x50, 0x69, 0xd0, 0xcb, 0x04, 0x07, 0xf7, 0x39, 0x83, + 0xa0, 0x23, 0xfc, 0xba, 0x8c, 0x75, 0xe4, 0xef, 0x33, 0x30, 0xcf, 0x08, 0xdc, 0xf0, 0x71, 0xa9, + 0xd6, 0x0b, 0xae, 0x05, 0x17, 0x12, 0x8f, 0x4b, 0x19, 0x35, 0x7f, 0x5c, 0xca, 0x79, 0xdf, 0x83, + 0x42, 0x78, 0x7d, 0x9d, 0x8e, 0xbf, 0x2a, 0x8d, 0x4d, 0x9c, 0x12, 0xd2, 0xa2, 0xb7, 0x21, 0x33, + 0xe2, 0xee, 0x71, 0xe4, 0xbc, 0x17, 0xcc, 0x84, 0x42, 0xf0, 0xe8, 0x23, 0x00, 0x62, 0x3c, 0xd8, + 0x78, 0x73, 0xdb, 0xb1, 0x1e, 0x31, 0x3b, 0xe2, 0x54, 0x50, 0x13, 0xc2, 0x00, 0xe8, 0x63, 0x28, + 0x47, 0x2c, 0x01, 0x37, 0x21, 0x33, 0xa4, 0x2b, 0x89, 0xc6, 0x00, 0xdd, 0x86, 0x79, 0xfe, 0x51, + 0x04, 0xb7, 0x1f, 0x82, 0xba, 0x44, 0x26, 0x48, 0xf1, 0xe9, 0x88, 0xb0, 0xfc, 0x6a, 0xc7, 0xc1, + 0x7d, 0xee, 0x22, 0xad, 0x8b, 0x5e, 0x4c, 0x64, 0x5e, 0xfc, 0x5b, 0x1f, 0x07, 0xf7, 0xd1, 0x23, + 0xa8, 0xc4, 0xcc, 0x02, 0x77, 0x82, 0x66, 0x88, 0xbb, 0x10, 0xb5, 0x0c, 0xf2, 0x8f, 0x52, 0x50, + 0x08, 0xbe, 0x0e, 0x9f, 0xf8, 0xa9, 0xf4, 0x07, 0x00, 0xbd, 0xc0, 0x3e, 0xf1, 0xd9, 0x5a, 0x9e, + 0x64, 0xbb, 0x14, 0x81, 0x0e, 0xbd, 0x0b, 0xf3, 0x4c, 0x2d, 0x5c, 0x3e, 0x5b, 0xe2, 0xbb, 0x5f, + 0x86, 0x50, 0x7c, 0x0a, 0xf9, 0x73, 0xc8, 0x71, 0xdf, 0x78, 0x92, 0x00, 0xef, 0x03, 0x44, 0x72, + 0x50, 0x64, 0xa6, 0x7d, 0xdb, 0x2e, 0x90, 0xd1, 0x03, 0x7f, 0xfc, 0x99, 0xec, 0x6b, 0xfd, 0x12, + 0x3c, 0x92, 0x27, 0x22, 0x7b, 0x86, 0x3c, 0x11, 0x0b, 0x3a, 0xee, 0x6b, 0xe3, 0xa1, 0xe7, 0x2f, + 0x97, 0xb9, 0x59, 0xcb, 0xa5, 0xcc, 0x89, 0x59, 0x51, 0x3e, 0x82, 0x32, 0xc1, 0x86, 0x5f, 0x60, + 0xfe, 0x72, 0xb2, 0x5b, 0xc8, 0xff, 0x2f, 0x05, 0x19, 0xc5, 0xd2, 0xd0, 0x02, 0xa4, 0x35, 0x3f, + 0x72, 0x93, 0xd6, 0x68, 0x72, 0x3e, 0xe6, 0x1f, 0x0c, 0xb1, 0xef, 0xcf, 0x85, 0x00, 0x62, 0xc8, + 0x46, 0x1a, 0x45, 0x31, 0x17, 0x8e, 0x97, 0x84, 0x97, 0xd9, 0xd9, 0xc8, 0xcb, 0x6c, 0xff, 0x93, + 0x92, 0xc4, 0x76, 0xad, 0xb4, 0x9f, 0xd6, 0xc3, 0x87, 0xfd, 0xf2, 0x9f, 0xa6, 0x20, 0xf3, 0xcc, + 0xe9, 0x4f, 0x9c, 0xc6, 0xb7, 0x20, 0xed, 0xe8, 0x82, 0x76, 0x26, 0x1f, 0xa4, 0xa6, 0x1d, 0x1d, + 0xdd, 0x86, 0x02, 0x7f, 0x5a, 0xed, 0x78, 0xfc, 0x43, 0xbf, 0x29, 0xaf, 0x57, 0x19, 0x99, 0x42, + 0x53, 0x3c, 0xf0, 0xe7, 0xdc, 0x8e, 0xc7, 0xe7, 0x79, 0x4a, 0x15, 0x46, 0xa6, 0x78, 0xfc, 0xc1, + 0x2b, 0x7b, 0x98, 0x97, 0x36, 0x74, 0xf9, 0x27, 0x29, 0x58, 0xde, 0x61, 0xf3, 0x49, 0xe7, 0x78, + 0xc7, 0x70, 0x3d, 0xcd, 0xec, 0x61, 0x74, 0x17, 0x82, 0x40, 0x33, 0x8b, 0x21, 0xab, 0x3a, 0x47, + 0xf1, 0xb1, 0x3e, 0xef, 0xa3, 0x13, 0xf5, 0xe8, 0xb5, 0xf6, 0x84, 0x7a, 0x6c, 0x32, 0xce, 0xfb, + 0xe8, 0x48, 0x3d, 0xf9, 0x2f, 0xb3, 0x90, 0x63, 0xb9, 0x1c, 0x13, 0x33, 0x7a, 0x01, 0x0a, 0x61, + 0x10, 0x9c, 0x7f, 0xb2, 0xec, 0xf8, 0x51, 0xef, 0xcb, 0x50, 0x24, 0xfe, 0x02, 0x36, 0xd9, 0x7d, + 0x6f, 0x86, 0xf9, 0x37, 0x0c, 0x44, 0xef, 0x7b, 0xdf, 0x01, 0x89, 0x13, 0xf0, 0x5d, 0x86, 0xaf, + 0x89, 0x82, 0x52, 0x61, 0xf0, 0xaa, 0x0f, 0x8e, 0x7c, 0x20, 0x32, 0x17, 0xfb, 0x40, 0xe4, 0xbd, + 0x89, 0x07, 0x58, 0x7e, 0x2b, 0x9a, 0x38, 0xa4, 0x7e, 0x35, 0xfd, 0x1c, 0x3d, 0xff, 0x32, 0xa1, + 0xea, 0x29, 0xa7, 0xe9, 0x2e, 0xac, 0xf8, 0x2b, 0x36, 0x36, 0xc6, 0xcc, 0xc8, 0x5e, 0x8a, 0x2c, + 0xb6, 0xc4, 0xe4, 0x2a, 0xcb, 0xfa, 0xa4, 0x29, 0x7f, 0x48, 0x1f, 0x46, 0xf4, 0xb1, 0x8e, 0x1d, + 0xf6, 0x98, 0xa6, 0x10, 0xdf, 0x26, 0xb6, 0x45, 0xb4, 0x12, 0xa5, 0x7e, 0x4d, 0x9f, 0x65, 0xc4, + 0x63, 0x17, 0xc5, 0xb3, 0xc6, 0x2e, 0x64, 0x0b, 0xca, 0x11, 0xf9, 0x66, 0x44, 0xbb, 0xa2, 0x1f, + 0xfd, 0xa5, 0x13, 0x1f, 0xfd, 0xbd, 0x05, 0x0b, 0x2c, 0x34, 0xa0, 0x6a, 0xae, 0x1a, 0x9c, 0xc2, + 0xca, 0x4a, 0x89, 0x41, 0xab, 0x2e, 0xf1, 0x46, 0xe5, 0x1a, 0xe4, 0x7d, 0x2b, 0x30, 0xc3, 0xa7, + 0x89, 0x3d, 0x48, 0x48, 0xc7, 0x1f, 0x24, 0xc8, 0xbf, 0x97, 0x85, 0x02, 0xe1, 0xc3, 0x4e, 0xd7, + 0xe1, 0xa3, 0x8d, 0x14, 0xf5, 0xd2, 0x26, 0x3d, 0xda, 0x60, 0xfe, 0x5b, 0x50, 0x26, 0x0b, 0x66, + 0x6c, 0x73, 0xd7, 0x2b, 0x3d, 0xb6, 0x59, 0x93, 0x3d, 0xcb, 0xd1, 0x55, 0xc3, 0x3e, 0xfa, 0x80, + 0x87, 0xe2, 0x80, 0x81, 0xea, 0xf6, 0xd1, 0x07, 0x51, 0x82, 0xbb, 0xdc, 0x1c, 0x84, 0x04, 0x77, + 0x69, 0xc6, 0x2c, 0x76, 0x14, 0xa3, 0x1c, 0xf8, 0x2b, 0x0a, 0x06, 0xf2, 0x39, 0x84, 0x04, 0x77, + 0xf9, 0x85, 0x7f, 0x48, 0x70, 0x97, 0xf4, 0xc3, 0xc5, 0x8e, 0xa1, 0x0d, 0xf9, 0x05, 0x3f, 0x2f, + 0xa1, 0xef, 0x40, 0xd9, 0x0f, 0x2c, 0x32, 0xde, 0x05, 0xda, 0x99, 0x92, 0x0f, 0xa4, 0xdc, 0x63, + 0x44, 0x77, 0xa9, 0x1e, 0x45, 0x89, 0xee, 0x12, 0x22, 0xc6, 0x53, 0xa5, 0x8f, 0x18, 0x98, 0xaa, + 0x64, 0x94, 0x12, 0x03, 0x36, 0x29, 0x8c, 0xc8, 0xd9, 0xd3, 0x7a, 0x87, 0x98, 0x25, 0x3f, 0xa4, + 0xef, 0x11, 0x33, 0x0a, 0x50, 0x10, 0x4d, 0x6b, 0x81, 0xde, 0x86, 0x85, 0x80, 0x80, 0x26, 0x90, + 0xa0, 0xaf, 0x11, 0x33, 0x4a, 0xd9, 0xa7, 0x61, 0x59, 0x25, 0x2e, 0x41, 0x91, 0xdf, 0xa8, 0xeb, + 0x9a, 0xa7, 0xd1, 0xcf, 0x55, 0x33, 0x4a, 0x81, 0xde, 0xa6, 0xef, 0x68, 0x9e, 0x46, 0x5c, 0x52, + 0xec, 0x38, 0x96, 0x43, 0xdf, 0x13, 0x66, 0x14, 0x56, 0x40, 0x6f, 0x02, 0x97, 0x46, 0xfd, 0x66, + 0x8c, 0x9d, 0x13, 0xfa, 0x5c, 0x30, 0xa3, 0x14, 0x19, 0xec, 0x73, 0x02, 0x62, 0x53, 0xe1, 0x62, + 0x8f, 0x53, 0x2c, 0x32, 0x01, 0x29, 0x88, 0x12, 0xc8, 0x5f, 0x42, 0x56, 0xb1, 0xbf, 0x36, 0x82, + 0x9d, 0x28, 0x35, 0x7b, 0x27, 0x9a, 0x71, 0xf3, 0x10, 0x28, 0x19, 0x8f, 0x93, 0x6c, 0x6e, 0x43, + 0xde, 0xcf, 0xc0, 0x86, 0x00, 0x72, 0xbb, 0x8d, 0xd6, 0xa3, 0x6a, 0x43, 0x3a, 0x17, 0xa6, 0x49, + 0xa0, 0x2f, 0xfb, 0xaa, 0x3b, 0x9f, 0xa9, 0xf5, 0xa6, 0x94, 0xa6, 0x59, 0x06, 0x76, 0x3e, 0x53, + 0x5b, 0xfb, 0x5d, 0x96, 0x3f, 0xe1, 0x99, 0xf2, 0x58, 0xca, 0x6e, 0x36, 0x22, 0x9f, 0x90, 0x32, + 0x0b, 0x85, 0x24, 0x28, 0x35, 0x5a, 0xad, 0xa7, 0xfb, 0x6d, 0xb5, 0xf6, 0xbc, 0xba, 0xdd, 0x95, + 0xce, 0xa1, 0x45, 0x28, 0x73, 0x48, 0xa3, 0xd5, 0xdc, 0xad, 0x29, 0x2c, 0xb5, 0x00, 0x07, 0x75, + 0x9e, 0xb4, 0x94, 0x6e, 0x4d, 0x91, 0xd2, 0x9b, 0x3f, 0x4a, 0x41, 0x51, 0x88, 0x8f, 0xd0, 0x97, + 0x85, 0x4a, 0xed, 0x71, 0xfd, 0xb9, 0x74, 0x0e, 0x95, 0x20, 0xdf, 0xac, 0xd5, 0x77, 0x9f, 0x3c, + 0x6a, 0x91, 0xda, 0xf3, 0x90, 0xe9, 0x56, 0x77, 0xb9, 0x58, 0x1d, 0xb5, 0x5d, 0xed, 0x3e, 0x91, + 0x32, 0xa8, 0x0c, 0x85, 0xed, 0xd6, 0xde, 0xde, 0x7e, 0xb3, 0xde, 0xfd, 0x52, 0xca, 0x92, 0x56, + 0x6b, 0xcf, 0xbb, 0x6a, 0x08, 0x9a, 0x23, 0x87, 0xc0, 0x46, 0x55, 0xd9, 0xad, 0x09, 0xc0, 0x1c, + 0x63, 0xfd, 0xbc, 0xab, 0x3e, 0x69, 0xb5, 0xa5, 0xf9, 0xcd, 0x77, 0xa0, 0x10, 0x84, 0x45, 0xe8, + 0x0b, 0xeb, 0xe6, 0x97, 0xe2, 0x53, 0x6b, 0x80, 0x5c, 0xbd, 0xf9, 0xac, 0xa6, 0x74, 0xa5, 0xf4, + 0xe6, 0x26, 0x48, 0xf1, 0xa0, 0x07, 0xca, 0x41, 0xba, 0xf6, 0xb9, 0x74, 0x8e, 0xfc, 0xee, 0xd6, + 0xa4, 0x14, 0xf9, 0x6d, 0xd4, 0xa4, 0xf4, 0xe6, 0x4d, 0xfe, 0xc0, 0x88, 0x9f, 0x34, 0xc2, 0x47, + 0xdc, 0xf4, 0x69, 0xe6, 0x76, 0xad, 0xdd, 0x65, 0xcc, 0x95, 0xda, 0x67, 0xf4, 0xc9, 0xe6, 0xe6, + 0x3e, 0x2c, 0x4d, 0x38, 0x29, 0x92, 0x4e, 0x05, 0xb2, 0xab, 0xd5, 0x9d, 0x1d, 0xe9, 0x1c, 0x39, + 0x92, 0x86, 0x20, 0xa5, 0xb6, 0xd7, 0x7a, 0x46, 0x1a, 0x3e, 0x0f, 0x8b, 0x22, 0x94, 0xbf, 0x0e, + 0xdf, 0xbc, 0x01, 0xe5, 0xc8, 0xf1, 0x90, 0x8c, 0xe0, 0x5e, 0x6d, 0x47, 0xdd, 0x6b, 0x11, 0x56, + 0x15, 0x28, 0x92, 0x82, 0x4f, 0x9e, 0xda, 0xbc, 0x0b, 0x95, 0x98, 0xab, 0x19, 0x7d, 0x6f, 0x4a, + 0x86, 0x63, 0xaf, 0xdd, 0x52, 0xb8, 0xf4, 0xb5, 0xe7, 0xf4, 0x7f, 0xfa, 0xce, 0x3f, 0xbc, 0x01, + 0xf9, 0x5d, 0xa2, 0x7b, 0x55, 0xdb, 0x40, 0x0f, 0x21, 0xef, 0xe7, 0x8c, 0x46, 0xeb, 0x11, 0x07, + 0x59, 0xcc, 0x23, 0xbd, 0xb1, 0x92, 0x70, 0x5f, 0x6a, 0x23, 0xdb, 0x3b, 0x41, 0x0f, 0x60, 0x9e, + 0x67, 0x8d, 0x46, 0x6b, 0x62, 0x6d, 0x31, 0x91, 0xf4, 0x8c, 0xca, 0x39, 0x96, 0x4f, 0x1a, 0x09, + 0x5b, 0x59, 0x24, 0xe5, 0xf4, 0xc6, 0x5a, 0x12, 0xc1, 0x17, 0xfe, 0x03, 0x98, 0xe7, 0xd9, 0x64, + 0x51, 0x2c, 0x4e, 0x19, 0x66, 0xb8, 0x9d, 0xda, 0x72, 0x15, 0x20, 0xcc, 0x1f, 0x8b, 0x2e, 0x88, + 0xbb, 0x72, 0x2c, 0xdb, 0xf4, 0x54, 0x16, 0xdb, 0x90, 0xf7, 0x93, 0x3e, 0x8b, 0x03, 0x17, 0xcb, + 0x30, 0xbd, 0xb1, 0x31, 0x09, 0xc5, 0xba, 0x70, 0x2b, 0x85, 0x76, 0x01, 0xc2, 0x14, 0xb1, 0xa2, + 0x1c, 0x89, 0xbc, 0xd0, 0x1b, 0x6f, 0x4c, 0x46, 0xf2, 0xd1, 0xf8, 0x04, 0x0a, 0x41, 0x7e, 0x64, + 0xb4, 0x31, 0x3d, 0x69, 0xf2, 0xd4, 0xee, 0xd4, 0xa0, 0x24, 0x66, 0x3f, 0x46, 0x42, 0x50, 0x64, + 0x42, 0x56, 0xe4, 0x59, 0x03, 0x1b, 0x66, 0x3b, 0x16, 0x3b, 0x94, 0xc8, 0x81, 0x3c, 0x63, 0x60, + 0x8b, 0x42, 0x06, 0x64, 0x24, 0xf4, 0x3b, 0x99, 0x18, 0x79, 0x2a, 0x93, 0x06, 0x14, 0x85, 0x34, + 0xc5, 0x22, 0x93, 0x64, 0x1e, 0xe4, 0x8d, 0x8b, 0x53, 0xb0, 0xc1, 0x34, 0xd5, 0xa0, 0x24, 0x66, + 0x2e, 0x16, 0x07, 0x67, 0x42, 0x46, 0xe3, 0xa9, 0x42, 0x3d, 0x85, 0x4a, 0x2c, 0x6b, 0x31, 0xba, + 0x32, 0x49, 0xf5, 0xce, 0xc4, 0xec, 0x19, 0x54, 0x62, 0xd9, 0x85, 0x45, 0x66, 0x93, 0xf3, 0x1d, + 0x6f, 0xbc, 0x39, 0x83, 0x82, 0x6b, 0xd2, 0xe7, 0x80, 0x92, 0xb9, 0x86, 0xd1, 0x77, 0x22, 0x3d, + 0x9e, 0x9c, 0x89, 0x78, 0xaa, 0xa8, 0x1f, 0xb3, 0xa5, 0xaa, 0x79, 0x87, 0x28, 0x79, 0xa5, 0xe0, + 0x57, 0x5e, 0x9f, 0x80, 0xe1, 0x22, 0x85, 0xab, 0x95, 0xb0, 0x48, 0xae, 0x56, 0x81, 0xcb, 0x69, + 0xab, 0x95, 0x30, 0x88, 0xaf, 0x56, 0xa1, 0xfa, 0xc6, 0x24, 0x54, 0xa0, 0x06, 0xf5, 0xe0, 0xc6, + 0x85, 0xe5, 0xaf, 0x45, 0x97, 0x12, 0x32, 0x47, 0x12, 0xdb, 0x4e, 0x93, 0xe6, 0x7a, 0x0a, 0x55, + 0x21, 0xef, 0x27, 0x83, 0x15, 0xe5, 0x89, 0x65, 0xa6, 0x15, 0xe5, 0x49, 0xe4, 0x8e, 0x6d, 0x41, + 0x49, 0xcc, 0x8d, 0x8a, 0x92, 0x5a, 0x1c, 0x61, 0x75, 0x69, 0x1a, 0x3a, 0xe8, 0xde, 0x77, 0x21, + 0xc7, 0x12, 0xa6, 0xa2, 0xe8, 0x3d, 0x4e, 0x98, 0xe7, 0x74, 0xea, 0xf0, 0x7e, 0x02, 0x85, 0x20, + 0x73, 0xaa, 0x68, 0x7e, 0xe2, 0xe9, 0x54, 0xa7, 0x32, 0xf8, 0x14, 0xe6, 0x79, 0xb2, 0x54, 0x51, + 0x45, 0xa2, 0x59, 0x56, 0x37, 0xd6, 0x27, 0x60, 0x02, 0xe9, 0x3f, 0x81, 0x42, 0x90, 0x99, 0x50, + 0x14, 0x21, 0x9e, 0x4f, 0x75, 0x96, 0x05, 0x14, 0x13, 0x10, 0x8a, 0xe3, 0x39, 0x21, 0x31, 0xea, + 0x54, 0x36, 0x75, 0x80, 0x30, 0xd9, 0x9f, 0xa8, 0xac, 0x89, 0xcc, 0xa6, 0xa2, 0x49, 0x4f, 0x66, + 0x33, 0xbd, 0x95, 0x22, 0x96, 0x50, 0x48, 0x52, 0x2a, 0x1a, 0xb1, 0x64, 0xee, 0xd2, 0xa9, 0xf2, + 0xec, 0x52, 0xa5, 0x15, 0xae, 0xbf, 0xa2, 0x4a, 0x9b, 0xc8, 0xc9, 0x39, 0x95, 0xd1, 0x9e, 0x9f, + 0x8f, 0x4b, 0xe0, 0xf5, 0x66, 0x7c, 0x8c, 0xce, 0xce, 0x6e, 0x9f, 0x25, 0xd1, 0x15, 0x98, 0x5d, + 0x8e, 0x0e, 0x47, 0x92, 0xd5, 0x95, 0xe9, 0x04, 0x31, 0x53, 0x1d, 0x46, 0x27, 0xa3, 0xa6, 0x3a, + 0x9e, 0x2f, 0xf3, 0x74, 0x53, 0x1d, 0x72, 0x4a, 0x98, 0xea, 0x33, 0x33, 0x53, 0xa0, 0x1c, 0x49, + 0xc0, 0x29, 0x4e, 0xc1, 0xa4, 0x2c, 0x9e, 0x1b, 0x97, 0xa7, 0xe2, 0x83, 0x7e, 0x76, 0x58, 0x32, + 0xfd, 0x78, 0xb4, 0xf2, 0xad, 0x09, 0x8a, 0x9f, 0x48, 0x0b, 0x39, 0x55, 0xd0, 0x2f, 0x83, 0xb4, + 0xfa, 0x71, 0xbe, 0xd7, 0x26, 0x2f, 0x86, 0xb3, 0xb3, 0x1e, 0xb0, 0xc4, 0x82, 0x09, 0xc6, 0x6f, + 0x4f, 0x5a, 0x03, 0x49, 0xb6, 0x57, 0x4f, 0x23, 0x13, 0x07, 0x66, 0x42, 0x42, 0x4c, 0x71, 0x60, + 0xa6, 0xe7, 0xcb, 0x9c, 0xe5, 0xe6, 0xf2, 0x5c, 0x98, 0xb1, 0x1d, 0x4c, 0xc8, 0xbe, 0x78, 0xba, + 0xb3, 0x49, 0xeb, 0x27, 0xb6, 0xaf, 0xb3, 0xb0, 0xe0, 0xdb, 0x17, 0x65, 0x10, 0xb3, 0x82, 0x62, + 0xf5, 0x8d, 0x49, 0xa8, 0x60, 0x64, 0x02, 0xdf, 0x2c, 0x2e, 0x47, 0x22, 0x9d, 0xe5, 0x19, 0x7c, + 0x33, 0xca, 0x23, 0xe9, 0x9b, 0x9d, 0x85, 0x89, 0xef, 0xab, 0x52, 0x16, 0x71, 0x5f, 0xf5, 0x2c, + 0x0c, 0xf8, 0x7a, 0x0a, 0x52, 0x4c, 0xc6, 0xd7, 0x53, 0x3c, 0x7b, 0x65, 0x7c, 0x3d, 0x25, 0x72, + 0x53, 0x32, 0x5b, 0x2b, 0xe4, 0x9e, 0x14, 0x7b, 0x96, 0x4c, 0x49, 0x39, 0xab, 0x67, 0x41, 0xce, + 0x47, 0xb1, 0x67, 0xf1, 0x44, 0x90, 0x33, 0x55, 0x25, 0xc8, 0xe5, 0x18, 0x51, 0x95, 0x78, 0x86, + 0xc7, 0xa9, 0x2c, 0xd8, 0x2e, 0xfe, 0x68, 0x64, 0xc7, 0x76, 0xf1, 0x30, 0x8b, 0xe2, 0xe9, 0xbb, + 0x38, 0xa9, 0x9d, 0xd8, 0xc5, 0x4f, 0x67, 0x70, 0x90, 0xa3, 0xe5, 0xf7, 0xff, 0x2b, 0x00, 0x00, + 0xff, 0xff, 0xba, 0x34, 0x28, 0x42, 0xd8, 0x68, 0x00, 0x00, } diff --git a/api/gobgp.proto b/api/gobgp.proto index 1ee6a5b7..dd05d243 100644 --- a/api/gobgp.proto +++ b/api/gobgp.proto @@ -96,32 +96,6 @@ service GobgpApi { rpc DeleteBmp(DeleteBmpRequest) returns (google.protobuf.Empty); } -// Constants for address families -enum Family { - RESERVED = 0; - IPv4 = 65537; - IPv6 = 131073; - IPv4_MC = 65538; - IPv6_MC = 131074; - IPv4_MPLS = 65540; - IPv6_MPLS = 131076; - IPv4_VPN = 65664; - IPv6_VPN = 131200; - IPv4_VPN_MC = 65665; - IPv6_VPN_MC = 131201; - VPLS = 1638465; - EVPN = 1638470; - RTC = 65668; - IPv4_ENCAP = 65543; - IPv6_ENCAP = 131079; - FLOW_SPEC_IPv4 = 65669; - FLOW_SPEC_IPv6 = 131205; - FLOW_SPEC_IPv4_VPN = 65670; - FLOW_SPEC_IPv6_VPN = 131206; - FLOW_SPEC_L2_VPN = 1638534; - OPAQUE = 1074594033; -} - message StartBgpRequest { Global global = 1; } @@ -237,7 +211,7 @@ message AddPathResponse { message DeletePathRequest { Resource resource = 1; string vrf_id = 2; - uint32 family = 3; + Family family = 3; Path path = 4; bytes uuid = 5; } @@ -245,7 +219,7 @@ message DeletePathRequest { message ListPathRequest { Resource type = 1; string name = 2; - uint32 family = 3; + Family family = 3; repeated TableLookupPrefix prefixes = 4; } @@ -261,7 +235,7 @@ message AddPathStreamRequest { message GetTableRequest { Resource type = 1; - uint32 family = 2; + Family family = 2; string name = 3; } @@ -274,7 +248,7 @@ message GetTableResponse { message MonitorTableRequest { Resource type = 1; string name = 2; - uint32 family = 3; + Family family = 3; bool current = 4; bool post_policy = 5; } @@ -397,7 +371,7 @@ message DeleteRpkiRequest { } message ListRpkiRequest { - uint32 family = 1; + Family family = 1; } message ListRpkiResponse { @@ -421,7 +395,7 @@ message ResetRpkiRequest { } message ListRpkiTableRequest { - uint32 family = 1; + Family family = 1; } message ListRpkiTableResponse { @@ -463,6 +437,35 @@ message DeleteBmpRequest { uint32 port = 2; } +message Family { + enum Afi { + AFI_UNKNOWN = 0; + AFI_IP = 1; + AFI_IP6 = 2; + AFI_L2VPN = 25; + AFI_OPAQUE = 16397; + } + + enum Safi { + SAFI_UNKNOWN = 0; + SAFI_UNICAST = 1; + SAFI_MULTICAST = 2; + SAFI_MPLS_LABEL = 4; + SAFI_ENCAPSULATION = 7; + SAFI_VPLS = 65; + SAFI_EVPN = 70; + SAFI_MPLS_VPN = 128; + SAFI_MPLS_VPN_MULTICAST = 129; + SAFI_ROUTE_TARGET_CONSTRAINTS = 132; + SAFI_FLOW_SPEC_UNICAST = 133; + SAFI_FLOW_SPEC_VPN = 134; + SAFI_KEY_VALUE = 241; + } + + Afi afi = 1; + Safi safi = 2; +} + enum Resource { GLOBAL = 0; LOCAL = 1; @@ -501,7 +504,7 @@ message Path { int32 validation = 6; // remains for backword compatibility RPKIValidation validation_detail = 7; bool no_implicit_withdraw = 8; - uint32 family = 9; + Family family = 9; uint32 source_asn = 10; string source_id = 11; bool filtered = 12; @@ -598,7 +601,7 @@ message ApplyPolicy { } message PrefixLimit { - uint32 family = 1; + Family family = 1; uint32 max_prefixes = 2; uint32 shutdown_threshold_pct = 3; } @@ -805,12 +808,12 @@ message MpGracefulRestart { } message AfiSafiConfig { - uint32 family = 1; + Family family = 1; bool enabled = 2; } message AfiSafiState { - uint32 family = 1; + Family family = 1; bool enabled = 2; uint32 total_paths = 3; uint32 total_prefixes = 4; diff --git a/cmd/gobgp/cmd/common.go b/cmd/gobgp/cmd/common.go index f4a72b1e..855b4269 100644 --- a/cmd/gobgp/cmd/common.go +++ b/cmd/gobgp/cmd/common.go @@ -212,57 +212,130 @@ func newClient(ctx context.Context) (api.GobgpApiClient, error) { return api.NewGobgpApiClient(conn), nil } -func addr2AddressFamily(a net.IP) bgp.RouteFamily { +func addr2AddressFamily(a net.IP) *api.Family { if a.To4() != nil { - return bgp.RF_IPv4_UC + return &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_UNICAST, + } } else if a.To16() != nil { - return bgp.RF_IPv6_UC + return &api.Family{ + Afi: api.Family_AFI_IP6, + Safi: api.Family_SAFI_UNICAST, + } } - return bgp.RouteFamily(0) + return nil } -func checkAddressFamily(def bgp.RouteFamily) (bgp.RouteFamily, error) { - var rf bgp.RouteFamily +var ( + IPv4_UC = &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_UNICAST, + } + IPv6_UC = &api.Family{ + Afi: api.Family_AFI_IP6, + Safi: api.Family_SAFI_UNICAST, + } + IPv4_VPN = &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_MPLS_VPN, + } + IPv6_VPN = &api.Family{ + Afi: api.Family_AFI_IP6, + Safi: api.Family_SAFI_MPLS_VPN, + } + IPv4_MPLS = &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_MPLS_LABEL, + } + IPv6_MPLS = &api.Family{ + Afi: api.Family_AFI_IP6, + Safi: api.Family_SAFI_MPLS_LABEL, + } + EVPN = &api.Family{ + Afi: api.Family_AFI_L2VPN, + Safi: api.Family_SAFI_EVPN, + } + IPv4_ENCAP = &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_ENCAPSULATION, + } + IPv6_ENCAP = &api.Family{ + Afi: api.Family_AFI_IP6, + Safi: api.Family_SAFI_ENCAPSULATION, + } + RTC = &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_ROUTE_TARGET_CONSTRAINTS, + } + IPv4_FS = &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_FLOW_SPEC_UNICAST, + } + IPv6_FS = &api.Family{ + Afi: api.Family_AFI_IP6, + Safi: api.Family_SAFI_FLOW_SPEC_UNICAST, + } + IPv4_VPN_FS = &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_FLOW_SPEC_VPN, + } + IPv6_VPN_FS = &api.Family{ + Afi: api.Family_AFI_IP6, + Safi: api.Family_SAFI_FLOW_SPEC_VPN, + } + L2_VPN_FS = &api.Family{ + Afi: api.Family_AFI_L2VPN, + Safi: api.Family_SAFI_FLOW_SPEC_VPN, + } + OPAQUE = &api.Family{ + Afi: api.Family_AFI_OPAQUE, + Safi: api.Family_SAFI_KEY_VALUE, + } +) + +func checkAddressFamily(def *api.Family) (*api.Family, error) { + var f *api.Family var e error switch subOpts.AddressFamily { case "ipv4", "v4", "4": - rf = bgp.RF_IPv4_UC + f = IPv4_UC case "ipv6", "v6", "6": - rf = bgp.RF_IPv6_UC + f = IPv6_UC case "ipv4-l3vpn", "vpnv4", "vpn-ipv4": - rf = bgp.RF_IPv4_VPN + f = IPv4_VPN case "ipv6-l3vpn", "vpnv6", "vpn-ipv6": - rf = bgp.RF_IPv6_VPN + f = IPv6_VPN case "ipv4-labeled", "ipv4-labelled", "ipv4-mpls": - rf = bgp.RF_IPv4_MPLS + f = IPv4_MPLS case "ipv6-labeled", "ipv6-labelled", "ipv6-mpls": - rf = bgp.RF_IPv6_MPLS + f = IPv6_MPLS case "evpn": - rf = bgp.RF_EVPN + f = EVPN case "encap", "ipv4-encap": - rf = bgp.RF_IPv4_ENCAP + f = IPv4_ENCAP case "ipv6-encap": - rf = bgp.RF_IPv6_ENCAP + f = IPv6_ENCAP case "rtc": - rf = bgp.RF_RTC_UC + f = RTC case "ipv4-flowspec", "ipv4-flow", "flow4": - rf = bgp.RF_FS_IPv4_UC + f = IPv4_FS case "ipv6-flowspec", "ipv6-flow", "flow6": - rf = bgp.RF_FS_IPv6_UC + f = IPv6_FS case "ipv4-l3vpn-flowspec", "ipv4vpn-flowspec", "flowvpn4": - rf = bgp.RF_FS_IPv4_VPN + f = IPv4_VPN_FS case "ipv6-l3vpn-flowspec", "ipv6vpn-flowspec", "flowvpn6": - rf = bgp.RF_FS_IPv6_VPN + f = IPv6_VPN_FS case "l2vpn-flowspec": - rf = bgp.RF_FS_L2_VPN + f = L2_VPN_FS case "opaque": - rf = bgp.RF_OPAQUE + f = OPAQUE case "": - rf = def + f = def default: e = fmt.Errorf("unsupported address family: %s", subOpts.AddressFamily) } - return rf, e + return f, e } func printError(err error) { diff --git a/cmd/gobgp/cmd/global.go b/cmd/gobgp/cmd/global.go index 92f5dfc0..521f6b41 100644 --- a/cmd/gobgp/cmd/global.go +++ b/cmd/gobgp/cmd/global.go @@ -1273,11 +1273,11 @@ func showGlobalRib(args []string) error { } func modPath(resource string, name, modtype string, args []string) error { - rf, err := checkAddressFamily(bgp.RF_IPv4_UC) + f, err := checkAddressFamily(IPv4_UC) if err != nil { return err } - + rf := apiutil.ToRouteFamily(f) path, err := ParsePath(rf, args) if err != nil { cmdstr := "global" @@ -1575,13 +1575,13 @@ func NewGlobalCmd() *cobra.Command { subcmd := &cobra.Command{ Use: CMD_ALL, Run: func(cmd *cobra.Command, args []string) { - family, err := checkAddressFamily(bgp.RouteFamily(0)) + family, err := checkAddressFamily(IPv4_UC) if err != nil { exitWithError(err) } if _, err = client.DeletePath(ctx, &api.DeletePathRequest{ Resource: api.Resource_GLOBAL, - Family: uint32(family), + Family: family, }); err != nil { exitWithError(err) } diff --git a/cmd/gobgp/cmd/monitor.go b/cmd/gobgp/cmd/monitor.go index e1c18e9b..99769679 100644 --- a/cmd/gobgp/cmd/monitor.go +++ b/cmd/gobgp/cmd/monitor.go @@ -114,13 +114,13 @@ func NewMonitorCmd() *cobra.Command { ribCmd := &cobra.Command{ Use: CMD_RIB, Run: func(cmd *cobra.Command, args []string) { - family, err := checkAddressFamily(bgp.RouteFamily(0)) + family, err := checkAddressFamily(IPv4_UC) if err != nil { exitWithError(err) } recver, err := client.MonitorTable(ctx, &api.MonitorTableRequest{ Type: api.Resource_GLOBAL, - Family: uint32(family), + Family: family, Current: current, }) if err != nil { @@ -184,14 +184,14 @@ func NewMonitorCmd() *cobra.Command { } name = args[0] } - family, err := checkAddressFamily(bgp.RouteFamily(0)) + family, err := checkAddressFamily(IPv4_UC) if err != nil { exitWithError(err) } recver, err := client.MonitorTable(ctx, &api.MonitorTableRequest{ Type: api.Resource_ADJ_IN, Name: name, - Family: uint32(family), + Family: family, Current: current, }) if err != nil { diff --git a/cmd/gobgp/cmd/neighbor.go b/cmd/gobgp/cmd/neighbor.go index a3c16c9c..25a53fc5 100644 --- a/cmd/gobgp/cmd/neighbor.go +++ b/cmd/gobgp/cmd/neighbor.go @@ -453,7 +453,8 @@ func showNeighbor(args []string) error { fmt.Println(" Prefix Limits:") first = false } - fmt.Printf(" %s:\tMaximum prefixes allowed %d", bgp.AddressFamilyNameMap[bgp.RouteFamily(limit.Family)], limit.MaxPrefixes) + rf := apiutil.ToRouteFamily(limit.Family) + fmt.Printf(" %s:\tMaximum prefixes allowed %d", bgp.AddressFamilyNameMap[rf], limit.MaxPrefixes) if limit.ShutdownThresholdPct > 0 { fmt.Printf(", Threshold for warning message %d%%\n", limit.ShutdownThresholdPct) } else { @@ -698,7 +699,7 @@ func showValidationInfo(p *api.Path, shownAs map[uint32]struct{}) error { func showRibInfo(r, name string) error { def := addr2AddressFamily(net.ParseIP(name)) if r == CMD_GLOBAL { - def = bgp.RF_IPv4_UC + def = IPv4_UC } family, err := checkAddressFamily(def) if err != nil { @@ -720,7 +721,7 @@ func showRibInfo(r, name string) error { } rsp, err := client.GetTable(ctx, &api.GetTableRequest{ Type: t, - Family: uint32(family), + Family: family, Name: name, }) @@ -760,21 +761,22 @@ func showNeighborRib(r string, name string, args []string) error { def := addr2AddressFamily(net.ParseIP(name)) switch r { case CMD_GLOBAL: - def = bgp.RF_IPv4_UC + def = IPv4_UC showBest = true case CMD_LOCAL: showBest = true case CMD_ADJ_OUT: showAge = false case CMD_VRF: - def = bgp.RF_IPv4_UC + def = IPv4_UC showBest = true } family, err := checkAddressFamily(def) if err != nil { return err } - switch family { + rf := apiutil.ToRouteFamily(family) + switch rf { case bgp.RF_IPv4_MPLS, bgp.RF_IPv6_MPLS, bgp.RF_IPv4_VPN, bgp.RF_IPv6_VPN, bgp.RF_EVPN: showLabel = true } @@ -782,7 +784,7 @@ func showNeighborRib(r string, name string, args []string) error { var filter []*api.TableLookupPrefix if len(args) > 0 { target := args[0] - switch family { + switch rf { case bgp.RF_EVPN: // Uses target as EVPN Route Type string default: @@ -832,7 +834,7 @@ func showNeighborRib(r string, name string, args []string) error { stream, err := client.ListPath(ctx, &api.ListPathRequest{ Type: t, - Family: uint32(family), + Family: family, Name: name, Prefixes: filter, }) @@ -906,7 +908,7 @@ func showNeighborRib(r string, name string, args []string) error { } else { // show RIB var dsts []*api.Destination - switch family { + switch rf { case bgp.RF_IPv4_UC, bgp.RF_IPv6_UC: type d struct { prefix net.IP @@ -1219,8 +1221,12 @@ func modNeighbor(cmdType string, args []string) error { if len(m["family"]) == 1 { peer.AfiSafis = make([]*api.AfiSafi, 0) // for the case of CMD_UPDATE for _, f := range strings.Split(m["family"][0], ",") { - family := config.AfiSafiType(f).ToInt() - peer.AfiSafis = append(peer.AfiSafis, &api.AfiSafi{Config: &api.AfiSafiConfig{Family: uint32(family)}}) + rf, err := bgp.GetRouteFamily(f) + if err != nil { + return err + } + afi, safi := bgp.RouteFamilyToAfiSafi(rf) + peer.AfiSafis = append(peer.AfiSafis, &api.AfiSafi{Config: &api.AfiSafiConfig{Family: apiutil.ToApiFamily(afi, safi)}}) } } if len(m["vrf"]) == 1 { diff --git a/cmd/gobgp/cmd/policy.go b/cmd/gobgp/cmd/policy.go index f94cf17e..81a4618e 100644 --- a/cmd/gobgp/cmd/policy.go +++ b/cmd/gobgp/cmd/policy.go @@ -25,6 +25,8 @@ import ( "strconv" "strings" + "github.com/osrg/gobgp/internal/pkg/apiutil" + "github.com/spf13/cobra" api "github.com/osrg/gobgp/api" @@ -830,9 +832,10 @@ func modCondition(name, op string, args []string) error { case "next-hop-in-list": stmt.Conditions.NextHopInList = args case "afi-safi-in": - afiSafisInList := make([]api.Family, 0, len(args)) + afiSafisInList := make([]*api.Family, 0, len(args)) for _, arg := range args { - afiSafisInList = append(afiSafisInList, api.Family(bgp.AddressFamilyValueMap[arg])) + afi, safi := bgp.RouteFamilyToAfiSafi(bgp.AddressFamilyValueMap[arg]) + afiSafisInList = append(afiSafisInList, apiutil.ToApiFamily(afi, safi)) } stmt.Conditions.AfiSafiIn = afiSafisInList default: diff --git a/cmd/gobgp/cmd/rpki.go b/cmd/gobgp/cmd/rpki.go index a4926088..55aa4b77 100644 --- a/cmd/gobgp/cmd/rpki.go +++ b/cmd/gobgp/cmd/rpki.go @@ -23,7 +23,6 @@ import ( "time" api "github.com/osrg/gobgp/api" - "github.com/osrg/gobgp/pkg/packet/bgp" "github.com/spf13/cobra" ) @@ -86,12 +85,12 @@ func showRPKIServer(args []string) error { } func showRPKITable(args []string) error { - family, err := checkAddressFamily(bgp.RouteFamily(0)) + family, err := checkAddressFamily(IPv4_UC) if err != nil { exitWithError(err) } stream, err := client.ListRpkiTable(ctx, &api.ListRpkiTableRequest{ - Family: uint32(family), + Family: family, }) if err != nil { exitWithError(err) @@ -108,8 +107,7 @@ func showRPKITable(args []string) error { } var format string - afi, _ := bgp.RouteFamilyToAfiSafi(family) - if afi == bgp.AFI_IP { + if family.Afi == api.Family_AFI_IP { format = "%-18s %-6s %-10s %s\n" } else { format = "%-42s %-6s %-10s %s\n" diff --git a/docs/sources/lib.md b/docs/sources/lib.md index 2b79c092..f0fbfc35 100644 --- a/docs/sources/lib.md +++ b/docs/sources/lib.md @@ -73,7 +73,7 @@ func main() { _, err := s.AddPath(context.Background(), &api.AddPathRequest{ Path: &api.Path{ - Family: uint32(api.Family_IPv4), + Family: &api.Family{Afi: api.Family_AFI_IP, Safi: api.Family_SAFI_UNICAST}, AnyNlri: nlri, AnyPattrs: attrs, }, diff --git a/internal/pkg/apiutil/attribute.go b/internal/pkg/apiutil/attribute.go index e149edbb..d87fff39 100644 --- a/internal/pkg/apiutil/attribute.go +++ b/internal/pkg/apiutil/attribute.go @@ -612,7 +612,7 @@ func NewMpReachNLRIAttributeFromNative(a *bgp.PathAttributeMpReachNLRI) *api.MpR } } return &api.MpReachNLRIAttribute{ - Family: uint32(bgp.AfiSafiToRouteFamily(a.AFI, a.SAFI)), + Family: ToApiFamily(a.AFI, a.SAFI), NextHops: nexthops, Nlris: MarshalNLRIs(a.Value), } @@ -620,7 +620,7 @@ func NewMpReachNLRIAttributeFromNative(a *bgp.PathAttributeMpReachNLRI) *api.MpR func NewMpUnreachNLRIAttributeFromNative(a *bgp.PathAttributeMpUnreachNLRI) *api.MpUnreachNLRIAttribute { return &api.MpUnreachNLRIAttribute{ - Family: uint32(bgp.AfiSafiToRouteFamily(a.AFI, a.SAFI)), + Family: ToApiFamily(a.AFI, a.SAFI), Nlris: MarshalNLRIs(a.Value), } } @@ -1153,7 +1153,7 @@ func unmarshalAttribute(an *any.Any) (bgp.PathAttributeInterface, error) { } return bgp.NewPathAttributeClusterList(a.Ids), nil case *api.MpReachNLRIAttribute: - rf := bgp.RouteFamily(a.Family) + rf := ToRouteFamily(a.Family) nlris, err := UnmarshalNLRIs(rf, a.Nlris) if err != nil { return nil, err @@ -1182,7 +1182,7 @@ func unmarshalAttribute(an *any.Any) (bgp.PathAttributeInterface, error) { attr.LinkLocalNexthop = linkLocalNexthop return attr, nil case *api.MpUnreachNLRIAttribute: - rf := bgp.RouteFamily(a.Family) + rf := ToRouteFamily(a.Family) nlris, err := UnmarshalNLRIs(rf, a.Nlris) if err != nil { return nil, err diff --git a/internal/pkg/apiutil/attribute_test.go b/internal/pkg/apiutil/attribute_test.go index df86427f..60f460cd 100644 --- a/internal/pkg/apiutil/attribute_test.go +++ b/internal/pkg/apiutil/attribute_test.go @@ -214,7 +214,10 @@ func Test_MpReachNLRIAttribute_IPv4_UC(t *testing.T) { nlris = append(nlris, a) input := &api.MpReachNLRIAttribute{ - Family: uint32(bgp.RF_IPv4_UC), + Family: &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_UNICAST, + }, NextHops: []string{"192.168.1.1"}, Nlris: nlris, } @@ -253,7 +256,10 @@ func Test_MpReachNLRIAttribute_IPv6_UC(t *testing.T) { nlris = append(nlris, a) input := &api.MpReachNLRIAttribute{ - Family: uint32(bgp.RF_IPv6_UC), + Family: &api.Family{ + Afi: api.Family_AFI_IP6, + Safi: api.Family_SAFI_UNICAST, + }, NextHops: []string{"2001:db8::1", "2001:db8::2"}, Nlris: nlris, } @@ -294,7 +300,10 @@ func Test_MpReachNLRIAttribute_IPv4_MPLS(t *testing.T) { nlris = append(nlris, a) input := &api.MpReachNLRIAttribute{ - Family: uint32(bgp.RF_IPv4_MPLS), + Family: &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_MPLS_LABEL, + }, NextHops: []string{"192.168.1.1"}, Nlris: nlris, } @@ -335,7 +344,10 @@ func Test_MpReachNLRIAttribute_IPv6_MPLS(t *testing.T) { nlris = append(nlris, a) input := &api.MpReachNLRIAttribute{ - Family: uint32(bgp.RF_IPv6_MPLS), + Family: &api.Family{ + Afi: api.Family_AFI_IP6, + Safi: api.Family_SAFI_MPLS_LABEL, + }, NextHops: []string{"2001:db8::1"}, Nlris: nlris, } @@ -372,7 +384,10 @@ func Test_MpReachNLRIAttribute_IPv4_ENCAP(t *testing.T) { nlris = append(nlris, a) input := &api.MpReachNLRIAttribute{ - Family: uint32(bgp.RF_IPv4_ENCAP), + Family: &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_ENCAPSULATION, + }, NextHops: []string{"192.168.1.1"}, Nlris: nlris, } @@ -409,7 +424,10 @@ func Test_MpReachNLRIAttribute_IPv6_ENCAP(t *testing.T) { nlris = append(nlris, a) input := &api.MpReachNLRIAttribute{ - Family: uint32(bgp.RF_IPv6_ENCAP), + Family: &api.Family{ + Afi: api.Family_AFI_IP6, + Safi: api.Family_SAFI_ENCAPSULATION, + }, NextHops: []string{"2001:db8::1"}, Nlris: nlris, } @@ -453,7 +471,10 @@ func Test_MpReachNLRIAttribute_EVPN_AD_Route(t *testing.T) { nlris = append(nlris, a) input := &api.MpReachNLRIAttribute{ - Family: uint32(bgp.RF_EVPN), + Family: &api.Family{ + Afi: api.Family_AFI_L2VPN, + Safi: api.Family_SAFI_EVPN, + }, NextHops: []string{"192.168.1.1"}, Nlris: nlris, } @@ -499,7 +520,10 @@ func Test_MpReachNLRIAttribute_EVPN_MAC_IP_Route(t *testing.T) { nlris = append(nlris, a) input := &api.MpReachNLRIAttribute{ - Family: uint32(bgp.RF_EVPN), + Family: &api.Family{ + Afi: api.Family_AFI_L2VPN, + Safi: api.Family_SAFI_EVPN, + }, NextHops: []string{"192.168.1.1"}, Nlris: nlris, } @@ -538,7 +562,10 @@ func Test_MpReachNLRIAttribute_EVPN_MC_Route(t *testing.T) { nlris = append(nlris, a) input := &api.MpReachNLRIAttribute{ - Family: uint32(bgp.RF_EVPN), + Family: &api.Family{ + Afi: api.Family_AFI_L2VPN, + Safi: api.Family_SAFI_EVPN, + }, NextHops: []string{"192.168.1.1"}, Nlris: nlris, } @@ -581,7 +608,10 @@ func Test_MpReachNLRIAttribute_EVPN_ES_Route(t *testing.T) { nlris = append(nlris, a) input := &api.MpReachNLRIAttribute{ - Family: uint32(bgp.RF_EVPN), + Family: &api.Family{ + Afi: api.Family_AFI_L2VPN, + Safi: api.Family_SAFI_EVPN, + }, NextHops: []string{"192.168.1.1"}, Nlris: nlris, } @@ -627,7 +657,10 @@ func Test_MpReachNLRIAttribute_EVPN_Prefix_Route(t *testing.T) { nlris = append(nlris, a) input := &api.MpReachNLRIAttribute{ - Family: uint32(bgp.RF_EVPN), + Family: &api.Family{ + Afi: api.Family_AFI_L2VPN, + Safi: api.Family_SAFI_EVPN, + }, NextHops: []string{"192.168.1.1"}, Nlris: nlris, } @@ -667,7 +700,10 @@ func Test_MpReachNLRIAttribute_IPv4_VPN(t *testing.T) { nlris = append(nlris, a) input := &api.MpReachNLRIAttribute{ - Family: uint32(bgp.RF_IPv4_VPN), + Family: &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_MPLS_VPN, + }, NextHops: []string{"192.168.1.1"}, Nlris: nlris, } @@ -707,7 +743,10 @@ func Test_MpReachNLRIAttribute_IPv6_VPN(t *testing.T) { nlris = append(nlris, a) input := &api.MpReachNLRIAttribute{ - Family: uint32(bgp.RF_IPv6_VPN), + Family: &api.Family{ + Afi: api.Family_AFI_IP6, + Safi: api.Family_SAFI_MPLS_VPN, + }, NextHops: []string{"2001:db8::1"}, Nlris: nlris, } @@ -747,7 +786,10 @@ func Test_MpReachNLRIAttribute_RTC_UC(t *testing.T) { nlris = append(nlris, a) input := &api.MpReachNLRIAttribute{ - Family: uint32(bgp.RF_RTC_UC), + Family: &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_ROUTE_TARGET_CONSTRAINTS, + }, NextHops: []string{"192.168.1.1"}, Nlris: nlris, } @@ -806,7 +848,10 @@ func Test_MpReachNLRIAttribute_FS_IPv4_UC(t *testing.T) { nlris = append(nlris, a) input := &api.MpReachNLRIAttribute{ - Family: uint32(bgp.RF_FS_IPv4_UC), + Family: &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_FLOW_SPEC_UNICAST, + }, // NextHops: // No nexthop required Nlris: nlris, } @@ -872,7 +917,10 @@ func Test_MpReachNLRIAttribute_FS_IPv4_VPN(t *testing.T) { nlris = append(nlris, a) input := &api.MpReachNLRIAttribute{ - Family: uint32(bgp.RF_FS_IPv4_VPN), + Family: &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_FLOW_SPEC_VPN, + }, // NextHops: // No nexthop required Nlris: nlris, } @@ -931,7 +979,10 @@ func Test_MpReachNLRIAttribute_FS_IPv6_UC(t *testing.T) { nlris = append(nlris, a) input := &api.MpReachNLRIAttribute{ - Family: uint32(bgp.RF_FS_IPv6_UC), + Family: &api.Family{ + Afi: api.Family_AFI_IP6, + Safi: api.Family_SAFI_FLOW_SPEC_UNICAST, + }, // NextHops: // No nexthop required Nlris: nlris, } @@ -997,7 +1048,10 @@ func Test_MpReachNLRIAttribute_FS_IPv6_VPN(t *testing.T) { nlris = append(nlris, a) input := &api.MpReachNLRIAttribute{ - Family: uint32(bgp.RF_FS_IPv6_VPN), + Family: &api.Family{ + Afi: api.Family_AFI_IP6, + Safi: api.Family_SAFI_FLOW_SPEC_VPN, + }, // NextHops: // No nexthop required Nlris: nlris, } @@ -1061,7 +1115,10 @@ func Test_MpReachNLRIAttribute_FS_L2_VPN(t *testing.T) { nlris = append(nlris, a) input := &api.MpReachNLRIAttribute{ - Family: uint32(bgp.RF_FS_L2_VPN), + Family: &api.Family{ + Afi: api.Family_AFI_L2VPN, + Safi: api.Family_SAFI_FLOW_SPEC_VPN, + }, // NextHops: // No nexthop required Nlris: nlris, } @@ -1100,8 +1157,11 @@ func Test_MpUnreachNLRIAttribute_IPv4_UC(t *testing.T) { nlris = append(nlris, a) input := &api.MpUnreachNLRIAttribute{ - Family: uint32(bgp.RF_IPv4_UC), - Nlris: nlris, + Family: &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_UNICAST, + }, + Nlris: nlris, } a, err = ptypes.MarshalAny(input) diff --git a/internal/pkg/apiutil/capability.go b/internal/pkg/apiutil/capability.go index 0e3b4c0b..d135713a 100644 --- a/internal/pkg/apiutil/capability.go +++ b/internal/pkg/apiutil/capability.go @@ -26,8 +26,9 @@ import ( ) func NewMultiProtocolCapability(a *bgp.CapMultiProtocol) *api.MultiProtocolCapability { + afi, safi := bgp.RouteFamilyToAfiSafi(a.CapValue) return &api.MultiProtocolCapability{ - Family: api.Family(a.CapValue), + Family: ToApiFamily(afi, safi), } } @@ -43,8 +44,8 @@ func NewExtendedNexthopCapability(a *bgp.CapExtendedNexthop) *api.ExtendedNextho tuples := make([]*api.ExtendedNexthopCapabilityTuple, 0, len(a.Tuples)) for _, t := range a.Tuples { tuples = append(tuples, &api.ExtendedNexthopCapabilityTuple{ - NlriFamily: api.Family(bgp.AfiSafiToRouteFamily(t.NLRIAFI, uint8(t.NLRISAFI))), - NexthopFamily: api.Family(bgp.AfiSafiToRouteFamily(t.NexthopAFI, bgp.SAFI_UNICAST)), + NlriFamily: ToApiFamily(t.NLRIAFI, uint8(t.NLRISAFI)), + NexthopFamily: ToApiFamily(t.NexthopAFI, bgp.SAFI_UNICAST), }) } return &api.ExtendedNexthopCapability{ @@ -56,7 +57,7 @@ func NewGracefulRestartCapability(a *bgp.CapGracefulRestart) *api.GracefulRestar tuples := make([]*api.GracefulRestartCapabilityTuple, 0, len(a.Tuples)) for _, t := range a.Tuples { tuples = append(tuples, &api.GracefulRestartCapabilityTuple{ - Family: api.Family(bgp.AfiSafiToRouteFamily(t.AFI, uint8(t.SAFI))), + Family: ToApiFamily(t.AFI, t.SAFI), Flags: uint32(t.Flags), }) } @@ -76,8 +77,9 @@ func NewFourOctetASNumberCapability(a *bgp.CapFourOctetASNumber) *api.FourOctetA func NewAddPathCapability(a *bgp.CapAddPath) *api.AddPathCapability { tuples := make([]*api.AddPathCapabilityTuple, 0, len(a.Tuples)) for _, t := range a.Tuples { + afi, safi := bgp.RouteFamilyToAfiSafi(t.RouteFamily) tuples = append(tuples, &api.AddPathCapabilityTuple{ - Family: api.Family(t.RouteFamily), + Family: ToApiFamily(afi, safi), Mode: api.AddPathMode(t.Mode), }) } @@ -94,7 +96,7 @@ func NewLongLivedGracefulRestartCapability(a *bgp.CapLongLivedGracefulRestart) * tuples := make([]*api.LongLivedGracefulRestartCapabilityTuple, 0, len(a.Tuples)) for _, t := range a.Tuples { tuples = append(tuples, &api.LongLivedGracefulRestartCapabilityTuple{ - Family: api.Family(bgp.AfiSafiToRouteFamily(t.AFI, uint8(t.SAFI))), + Family: ToApiFamily(t.AFI, uint8(t.SAFI)), Flags: uint32(t.Flags), Time: t.RestartTime, }) @@ -165,7 +167,7 @@ func unmarshalCapability(a *any.Any) (bgp.ParameterCapabilityInterface, error) { } switch a := value.Message.(type) { case *api.MultiProtocolCapability: - return bgp.NewCapMultiProtocol(bgp.RouteFamily(a.Family)), nil + return bgp.NewCapMultiProtocol(ToRouteFamily(a.Family)), nil case *api.RouteRefreshCapability: return bgp.NewCapRouteRefresh(), nil case *api.CarryingLabelInfoCapability: @@ -174,15 +176,15 @@ func unmarshalCapability(a *any.Any) (bgp.ParameterCapabilityInterface, error) { tuples := make([]*bgp.CapExtendedNexthopTuple, 0, len(a.Tuples)) for _, t := range a.Tuples { var nhAfi uint16 - switch t.NexthopFamily { - case api.Family_IPv4: + switch t.NexthopFamily.Afi { + case api.Family_AFI_IP: nhAfi = bgp.AFI_IP - case api.Family_IPv6: + case api.Family_AFI_IP6: nhAfi = bgp.AFI_IP6 default: return nil, fmt.Errorf("invalid address family for nexthop afi in extended nexthop capability: %s", t.NexthopFamily) } - tuples = append(tuples, bgp.NewCapExtendedNexthopTuple(bgp.RouteFamily(t.NlriFamily), nhAfi)) + tuples = append(tuples, bgp.NewCapExtendedNexthopTuple(ToRouteFamily(t.NlriFamily), nhAfi)) } return bgp.NewCapExtendedNexthop(tuples), nil case *api.GracefulRestartCapability: @@ -192,7 +194,7 @@ func unmarshalCapability(a *any.Any) (bgp.ParameterCapabilityInterface, error) { if t.Flags&0x80 > 0 { forward = true } - tuples = append(tuples, bgp.NewCapGracefulRestartTuple(bgp.RouteFamily(t.Family), forward)) + tuples = append(tuples, bgp.NewCapGracefulRestartTuple(ToRouteFamily(t.Family), forward)) } var restarting bool if a.Flags&0x08 > 0 { @@ -208,7 +210,7 @@ func unmarshalCapability(a *any.Any) (bgp.ParameterCapabilityInterface, error) { case *api.AddPathCapability: tuples := make([]*bgp.CapAddPathTuple, 0, len(a.Tuples)) for _, t := range a.Tuples { - tuples = append(tuples, bgp.NewCapAddPathTuple(bgp.RouteFamily(t.Family), bgp.BGPAddPathMode(t.Mode))) + tuples = append(tuples, bgp.NewCapAddPathTuple(ToRouteFamily(t.Family), bgp.BGPAddPathMode(t.Mode))) } return bgp.NewCapAddPath(tuples), nil case *api.EnhancedRouteRefreshCapability: @@ -220,7 +222,7 @@ func unmarshalCapability(a *any.Any) (bgp.ParameterCapabilityInterface, error) { if t.Flags&0x80 > 0 { forward = true } - tuples = append(tuples, bgp.NewCapLongLivedGracefulRestartTuple(bgp.RouteFamily(t.Family), forward, t.Time)) + tuples = append(tuples, bgp.NewCapLongLivedGracefulRestartTuple(ToRouteFamily(t.Family), forward, t.Time)) } return bgp.NewCapLongLivedGracefulRestart(tuples), nil case *api.RouteRefreshCiscoCapability: diff --git a/internal/pkg/apiutil/capability_test.go b/internal/pkg/apiutil/capability_test.go index 0872ed58..9a703a3a 100644 --- a/internal/pkg/apiutil/capability_test.go +++ b/internal/pkg/apiutil/capability_test.go @@ -28,7 +28,10 @@ func Test_MultiProtocolCapability(t *testing.T) { assert := assert.New(t) input := &api.MultiProtocolCapability{ - Family: api.Family_IPv4, + Family: &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_UNICAST, + }, } a, err := ptypes.MarshalAny(input) @@ -76,8 +79,14 @@ func Test_ExtendedNexthopCapability(t *testing.T) { input := &api.ExtendedNexthopCapability{ Tuples: []*api.ExtendedNexthopCapabilityTuple{ { - NlriFamily: api.Family_IPv4, - NexthopFamily: api.Family_IPv6, + NlriFamily: &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_UNICAST, + }, + NexthopFamily: &api.Family{ + Afi: api.Family_AFI_IP6, + Safi: api.Family_SAFI_UNICAST, + }, }, }, } @@ -104,8 +113,11 @@ func Test_GracefulRestartCapability(t *testing.T) { Time: 90, Tuples: []*api.GracefulRestartCapabilityTuple{ { - Family: api.Family_IPv4, - Flags: 0x80, // forward + Family: &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_UNICAST, + }, + Flags: 0x80, // forward }, }, } @@ -152,8 +164,11 @@ func Test_AddPathCapability(t *testing.T) { input := &api.AddPathCapability{ Tuples: []*api.AddPathCapabilityTuple{ { - Family: api.Family_IPv4, - Mode: api.AddPathMode_MODE_BOTH, + Family: &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_UNICAST, + }, + Mode: api.AddPathMode_MODE_BOTH, }, }, } @@ -192,9 +207,12 @@ func Test_LongLivedGracefulRestartCapability(t *testing.T) { input := &api.LongLivedGracefulRestartCapability{ Tuples: []*api.LongLivedGracefulRestartCapabilityTuple{ { - Family: api.Family_IPv4, - Flags: 0x80, // forward - Time: 90, + Family: &api.Family{ + Afi: api.Family_AFI_IP, + Safi: api.Family_SAFI_UNICAST, + }, + Flags: 0x80, // forward + Time: 90, }, }, } diff --git a/internal/pkg/apiutil/util.go b/internal/pkg/apiutil/util.go index 45cf1a04..4c18b752 100644 --- a/internal/pkg/apiutil/util.go +++ b/internal/pkg/apiutil/util.go @@ -69,7 +69,7 @@ func NewPath(nlri bgp.AddrPrefixInterface, isWithdraw bool, attrs []bgp.PathAttr AnyPattrs: MarshalPathAttributes(attrs), Age: age.Unix(), IsWithdraw: isWithdraw, - Family: uint32(bgp.AfiSafiToRouteFamily(nlri.AFI(), nlri.SAFI())), + Family: ToApiFamily(nlri.AFI(), nlri.SAFI()), Identifier: nlri.PathIdentifier(), } } @@ -88,9 +88,9 @@ func getNLRI(family bgp.RouteFamily, buf []byte) (bgp.AddrPrefixInterface, error func GetNativeNlri(p *api.Path) (bgp.AddrPrefixInterface, error) { if len(p.Nlri) > 0 { - return getNLRI(bgp.RouteFamily(p.Family), p.Nlri) + return getNLRI(ToRouteFamily(p.Family), p.Nlri) } - return UnmarshalNLRI(bgp.RouteFamily(p.Family), p.AnyNlri) + return UnmarshalNLRI(ToRouteFamily(p.Family), p.AnyNlri) } func GetNativePathAttributes(p *api.Path) ([]bgp.PathAttributeInterface, error) { @@ -112,3 +112,14 @@ func GetNativePathAttributes(p *api.Path) ([]bgp.PathAttributeInterface, error) } return UnmarshalPathAttributes(p.AnyPattrs) } + +func ToRouteFamily(f *api.Family) bgp.RouteFamily { + return bgp.AfiSafiToRouteFamily(uint16(f.Afi), uint8(f.Safi)) +} + +func ToApiFamily(afi uint16, safi uint8) *api.Family { + return &api.Family{ + Afi: api.Family_Afi(afi), + Safi: api.Family_Safi(safi), + } +} diff --git a/pkg/server/grpc_server.go b/pkg/server/grpc_server.go index 009c0fd2..f9fc6133 100644 --- a/pkg/server/grpc_server.go +++ b/pkg/server/grpc_server.go @@ -122,8 +122,10 @@ func extractFamilyFromConfigAfiSafi(c *config.AfiSafi) uint32 { } func NewAfiSafiConfigFromConfigStruct(c *config.AfiSafi) *api.AfiSafiConfig { + rf := extractFamilyFromConfigAfiSafi(c) + afi, safi := bgp.RouteFamilyToAfiSafi(bgp.RouteFamily(rf)) return &api.AfiSafiConfig{ - Family: extractFamilyFromConfigAfiSafi(c), + Family: &api.Family{Afi: api.Family_Afi(afi), Safi: api.Family_Safi(safi)}, Enabled: c.Config.Enabled, } } @@ -186,9 +188,9 @@ func NewPrefixLimitFromConfigStruct(c *config.AfiSafi) *api.PrefixLimit { if c.PrefixLimit.Config.MaxPrefixes == 0 { return nil } - + afi, safi := bgp.RouteFamilyToAfiSafi(bgp.RouteFamily(c.State.Family)) return &api.PrefixLimit{ - Family: uint32(c.State.Family), + Family: &api.Family{Afi: api.Family_Afi(afi), Safi: api.Family_Safi(safi)}, MaxPrefixes: c.PrefixLimit.Config.MaxPrefixes, ShutdownThresholdPct: uint32(c.PrefixLimit.Config.ShutdownThresholdPct), } @@ -459,7 +461,6 @@ func NewValidationFromTableStruct(v *table.Validation) *api.RPKIValidation { func toPathAPI(binNlri []byte, binPattrs [][]byte, anyNlri *any.Any, anyPattrs []*any.Any, path *table.Path, v *table.Validation) *api.Path { nlri := path.GetNlri() - family := uint32(path.GetRouteFamily()) vv := config.RPKI_VALIDATION_RESULT_TYPE_NONE.ToInt() if v != nil { vv = v.Status.ToInt() @@ -471,7 +472,7 @@ func toPathAPI(binNlri []byte, binPattrs [][]byte, anyNlri *any.Any, anyPattrs [ IsWithdraw: path.IsWithdraw, Validation: int32(vv), ValidationDetail: NewValidationFromTableStruct(v), - Family: family, + Family: &api.Family{Afi: api.Family_Afi(nlri.AFI()), Safi: api.Family_Safi(nlri.SAFI())}, Stale: path.IsStale(), IsFromExternal: path.IsFromExternal(), NoImplicitWithdraw: path.NoImplicitWithdraw(), @@ -543,7 +544,8 @@ func (s *Server) MonitorTable(arg *api.MonitorTableRequest, stream api.GobgpApi_ sendPath := func(pathList []*table.Path) error { for _, path := range pathList { - if path == nil || (arg.Family != 0 && bgp.RouteFamily(arg.Family) != path.GetRouteFamily()) { + f := bgp.AfiSafiToRouteFamily(uint16(arg.Family.Afi), uint8(arg.Family.Safi)) + if path == nil || (arg.Family != nil && f != path.GetRouteFamily()) { continue } if err := stream.Send(&api.MonitorTableResponse{Path: ToPathApi(path, nil)}); err != nil { @@ -732,8 +734,8 @@ func api2PathList(resource api.Resource, ApiPathList []*api.Path) ([]*table.Path } else if !path.IsWithdraw && nexthop == "" { return nil, fmt.Errorf("nexthop not found") } - - if resource != api.Resource_VRF && bgp.RouteFamily(path.Family) == bgp.RF_IPv4_UC && net.ParseIP(nexthop).To4() != nil { + rf := bgp.AfiSafiToRouteFamily(uint16(path.Family.Afi), uint8(path.Family.Safi)) + if resource != api.Resource_VRF && rf == bgp.RF_IPv4_UC && net.ParseIP(nexthop).To4() != nil { pattrs = append(pattrs, bgp.NewPathAttributeNextHop(nexthop)) } else { pattrs = append(pattrs, bgp.NewPathAttributeMpReachNLRI(nexthop, []bgp.AddrPrefixInterface{nlri})) @@ -885,7 +887,8 @@ func ReadAfiSafiConfigFromAPIStruct(c *config.AfiSafiConfig, a *api.AfiSafiConfi if c == nil || a == nil { return } - c.AfiSafiName = config.AfiSafiType(bgp.RouteFamily(a.Family).String()) + rf := bgp.AfiSafiToRouteFamily(uint16(a.Family.Afi), uint8(a.Family.Safi)) + c.AfiSafiName = config.AfiSafiType(rf.String()) c.Enabled = a.Enabled } @@ -894,7 +897,7 @@ func ReadAfiSafiStateFromAPIStruct(s *config.AfiSafiState, a *api.AfiSafiConfig) return } // Store only address family value for the convenience - s.Family = bgp.RouteFamily(a.Family) + s.Family = bgp.AfiSafiToRouteFamily(uint16(a.Family.Afi), uint8(a.Family.Safi)) } func ReadPrefixLimitFromAPIStruct(c *config.PrefixLimit, a *api.PrefixLimit) { @@ -1075,7 +1078,8 @@ func NewNeighborFromAPIStruct(a *api.Peer) (*config.Neighbor, error) { for _, afiSafi := range pconf.AfiSafis { // If Peer.Conf.PrefixLimits contains the configuration for // the same address family, we override AfiSafi.PrefixLimit. - if uint32(afiSafi.State.Family) == prefixLimit.Family { + rf := bgp.AfiSafiToRouteFamily(uint16(prefixLimit.Family.Afi), uint8(prefixLimit.Family.Safi)) + if uint32(afiSafi.State.Family) == uint32(rf) { ReadPrefixLimitFromAPIStruct(&afiSafi.PrefixLimit, prefixLimit) } } @@ -1656,10 +1660,11 @@ func toStatementApi(s *config.Statement) *api.Statement { cs.NextHopInList = s.Conditions.BgpConditions.NextHopInList } if s.Conditions.BgpConditions.AfiSafiInList != nil { - afiSafiIn := make([]api.Family, 0) + afiSafiIn := make([]*api.Family, 0) for _, afiSafiType := range s.Conditions.BgpConditions.AfiSafiInList { if mapped, ok := bgp.AddressFamilyValueMap[string(afiSafiType)]; ok { - afiSafiIn = append(afiSafiIn, api.Family(mapped)) + afi, safi := bgp.RouteFamilyToAfiSafi(mapped) + afiSafiIn = append(afiSafiIn, &api.Family{Afi: api.Family_Afi(afi), Safi: api.Family_Safi(safi)}) } } cs.AfiSafiIn = afiSafiIn @@ -1923,13 +1928,14 @@ func NewNextHopConditionFromApiStruct(a []string) (*table.NextHopCondition, erro return table.NewNextHopCondition(a) } -func NewAfiSafiInConditionFromApiStruct(a []api.Family) (*table.AfiSafiInCondition, error) { +func NewAfiSafiInConditionFromApiStruct(a []*api.Family) (*table.AfiSafiInCondition, error) { if a == nil { return nil, nil } afiSafiTypes := make([]config.AfiSafiType, 0, len(a)) for _, aType := range a { - if configType, ok := bgp.AddressFamilyNameMap[bgp.RouteFamily(aType)]; ok { + rf := bgp.AfiSafiToRouteFamily(uint16(aType.Afi), uint8(aType.Safi)) + if configType, ok := bgp.AddressFamilyNameMap[bgp.RouteFamily(rf)]; ok { afiSafiTypes = append(afiSafiTypes, config.AfiSafiType(configType)) } else { return nil, fmt.Errorf("unknown afi-safi-in type value: %d", aType) diff --git a/pkg/server/server.go b/pkg/server/server.go index c76ec45d..8f471d11 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -1859,7 +1859,6 @@ func (s *BgpServer) DeletePath(ctx context.Context, r *api.DeletePathRequest) er if err != nil { return err } - f := bgp.RouteFamily(r.Family) if len(r.Uuid) > 0 { // Delete locally generated path which has the given UUID @@ -1884,8 +1883,9 @@ func (s *BgpServer) DeletePath(ctx context.Context, r *api.DeletePathRequest) er } else if len(pathList) == 0 { // Delete all locally generated paths families := s.globalRib.GetRFlist() - if f != 0 { - families = []bgp.RouteFamily{f} + if r.Family != nil { + families = []bgp.RouteFamily{bgp.AfiSafiToRouteFamily(uint16(r.Family.Afi), uint8(r.Family.Safi))} + } for _, path := range s.globalRib.GetPathList(table.GLOBAL_RIB_NAME, 0, families) { if path.IsLocal() { @@ -2297,7 +2297,10 @@ func (s *BgpServer) ListPath(ctx context.Context, r *api.ListPathRequest) ([]*ap } in := false - family := bgp.RouteFamily(r.Family) + family := bgp.RouteFamily(0) + if r.Family != nil { + family = bgp.AfiSafiToRouteFamily(uint16(r.Family.Afi), uint8(r.Family.Safi)) + } var err error switch r.Type { case api.Resource_LOCAL, api.Resource_GLOBAL: @@ -2390,7 +2393,10 @@ func (s *BgpServer) GetTable(ctx context.Context, r *api.GetTableRequest) (*api. if r == nil || r.Name == "" { return nil, fmt.Errorf("invalid request") } - family := bgp.RouteFamily(r.Family) + family := bgp.RouteFamily(0) + if r.Family != nil { + family = bgp.AfiSafiToRouteFamily(uint16(r.Family.Afi), uint8(r.Family.Safi)) + } var in bool var err error var info *table.TableInfo @@ -3287,7 +3293,11 @@ func (s *BgpServer) ListRpki(ctx context.Context, r *api.ListRpkiRequest) (l []* func (s *BgpServer) ListRpkiTable(ctx context.Context, r *api.ListRpkiTableRequest) (l []*api.Roa, err error) { s.mgmtOperation(func() error { var roas []*table.ROA - roas, err = s.roaManager.GetRoa(bgp.RouteFamily(r.Family)) + family := bgp.RouteFamily(0) + if r.Family != nil { + family = bgp.AfiSafiToRouteFamily(uint16(r.Family.Afi), uint8(r.Family.Safi)) + } + roas, err = s.roaManager.GetRoa(family) if err == nil { l = append(l, NewRoaListFromTableStructList(roas)...) } |