refactoring

This commit is contained in:
Chris Lu 2020-04-12 21:00:55 -07:00
parent 8e23dc078b
commit 7764e0465c
16 changed files with 186 additions and 187 deletions

View file

@ -42,7 +42,7 @@ service SeaweedFiler {
rpc GetFilerConfiguration (GetFilerConfigurationRequest) returns (GetFilerConfigurationResponse) {
}
rpc ListenForEvents (ListenForEventsRequest) returns (stream FullEventNotification) {
rpc SubscribeMetadata (SubscribeMetadataRequest) returns (stream SubscribeMetadataResponse) {
}
}
@ -234,12 +234,12 @@ message GetFilerConfigurationResponse {
bool cipher = 7;
}
message ListenForEventsRequest {
message SubscribeMetadataRequest {
string client_name = 1;
string path_prefix = 2;
int64 since_ns = 3;
}
message FullEventNotification {
message SubscribeMetadataResponse {
string directory = 1;
EventNotification event_notification = 2;
}

View file

@ -61,10 +61,10 @@ func walkLogEntryFile(dst *os.File) error {
return nil
}
event := &filer_pb.FullEventNotification{}
event := &filer_pb.SubscribeMetadataResponse{}
err = proto.Unmarshal(logEntry.Data, event)
if err != nil {
log.Printf("unexpected unmarshal filer_pb.FullEventNotification: %v", err)
log.Printf("unexpected unmarshal filer_pb.SubscribeMetadataResponse: %v", err)
return nil
}

View file

@ -34,7 +34,7 @@ func runWatch(cmd *Command, args []string) bool {
watchErr := pb.WithFilerClient(*watchFiler, grpcDialOption, func(client filer_pb.SeaweedFilerClient) error {
stream, err := client.ListenForEvents(context.Background(), &filer_pb.ListenForEventsRequest{
stream, err := client.SubscribeMetadata(context.Background(), &filer_pb.SubscribeMetadataRequest{
ClientName: "watch",
PathPrefix: *watchTarget,
SinceNs: 0,

View file

@ -53,13 +53,13 @@ func (f *Filer) logMetaEvent(fullpath string, eventNotification *filer_pb.EventN
dir, _ := util.FullPath(fullpath).DirAndName()
event := &filer_pb.FullEventNotification{
event := &filer_pb.SubscribeMetadataResponse{
Directory: dir,
EventNotification: eventNotification,
}
data, err := proto.Marshal(event)
if err != nil {
glog.Errorf("failed to marshal filer_pb.FullEventNotification %+v: %v", event, err)
glog.Errorf("failed to marshal filer_pb.SubscribeMetadataResponse %+v: %v", event, err)
return
}
@ -97,11 +97,11 @@ func (f *Filer) ReadLogBuffer(lastReadTime time.Time, eachEventFn func(fullpath
return lastReadTime, fmt.Errorf("unexpected unmarshal filer_pb.LogEntry: %v", err)
}
event := &filer_pb.FullEventNotification{}
event := &filer_pb.SubscribeMetadataResponse{}
err = proto.Unmarshal(logEntry.Data, event)
if err != nil {
glog.Errorf("unexpected unmarshal filer_pb.FullEventNotification: %v", err)
return lastReadTime, fmt.Errorf("unexpected unmarshal filer_pb.FullEventNotification: %v", err)
glog.Errorf("unexpected unmarshal filer_pb.SubscribeMetadataResponse: %v", err)
return lastReadTime, fmt.Errorf("unexpected unmarshal filer_pb.SubscribeMetadataResponse: %v", err)
}
err = eachEventFn(event.Directory, event.EventNotification)

View file

@ -1,6 +1,6 @@
package filer2
const(
TopicsDir = "/topics"
const (
TopicsDir = "/topics"
SystemLogDir = TopicsDir + "/.system/log"
)

View file

@ -62,7 +62,6 @@ func (c *FsCache) doSetFsNode(path util.FullPath, node fs.Node) {
t.node = node
}
func (c *FsCache) EnsureFsNode(path util.FullPath, genNodeFn func() fs.Node) fs.Node {
c.Lock()

View file

@ -42,7 +42,7 @@ service SeaweedFiler {
rpc GetFilerConfiguration (GetFilerConfigurationRequest) returns (GetFilerConfigurationResponse) {
}
rpc ListenForEvents (ListenForEventsRequest) returns (stream FullEventNotification) {
rpc SubscribeMetadata (SubscribeMetadataRequest) returns (stream SubscribeMetadataResponse) {
}
}
@ -234,12 +234,12 @@ message GetFilerConfigurationResponse {
bool cipher = 7;
}
message ListenForEventsRequest {
message SubscribeMetadataRequest {
string client_name = 1;
string path_prefix = 2;
int64 since_ns = 3;
}
message FullEventNotification {
message SubscribeMetadataResponse {
string directory = 1;
EventNotification event_notification = 2;
}

View file

@ -39,8 +39,8 @@ It has these top-level messages:
StatisticsResponse
GetFilerConfigurationRequest
GetFilerConfigurationResponse
ListenForEventsRequest
FullEventNotification
SubscribeMetadataRequest
SubscribeMetadataResponse
LogEntry
*/
package filer_pb
@ -1090,56 +1090,56 @@ func (m *GetFilerConfigurationResponse) GetCipher() bool {
return false
}
type ListenForEventsRequest struct {
type SubscribeMetadataRequest struct {
ClientName string `protobuf:"bytes,1,opt,name=client_name,json=clientName" json:"client_name,omitempty"`
PathPrefix string `protobuf:"bytes,2,opt,name=path_prefix,json=pathPrefix" json:"path_prefix,omitempty"`
SinceNs int64 `protobuf:"varint,3,opt,name=since_ns,json=sinceNs" json:"since_ns,omitempty"`
}
func (m *ListenForEventsRequest) Reset() { *m = ListenForEventsRequest{} }
func (m *ListenForEventsRequest) String() string { return proto.CompactTextString(m) }
func (*ListenForEventsRequest) ProtoMessage() {}
func (*ListenForEventsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
func (m *SubscribeMetadataRequest) Reset() { *m = SubscribeMetadataRequest{} }
func (m *SubscribeMetadataRequest) String() string { return proto.CompactTextString(m) }
func (*SubscribeMetadataRequest) ProtoMessage() {}
func (*SubscribeMetadataRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
func (m *ListenForEventsRequest) GetClientName() string {
func (m *SubscribeMetadataRequest) GetClientName() string {
if m != nil {
return m.ClientName
}
return ""
}
func (m *ListenForEventsRequest) GetPathPrefix() string {
func (m *SubscribeMetadataRequest) GetPathPrefix() string {
if m != nil {
return m.PathPrefix
}
return ""
}
func (m *ListenForEventsRequest) GetSinceNs() int64 {
func (m *SubscribeMetadataRequest) GetSinceNs() int64 {
if m != nil {
return m.SinceNs
}
return 0
}
type FullEventNotification struct {
type SubscribeMetadataResponse struct {
Directory string `protobuf:"bytes,1,opt,name=directory" json:"directory,omitempty"`
EventNotification *EventNotification `protobuf:"bytes,2,opt,name=event_notification,json=eventNotification" json:"event_notification,omitempty"`
}
func (m *FullEventNotification) Reset() { *m = FullEventNotification{} }
func (m *FullEventNotification) String() string { return proto.CompactTextString(m) }
func (*FullEventNotification) ProtoMessage() {}
func (*FullEventNotification) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
func (m *SubscribeMetadataResponse) Reset() { *m = SubscribeMetadataResponse{} }
func (m *SubscribeMetadataResponse) String() string { return proto.CompactTextString(m) }
func (*SubscribeMetadataResponse) ProtoMessage() {}
func (*SubscribeMetadataResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
func (m *FullEventNotification) GetDirectory() string {
func (m *SubscribeMetadataResponse) GetDirectory() string {
if m != nil {
return m.Directory
}
return ""
}
func (m *FullEventNotification) GetEventNotification() *EventNotification {
func (m *SubscribeMetadataResponse) GetEventNotification() *EventNotification {
if m != nil {
return m.EventNotification
}
@ -1209,8 +1209,8 @@ func init() {
proto.RegisterType((*StatisticsResponse)(nil), "filer_pb.StatisticsResponse")
proto.RegisterType((*GetFilerConfigurationRequest)(nil), "filer_pb.GetFilerConfigurationRequest")
proto.RegisterType((*GetFilerConfigurationResponse)(nil), "filer_pb.GetFilerConfigurationResponse")
proto.RegisterType((*ListenForEventsRequest)(nil), "filer_pb.ListenForEventsRequest")
proto.RegisterType((*FullEventNotification)(nil), "filer_pb.FullEventNotification")
proto.RegisterType((*SubscribeMetadataRequest)(nil), "filer_pb.SubscribeMetadataRequest")
proto.RegisterType((*SubscribeMetadataResponse)(nil), "filer_pb.SubscribeMetadataResponse")
proto.RegisterType((*LogEntry)(nil), "filer_pb.LogEntry")
}
@ -1236,7 +1236,7 @@ type SeaweedFilerClient interface {
DeleteCollection(ctx context.Context, in *DeleteCollectionRequest, opts ...grpc.CallOption) (*DeleteCollectionResponse, error)
Statistics(ctx context.Context, in *StatisticsRequest, opts ...grpc.CallOption) (*StatisticsResponse, error)
GetFilerConfiguration(ctx context.Context, in *GetFilerConfigurationRequest, opts ...grpc.CallOption) (*GetFilerConfigurationResponse, error)
ListenForEvents(ctx context.Context, in *ListenForEventsRequest, opts ...grpc.CallOption) (SeaweedFiler_ListenForEventsClient, error)
SubscribeMetadata(ctx context.Context, in *SubscribeMetadataRequest, opts ...grpc.CallOption) (SeaweedFiler_SubscribeMetadataClient, error)
}
type seaweedFilerClient struct {
@ -1369,12 +1369,12 @@ func (c *seaweedFilerClient) GetFilerConfiguration(ctx context.Context, in *GetF
return out, nil
}
func (c *seaweedFilerClient) ListenForEvents(ctx context.Context, in *ListenForEventsRequest, opts ...grpc.CallOption) (SeaweedFiler_ListenForEventsClient, error) {
stream, err := grpc.NewClientStream(ctx, &_SeaweedFiler_serviceDesc.Streams[1], c.cc, "/filer_pb.SeaweedFiler/ListenForEvents", opts...)
func (c *seaweedFilerClient) SubscribeMetadata(ctx context.Context, in *SubscribeMetadataRequest, opts ...grpc.CallOption) (SeaweedFiler_SubscribeMetadataClient, error) {
stream, err := grpc.NewClientStream(ctx, &_SeaweedFiler_serviceDesc.Streams[1], c.cc, "/filer_pb.SeaweedFiler/SubscribeMetadata", opts...)
if err != nil {
return nil, err
}
x := &seaweedFilerListenForEventsClient{stream}
x := &seaweedFilerSubscribeMetadataClient{stream}
if err := x.ClientStream.SendMsg(in); err != nil {
return nil, err
}
@ -1384,17 +1384,17 @@ func (c *seaweedFilerClient) ListenForEvents(ctx context.Context, in *ListenForE
return x, nil
}
type SeaweedFiler_ListenForEventsClient interface {
Recv() (*FullEventNotification, error)
type SeaweedFiler_SubscribeMetadataClient interface {
Recv() (*SubscribeMetadataResponse, error)
grpc.ClientStream
}
type seaweedFilerListenForEventsClient struct {
type seaweedFilerSubscribeMetadataClient struct {
grpc.ClientStream
}
func (x *seaweedFilerListenForEventsClient) Recv() (*FullEventNotification, error) {
m := new(FullEventNotification)
func (x *seaweedFilerSubscribeMetadataClient) Recv() (*SubscribeMetadataResponse, error) {
m := new(SubscribeMetadataResponse)
if err := x.ClientStream.RecvMsg(m); err != nil {
return nil, err
}
@ -1415,7 +1415,7 @@ type SeaweedFilerServer interface {
DeleteCollection(context.Context, *DeleteCollectionRequest) (*DeleteCollectionResponse, error)
Statistics(context.Context, *StatisticsRequest) (*StatisticsResponse, error)
GetFilerConfiguration(context.Context, *GetFilerConfigurationRequest) (*GetFilerConfigurationResponse, error)
ListenForEvents(*ListenForEventsRequest, SeaweedFiler_ListenForEventsServer) error
SubscribeMetadata(*SubscribeMetadataRequest, SeaweedFiler_SubscribeMetadataServer) error
}
func RegisterSeaweedFilerServer(s *grpc.Server, srv SeaweedFilerServer) {
@ -1623,24 +1623,24 @@ func _SeaweedFiler_GetFilerConfiguration_Handler(srv interface{}, ctx context.Co
return interceptor(ctx, in, info, handler)
}
func _SeaweedFiler_ListenForEvents_Handler(srv interface{}, stream grpc.ServerStream) error {
m := new(ListenForEventsRequest)
func _SeaweedFiler_SubscribeMetadata_Handler(srv interface{}, stream grpc.ServerStream) error {
m := new(SubscribeMetadataRequest)
if err := stream.RecvMsg(m); err != nil {
return err
}
return srv.(SeaweedFilerServer).ListenForEvents(m, &seaweedFilerListenForEventsServer{stream})
return srv.(SeaweedFilerServer).SubscribeMetadata(m, &seaweedFilerSubscribeMetadataServer{stream})
}
type SeaweedFiler_ListenForEventsServer interface {
Send(*FullEventNotification) error
type SeaweedFiler_SubscribeMetadataServer interface {
Send(*SubscribeMetadataResponse) error
grpc.ServerStream
}
type seaweedFilerListenForEventsServer struct {
type seaweedFilerSubscribeMetadataServer struct {
grpc.ServerStream
}
func (x *seaweedFilerListenForEventsServer) Send(m *FullEventNotification) error {
func (x *seaweedFilerSubscribeMetadataServer) Send(m *SubscribeMetadataResponse) error {
return x.ServerStream.SendMsg(m)
}
@ -1696,8 +1696,8 @@ var _SeaweedFiler_serviceDesc = grpc.ServiceDesc{
ServerStreams: true,
},
{
StreamName: "ListenForEvents",
Handler: _SeaweedFiler_ListenForEvents_Handler,
StreamName: "SubscribeMetadata",
Handler: _SeaweedFiler_SubscribeMetadata_Handler,
ServerStreams: true,
},
},
@ -1709,122 +1709,122 @@ func init() { proto.RegisterFile("filer.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{
// 1903 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xb4, 0x58, 0x5f, 0x6f, 0xdc, 0xc6,
0x11, 0x37, 0xef, 0x74, 0x7f, 0x38, 0x77, 0xe7, 0x48, 0x7b, 0x92, 0x73, 0x3e, 0x4b, 0xb6, 0x42,
0xd7, 0xa9, 0x0b, 0x1b, 0xaa, 0xa1, 0xa6, 0x40, 0xd2, 0xb4, 0x0f, 0xb6, 0x2c, 0xa5, 0x6e, 0x6c,
0xc5, 0xa0, 0xec, 0x22, 0x45, 0x81, 0x12, 0x14, 0xb9, 0xba, 0xdb, 0x8a, 0x47, 0xb2, 0xbb, 0x4b,
0xfd, 0xc9, 0x53, 0xfb, 0x35, 0x0a, 0xf4, 0xa1, 0xdf, 0xa1, 0x8f, 0x45, 0x5f, 0x8a, 0x02, 0x05,
0xfa, 0x2d, 0xfa, 0x49, 0x8a, 0x9d, 0x25, 0x79, 0xcb, 0xe3, 0x49, 0x4a, 0x50, 0xe4, 0x6d, 0x77,
0x66, 0x76, 0x76, 0x76, 0xfe, 0xfc, 0x66, 0x48, 0xe8, 0x9d, 0xb0, 0x88, 0xf2, 0x9d, 0x94, 0x27,
0x32, 0x21, 0x5d, 0xdc, 0x78, 0xe9, 0xb1, 0xf3, 0x15, 0xdc, 0x7b, 0x9d, 0x24, 0xa7, 0x59, 0xfa,
0x92, 0x71, 0x1a, 0xc8, 0x84, 0x5f, 0xee, 0xc7, 0x92, 0x5f, 0xba, 0xf4, 0x0f, 0x19, 0x15, 0x92,
0x6c, 0x82, 0x1d, 0x16, 0x8c, 0x91, 0xb5, 0x6d, 0x3d, 0xb6, 0xdd, 0x39, 0x81, 0x10, 0x58, 0x89,
0xfd, 0x19, 0x1d, 0x35, 0x90, 0x81, 0x6b, 0x67, 0x1f, 0x36, 0x97, 0x2b, 0x14, 0x69, 0x12, 0x0b,
0x4a, 0x1e, 0x41, 0x8b, 0x2a, 0x02, 0x6a, 0xeb, 0xed, 0x7e, 0xb0, 0x53, 0x98, 0xb2, 0xa3, 0xe5,
0x34, 0xd7, 0xf9, 0x87, 0x05, 0xe4, 0x35, 0x13, 0x52, 0x11, 0x19, 0x15, 0xdf, 0xce, 0x9e, 0x3b,
0xd0, 0x4e, 0x39, 0x3d, 0x61, 0x17, 0xb9, 0x45, 0xf9, 0x8e, 0x3c, 0x85, 0x35, 0x21, 0x7d, 0x2e,
0x0f, 0x78, 0x32, 0x3b, 0x60, 0x11, 0x3d, 0x54, 0x46, 0x37, 0x51, 0xa4, 0xce, 0x20, 0x3b, 0x40,
0x58, 0x1c, 0x44, 0x99, 0x60, 0x67, 0xf4, 0xa8, 0xe0, 0x8e, 0x56, 0xb6, 0xad, 0xc7, 0x5d, 0x77,
0x09, 0x87, 0xac, 0x43, 0x2b, 0x62, 0x33, 0x26, 0x47, 0xad, 0x6d, 0xeb, 0xf1, 0xc0, 0xd5, 0x1b,
0xe7, 0xe7, 0x30, 0xac, 0xd8, 0xff, 0xdd, 0x9e, 0xff, 0x97, 0x06, 0xb4, 0x90, 0x50, 0xfa, 0xd8,
0x9a, 0xfb, 0x98, 0x7c, 0x04, 0x7d, 0x26, 0xbc, 0xb9, 0x23, 0x1a, 0x68, 0x5b, 0x8f, 0x89, 0xd2,
0xe7, 0xe4, 0x09, 0xb4, 0x83, 0x69, 0x16, 0x9f, 0x8a, 0x51, 0x73, 0xbb, 0xf9, 0xb8, 0xb7, 0x3b,
0x9c, 0x5f, 0xa4, 0x1e, 0xba, 0xa7, 0x78, 0x6e, 0x2e, 0x42, 0x3e, 0x05, 0xf0, 0xa5, 0xe4, 0xec,
0x38, 0x93, 0x54, 0xe0, 0x4b, 0x7b, 0xbb, 0x23, 0xe3, 0x40, 0x26, 0xe8, 0xf3, 0x92, 0xef, 0x1a,
0xb2, 0xe4, 0x33, 0xe8, 0xd2, 0x0b, 0x49, 0xe3, 0x90, 0x86, 0xa3, 0x16, 0x5e, 0xb4, 0xb5, 0xf0,
0xa2, 0x9d, 0xfd, 0x9c, 0xaf, 0xdf, 0x57, 0x8a, 0x8f, 0x3f, 0x87, 0x41, 0x85, 0x45, 0x56, 0xa1,
0x79, 0x4a, 0x8b, 0xa8, 0xaa, 0xa5, 0xf2, 0xec, 0x99, 0x1f, 0x65, 0x3a, 0xc1, 0xfa, 0xae, 0xde,
0xfc, 0xac, 0xf1, 0xa9, 0xe5, 0xbc, 0x04, 0xfb, 0x20, 0x8b, 0xa2, 0xf2, 0x60, 0xc8, 0x78, 0x71,
0x30, 0x64, 0x7c, 0xee, 0xe5, 0xc6, 0xb5, 0x5e, 0xfe, 0xbb, 0x05, 0x6b, 0xfb, 0x67, 0x34, 0x96,
0x87, 0x89, 0x64, 0x27, 0x2c, 0xf0, 0x25, 0x4b, 0x62, 0xf2, 0x14, 0xec, 0x24, 0x0a, 0xbd, 0x6b,
0xc3, 0xd4, 0x4d, 0xa2, 0xdc, 0xea, 0xa7, 0x60, 0xc7, 0xf4, 0xdc, 0xbb, 0xf6, 0xba, 0x6e, 0x4c,
0xcf, 0xb5, 0xf4, 0x43, 0x18, 0x84, 0x34, 0xa2, 0x92, 0x7a, 0x65, 0x74, 0x54, 0xe8, 0xfa, 0x9a,
0xb8, 0xa7, 0xc3, 0xf1, 0x31, 0x7c, 0xa0, 0x54, 0xa6, 0x3e, 0xa7, 0xb1, 0xf4, 0x52, 0x5f, 0x4e,
0x31, 0x26, 0xb6, 0x3b, 0x88, 0xe9, 0xf9, 0x5b, 0xa4, 0xbe, 0xf5, 0xe5, 0xd4, 0xf9, 0x5b, 0x03,
0xec, 0x32, 0x98, 0xe4, 0x43, 0xe8, 0xa8, 0x6b, 0x3d, 0x16, 0xe6, 0x9e, 0x68, 0xab, 0xed, 0xab,
0x50, 0x55, 0x45, 0x72, 0x72, 0x22, 0xa8, 0x44, 0xf3, 0x9a, 0x6e, 0xbe, 0x53, 0x99, 0x25, 0xd8,
0x37, 0xba, 0x10, 0x56, 0x5c, 0x5c, 0x2b, 0x8f, 0xcf, 0x24, 0x9b, 0x51, 0xbc, 0xb0, 0xe9, 0xea,
0x0d, 0x19, 0x42, 0x8b, 0x7a, 0xd2, 0x9f, 0x60, 0x86, 0xdb, 0xee, 0x0a, 0x7d, 0xe7, 0x4f, 0xc8,
0x0f, 0xe0, 0xb6, 0x48, 0x32, 0x1e, 0x50, 0xaf, 0xb8, 0xb6, 0x8d, 0xdc, 0xbe, 0xa6, 0x1e, 0xe8,
0xcb, 0x1d, 0x68, 0x9e, 0xb0, 0x70, 0xd4, 0x41, 0xc7, 0xac, 0x56, 0x93, 0xf0, 0x55, 0xe8, 0x2a,
0x26, 0xf9, 0x31, 0x40, 0xa9, 0x29, 0x1c, 0x75, 0xaf, 0x10, 0xb5, 0x0b, 0xbd, 0x21, 0xd9, 0x02,
0x08, 0x58, 0x3a, 0xa5, 0xdc, 0x53, 0x09, 0x63, 0x63, 0x72, 0xd8, 0x9a, 0xf2, 0x25, 0xbd, 0x54,
0x6c, 0x26, 0xbc, 0xc9, 0x37, 0x2c, 0x4d, 0x69, 0x38, 0x02, 0xf4, 0xb0, 0xcd, 0xc4, 0x17, 0x9a,
0xe0, 0x7c, 0x0d, 0xed, 0xdc, 0xb8, 0x7b, 0x60, 0x9f, 0x25, 0x51, 0x36, 0x2b, 0x9d, 0x36, 0x70,
0xbb, 0x9a, 0xf0, 0x2a, 0x24, 0x77, 0x01, 0x51, 0x12, 0xaf, 0x68, 0xa0, 0x8b, 0xd0, 0xbf, 0xea,
0x82, 0x3b, 0xd0, 0x0e, 0x92, 0xe4, 0x94, 0x69, 0xdf, 0x75, 0xdc, 0x7c, 0xe7, 0xfc, 0xb1, 0x09,
0xb7, 0xab, 0xc5, 0xa2, 0xae, 0x40, 0x2d, 0xe8, 0x69, 0x0b, 0xd5, 0xa0, 0xda, 0xa3, 0x8a, 0xb7,
0x1b, 0xa6, 0xb7, 0x8b, 0x23, 0xb3, 0x24, 0xd4, 0x17, 0x0c, 0xf4, 0x91, 0x37, 0x49, 0x48, 0x55,
0xae, 0x67, 0x2c, 0xc4, 0xf0, 0x0c, 0x5c, 0xb5, 0x54, 0x94, 0x09, 0x0b, 0x73, 0xf0, 0x51, 0x4b,
0x34, 0x8f, 0xa3, 0xde, 0xb6, 0x0e, 0xb8, 0xde, 0xa9, 0x80, 0xcf, 0x14, 0xb5, 0xa3, 0xa3, 0xa8,
0xd6, 0x64, 0x1b, 0x7a, 0x9c, 0xa6, 0x51, 0x9e, 0xfb, 0xe8, 0x7c, 0xdb, 0x35, 0x49, 0xe4, 0x3e,
0x40, 0x90, 0x44, 0x11, 0x0d, 0x50, 0xc0, 0x46, 0x01, 0x83, 0xa2, 0xf2, 0x4e, 0xca, 0xc8, 0x13,
0x34, 0x40, 0x57, 0xb7, 0xdc, 0xb6, 0x94, 0xd1, 0x11, 0x0d, 0xd4, 0x3b, 0x32, 0x41, 0xb9, 0x87,
0xf0, 0xd5, 0xc3, 0x73, 0x5d, 0x45, 0x40, 0x90, 0xdd, 0x02, 0x98, 0xf0, 0x24, 0x4b, 0x35, 0xb7,
0xbf, 0xdd, 0x54, 0x48, 0x8e, 0x14, 0x64, 0x3f, 0x82, 0xdb, 0xe2, 0x72, 0x16, 0xb1, 0xf8, 0xd4,
0x93, 0x3e, 0x9f, 0x50, 0x39, 0x1a, 0xe8, 0x0a, 0xc8, 0xa9, 0xef, 0x90, 0xa8, 0xde, 0x3e, 0x0b,
0x7f, 0x3a, 0xba, 0x8d, 0x19, 0xa0, 0x96, 0x4e, 0x0a, 0x64, 0x8f, 0x53, 0x5f, 0xd2, 0xef, 0xd0,
0xc6, 0xbe, 0x1d, 0x5a, 0x90, 0x0d, 0x68, 0x27, 0x1e, 0xbd, 0x08, 0xa2, 0xbc, 0x68, 0x5b, 0xc9,
0xfe, 0x45, 0x10, 0x39, 0x4f, 0x60, 0x58, 0xb9, 0x31, 0x07, 0xfa, 0x75, 0x68, 0x51, 0xce, 0x93,
0x02, 0x96, 0xf4, 0xc6, 0xf9, 0x0d, 0x90, 0xf7, 0x69, 0xf8, 0x7d, 0x98, 0xe7, 0x6c, 0xc0, 0xb0,
0xa2, 0x5a, 0xdb, 0xe1, 0xfc, 0xcb, 0x02, 0xf2, 0x12, 0xd1, 0xe5, 0xff, 0x6b, 0xec, 0xaa, 0xde,
0x55, 0xd3, 0xd1, 0xe8, 0x15, 0xfa, 0xd2, 0xcf, 0x5b, 0x62, 0x9f, 0x09, 0xad, 0xff, 0xa5, 0x2f,
0xfd, 0xbc, 0x35, 0x71, 0x1a, 0x64, 0x5c, 0x75, 0x49, 0x4c, 0x4b, 0x6c, 0x4d, 0x6e, 0x41, 0x22,
0x9f, 0xc0, 0x1d, 0x36, 0x89, 0x13, 0x4e, 0xe7, 0x62, 0x9e, 0x76, 0x55, 0x1b, 0x85, 0xd7, 0x35,
0xb7, 0x3c, 0xb0, 0x8f, 0x9e, 0x7b, 0x02, 0xc3, 0xca, 0x33, 0xae, 0x75, 0xf3, 0x9f, 0x2d, 0x18,
0x3d, 0x97, 0xc9, 0x8c, 0x05, 0x2e, 0x55, 0xc6, 0x57, 0x9e, 0xfe, 0x10, 0x06, 0x0a, 0xdf, 0x17,
0x9f, 0xdf, 0x4f, 0xa2, 0x70, 0xde, 0x3f, 0xef, 0x82, 0x82, 0x78, 0xcf, 0xf0, 0x42, 0x27, 0x89,
0x42, 0xcc, 0xcd, 0x87, 0xa0, 0x70, 0xd8, 0x38, 0xaf, 0x27, 0x89, 0x7e, 0x4c, 0xcf, 0x2b, 0xe7,
0x95, 0x10, 0x9e, 0xd7, 0xe0, 0xdd, 0x89, 0xe9, 0xb9, 0x3a, 0xef, 0xdc, 0x83, 0xbb, 0x4b, 0x6c,
0xcb, 0xc3, 0xf5, 0x6f, 0x0b, 0x86, 0xcf, 0x85, 0x60, 0x93, 0xf8, 0xd7, 0x08, 0x44, 0x85, 0xd1,
0xeb, 0xd0, 0x0a, 0x92, 0x2c, 0x96, 0x68, 0x6c, 0xcb, 0xd5, 0x9b, 0x85, 0xda, 0x6c, 0xd4, 0x6a,
0x73, 0xa1, 0xba, 0x9b, 0xf5, 0xea, 0x36, 0xaa, 0x77, 0xa5, 0x52, 0xbd, 0x0f, 0xa0, 0xa7, 0x82,
0xec, 0x05, 0x34, 0x96, 0x94, 0xe7, 0xc8, 0x0f, 0x8a, 0xb4, 0x87, 0x14, 0x25, 0x60, 0x76, 0x28,
0x0d, 0xfe, 0x90, 0xce, 0xdb, 0xd3, 0x7f, 0x2d, 0x58, 0xaf, 0x3e, 0x25, 0x8f, 0xd9, 0x95, 0x9d,
0x4a, 0x81, 0x1b, 0x8f, 0xf2, 0x77, 0xa8, 0xa5, 0x82, 0x89, 0x34, 0x3b, 0x8e, 0x58, 0xe0, 0x29,
0x86, 0xb6, 0xdf, 0xd6, 0x94, 0xf7, 0x3c, 0x9a, 0x7b, 0x65, 0xc5, 0xf4, 0x0a, 0x81, 0x15, 0x3f,
0x93, 0xd3, 0xa2, 0x5b, 0xa9, 0xf5, 0x82, 0xa7, 0xda, 0x37, 0x79, 0xaa, 0x53, 0xf7, 0x54, 0x99,
0x69, 0x5d, 0x33, 0xd3, 0x3e, 0x81, 0xa1, 0x1e, 0x77, 0xab, 0xe1, 0xda, 0x02, 0x28, 0x3b, 0x8b,
0x18, 0x59, 0x1a, 0xde, 0x8a, 0xd6, 0x22, 0x9c, 0x5f, 0x80, 0xfd, 0x3a, 0xd1, 0x7a, 0x05, 0x79,
0x06, 0x76, 0x54, 0x6c, 0x50, 0xb4, 0xb7, 0x4b, 0xe6, 0x35, 0x5e, 0xc8, 0xb9, 0x73, 0x21, 0xe7,
0x73, 0xe8, 0x16, 0xe4, 0xc2, 0x67, 0xd6, 0x55, 0x3e, 0x6b, 0x2c, 0xf8, 0xcc, 0xf9, 0xa7, 0x05,
0xeb, 0x55, 0x93, 0xf3, 0xb0, 0xbc, 0x87, 0x41, 0x79, 0x85, 0x37, 0xf3, 0xd3, 0xdc, 0x96, 0x67,
0xa6, 0x2d, 0xf5, 0x63, 0xa5, 0x81, 0xe2, 0x8d, 0x9f, 0xea, 0x5c, 0xee, 0x47, 0x06, 0x69, 0xfc,
0x0e, 0xd6, 0x6a, 0x22, 0x4b, 0x66, 0xbd, 0x1f, 0x99, 0xb3, 0x5e, 0x65, 0x5e, 0x2d, 0x4f, 0x9b,
0x03, 0xe0, 0x67, 0xf0, 0xa1, 0x86, 0x83, 0xbd, 0x32, 0x86, 0x85, 0xef, 0xab, 0xa1, 0xb6, 0x16,
0x43, 0xed, 0x8c, 0x61, 0x54, 0x3f, 0x9a, 0x97, 0xdf, 0x04, 0xd6, 0x8e, 0xa4, 0x2f, 0x99, 0x90,
0x2c, 0x28, 0x3f, 0x3a, 0x16, 0x72, 0xc3, 0xba, 0xa9, 0x47, 0xd6, 0xeb, 0x70, 0x15, 0x9a, 0x52,
0x16, 0xf9, 0xab, 0x96, 0x2a, 0x0a, 0xc4, 0xbc, 0x29, 0x8f, 0xc1, 0xf7, 0x70, 0x95, 0xca, 0x07,
0x99, 0x48, 0x3f, 0xd2, 0x33, 0xc8, 0x0a, 0xce, 0x20, 0x36, 0x52, 0x70, 0x08, 0xd1, 0x6d, 0x3a,
0xd4, 0xdc, 0x96, 0x9e, 0x50, 0x14, 0x01, 0x99, 0x5b, 0x00, 0x58, 0xaa, 0xba, 0xca, 0xda, 0xfa,
0xac, 0xa2, 0xec, 0x29, 0x82, 0x73, 0x1f, 0x36, 0xbf, 0xa0, 0x52, 0x4d, 0x53, 0x7c, 0x2f, 0x89,
0x4f, 0xd8, 0x24, 0xe3, 0xbe, 0x11, 0x0a, 0xe7, 0x3f, 0x16, 0x6c, 0x5d, 0x21, 0x90, 0x3f, 0x78,
0x04, 0x9d, 0x99, 0x2f, 0x24, 0xe5, 0x45, 0x95, 0x14, 0xdb, 0x45, 0x57, 0x34, 0x6e, 0x72, 0x45,
0xb3, 0xe6, 0x8a, 0x0d, 0x68, 0xcf, 0xfc, 0x0b, 0x6f, 0x76, 0x9c, 0x8f, 0x4b, 0xad, 0x99, 0x7f,
0xf1, 0xe6, 0x18, 0x91, 0x8d, 0x71, 0xef, 0x38, 0x0b, 0x4e, 0xa9, 0x14, 0x25, 0xb2, 0x31, 0xfe,
0x42, 0x53, 0x70, 0x7e, 0xc2, 0x61, 0x12, 0x61, 0xa0, 0xeb, 0xe6, 0x3b, 0x27, 0x83, 0x3b, 0xea,
0x93, 0x8e, 0xc6, 0x07, 0x09, 0xc7, 0xcf, 0x86, 0x32, 0x43, 0x1e, 0x40, 0x2f, 0x88, 0x98, 0xc2,
0x42, 0xe3, 0x5b, 0x0d, 0x34, 0x09, 0x7b, 0x06, 0x82, 0xa5, 0x9c, 0x7a, 0x95, 0xcf, 0x53, 0x50,
0xa4, 0xb7, 0xfa, 0x13, 0xf5, 0x2e, 0x74, 0x05, 0x8b, 0x03, 0xea, 0xc5, 0xfa, 0x9b, 0xa0, 0xe9,
0x76, 0x70, 0x7f, 0x28, 0x9c, 0x3f, 0x59, 0xb0, 0x81, 0x1f, 0x3b, 0xb5, 0x2f, 0x95, 0xeb, 0x9b,
0xf8, 0xaf, 0x80, 0xd0, 0x33, 0xb4, 0xc9, 0x38, 0x93, 0x97, 0xd7, 0x3d, 0x63, 0x88, 0x58, 0x54,
0xeb, 0xae, 0xd1, 0x45, 0x92, 0xe3, 0x2b, 0xc4, 0x99, 0xe8, 0xda, 0x1d, 0x42, 0x4b, 0x0a, 0x0f,
0xb1, 0x4a, 0xd9, 0xb9, 0x22, 0xc5, 0xa1, 0x20, 0x4f, 0x81, 0xa4, 0x3e, 0x97, 0x4c, 0x49, 0xab,
0x91, 0xd9, 0x9b, 0xfa, 0x62, 0x8a, 0x97, 0xb5, 0xdc, 0xd5, 0x92, 0xf3, 0x25, 0xbd, 0xfc, 0xa5,
0x2f, 0xa6, 0x0a, 0xa1, 0x71, 0x82, 0x68, 0xe2, 0xe0, 0x86, 0xeb, 0xdd, 0xbf, 0x76, 0xa1, 0x7f,
0x44, 0xfd, 0x73, 0x4a, 0x43, 0xcc, 0x17, 0x32, 0x29, 0x70, 0xaa, 0xfa, 0x27, 0x81, 0x3c, 0x5a,
0x04, 0xa4, 0xa5, 0xbf, 0x2e, 0xc6, 0x1f, 0xdf, 0x24, 0x96, 0x97, 0xfc, 0x2d, 0x72, 0x08, 0x3d,
0xe3, 0x53, 0x9d, 0x6c, 0x1a, 0x07, 0x6b, 0x7f, 0x20, 0xc6, 0x5b, 0x57, 0x70, 0x0b, 0x6d, 0xcf,
0x2c, 0xf2, 0x1a, 0x7a, 0xc6, 0x44, 0x68, 0xea, 0xab, 0x8f, 0xa6, 0xa6, 0xbe, 0x25, 0x63, 0xa4,
0x73, 0x4b, 0x69, 0x33, 0xe6, 0x3a, 0x53, 0x5b, 0x7d, 0x92, 0x34, 0xb5, 0x2d, 0x1b, 0x06, 0x51,
0x9b, 0x31, 0x46, 0x99, 0xda, 0xea, 0x43, 0xa2, 0xa9, 0x6d, 0xc9, 0xec, 0xe5, 0xdc, 0x22, 0xbf,
0x83, 0xb5, 0xda, 0x28, 0x43, 0x9c, 0xf9, 0xa9, 0xab, 0x66, 0xb0, 0xf1, 0xc3, 0x6b, 0x65, 0x4a,
0xfd, 0x5f, 0x41, 0xdf, 0x9c, 0x20, 0x88, 0x61, 0xd0, 0x92, 0x21, 0x69, 0x7c, 0xff, 0x2a, 0xb6,
0xa9, 0xd0, 0x6c, 0x62, 0xa6, 0xc2, 0x25, 0x6d, 0xdc, 0x54, 0xb8, 0xac, 0xf7, 0x39, 0xb7, 0xc8,
0x6f, 0x61, 0x75, 0xb1, 0x99, 0x90, 0x8f, 0x16, 0xdd, 0x56, 0xeb, 0x51, 0x63, 0xe7, 0x3a, 0x91,
0x52, 0xf9, 0x2b, 0x80, 0x79, 0x8f, 0x20, 0x46, 0xcd, 0xd6, 0x7a, 0xd4, 0x78, 0x73, 0x39, 0xb3,
0x54, 0xf5, 0x7b, 0xd8, 0x58, 0x0a, 0xc4, 0xc4, 0x28, 0x93, 0xeb, 0xa0, 0x7c, 0xfc, 0xc3, 0x1b,
0xe5, 0xca, 0xbb, 0xbe, 0x86, 0x0f, 0x16, 0x70, 0x92, 0x6c, 0x57, 0xab, 0xa6, 0x0e, 0xa1, 0xe3,
0x07, 0xe6, 0xff, 0xa6, 0x25, 0x60, 0xa7, 0x2a, 0xeb, 0xc5, 0x7d, 0x58, 0x15, 0x1a, 0x22, 0x4e,
0xc4, 0x8e, 0x86, 0xd7, 0x17, 0x80, 0xb6, 0xbc, 0xe5, 0x89, 0x4c, 0x8e, 0xdb, 0xf8, 0x7b, 0xf3,
0x27, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x0d, 0xae, 0xfb, 0x80, 0xed, 0x14, 0x00, 0x00,
0x11, 0x37, 0xef, 0x3f, 0xe7, 0xee, 0x1c, 0x69, 0x4f, 0x4e, 0x4e, 0x67, 0xc9, 0x51, 0xe8, 0x3a,
0x75, 0x61, 0x43, 0x35, 0xd4, 0x14, 0x48, 0x9a, 0xf6, 0xc1, 0x96, 0xe5, 0xd4, 0x8d, 0xad, 0x18,
0x94, 0x5d, 0xb4, 0x28, 0x50, 0x96, 0x47, 0xae, 0xee, 0xb6, 0xe2, 0x91, 0xec, 0xee, 0x52, 0x7f,
0xf2, 0xd4, 0x97, 0x7e, 0x89, 0x02, 0xfd, 0x00, 0x7d, 0xef, 0x63, 0xd1, 0x97, 0xa2, 0x40, 0x81,
0x7e, 0x8b, 0x7e, 0x92, 0x62, 0x67, 0x49, 0xde, 0xf2, 0xfe, 0x48, 0x09, 0x8a, 0xbc, 0xed, 0xce,
0xcc, 0xce, 0xce, 0xce, 0x9f, 0xdf, 0x0c, 0x09, 0xdd, 0x53, 0x16, 0x51, 0xbe, 0x9f, 0xf2, 0x44,
0x26, 0xa4, 0x83, 0x1b, 0x2f, 0x1d, 0x3b, 0x5f, 0xc1, 0xdd, 0x57, 0x49, 0x72, 0x96, 0xa5, 0xcf,
0x19, 0xa7, 0x81, 0x4c, 0xf8, 0xd5, 0x51, 0x2c, 0xf9, 0x95, 0x4b, 0xff, 0x90, 0x51, 0x21, 0xc9,
0x0e, 0xd8, 0x61, 0xc1, 0x18, 0x5a, 0x7b, 0xd6, 0x43, 0xdb, 0x9d, 0x13, 0x08, 0x81, 0x46, 0xec,
0xcf, 0xe8, 0xb0, 0x86, 0x0c, 0x5c, 0x3b, 0x47, 0xb0, 0xb3, 0x5a, 0xa1, 0x48, 0x93, 0x58, 0x50,
0xf2, 0x00, 0x9a, 0x54, 0x11, 0x50, 0x5b, 0xf7, 0xe0, 0xbd, 0xfd, 0xc2, 0x94, 0x7d, 0x2d, 0xa7,
0xb9, 0xce, 0x3f, 0x2c, 0x20, 0xaf, 0x98, 0x90, 0x8a, 0xc8, 0xa8, 0xf8, 0x66, 0xf6, 0xbc, 0x0f,
0xad, 0x94, 0xd3, 0x53, 0x76, 0x99, 0x5b, 0x94, 0xef, 0xc8, 0x63, 0xd8, 0x14, 0xd2, 0xe7, 0xf2,
0x05, 0x4f, 0x66, 0x2f, 0x58, 0x44, 0x8f, 0x95, 0xd1, 0x75, 0x14, 0x59, 0x66, 0x90, 0x7d, 0x20,
0x2c, 0x0e, 0xa2, 0x4c, 0xb0, 0x73, 0x7a, 0x52, 0x70, 0x87, 0x8d, 0x3d, 0xeb, 0x61, 0xc7, 0x5d,
0xc1, 0x21, 0x5b, 0xd0, 0x8c, 0xd8, 0x8c, 0xc9, 0x61, 0x73, 0xcf, 0x7a, 0xd8, 0x77, 0xf5, 0xc6,
0xf9, 0x29, 0x0c, 0x2a, 0xf6, 0x7f, 0xbb, 0xe7, 0xff, 0xa5, 0x06, 0x4d, 0x24, 0x94, 0x3e, 0xb6,
0xe6, 0x3e, 0x26, 0x1f, 0x41, 0x8f, 0x09, 0x6f, 0xee, 0x88, 0x1a, 0xda, 0xd6, 0x65, 0xa2, 0xf4,
0x39, 0x79, 0x04, 0xad, 0x60, 0x9a, 0xc5, 0x67, 0x62, 0x58, 0xdf, 0xab, 0x3f, 0xec, 0x1e, 0x0c,
0xe6, 0x17, 0xa9, 0x87, 0x1e, 0x2a, 0x9e, 0x9b, 0x8b, 0x90, 0x4f, 0x01, 0x7c, 0x29, 0x39, 0x1b,
0x67, 0x92, 0x0a, 0x7c, 0x69, 0xf7, 0x60, 0x68, 0x1c, 0xc8, 0x04, 0x7d, 0x5a, 0xf2, 0x5d, 0x43,
0x96, 0x7c, 0x06, 0x1d, 0x7a, 0x29, 0x69, 0x1c, 0xd2, 0x70, 0xd8, 0xc4, 0x8b, 0x76, 0x17, 0x5e,
0xb4, 0x7f, 0x94, 0xf3, 0xf5, 0xfb, 0x4a, 0xf1, 0xd1, 0xe7, 0xd0, 0xaf, 0xb0, 0xc8, 0x06, 0xd4,
0xcf, 0x68, 0x11, 0x55, 0xb5, 0x54, 0x9e, 0x3d, 0xf7, 0xa3, 0x4c, 0x27, 0x58, 0xcf, 0xd5, 0x9b,
0x9f, 0xd4, 0x3e, 0xb5, 0x9c, 0xe7, 0x60, 0xbf, 0xc8, 0xa2, 0xa8, 0x3c, 0x18, 0x32, 0x5e, 0x1c,
0x0c, 0x19, 0x9f, 0x7b, 0xb9, 0x76, 0xad, 0x97, 0xff, 0x6e, 0xc1, 0xe6, 0xd1, 0x39, 0x8d, 0xe5,
0x71, 0x22, 0xd9, 0x29, 0x0b, 0x7c, 0xc9, 0x92, 0x98, 0x3c, 0x06, 0x3b, 0x89, 0x42, 0xef, 0xda,
0x30, 0x75, 0x92, 0x28, 0xb7, 0xfa, 0x31, 0xd8, 0x31, 0xbd, 0xf0, 0xae, 0xbd, 0xae, 0x13, 0xd3,
0x0b, 0x2d, 0x7d, 0x1f, 0xfa, 0x21, 0x8d, 0xa8, 0xa4, 0x5e, 0x19, 0x1d, 0x15, 0xba, 0x9e, 0x26,
0x1e, 0xea, 0x70, 0x7c, 0x0c, 0xef, 0x29, 0x95, 0xa9, 0xcf, 0x69, 0x2c, 0xbd, 0xd4, 0x97, 0x53,
0x8c, 0x89, 0xed, 0xf6, 0x63, 0x7a, 0xf1, 0x06, 0xa9, 0x6f, 0x7c, 0x39, 0x75, 0xfe, 0x56, 0x03,
0xbb, 0x0c, 0x26, 0xf9, 0x00, 0xda, 0xea, 0x5a, 0x8f, 0x85, 0xb9, 0x27, 0x5a, 0x6a, 0xfb, 0x32,
0x54, 0x55, 0x91, 0x9c, 0x9e, 0x0a, 0x2a, 0xd1, 0xbc, 0xba, 0x9b, 0xef, 0x54, 0x66, 0x09, 0xf6,
0xb5, 0x2e, 0x84, 0x86, 0x8b, 0x6b, 0xe5, 0xf1, 0x99, 0x64, 0x33, 0x8a, 0x17, 0xd6, 0x5d, 0xbd,
0x21, 0x03, 0x68, 0x52, 0x4f, 0xfa, 0x13, 0xcc, 0x70, 0xdb, 0x6d, 0xd0, 0xb7, 0xfe, 0x84, 0x7c,
0x0f, 0x6e, 0x8b, 0x24, 0xe3, 0x01, 0xf5, 0x8a, 0x6b, 0x5b, 0xc8, 0xed, 0x69, 0xea, 0x0b, 0x7d,
0xb9, 0x03, 0xf5, 0x53, 0x16, 0x0e, 0xdb, 0xe8, 0x98, 0x8d, 0x6a, 0x12, 0xbe, 0x0c, 0x5d, 0xc5,
0x24, 0x3f, 0x04, 0x28, 0x35, 0x85, 0xc3, 0xce, 0x1a, 0x51, 0xbb, 0xd0, 0x1b, 0x92, 0x5d, 0x80,
0x80, 0xa5, 0x53, 0xca, 0x3d, 0x95, 0x30, 0x36, 0x26, 0x87, 0xad, 0x29, 0x5f, 0xd2, 0x2b, 0xc5,
0x66, 0xc2, 0x9b, 0x7c, 0xcd, 0xd2, 0x94, 0x86, 0x43, 0x40, 0x0f, 0xdb, 0x4c, 0x7c, 0xa1, 0x09,
0xce, 0xaf, 0xa0, 0x95, 0x1b, 0x77, 0x17, 0xec, 0xf3, 0x24, 0xca, 0x66, 0xa5, 0xd3, 0xfa, 0x6e,
0x47, 0x13, 0x5e, 0x86, 0x64, 0x1b, 0x10, 0x25, 0xf1, 0x8a, 0x1a, 0xba, 0x08, 0xfd, 0xab, 0x2e,
0x78, 0x1f, 0x5a, 0x41, 0x92, 0x9c, 0x31, 0xed, 0xbb, 0xb6, 0x9b, 0xef, 0x9c, 0x3f, 0xd6, 0xe1,
0x76, 0xb5, 0x58, 0xd4, 0x15, 0xa8, 0x05, 0x3d, 0x6d, 0xa1, 0x1a, 0x54, 0x7b, 0x52, 0xf1, 0x76,
0xcd, 0xf4, 0x76, 0x71, 0x64, 0x96, 0x84, 0xfa, 0x82, 0xbe, 0x3e, 0xf2, 0x3a, 0x09, 0xa9, 0xca,
0xf5, 0x8c, 0x85, 0x18, 0x9e, 0xbe, 0xab, 0x96, 0x8a, 0x32, 0x61, 0x61, 0x0e, 0x3e, 0x6a, 0x89,
0xe6, 0x71, 0xd4, 0xdb, 0xd2, 0x01, 0xd7, 0x3b, 0x15, 0xf0, 0x99, 0xa2, 0xb6, 0x75, 0x14, 0xd5,
0x9a, 0xec, 0x41, 0x97, 0xd3, 0x34, 0xca, 0x73, 0x1f, 0x9d, 0x6f, 0xbb, 0x26, 0x89, 0xdc, 0x03,
0x08, 0x92, 0x28, 0xa2, 0x01, 0x0a, 0xd8, 0x28, 0x60, 0x50, 0x54, 0xde, 0x49, 0x19, 0x79, 0x82,
0x06, 0xe8, 0xea, 0xa6, 0xdb, 0x92, 0x32, 0x3a, 0xa1, 0x81, 0x7a, 0x47, 0x26, 0x28, 0xf7, 0x10,
0xbe, 0xba, 0x78, 0xae, 0xa3, 0x08, 0x08, 0xb2, 0xbb, 0x00, 0x13, 0x9e, 0x64, 0xa9, 0xe6, 0xf6,
0xf6, 0xea, 0x0a, 0xc9, 0x91, 0x82, 0xec, 0x07, 0x70, 0x5b, 0x5c, 0xcd, 0x22, 0x16, 0x9f, 0x79,
0xd2, 0xe7, 0x13, 0x2a, 0x87, 0x7d, 0x5d, 0x01, 0x39, 0xf5, 0x2d, 0x12, 0xd5, 0xdb, 0x67, 0xe1,
0x8f, 0x87, 0xb7, 0x31, 0x03, 0xd4, 0xd2, 0x49, 0x81, 0x1c, 0x72, 0xea, 0x4b, 0xfa, 0x2d, 0xda,
0xd8, 0x37, 0x43, 0x0b, 0x72, 0x07, 0x5a, 0x89, 0x47, 0x2f, 0x83, 0x28, 0x2f, 0xda, 0x66, 0x72,
0x74, 0x19, 0x44, 0xce, 0x23, 0x18, 0x54, 0x6e, 0xcc, 0x81, 0x7e, 0x0b, 0x9a, 0x94, 0xf3, 0xa4,
0x80, 0x25, 0xbd, 0x71, 0x7e, 0x0d, 0xe4, 0x5d, 0x1a, 0x7e, 0x17, 0xe6, 0x39, 0x77, 0x60, 0x50,
0x51, 0xad, 0xed, 0x70, 0xfe, 0x65, 0x01, 0x79, 0x8e, 0xe8, 0xf2, 0xff, 0x35, 0x76, 0x55, 0xef,
0xaa, 0xe9, 0x68, 0xf4, 0x0a, 0x7d, 0xe9, 0xe7, 0x2d, 0xb1, 0xc7, 0x84, 0xd6, 0xff, 0xdc, 0x97,
0x7e, 0xde, 0x9a, 0x38, 0x0d, 0x32, 0xae, 0xba, 0x24, 0xa6, 0x25, 0xb6, 0x26, 0xb7, 0x20, 0x91,
0x4f, 0xe0, 0x7d, 0x36, 0x89, 0x13, 0x4e, 0xe7, 0x62, 0x9e, 0x76, 0x55, 0x0b, 0x85, 0xb7, 0x34,
0xb7, 0x3c, 0x70, 0x84, 0x9e, 0x7b, 0x04, 0x83, 0xca, 0x33, 0xae, 0x75, 0xf3, 0x9f, 0x2d, 0x18,
0x3e, 0x95, 0xc9, 0x8c, 0x05, 0x2e, 0x55, 0xc6, 0x57, 0x9e, 0x7e, 0x1f, 0xfa, 0x0a, 0xdf, 0x17,
0x9f, 0xdf, 0x4b, 0xa2, 0x70, 0xde, 0x3f, 0xb7, 0x41, 0x41, 0xbc, 0x67, 0x78, 0xa1, 0x9d, 0x44,
0x21, 0xe6, 0xe6, 0x7d, 0x50, 0x38, 0x6c, 0x9c, 0xd7, 0x93, 0x44, 0x2f, 0xa6, 0x17, 0x95, 0xf3,
0x4a, 0x08, 0xcf, 0x6b, 0xf0, 0x6e, 0xc7, 0xf4, 0x42, 0x9d, 0x77, 0xee, 0xc2, 0xf6, 0x0a, 0xdb,
0xf2, 0x70, 0xfd, 0xdb, 0x82, 0xc1, 0x53, 0x21, 0xd8, 0x24, 0xfe, 0x25, 0x02, 0x51, 0x61, 0xf4,
0x16, 0x34, 0x83, 0x24, 0x8b, 0x25, 0x1a, 0xdb, 0x74, 0xf5, 0x66, 0xa1, 0x36, 0x6b, 0x4b, 0xb5,
0xb9, 0x50, 0xdd, 0xf5, 0xe5, 0xea, 0x36, 0xaa, 0xb7, 0x51, 0xa9, 0xde, 0x0f, 0xa1, 0xab, 0x82,
0xec, 0x05, 0x34, 0x96, 0x94, 0xe7, 0xc8, 0x0f, 0x8a, 0x74, 0x88, 0x14, 0x25, 0x60, 0x76, 0x28,
0x0d, 0xfe, 0x90, 0xce, 0xdb, 0xd3, 0x7f, 0x2d, 0xd8, 0xaa, 0x3e, 0x25, 0x8f, 0xd9, 0xda, 0x4e,
0xa5, 0xc0, 0x8d, 0x47, 0xf9, 0x3b, 0xd4, 0x52, 0xc1, 0x44, 0x9a, 0x8d, 0x23, 0x16, 0x78, 0x8a,
0xa1, 0xed, 0xb7, 0x35, 0xe5, 0x1d, 0x8f, 0xe6, 0x5e, 0x69, 0x98, 0x5e, 0x21, 0xd0, 0xf0, 0x33,
0x39, 0x2d, 0xba, 0x95, 0x5a, 0x2f, 0x78, 0xaa, 0x75, 0x93, 0xa7, 0xda, 0xcb, 0x9e, 0x2a, 0x33,
0xad, 0x63, 0x66, 0xda, 0x27, 0x30, 0xd0, 0xe3, 0x6e, 0x35, 0x5c, 0xbb, 0x00, 0x65, 0x67, 0x11,
0x43, 0x4b, 0xc3, 0x5b, 0xd1, 0x5a, 0x84, 0xf3, 0x33, 0xb0, 0x5f, 0x25, 0x5a, 0xaf, 0x20, 0x4f,
0xc0, 0x8e, 0x8a, 0x0d, 0x8a, 0x76, 0x0f, 0xc8, 0xbc, 0xc6, 0x0b, 0x39, 0x77, 0x2e, 0xe4, 0x7c,
0x0e, 0x9d, 0x82, 0x5c, 0xf8, 0xcc, 0x5a, 0xe7, 0xb3, 0xda, 0x82, 0xcf, 0x9c, 0x7f, 0x5a, 0xb0,
0x55, 0x35, 0x39, 0x0f, 0xcb, 0x3b, 0xe8, 0x97, 0x57, 0x78, 0x33, 0x3f, 0xcd, 0x6d, 0x79, 0x62,
0xda, 0xb2, 0x7c, 0xac, 0x34, 0x50, 0xbc, 0xf6, 0x53, 0x9d, 0xcb, 0xbd, 0xc8, 0x20, 0x8d, 0xde,
0xc2, 0xe6, 0x92, 0xc8, 0x8a, 0x59, 0xef, 0x07, 0xe6, 0xac, 0x57, 0x99, 0x57, 0xcb, 0xd3, 0xe6,
0x00, 0xf8, 0x19, 0x7c, 0xa0, 0xe1, 0xe0, 0xb0, 0x8c, 0x61, 0xe1, 0xfb, 0x6a, 0xa8, 0xad, 0xc5,
0x50, 0x3b, 0x23, 0x18, 0x2e, 0x1f, 0xcd, 0xcb, 0x6f, 0x02, 0x9b, 0x27, 0xd2, 0x97, 0x4c, 0x48,
0x16, 0x94, 0x1f, 0x1d, 0x0b, 0xb9, 0x61, 0xdd, 0xd4, 0x23, 0x97, 0xeb, 0x70, 0x03, 0xea, 0x52,
0x16, 0xf9, 0xab, 0x96, 0x2a, 0x0a, 0xc4, 0xbc, 0x29, 0x8f, 0xc1, 0x77, 0x70, 0x95, 0xca, 0x07,
0x99, 0x48, 0x3f, 0xd2, 0x33, 0x48, 0x03, 0x67, 0x10, 0x1b, 0x29, 0x38, 0x84, 0xe8, 0x36, 0x1d,
0x6a, 0x6e, 0x53, 0x4f, 0x28, 0x8a, 0x80, 0xcc, 0x5d, 0x00, 0x2c, 0x55, 0x5d, 0x65, 0x2d, 0x7d,
0x56, 0x51, 0x0e, 0x15, 0xc1, 0xb9, 0x07, 0x3b, 0x5f, 0x50, 0xa9, 0xa6, 0x29, 0x7e, 0x98, 0xc4,
0xa7, 0x6c, 0x92, 0x71, 0xdf, 0x08, 0x85, 0xf3, 0x1f, 0x0b, 0x76, 0xd7, 0x08, 0xe4, 0x0f, 0x1e,
0x42, 0x7b, 0xe6, 0x0b, 0x49, 0x79, 0x51, 0x25, 0xc5, 0x76, 0xd1, 0x15, 0xb5, 0x9b, 0x5c, 0x51,
0x5f, 0x72, 0xc5, 0x1d, 0x68, 0xcd, 0xfc, 0x4b, 0x6f, 0x36, 0xce, 0xc7, 0xa5, 0xe6, 0xcc, 0xbf,
0x7c, 0x3d, 0x46, 0x64, 0x63, 0xdc, 0x1b, 0x67, 0xc1, 0x19, 0x95, 0xa2, 0x44, 0x36, 0xc6, 0x9f,
0x69, 0x0a, 0xce, 0x4f, 0x38, 0x4c, 0x22, 0x0c, 0x74, 0xdc, 0x7c, 0xe7, 0x5c, 0xc0, 0xf0, 0x24,
0x1b, 0x8b, 0x80, 0xb3, 0x31, 0x7d, 0x4d, 0xa5, 0xaf, 0xc0, 0xb0, 0xc8, 0x91, 0x0f, 0xa1, 0x1b,
0x44, 0x4c, 0xa1, 0xa1, 0xf1, 0xb5, 0x06, 0x9a, 0x84, 0x5d, 0x03, 0xe1, 0x52, 0x4e, 0xbd, 0xca,
0x07, 0x2a, 0x28, 0xd2, 0x1b, 0xfd, 0x91, 0xba, 0x0d, 0x1d, 0xc1, 0xe2, 0x80, 0x7a, 0xb1, 0xfe,
0x2a, 0xa8, 0xbb, 0x6d, 0xdc, 0x1f, 0x0b, 0xe7, 0x4f, 0x16, 0x6c, 0xaf, 0xb8, 0x39, 0x77, 0xe1,
0xf5, 0xad, 0xfc, 0x17, 0x40, 0xe8, 0x39, 0xda, 0x65, 0x7c, 0xe3, 0xe4, 0x45, 0x76, 0xd7, 0x18,
0x25, 0x16, 0x3f, 0x83, 0xdc, 0x4d, 0xba, 0x48, 0x72, 0x7c, 0x85, 0x3b, 0x13, 0x5d, 0xc1, 0x03,
0x68, 0x4a, 0xe1, 0x21, 0x62, 0x29, 0x5b, 0x1b, 0x52, 0x1c, 0x0b, 0xf2, 0x18, 0x48, 0xea, 0x73,
0xc9, 0x94, 0xb4, 0x1a, 0x9c, 0xbd, 0xa9, 0x2f, 0xa6, 0x78, 0x59, 0xd3, 0xdd, 0x28, 0x39, 0x5f,
0xd2, 0xab, 0x9f, 0xfb, 0x62, 0xaa, 0x70, 0x1a, 0xe7, 0x88, 0x3a, 0x8e, 0x6f, 0xb8, 0x3e, 0xf8,
0x6b, 0x07, 0x7a, 0x27, 0xd4, 0xbf, 0xa0, 0x34, 0xc4, 0xac, 0x21, 0x93, 0x02, 0xad, 0xaa, 0xff,
0x13, 0xc8, 0x83, 0x45, 0x58, 0x5a, 0xf9, 0x03, 0x63, 0xf4, 0xf1, 0x4d, 0x62, 0x79, 0xe1, 0xdf,
0x22, 0xc7, 0xd0, 0x35, 0x3e, 0xd8, 0xc9, 0x8e, 0x71, 0x70, 0xe9, 0x3f, 0xc4, 0x68, 0x77, 0x0d,
0xb7, 0xd0, 0xf6, 0xc4, 0x22, 0xaf, 0xa0, 0x6b, 0xcc, 0x85, 0xa6, 0xbe, 0xe5, 0x01, 0xd5, 0xd4,
0xb7, 0x62, 0x98, 0x74, 0x6e, 0x29, 0x6d, 0xc6, 0x74, 0x67, 0x6a, 0x5b, 0x9e, 0x27, 0x4d, 0x6d,
0xab, 0x46, 0x42, 0xd4, 0x66, 0x0c, 0x53, 0xa6, 0xb6, 0xe5, 0x51, 0xd1, 0xd4, 0xb6, 0x62, 0x02,
0x73, 0x6e, 0x91, 0xdf, 0xc2, 0xe6, 0xd2, 0x40, 0x43, 0x9c, 0xf9, 0xa9, 0x75, 0x93, 0xd8, 0xe8,
0xfe, 0xb5, 0x32, 0xa5, 0xfe, 0xaf, 0xa0, 0x67, 0xce, 0x11, 0xc4, 0x30, 0x68, 0xc5, 0xa8, 0x34,
0xba, 0xb7, 0x8e, 0x6d, 0x2a, 0x34, 0x5b, 0x99, 0xa9, 0x70, 0x45, 0x33, 0x37, 0x15, 0xae, 0xea,
0x80, 0xce, 0x2d, 0xf2, 0x1b, 0xd8, 0x58, 0x6c, 0x29, 0xe4, 0xa3, 0x45, 0xb7, 0x2d, 0x75, 0xaa,
0x91, 0x73, 0x9d, 0x48, 0xa9, 0xfc, 0x25, 0xc0, 0xbc, 0x53, 0x10, 0xa3, 0x66, 0x97, 0x3a, 0xd5,
0x68, 0x67, 0x35, 0xb3, 0x54, 0xf5, 0x7b, 0xb8, 0xb3, 0x12, 0x8e, 0x89, 0x51, 0x26, 0xd7, 0x01,
0xfa, 0xe8, 0xfb, 0x37, 0xca, 0x95, 0x77, 0xfd, 0x0e, 0x36, 0x97, 0x30, 0xcb, 0xcc, 0x8a, 0x75,
0x50, 0x6a, 0x66, 0xc5, 0x5a, 0xd0, 0x53, 0x15, 0xf6, 0xec, 0x1e, 0x6c, 0x08, 0x0d, 0x15, 0xa7,
0x62, 0x5f, 0x43, 0xed, 0x33, 0x40, 0x9b, 0xde, 0xf0, 0x44, 0x26, 0xe3, 0x16, 0xfe, 0xec, 0xfc,
0xd1, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x37, 0x58, 0xa5, 0x1f, 0xfb, 0x14, 0x00, 0x00,
}

View file

@ -2,4 +2,4 @@ package pb
const (
AdminShellClient = "shell"
)
)

View file

@ -10,7 +10,7 @@ import (
"github.com/chrislusf/seaweedfs/weed/util"
)
func (fs *FilerServer) ListenForEvents(req *filer_pb.ListenForEventsRequest, stream filer_pb.SeaweedFiler_ListenForEventsServer) error {
func (fs *FilerServer) SubscribeMetadata(req *filer_pb.SubscribeMetadataRequest, stream filer_pb.SeaweedFiler_SubscribeMetadataServer) error {
peerAddress := findClientAddress(stream.Context(), 0)
@ -46,7 +46,7 @@ func (fs *FilerServer) ListenForEvents(req *filer_pb.ListenForEventsRequest, str
return nil
}
message := &filer_pb.FullEventNotification{
message := &filer_pb.SubscribeMetadataResponse{
Directory: dirPath,
EventNotification: eventNotification,
}

View file

@ -117,7 +117,7 @@ func (fs *FilerServer) moveSelfEntry(ctx context.Context, oldParent util.FullPat
events.newEntries = append(events.newEntries, newEntry)
if moveFolderSubEntries!=nil {
if moveFolderSubEntries != nil {
if moveChildrenErr := moveFolderSubEntries(); moveChildrenErr != nil {
return moveChildrenErr
}

View file

@ -167,10 +167,10 @@ func setEtag(w http.ResponseWriter, etag string) {
}
}
func getEtag(resp *http.Response) (etag string){
func getEtag(resp *http.Response) (etag string) {
etag = resp.Header.Get("ETag")
if strings.HasPrefix(etag, "\"") && strings.HasSuffix(etag, "\""){
return etag[1:len(etag)-1]
if strings.HasPrefix(etag, "\"") && strings.HasSuffix(etag, "\"") {
return etag[1 : len(etag)-1]
}
return
}

View file

@ -6,7 +6,7 @@ import (
)
var (
// _ backend.BackendStorageFile = &MemoryMappedFile{} // remove this to break import cycle
// _ backend.BackendStorageFile = &MemoryMappedFile{} // remove this to break import cycle
)
type MemoryMappedFile struct {

View file

@ -131,4 +131,4 @@ func (c *ChunkCache) Shutdown() {
for _, diskCache := range c.diskCaches {
diskCache.Shutdown()
}
}
}

View file

@ -21,11 +21,11 @@ func TestOnDisk(t *testing.T) {
writeCount := 5
type test_data struct {
data []byte
data []byte
fileId string
}
testData := make([]*test_data, writeCount)
for i:=0;i<writeCount;i++{
for i := 0; i < writeCount; i++ {
buff := make([]byte, 1024*1024)
rand.Read(buff)
testData[i] = &test_data{
@ -35,7 +35,7 @@ func TestOnDisk(t *testing.T) {
cache.SetChunk(testData[i].fileId, testData[i].data)
}
for i:=0;i<writeCount;i++{
for i := 0; i < writeCount; i++ {
data := cache.GetChunk(testData[i].fileId)
if bytes.Compare(data, testData[i].data) != 0 {
t.Errorf("failed to write to and read from cache: %d", i)
@ -46,7 +46,7 @@ func TestOnDisk(t *testing.T) {
cache = NewChunkCache(0, tmpDir, totalDiskSizeMb, segmentCount)
for i:=0;i<writeCount;i++{
for i := 0; i < writeCount; i++ {
data := cache.GetChunk(testData[i].fileId)
if bytes.Compare(data, testData[i].data) != 0 {
t.Errorf("failed to write to and read from cache: %d", i)

View file

@ -163,7 +163,7 @@ func (m *LogBuffer) ReadFromBuffer(lastReadTime time.Time) (ts time.Time, buffer
/*
for i, pos := range m.idx {
logEntry, ts := readTs(m.buf, pos)
event := &filer_pb.FullEventNotification{}
event := &filer_pb.SubscribeMetadataResponse{}
proto.Unmarshal(logEntry.Data, event)
entry := event.EventNotification.OldEntry
if entry == nil {