diff --git a/api/client/client.go b/api/client/client.go index 8b1f134b1e6b3..8886eb86aa85d 100644 --- a/api/client/client.go +++ b/api/client/client.go @@ -4054,8 +4054,10 @@ func (c *Client) DeleteAllIntegrations(ctx context.Context) error { } // GenerateAWSOIDCToken generates a token to be used when executing an AWS OIDC Integration action. -func (c *Client) GenerateAWSOIDCToken(ctx context.Context) (string, error) { - resp, err := c.integrationsClient().GenerateAWSOIDCToken(ctx, &integrationpb.GenerateAWSOIDCTokenRequest{}) +func (c *Client) GenerateAWSOIDCToken(ctx context.Context, integration string) (string, error) { + resp, err := c.integrationsClient().GenerateAWSOIDCToken(ctx, &integrationpb.GenerateAWSOIDCTokenRequest{ + Integration: integration, + }) if err != nil { return "", trace.Wrap(err) } diff --git a/api/gen/proto/go/teleport/integration/v1/integration_service.pb.go b/api/gen/proto/go/teleport/integration/v1/integration_service.pb.go index c72fca95b8386..94991572ac74a 100644 --- a/api/gen/proto/go/teleport/integration/v1/integration_service.pb.go +++ b/api/gen/proto/go/teleport/integration/v1/integration_service.pb.go @@ -410,6 +410,10 @@ type GenerateAWSOIDCTokenRequest struct { // // Deprecated: Marked as deprecated in teleport/integration/v1/integration_service.proto. Issuer string `protobuf:"bytes,1,opt,name=issuer,proto3" json:"issuer,omitempty"` + // Integration is the AWS OIDC Integration name. + // If not provided, it will use the Teleport's Proxy Public URL as issuer. + // Optional. + Integration string `protobuf:"bytes,2,opt,name=integration,proto3" json:"integration,omitempty"` } func (x *GenerateAWSOIDCTokenRequest) Reset() { @@ -452,6 +456,13 @@ func (x *GenerateAWSOIDCTokenRequest) GetIssuer() string { return "" } +func (x *GenerateAWSOIDCTokenRequest) GetIntegration() string { + if x != nil { + return x.Integration + } + return "" +} + // GenerateAWSOIDCTokenResponse contains a signed AWS OIDC Integration token. type GenerateAWSOIDCTokenResponse struct { state protoimpl.MessageState @@ -545,67 +556,69 @@ var file_teleport_integration_v1_integration_service_proto_rawDesc = []byte{ 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x1e, 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x39, 0x0a, 0x1b, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x41, 0x57, 0x53, 0x4f, + 0x22, 0x5b, 0x0a, 0x1b, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x41, 0x57, 0x53, 0x4f, 0x49, 0x44, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x02, 0x18, 0x01, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x22, 0x34, 0x0a, 0x1c, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x41, 0x57, 0x53, 0x4f, 0x49, 0x44, 0x43, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x32, 0xef, 0x05, 0x0a, 0x12, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x77, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, - 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, + 0x02, 0x18, 0x01, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x69, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x34, 0x0a, + 0x1c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x41, 0x57, 0x53, 0x4f, 0x49, 0x44, 0x43, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x32, 0xef, 0x05, 0x0a, 0x12, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x77, 0x0a, 0x10, 0x4c, 0x69, + 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x56, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, - 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x31, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x31, 0x12, 0x5c, 0x0a, 0x11, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x31, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x31, 0x12, 0x5c, 0x0a, 0x11, 0x43, 0x72, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x31, 0x12, 0x5c, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x31, 0x12, 0x5c, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x31, 0x12, 0x5e, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x56, 0x31, 0x12, 0x5e, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, - 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x66, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, - 0x6c, 0x6c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x35, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x66, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x41, 0x6c, 0x6c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x41, 0x6c, 0x6c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, + 0x83, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x41, 0x57, 0x53, 0x4f, + 0x49, 0x44, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x41, 0x57, 0x53, 0x4f, 0x49, + 0x44, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, - 0x6c, 0x6c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x83, 0x01, - 0x0a, 0x14, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x41, 0x57, 0x53, 0x4f, 0x49, 0x44, - 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x41, 0x57, 0x53, 0x4f, 0x49, 0x44, 0x43, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x41, - 0x57, 0x53, 0x4f, 0x49, 0x44, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x42, 0x5a, 0x5a, 0x58, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, - 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, - 0x31, 0x3b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x41, 0x57, 0x53, 0x4f, 0x49, 0x44, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x5a, 0x5a, 0x58, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, + 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2f, 0x76, 0x31, 0x3b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/api/proto/teleport/integration/v1/integration_service.proto b/api/proto/teleport/integration/v1/integration_service.proto index 1962bdb9de2ea..055d94aa40932 100644 --- a/api/proto/teleport/integration/v1/integration_service.proto +++ b/api/proto/teleport/integration/v1/integration_service.proto @@ -98,6 +98,11 @@ message GenerateAWSOIDCTokenRequest { // // Deprecated: Ignored because value is calculated server side. string issuer = 1 [deprecated = true]; + + // Integration is the AWS OIDC Integration name. + // If not provided, it will use the Teleport's Proxy Public URL as issuer. + // Optional. + string integration = 2; } // GenerateAWSOIDCTokenResponse contains a signed AWS OIDC Integration token. diff --git a/api/proto/teleport/legacy/types/types.proto b/api/proto/teleport/legacy/types/types.proto index 1199c5a770521..ed6f363a79700 100644 --- a/api/proto/teleport/legacy/types/types.proto +++ b/api/proto/teleport/legacy/types/types.proto @@ -6150,6 +6150,14 @@ message AWSOIDCIntegrationSpecV1 { // RoleARN contains the Role ARN used to set up the Integration. // This is the AWS Role that Teleport will use to issue tokens for API Calls. string RoleARN = 1 [(gogoproto.jsontag) = "role_arn,omitempty"]; + + // IssuerS3URI is the Identity Provider that was configured in AWS. + // This bucket/prefix/* files must be publicly accessible and contain the following: + // > .well-known/openid-configuration + // > .well-known/jwks + // Format: s3:/// + // Optional. The proxy's endpoint is used if it is not specified. + string IssuerS3URI = 2 [(gogoproto.jsontag) = "issuer_s3_uri,omitempty"]; } // HeadlessAuthentication holds data for an ongoing headless authentication attempt. diff --git a/api/types/integration.go b/api/types/integration.go index 92590ad7fde77..9f11686864c83 100644 --- a/api/types/integration.go +++ b/api/types/integration.go @@ -19,6 +19,7 @@ package types import ( "encoding/json" "fmt" + "net/url" "github.com/gravitational/trace" @@ -43,6 +44,9 @@ type Integration interface { SetAWSOIDCIntegrationSpec(*AWSOIDCIntegrationSpecV1) // SetAWSOIDCRoleARN sets the RoleARN of the AWS OIDC Spec. SetAWSOIDCRoleARN(string) + // SetAWSOIDCIssuerS3URI sets the IssuerS3URI of the AWS OIDC Spec. + // Eg, s3://my-bucket/my-prefix + SetAWSOIDCIssuerS3URI(string) } var _ ResourceWithLabels = (*IntegrationV1)(nil) @@ -139,6 +143,18 @@ func (s *IntegrationSpecV1_AWSOIDC) CheckAndSetDefaults() error { return trace.BadParameter("role_arn is required for %q subkind", IntegrationSubKindAWSOIDC) } + // The Issuer can be empty. + // In that case it will use the cluster's web endpoint. + if s.AWSOIDC.IssuerS3URI != "" { + issuerS3URL, err := url.Parse(s.AWSOIDC.IssuerS3URI) + if err != nil { + return trace.BadParameter("unable to parse issuer s3 uri, valid format (eg, s3://my-bucket/my-prefix)") + } + if issuerS3URL.Scheme != "s3" || issuerS3URL.Host == "" || issuerS3URL.Path == "" { + return trace.BadParameter("issuer s3 uri must be in a valid format (eg, s3://my-bucket/my-prefix)") + } + } + return nil } @@ -167,6 +183,19 @@ func (ig *IntegrationV1) SetAWSOIDCRoleARN(roleARN string) { } } +// SetAWSOIDCIssuer sets the Issuer of the AWS OIDC Spec. +func (ig *IntegrationV1) SetAWSOIDCIssuerS3URI(issuerS3URI string) { + currentSubSpec := ig.Spec.GetAWSOIDC() + if currentSubSpec == nil { + currentSubSpec = &AWSOIDCIntegrationSpecV1{} + } + + currentSubSpec.IssuerS3URI = issuerS3URI + ig.Spec.SubKindSpec = &IntegrationSpecV1_AWSOIDC{ + AWSOIDC: currentSubSpec, + } +} + // Integrations is a list of Integration resources. type Integrations []Integration diff --git a/api/types/integration_test.go b/api/types/integration_test.go index f05f13217109a..73828198f504b 100644 --- a/api/types/integration_test.go +++ b/api/types/integration_test.go @@ -31,7 +31,8 @@ func TestIntegrationJSONMarshalCycle(t *testing.T) { ig, err := NewIntegrationAWSOIDC( Metadata{Name: "some-integration"}, &AWSOIDCIntegrationSpecV1{ - RoleARN: "arn:aws:iam::123456789012:role/DevTeams", + RoleARN: "arn:aws:iam::123456789012:role/DevTeams", + IssuerS3URI: "s3://my-bucket/my-prefix", }, ) require.NoError(t, err) @@ -65,7 +66,8 @@ func TestIntegrationCheckAndSetDefaults(t *testing.T) { Name: name, }, &AWSOIDCIntegrationSpecV1{ - RoleARN: "some arn role", + RoleARN: "some arn role", + IssuerS3URI: "s3://my-issuer/my-prefix", }, ) }, @@ -83,7 +85,8 @@ func TestIntegrationCheckAndSetDefaults(t *testing.T) { Spec: IntegrationSpecV1{ SubKindSpec: &IntegrationSpecV1_AWSOIDC{ AWSOIDC: &AWSOIDCIntegrationSpecV1{ - RoleARN: "some arn role", + RoleARN: "some arn role", + IssuerS3URI: "s3://my-issuer/my-prefix", }, }, }, @@ -105,6 +108,40 @@ func TestIntegrationCheckAndSetDefaults(t *testing.T) { return trace.IsBadParameter(err) }, }, + { + name: "aws-oidc: error when issuer is not a valid url", + integration: func(name string) (*IntegrationV1, error) { + return NewIntegrationAWSOIDC( + Metadata{ + Name: name, + }, + &AWSOIDCIntegrationSpecV1{ + RoleARN: "some-role", + IssuerS3URI: "not-a-url", + }, + ) + }, + expectedErrorIs: func(err error) bool { + return trace.IsBadParameter(err) + }, + }, + { + name: "aws-oidc: issuer is not an s3 url", + integration: func(name string) (*IntegrationV1, error) { + return NewIntegrationAWSOIDC( + Metadata{ + Name: name, + }, + &AWSOIDCIntegrationSpecV1{ + RoleARN: "some-role", + IssuerS3URI: "http://localhost:8080", + }, + ) + }, + expectedErrorIs: func(err error) bool { + return trace.IsBadParameter(err) + }, + }, { name: "aws-oidc: error when no role is provided", integration: func(name string) (*IntegrationV1, error) { diff --git a/api/types/types.pb.go b/api/types/types.pb.go index ab9fc4e059c43..e5ceb2db8b6d3 100644 --- a/api/types/types.pb.go +++ b/api/types/types.pb.go @@ -16516,7 +16516,14 @@ func (*IntegrationSpecV1) XXX_OneofWrappers() []interface{} { type AWSOIDCIntegrationSpecV1 struct { // RoleARN contains the Role ARN used to set up the Integration. // This is the AWS Role that Teleport will use to issue tokens for API Calls. - RoleARN string `protobuf:"bytes,1,opt,name=RoleARN,proto3" json:"role_arn,omitempty"` + RoleARN string `protobuf:"bytes,1,opt,name=RoleARN,proto3" json:"role_arn,omitempty"` + // IssuerS3URI is the Identity Provider that was configured in AWS. + // This bucket/prefix/* files must be publicly accessible and contain the following: + // > .well-known/openid-configuration + // > .well-known/jwks + // Format: s3:/// + // Optional. The proxy's endpoint is used if it is not specified. + IssuerS3URI string `protobuf:"bytes,2,opt,name=IssuerS3URI,proto3" json:"issuer_s3_uri,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -17934,1539 +17941,1541 @@ func init() { func init() { proto.RegisterFile("teleport/legacy/types/types.proto", fileDescriptor_9198ee693835762e) } var fileDescriptor_9198ee693835762e = []byte{ - // 24506 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6d, 0x70, 0x1c, 0x49, - 0x76, 0x20, 0x36, 0xfd, 0x01, 0xa0, 0xf1, 0xf0, 0xd5, 0x48, 0x82, 0x24, 0xc8, 0x19, 0x0e, 0x38, - 0xc5, 0x19, 0x0e, 0x39, 0x1f, 0xe4, 0x12, 0xdc, 0xe1, 0xee, 0x7c, 0x6f, 0xa3, 0x01, 0x12, 0x4d, - 0x82, 0x40, 0x4f, 0x35, 0x48, 0xec, 0x68, 0x76, 0xb7, 0xb7, 0xd0, 0x9d, 0x00, 0x6a, 0xd8, 0xdd, - 0xd5, 0x5b, 0x55, 0x4d, 0x12, 0x2b, 0x5d, 0xe8, 0xe3, 0x4e, 0xb7, 0x27, 0xdf, 0x49, 0x2b, 0x9d, - 0x57, 0xa7, 0x3d, 0xfb, 0xce, 0x52, 0x28, 0xee, 0xce, 0x92, 0x2d, 0x29, 0x6c, 0xe9, 0x2e, 0x4e, - 0xb6, 0x7c, 0xf2, 0xc9, 0xa1, 0x50, 0xc8, 0x52, 0xd8, 0xa7, 0x08, 0xdb, 0xe1, 0xf0, 0x5a, 0x81, - 0xb3, 0x2c, 0xdb, 0xe1, 0x60, 0x38, 0x1c, 0xb2, 0x65, 0x5f, 0xd8, 0xeb, 0x90, 0xed, 0xc8, 0x97, - 0x1f, 0x95, 0x59, 0x55, 0xdd, 0x68, 0x0c, 0x39, 0x96, 0xb8, 0xbe, 0x3f, 0x24, 0xfa, 0xe5, 0x7b, - 0x2f, 0xb3, 0xf2, 0xf3, 0xe5, 0xcb, 0xf7, 0x01, 0x2f, 0x84, 0xb4, 0x45, 0xbb, 0x9e, 0x1f, 0x5e, - 0x6e, 0xd1, 0x5d, 0xa7, 0xb1, 0x7f, 0x39, 0xdc, 0xef, 0xd2, 0x80, 0xff, 0x7b, 0xa9, 0xeb, 0x7b, - 0xa1, 0x47, 0x46, 0xf0, 0xc7, 0xe9, 0xb9, 0x5d, 0x6f, 0xd7, 0x43, 0xc8, 0x65, 0xf6, 0x17, 0x2f, - 0x3c, 0xbd, 0xb0, 0xeb, 0x79, 0xbb, 0x2d, 0x7a, 0x19, 0x7f, 0x6d, 0xf7, 0x76, 0x2e, 0x87, 0x6e, - 0x9b, 0x06, 0xa1, 0xd3, 0xee, 0x0a, 0x84, 0x8b, 0xaa, 0x02, 0x27, 0x0c, 0x59, 0x49, 0xe8, 0x7a, - 0x9d, 0xcb, 0xf7, 0xaf, 0xe8, 0x3f, 0x05, 0xea, 0xeb, 0xe9, 0x6d, 0x79, 0xe0, 0x3b, 0xdd, 0x2e, - 0xf5, 0xa3, 0x3f, 0x38, 0xba, 0xf5, 0x8f, 0x73, 0x30, 0x7e, 0x8b, 0xd2, 0x6e, 0xa9, 0xe5, 0xde, - 0xa7, 0xe4, 0x1c, 0xe4, 0xd7, 0x9d, 0x36, 0x9d, 0xcf, 0x9c, 0xcd, 0x5c, 0x18, 0x5f, 0x9a, 0x79, - 0x74, 0xb0, 0x30, 0x11, 0x50, 0xff, 0x3e, 0xf5, 0xeb, 0x1d, 0xa7, 0x4d, 0x6d, 0x2c, 0x24, 0xaf, - 0xc2, 0x38, 0xfb, 0x3f, 0xe8, 0x3a, 0x0d, 0x3a, 0x9f, 0x45, 0xcc, 0xa9, 0x47, 0x07, 0x0b, 0xe3, - 0x1d, 0x09, 0xb4, 0xa3, 0x72, 0x72, 0x1e, 0xc6, 0xd6, 0xa8, 0x13, 0xd0, 0xca, 0xf2, 0x7c, 0xee, - 0x6c, 0xe6, 0x42, 0x6e, 0x69, 0xf2, 0xd1, 0xc1, 0x42, 0xa1, 0xc5, 0x40, 0x75, 0xb7, 0x69, 0xcb, - 0x42, 0x52, 0x81, 0xb1, 0x95, 0x87, 0x5d, 0xd7, 0xa7, 0xc1, 0x7c, 0xfe, 0x6c, 0xe6, 0xc2, 0xc4, - 0xe2, 0xe9, 0x4b, 0xbc, 0x53, 0x2e, 0xc9, 0x4e, 0xb9, 0xb4, 0x29, 0x3b, 0x65, 0xe9, 0xd8, 0xef, - 0x1e, 0x2c, 0x3c, 0xf3, 0xe8, 0x60, 0x61, 0x8c, 0x72, 0x92, 0x9f, 0xfc, 0xe7, 0x0b, 0x19, 0x5b, - 0xd2, 0x93, 0x77, 0x20, 0xbf, 0xb9, 0xdf, 0xa5, 0xf3, 0xe3, 0x67, 0x33, 0x17, 0xa6, 0x17, 0x9f, - 0xbf, 0xc4, 0x87, 0x41, 0x7d, 0x64, 0xf4, 0x17, 0xc3, 0x5a, 0x2a, 0x3c, 0x3a, 0x58, 0xc8, 0x33, - 0x14, 0x1b, 0xa9, 0xc8, 0xeb, 0x30, 0xba, 0xea, 0x05, 0x61, 0x65, 0x79, 0x1e, 0xf0, 0xd3, 0x8e, - 0x3f, 0x3a, 0x58, 0x98, 0xdd, 0xf3, 0x82, 0xb0, 0xee, 0x36, 0x5f, 0xf3, 0xda, 0x6e, 0x48, 0xdb, - 0xdd, 0x70, 0xdf, 0x16, 0x48, 0xd6, 0x43, 0x98, 0x32, 0xf8, 0x91, 0x09, 0x18, 0xbb, 0xb3, 0x7e, - 0x6b, 0x7d, 0x63, 0x6b, 0xbd, 0xf8, 0x0c, 0x29, 0x40, 0x7e, 0x7d, 0x63, 0x79, 0xa5, 0x98, 0x21, - 0x63, 0x90, 0x2b, 0x55, 0xab, 0xc5, 0x2c, 0x99, 0x84, 0xc2, 0x72, 0x69, 0xb3, 0xb4, 0x54, 0xaa, - 0xad, 0x14, 0x73, 0xe4, 0x18, 0xcc, 0x6c, 0x55, 0xd6, 0x97, 0x37, 0xb6, 0x6a, 0xf5, 0xe5, 0x95, - 0xda, 0xad, 0xcd, 0x8d, 0x6a, 0x31, 0x4f, 0xa6, 0x01, 0x6e, 0xdd, 0x59, 0x5a, 0xb1, 0xd7, 0x57, - 0x36, 0x57, 0x6a, 0xc5, 0x11, 0x32, 0x07, 0x45, 0x49, 0x52, 0xaf, 0xad, 0xd8, 0x77, 0x2b, 0xe5, - 0x95, 0xe2, 0xa8, 0xf5, 0x4f, 0x72, 0x50, 0xb8, 0x4d, 0x43, 0xa7, 0xe9, 0x84, 0x0e, 0x79, 0xce, - 0x18, 0x38, 0xfc, 0x26, 0x6d, 0xc4, 0xce, 0x25, 0x47, 0x6c, 0xe4, 0xd1, 0xc1, 0x42, 0xe6, 0x75, - 0x7d, 0xa4, 0xde, 0x86, 0x89, 0x65, 0x1a, 0x34, 0x7c, 0xb7, 0xcb, 0x66, 0x13, 0x8e, 0xd6, 0xf8, - 0xd2, 0xa9, 0x47, 0x07, 0x0b, 0xc7, 0x9b, 0x11, 0x58, 0xeb, 0x01, 0x1d, 0x9b, 0x54, 0x60, 0x74, - 0xcd, 0xd9, 0xa6, 0xad, 0x60, 0x7e, 0xe4, 0x6c, 0xee, 0xc2, 0xc4, 0xe2, 0xb3, 0xa2, 0xd7, 0x65, - 0x03, 0x2f, 0xf1, 0xd2, 0x95, 0x4e, 0xe8, 0xef, 0x2f, 0xcd, 0x3d, 0x3a, 0x58, 0x28, 0xb6, 0x10, - 0xa0, 0xf7, 0x28, 0x47, 0x21, 0xb5, 0x68, 0x26, 0x8c, 0x1e, 0x3a, 0x13, 0xce, 0xfc, 0xee, 0xc1, - 0x42, 0x86, 0x8d, 0x90, 0x98, 0x09, 0x11, 0x3f, 0x73, 0x4e, 0x58, 0x90, 0xad, 0x2c, 0xcf, 0x8f, - 0xe1, 0x0c, 0x24, 0x8f, 0x0e, 0x16, 0x26, 0xf5, 0xc1, 0x9c, 0xcf, 0xd8, 0xd9, 0xca, 0x32, 0x59, - 0x84, 0x82, 0x4d, 0xef, 0xbb, 0x01, 0xfb, 0xfa, 0x02, 0x7e, 0xfd, 0x89, 0x47, 0x07, 0x0b, 0xc4, - 0x17, 0x30, 0xad, 0xa9, 0x0a, 0xef, 0xf4, 0x9b, 0x30, 0xa1, 0x7d, 0x19, 0x29, 0x42, 0xee, 0x1e, - 0xdd, 0xe7, 0xa3, 0x60, 0xb3, 0x3f, 0xc9, 0x1c, 0x8c, 0xdc, 0x77, 0x5a, 0x3d, 0xd1, 0xed, 0x36, - 0xff, 0xf1, 0x56, 0xf6, 0xf3, 0x19, 0xeb, 0x6f, 0xe6, 0xa1, 0x60, 0x7b, 0x7c, 0xed, 0x92, 0x8b, - 0x30, 0x52, 0x0b, 0x9d, 0x50, 0x0e, 0xe0, 0xb1, 0x47, 0x07, 0x0b, 0x33, 0x6c, 0x5d, 0x53, 0xad, - 0x56, 0x8e, 0xc1, 0x50, 0xab, 0x7b, 0x4e, 0x20, 0x07, 0x12, 0x51, 0xbb, 0x0c, 0xa0, 0xa3, 0x22, - 0x06, 0x39, 0x0f, 0xf9, 0xdb, 0x5e, 0x93, 0x8a, 0xb1, 0x64, 0xdf, 0x3d, 0xdd, 0xf6, 0x9a, 0x3a, - 0x22, 0x96, 0x93, 0xd7, 0x60, 0xbc, 0xdc, 0xf3, 0x7d, 0xda, 0x61, 0xd3, 0x3e, 0x8f, 0xc8, 0xd3, - 0x8f, 0x0e, 0x16, 0xa0, 0xc1, 0x81, 0x6c, 0xa1, 0x46, 0x08, 0x6c, 0x80, 0x6a, 0xa1, 0xe3, 0x87, - 0xb4, 0x39, 0x3f, 0x32, 0xd4, 0x00, 0xb1, 0xa5, 0x3a, 0x1b, 0x70, 0x92, 0xf8, 0x00, 0x09, 0x4e, - 0x64, 0x15, 0x26, 0x6e, 0xf8, 0x4e, 0x83, 0x56, 0xa9, 0xef, 0x7a, 0x4d, 0x1c, 0xf9, 0xdc, 0xd2, - 0xf9, 0x47, 0x07, 0x0b, 0x27, 0x76, 0x19, 0xb8, 0xde, 0x45, 0x78, 0x44, 0xfd, 0xdd, 0x83, 0x85, - 0xc2, 0x72, 0xcf, 0xc7, 0xde, 0xb3, 0x75, 0x52, 0xf2, 0x55, 0x36, 0x24, 0x41, 0x88, 0x5d, 0x4b, - 0x9b, 0x38, 0xe6, 0x83, 0x9b, 0x68, 0x89, 0x26, 0x9e, 0x68, 0x39, 0x41, 0x58, 0xf7, 0x39, 0x5d, - 0xac, 0x9d, 0x3a, 0x4b, 0xb2, 0x01, 0x85, 0x5a, 0x63, 0x8f, 0x36, 0x7b, 0x2d, 0x8a, 0x13, 0x65, - 0x62, 0xf1, 0xa4, 0x98, 0xee, 0x72, 0x3c, 0x65, 0xf1, 0xd2, 0x69, 0xc1, 0x9b, 0x04, 0x02, 0xa2, - 0xcf, 0x22, 0x89, 0xf5, 0x56, 0xe1, 0xdb, 0x3f, 0xb7, 0xf0, 0xcc, 0x0f, 0xfd, 0xe1, 0xd9, 0x67, - 0xac, 0x7f, 0x9c, 0x85, 0x62, 0x9c, 0x09, 0xd9, 0x81, 0xa9, 0x3b, 0xdd, 0xa6, 0x13, 0xd2, 0x72, - 0xcb, 0xa5, 0x9d, 0x30, 0xc0, 0x49, 0x32, 0xf8, 0x9b, 0x5e, 0x14, 0xf5, 0xce, 0xf7, 0x90, 0xb0, - 0xde, 0xe0, 0x94, 0xb1, 0xaf, 0x32, 0xd9, 0x46, 0xf5, 0xd4, 0x70, 0xcf, 0x0f, 0x70, 0x86, 0x1d, - 0xad, 0x1e, 0x7e, 0x5a, 0xf4, 0xa9, 0x47, 0xb0, 0x15, 0x13, 0xa8, 0xd3, 0xdc, 0xde, 0xc7, 0x99, - 0x39, 0xfc, 0x04, 0x62, 0x24, 0x29, 0x13, 0x88, 0x81, 0xad, 0xff, 0x2e, 0x03, 0xd3, 0x36, 0x0d, - 0xbc, 0x9e, 0xdf, 0xa0, 0xab, 0xd4, 0x69, 0x52, 0x9f, 0x4d, 0xff, 0x5b, 0x6e, 0xa7, 0x29, 0xd6, - 0x14, 0x4e, 0xff, 0x7b, 0x6e, 0x47, 0xdf, 0xc5, 0xb1, 0x9c, 0x7c, 0x06, 0xc6, 0x6a, 0xbd, 0x6d, - 0x44, 0xcd, 0x46, 0xeb, 0x3e, 0xe8, 0x6d, 0xd7, 0x63, 0xe8, 0x12, 0x8d, 0x5c, 0x86, 0xb1, 0xbb, - 0xd4, 0x0f, 0xa2, 0x7d, 0x12, 0x4f, 0x89, 0xfb, 0x1c, 0xa4, 0x13, 0x08, 0x2c, 0x72, 0x23, 0xda, - 0xab, 0xc5, 0xf9, 0x36, 0x13, 0xdb, 0x21, 0xa3, 0xa9, 0xd2, 0x16, 0x10, 0x7d, 0xaa, 0x48, 0x2c, - 0xeb, 0xa7, 0xb2, 0x50, 0x5c, 0x76, 0x42, 0x67, 0xdb, 0x09, 0x44, 0x7f, 0xde, 0xbd, 0xca, 0x76, - 0x7f, 0xed, 0x43, 0x71, 0xf7, 0x67, 0x2d, 0xff, 0xc4, 0x9f, 0xf7, 0x52, 0xfc, 0xf3, 0x26, 0xd8, - 0x61, 0x2b, 0x3e, 0x2f, 0xfa, 0xa8, 0x77, 0x0f, 0xff, 0xa8, 0xa2, 0xf8, 0xa8, 0x82, 0xfc, 0xa8, - 0xe8, 0x53, 0xc8, 0xbb, 0x90, 0xaf, 0x75, 0x69, 0x43, 0x6c, 0x22, 0xf2, 0xc4, 0x30, 0x3f, 0x8e, - 0x21, 0xdc, 0xbd, 0xba, 0x34, 0x29, 0xd8, 0xe4, 0x83, 0x2e, 0x6d, 0xd8, 0x48, 0xa6, 0x2d, 0x9a, - 0x5f, 0xcf, 0xc1, 0x5c, 0x1a, 0x99, 0xfe, 0x1d, 0xa3, 0x03, 0xbe, 0xe3, 0x02, 0x14, 0xd8, 0x69, - 0xce, 0x0e, 0x4c, 0xdc, 0x2e, 0xc6, 0xb9, 0x90, 0xb2, 0x27, 0x60, 0xb6, 0x2a, 0x25, 0xe7, 0x94, - 0x70, 0x50, 0x88, 0xf8, 0x09, 0xe1, 0x40, 0x8a, 0x04, 0x6c, 0xac, 0xe5, 0x12, 0x46, 0x19, 0x22, - 0xea, 0x16, 0x09, 0x8e, 0xc6, 0xda, 0x17, 0x10, 0xe3, 0x70, 0x91, 0x87, 0xc2, 0x0a, 0x14, 0xe4, - 0x67, 0xcd, 0x4f, 0x22, 0xa3, 0xd9, 0x58, 0x27, 0xdd, 0xbd, 0xca, 0x07, 0xb3, 0x29, 0x7e, 0xeb, - 0x6c, 0x24, 0x0e, 0xb9, 0x0a, 0x85, 0xaa, 0xef, 0x3d, 0xdc, 0xaf, 0x2c, 0x07, 0xf3, 0x53, 0x67, - 0x73, 0x17, 0xc6, 0x97, 0x4e, 0x3e, 0x3a, 0x58, 0x38, 0xd6, 0x65, 0xb0, 0xba, 0xdb, 0xd4, 0xcf, - 0x60, 0x85, 0x78, 0x33, 0x5f, 0xc8, 0x14, 0xb3, 0x37, 0xf3, 0x85, 0x6c, 0x31, 0x77, 0x33, 0x5f, - 0xc8, 0x15, 0xf3, 0x37, 0xf3, 0x85, 0x7c, 0x71, 0xe4, 0x66, 0xbe, 0x30, 0x52, 0x1c, 0xbd, 0x99, - 0x2f, 0x8c, 0x17, 0xe1, 0x66, 0xbe, 0x30, 0x51, 0x9c, 0x34, 0xe4, 0x00, 0x64, 0x10, 0x7a, 0x0d, - 0xaf, 0x65, 0xe7, 0xee, 0xd8, 0x15, 0x7b, 0xb4, 0x5c, 0x2a, 0x53, 0x3f, 0xb4, 0x73, 0xa5, 0xad, - 0x9a, 0x3d, 0xb5, 0xbc, 0xdf, 0x71, 0xda, 0x6e, 0x83, 0x1f, 0x98, 0x76, 0xee, 0x46, 0xb9, 0x6a, - 0x95, 0x60, 0x3a, 0xfa, 0x96, 0x35, 0x37, 0x08, 0xc9, 0x65, 0x18, 0x97, 0x10, 0xb6, 0xd1, 0xe5, - 0x52, 0xbf, 0xda, 0x8e, 0x70, 0xac, 0xdf, 0xc9, 0x02, 0x44, 0x25, 0x4f, 0xe9, 0x5a, 0xf8, 0x9c, - 0xb1, 0x16, 0x8e, 0xc7, 0xd7, 0x42, 0xdf, 0x55, 0x40, 0xde, 0x87, 0x51, 0x26, 0x16, 0xf4, 0xa4, - 0xb0, 0x74, 0x32, 0x4e, 0x8a, 0x85, 0x77, 0xaf, 0x2e, 0x4d, 0x0b, 0xe2, 0xd1, 0x00, 0x21, 0xb6, - 0x20, 0xd3, 0x96, 0xd1, 0xbf, 0x31, 0x16, 0x0d, 0x86, 0x58, 0x40, 0x17, 0x40, 0x0d, 0xa8, 0xe8, - 0x50, 0x5c, 0x19, 0x5d, 0x39, 0xc8, 0xaa, 0x94, 0x9c, 0x02, 0x36, 0xe0, 0xa2, 0x53, 0xc7, 0x1e, - 0x1d, 0x2c, 0xe4, 0x7a, 0xbe, 0x8b, 0x93, 0x80, 0x5c, 0x06, 0x31, 0x0d, 0x44, 0x07, 0xb2, 0xd9, - 0x37, 0xdb, 0x70, 0xea, 0x0d, 0xea, 0x87, 0x86, 0x10, 0x26, 0xd0, 0x48, 0x17, 0xcc, 0xa9, 0x32, - 0x9f, 0xc7, 0x69, 0x70, 0x21, 0xb5, 0x57, 0x2e, 0x19, 0xa8, 0x5c, 0xc0, 0x3c, 0x2b, 0x4f, 0xa5, - 0x26, 0x2f, 0xab, 0x27, 0x84, 0x4d, 0xb3, 0x02, 0x72, 0x15, 0xd8, 0x0c, 0x15, 0xbd, 0x0f, 0xa2, - 0x9e, 0xd2, 0x56, 0x6d, 0xe9, 0xb8, 0xe0, 0x34, 0xe5, 0x3c, 0xd0, 0xc9, 0x19, 0x36, 0x79, 0x1b, - 0xd8, 0x14, 0x16, 0xfd, 0x4e, 0x04, 0xd1, 0x8d, 0x72, 0xb5, 0xdc, 0xf2, 0x7a, 0xcd, 0xda, 0x07, - 0x6b, 0x11, 0xf1, 0x6e, 0xa3, 0xab, 0x13, 0xdf, 0x28, 0x57, 0xc9, 0xdb, 0x30, 0x52, 0xfa, 0x7a, - 0xcf, 0xa7, 0x42, 0x3e, 0x99, 0x94, 0x75, 0x32, 0xd8, 0xd2, 0x49, 0x41, 0x38, 0xe3, 0xb0, 0x9f, - 0xba, 0x5c, 0x87, 0xe5, 0xac, 0xe6, 0xcd, 0xb5, 0x9a, 0x90, 0x3d, 0x48, 0xac, 0x5b, 0x36, 0xd7, - 0xb4, 0x66, 0x87, 0xc6, 0x57, 0x33, 0x2a, 0x72, 0x19, 0xb2, 0xa5, 0x65, 0xbc, 0x1c, 0x4d, 0x2c, - 0x8e, 0xcb, 0x6a, 0x97, 0x97, 0xe6, 0x04, 0xc9, 0xa4, 0xa3, 0x2f, 0x83, 0x6c, 0x69, 0x99, 0x2c, - 0xc1, 0xc8, 0xed, 0xfd, 0xda, 0x07, 0x6b, 0x62, 0x33, 0x3b, 0x26, 0xe7, 0x35, 0x83, 0x6d, 0xe0, - 0xb2, 0x0f, 0xa2, 0x16, 0xb7, 0xf7, 0x83, 0xaf, 0xb5, 0xf4, 0x16, 0x23, 0x1a, 0xa9, 0xc2, 0x78, - 0xa9, 0xd9, 0x76, 0x3b, 0x77, 0x02, 0xea, 0xcf, 0x4f, 0x20, 0x9f, 0xf9, 0x58, 0xbb, 0x55, 0xf9, - 0xd2, 0xfc, 0xa3, 0x83, 0x85, 0x39, 0x87, 0xfd, 0xac, 0xf7, 0x02, 0xea, 0x6b, 0xdc, 0x22, 0x26, - 0xa4, 0x0a, 0x70, 0xdb, 0xeb, 0xec, 0x7a, 0xa5, 0xb0, 0xe5, 0x04, 0xb1, 0xed, 0x31, 0x2a, 0x50, - 0xe2, 0xc3, 0xf1, 0x36, 0x83, 0xd5, 0x1d, 0x06, 0xd4, 0x18, 0x6a, 0x3c, 0xc8, 0x75, 0x18, 0xdd, - 0xf0, 0x9d, 0x46, 0x8b, 0xce, 0x4f, 0x21, 0xb7, 0x39, 0xc1, 0x8d, 0x03, 0xe5, 0x97, 0xce, 0x0b, - 0x86, 0x45, 0x0f, 0xc1, 0xfa, 0x05, 0x86, 0x23, 0x9e, 0xde, 0x02, 0x92, 0x9c, 0x93, 0x29, 0x57, - 0x83, 0x57, 0xf5, 0xab, 0x41, 0xb4, 0xe8, 0xcb, 0x5e, 0xbb, 0xed, 0x74, 0x9a, 0x48, 0x7b, 0x77, - 0x51, 0xbf, 0x31, 0x7c, 0x0d, 0x66, 0x13, 0x9d, 0x75, 0xc8, 0xcd, 0xef, 0x3d, 0x98, 0x59, 0xa6, - 0x3b, 0x4e, 0xaf, 0x15, 0xaa, 0x93, 0x84, 0x2f, 0x51, 0xbc, 0x83, 0x35, 0x79, 0x51, 0x5d, 0x1e, - 0x1f, 0x76, 0x1c, 0xd9, 0x7a, 0x17, 0xa6, 0x8c, 0xcf, 0x67, 0x57, 0x85, 0x52, 0xaf, 0xe9, 0x86, - 0x38, 0x90, 0x99, 0xe8, 0xaa, 0xe0, 0x30, 0x20, 0x0e, 0x97, 0x1d, 0x21, 0x58, 0x7f, 0x4f, 0x97, - 0x56, 0xc4, 0x4e, 0xc4, 0x6e, 0xd8, 0x62, 0x3f, 0xc8, 0x44, 0xb2, 0x53, 0x62, 0x3f, 0x50, 0xbb, - 0xc1, 0x45, 0xbe, 0x36, 0xb3, 0x89, 0xb5, 0x39, 0x21, 0x46, 0x22, 0xe7, 0x3c, 0x08, 0xf8, 0x8a, - 0x54, 0x33, 0x35, 0xf7, 0xc9, 0x67, 0xea, 0xfb, 0x30, 0x79, 0xdb, 0xe9, 0x38, 0xbb, 0xb4, 0xc9, - 0xbe, 0x80, 0xef, 0x3d, 0xe3, 0x4b, 0xcf, 0x3e, 0x3a, 0x58, 0x38, 0xd9, 0xe6, 0x70, 0xfc, 0x4a, - 0x7d, 0x12, 0x19, 0x04, 0xe4, 0x8a, 0x5c, 0xd9, 0x23, 0x29, 0x2b, 0x7b, 0x4a, 0xd4, 0x3e, 0x82, - 0x2b, 0x5b, 0xac, 0x67, 0xeb, 0x7f, 0x2b, 0xe0, 0x37, 0x92, 0xd7, 0x60, 0xd4, 0xa6, 0xbb, 0xec, - 0xa8, 0xc9, 0x44, 0x83, 0xe4, 0x23, 0x44, 0xef, 0x18, 0x8e, 0x83, 0x72, 0x06, 0x6d, 0x06, 0x7b, - 0xee, 0x4e, 0x28, 0x7a, 0x47, 0xc9, 0x19, 0x02, 0xac, 0xc9, 0x19, 0x02, 0x62, 0x5e, 0x62, 0x39, - 0x8c, 0xed, 0x7e, 0xf6, 0x72, 0x4d, 0x74, 0x9a, 0xec, 0x61, 0x7b, 0x59, 0xdb, 0x46, 0x7c, 0x43, - 0x4a, 0x60, 0xd8, 0xe4, 0x1a, 0x8c, 0x97, 0x1a, 0x0d, 0xaf, 0xa7, 0xdd, 0x19, 0xf9, 0xba, 0xe5, - 0x40, 0x53, 0x5b, 0x12, 0xa1, 0x92, 0x1a, 0x4c, 0xac, 0xb0, 0x8b, 0x96, 0x5b, 0x76, 0x1a, 0x7b, - 0xb2, 0x93, 0xe4, 0x1e, 0xa6, 0x95, 0x44, 0x2b, 0x97, 0x22, 0xb0, 0xc1, 0x80, 0xba, 0xfa, 0x41, - 0xc3, 0x25, 0x9b, 0x30, 0x51, 0xa3, 0x0d, 0x9f, 0x86, 0xb5, 0xd0, 0xf3, 0x69, 0x6c, 0x4b, 0xd6, - 0x4a, 0x96, 0x9e, 0x97, 0x77, 0xbd, 0x00, 0x81, 0xf5, 0x80, 0x41, 0x75, 0xae, 0x1a, 0x32, 0x17, - 0xda, 0xdb, 0x9e, 0xbf, 0xbf, 0xbc, 0x24, 0xb6, 0xe9, 0xe8, 0x4c, 0xe7, 0x60, 0x5d, 0x68, 0x67, - 0x90, 0xe6, 0xb6, 0x29, 0xb4, 0x73, 0x2c, 0x1c, 0xa9, 0xe5, 0x1a, 0xca, 0x56, 0x62, 0xd3, 0x9e, - 0x89, 0x7a, 0x19, 0xc1, 0xda, 0x48, 0x35, 0x03, 0x94, 0xcc, 0x8c, 0x91, 0x12, 0x58, 0xa4, 0x0b, - 0x44, 0x8e, 0x1a, 0x17, 0x74, 0x5b, 0x34, 0x08, 0xc4, 0x5e, 0x7e, 0x2a, 0x36, 0xf8, 0x11, 0xc2, - 0xd2, 0x4b, 0x82, 0xf9, 0x19, 0x39, 0x0d, 0xc4, 0x3d, 0x8d, 0x15, 0x6a, 0xf5, 0xa4, 0xf0, 0x26, - 0x6f, 0x02, 0xac, 0x3c, 0x0c, 0xa9, 0xdf, 0x71, 0x5a, 0x4a, 0x25, 0x86, 0x4a, 0x21, 0x2a, 0xa0, - 0xe6, 0x40, 0x6b, 0xc8, 0xa4, 0x0c, 0x53, 0xa5, 0x20, 0xe8, 0xb5, 0xa9, 0xed, 0xb5, 0x68, 0xc9, - 0x5e, 0xc7, 0x7d, 0x7f, 0x7c, 0xe9, 0xcc, 0xa3, 0x83, 0x85, 0x53, 0x0e, 0x16, 0xd4, 0x7d, 0xaf, - 0x45, 0xeb, 0x8e, 0xaf, 0xcf, 0x6e, 0x93, 0x86, 0x6c, 0x00, 0x6c, 0x74, 0x69, 0xa7, 0x46, 0x1d, - 0xbf, 0xb1, 0x17, 0xdb, 0xe6, 0xa3, 0x82, 0xa5, 0xe7, 0xc4, 0x17, 0xce, 0x79, 0x5d, 0xda, 0x09, - 0x10, 0xa6, 0xb7, 0x2a, 0xc2, 0x24, 0x5b, 0x30, 0x53, 0x29, 0xdd, 0xae, 0x7a, 0x2d, 0xb7, 0xb1, - 0x2f, 0x24, 0xa7, 0x69, 0x54, 0x14, 0x9e, 0x10, 0x5c, 0x63, 0xa5, 0x7c, 0x7b, 0x72, 0x9d, 0x76, - 0xbd, 0x8b, 0xd0, 0xba, 0x90, 0x9f, 0xe2, 0x5c, 0xc8, 0x87, 0x6c, 0x0e, 0x06, 0x4c, 0x18, 0xdc, - 0x74, 0x76, 0x83, 0xf9, 0x19, 0x43, 0x0f, 0x56, 0xda, 0xaa, 0x5d, 0xd2, 0x4a, 0xb9, 0x98, 0x72, - 0x9a, 0x4f, 0x44, 0x84, 0xd6, 0x43, 0x67, 0x37, 0x30, 0x27, 0xa2, 0xc2, 0x3e, 0xfd, 0x1e, 0x14, - 0xe3, 0xc4, 0x47, 0x51, 0x35, 0xdd, 0xcc, 0x17, 0xa6, 0x8a, 0xd3, 0x5a, 0x8b, 0x57, 0x1e, 0xba, - 0x41, 0x18, 0x58, 0xdf, 0x6f, 0xac, 0x1a, 0xb6, 0xa2, 0x6f, 0xd1, 0xfd, 0xaa, 0x4f, 0x77, 0xdc, - 0x87, 0x62, 0x03, 0xc2, 0x15, 0x7d, 0x8f, 0xee, 0xd7, 0xbb, 0x08, 0xd5, 0x57, 0xb4, 0x42, 0x25, - 0x9f, 0x85, 0xc2, 0xad, 0xdb, 0xb5, 0x5b, 0x74, 0xbf, 0xb2, 0x2c, 0x0e, 0x17, 0x4e, 0xd6, 0x0e, - 0xea, 0x8c, 0xd4, 0x98, 0x1f, 0x0a, 0xd3, 0x5a, 0x8a, 0x76, 0x2f, 0x56, 0x73, 0xb9, 0xd5, 0x0b, - 0x42, 0xea, 0x57, 0x96, 0xf5, 0x9a, 0x1b, 0x1c, 0x18, 0xdb, 0x4b, 0x14, 0xaa, 0xf5, 0xeb, 0x59, - 0xdc, 0xb9, 0xd8, 0x24, 0xad, 0x74, 0x82, 0xd0, 0xe9, 0x34, 0xa8, 0x62, 0x80, 0x93, 0xd4, 0x15, - 0xd0, 0xd8, 0x24, 0x8d, 0x90, 0xcd, 0xaa, 0xb3, 0x43, 0x57, 0xcd, 0xaa, 0x94, 0xda, 0x06, 0xa1, - 0xda, 0x16, 0x55, 0xfa, 0x02, 0x1a, 0xab, 0x32, 0x42, 0x26, 0xe7, 0x61, 0xac, 0x52, 0xba, 0x5d, - 0xea, 0x85, 0x7b, 0xb8, 0x6f, 0x16, 0xb8, 0x4c, 0xcd, 0x66, 0x98, 0xd3, 0x0b, 0xf7, 0x6c, 0x59, - 0x48, 0x2e, 0xe3, 0x5d, 0xa5, 0x43, 0x43, 0xae, 0x54, 0x15, 0x07, 0x65, 0xc0, 0x41, 0xb1, 0xab, - 0x0a, 0x03, 0x91, 0x57, 0x60, 0xe4, 0x6e, 0xb5, 0x5c, 0x59, 0x16, 0x97, 0x5d, 0x3c, 0x3d, 0xee, - 0x77, 0x1b, 0x66, 0x4b, 0x38, 0x8a, 0xf5, 0x5b, 0x99, 0x68, 0x4f, 0x22, 0xe7, 0x0d, 0x19, 0x02, - 0x15, 0x25, 0x4c, 0x86, 0xd0, 0x15, 0x25, 0x28, 0x4d, 0xd8, 0x40, 0xca, 0xbd, 0x20, 0xf4, 0xda, - 0x2b, 0x9d, 0x66, 0xd7, 0x73, 0x3b, 0x21, 0x52, 0xf1, 0x5e, 0xb3, 0x1e, 0x1d, 0x2c, 0x3c, 0xdf, - 0xc0, 0xd2, 0x3a, 0x15, 0xc5, 0xf5, 0x18, 0x97, 0x14, 0xea, 0xc7, 0xe8, 0x48, 0xeb, 0xf7, 0xb2, - 0xc6, 0x59, 0xc2, 0x9a, 0x67, 0xd3, 0x6e, 0xcb, 0x6d, 0xe0, 0xf5, 0xf9, 0x86, 0xef, 0xf5, 0xba, - 0x6a, 0x3a, 0x60, 0xf3, 0xfc, 0xa8, 0xb4, 0xbe, 0xcb, 0x8a, 0x4d, 0xde, 0x29, 0xd4, 0xe4, 0x0b, - 0x30, 0xc9, 0x8e, 0x75, 0xf1, 0x33, 0x98, 0xcf, 0xe2, 0x48, 0x3c, 0x87, 0x2a, 0xaf, 0x80, 0xfa, - 0x8a, 0x8d, 0x21, 0x0f, 0xe8, 0x14, 0xa4, 0x09, 0xf3, 0x9b, 0xbe, 0xd3, 0x09, 0xdc, 0x70, 0xa5, - 0xd3, 0xf0, 0xf7, 0x51, 0x0c, 0x59, 0xe9, 0x38, 0xdb, 0x2d, 0xda, 0xc4, 0xcf, 0x2d, 0x2c, 0x5d, - 0x78, 0x74, 0xb0, 0xf0, 0x62, 0xc8, 0x71, 0xea, 0x54, 0x21, 0xd5, 0x29, 0xc7, 0xd2, 0x38, 0xf7, - 0xe5, 0xc4, 0xc4, 0x16, 0xd9, 0xad, 0xf8, 0xf8, 0xc1, 0x4f, 0x64, 0x14, 0x5b, 0xd4, 0x68, 0xb0, - 0xad, 0x48, 0x6f, 0xa6, 0x4e, 0x60, 0xfd, 0x8b, 0x4c, 0x74, 0xda, 0x91, 0x77, 0x60, 0x42, 0x4c, - 0x75, 0x6d, 0x5e, 0xe0, 0x76, 0x25, 0xd7, 0x45, 0x6c, 0x64, 0x75, 0x74, 0x76, 0xc9, 0x2e, 0x95, - 0xd7, 0xb4, 0xb9, 0x81, 0x97, 0x6c, 0xa7, 0xd1, 0x8a, 0x53, 0x49, 0x34, 0x36, 0x09, 0x36, 0xd7, - 0x6a, 0x66, 0xaf, 0xe0, 0x24, 0x08, 0x5b, 0x41, 0x4a, 0x37, 0x68, 0xc8, 0x8f, 0xff, 0xe1, 0xff, - 0x65, 0x26, 0xed, 0x50, 0x25, 0x4b, 0x30, 0xb5, 0xe5, 0xf9, 0xf7, 0x70, 0x7c, 0xb5, 0x4e, 0xc0, - 0x91, 0x7f, 0x20, 0x0b, 0xe2, 0x1f, 0x64, 0x92, 0xe8, 0x6d, 0xd3, 0x7a, 0xc3, 0x6c, 0x5b, 0x8c, - 0x83, 0x41, 0xc0, 0xc6, 0x41, 0x71, 0x54, 0xab, 0x03, 0xc7, 0x21, 0x6a, 0x82, 0x31, 0x85, 0x75, - 0x74, 0xeb, 0x9f, 0x64, 0xf4, 0xc3, 0x93, 0x75, 0xf2, 0xb2, 0xd7, 0x76, 0xdc, 0x8e, 0xf6, 0x39, - 0xfc, 0x7d, 0x07, 0xa1, 0xf1, 0x96, 0x68, 0xc8, 0xe4, 0x2a, 0x14, 0xf8, 0x2f, 0xb5, 0x49, 0xa2, - 0x0a, 0x49, 0x10, 0x9a, 0x3b, 0xbc, 0x44, 0x4c, 0x8c, 0x4c, 0xee, 0xa8, 0x23, 0xf3, 0x43, 0x19, - 0x98, 0xd0, 0xee, 0xd3, 0x6c, 0xaf, 0xae, 0xfa, 0xde, 0xc7, 0xb4, 0x11, 0x9a, 0xc7, 0x44, 0x97, - 0x03, 0x63, 0x7b, 0xb5, 0x42, 0x8d, 0x1d, 0x0f, 0xd9, 0x23, 0x1c, 0x0f, 0xd6, 0xff, 0x92, 0x11, - 0xd2, 0xfc, 0xd0, 0x7b, 0xa4, 0xb9, 0x9f, 0x65, 0x8f, 0x72, 0x30, 0x7c, 0x01, 0x46, 0x6c, 0xda, - 0x74, 0x03, 0x21, 0x89, 0xcf, 0xea, 0x37, 0x07, 0x2c, 0x88, 0x2e, 0x2f, 0x3e, 0xfb, 0xa9, 0xef, - 0xea, 0x58, 0xce, 0x44, 0xae, 0x4a, 0x70, 0xbd, 0x45, 0x1f, 0xba, 0x7c, 0x26, 0x8b, 0x03, 0x06, - 0x45, 0x2e, 0x37, 0xa8, 0xef, 0xb0, 0x12, 0x21, 0xfb, 0xe9, 0xb3, 0xd6, 0xa0, 0xb1, 0x3e, 0x04, - 0x88, 0xaa, 0x24, 0xb7, 0xa0, 0x28, 0xd6, 0xb6, 0xdb, 0xd9, 0xe5, 0xe2, 0x83, 0xe8, 0x83, 0x85, - 0x47, 0x07, 0x0b, 0xcf, 0x36, 0x54, 0x99, 0x90, 0x8f, 0x34, 0xbe, 0x09, 0x42, 0xeb, 0xdf, 0xcc, - 0x42, 0xb6, 0x84, 0x03, 0x72, 0x8b, 0xee, 0x87, 0xce, 0xf6, 0x75, 0xb7, 0x65, 0xcc, 0xc4, 0x7b, - 0x08, 0xad, 0xef, 0xb8, 0xc6, 0xc5, 0x5a, 0x43, 0x66, 0x33, 0xf1, 0x96, 0xbf, 0xfd, 0x06, 0x12, - 0x6a, 0x33, 0xf1, 0x9e, 0xbf, 0xfd, 0x46, 0x9c, 0x4c, 0x21, 0x12, 0x0b, 0x46, 0xf9, 0xac, 0x14, - 0x73, 0x10, 0x1e, 0x1d, 0x2c, 0x8c, 0xf2, 0xc9, 0x6b, 0x8b, 0x12, 0x72, 0x0a, 0x72, 0xb5, 0xea, - 0xba, 0xd8, 0x3e, 0x50, 0x81, 0x15, 0x74, 0x3b, 0x36, 0x83, 0xb1, 0x3a, 0xd7, 0x96, 0x4b, 0x55, - 0xbc, 0xb2, 0x8e, 0x44, 0x75, 0xb6, 0x9a, 0x4e, 0x37, 0x7e, 0x69, 0x55, 0x88, 0xe4, 0x5d, 0x98, - 0xb8, 0xb5, 0x5c, 0x5e, 0xf5, 0x02, 0xbe, 0xf4, 0x47, 0xa3, 0xc9, 0x7f, 0xaf, 0xd9, 0xa8, 0xa3, - 0xce, 0x38, 0xbe, 0x87, 0x6a, 0xf8, 0xd6, 0x2f, 0x67, 0x60, 0x42, 0xd3, 0xe8, 0x90, 0xcf, 0x8a, - 0xa7, 0xbc, 0x8c, 0x21, 0xab, 0x6a, 0x18, 0xac, 0x94, 0x5f, 0xff, 0xdb, 0x5e, 0x93, 0x8a, 0x87, - 0xbd, 0xe8, 0xaa, 0x9d, 0x1d, 0xe6, 0xaa, 0xfd, 0x26, 0x00, 0x9f, 0x03, 0xd8, 0x64, 0xed, 0x2c, - 0xd6, 0x8c, 0x00, 0xf4, 0x71, 0x89, 0x90, 0x2d, 0x1b, 0x26, 0xf5, 0x6b, 0x36, 0xdb, 0x3e, 0xc5, - 0xf3, 0x84, 0x50, 0x9e, 0x6a, 0xdb, 0xa7, 0xe0, 0x96, 0x7c, 0x2e, 0x31, 0x49, 0xac, 0xcf, 0xea, - 0x2a, 0x9e, 0x61, 0x17, 0xa0, 0xf5, 0x23, 0x99, 0x68, 0xb9, 0xdf, 0xbd, 0x42, 0xde, 0x86, 0x51, - 0xfe, 0x1c, 0x24, 0x5e, 0xcd, 0x8e, 0xab, 0x6b, 0x92, 0xfe, 0x56, 0xc4, 0x75, 0xab, 0x7f, 0xc0, - 0x1f, 0x93, 0x9f, 0xb1, 0x05, 0x89, 0x52, 0xcb, 0x9a, 0x1a, 0x1a, 0xc9, 0x1d, 0x15, 0x90, 0x57, - 0xd2, 0xd4, 0xb2, 0xd6, 0x6f, 0xe7, 0x61, 0xda, 0x44, 0xd3, 0xdf, 0x8c, 0x32, 0x43, 0xbd, 0x19, - 0x7d, 0x01, 0x0a, 0xac, 0x3f, 0xdc, 0x06, 0x95, 0x62, 0xc7, 0x8b, 0xa8, 0xac, 0x16, 0x30, 0xe3, - 0x2d, 0x14, 0x6a, 0xfb, 0x41, 0x48, 0xdb, 0xec, 0xd6, 0x64, 0x2b, 0x2a, 0xb2, 0xa8, 0x3d, 0x6c, - 0xe4, 0xa2, 0x93, 0x58, 0x3e, 0x6c, 0xe8, 0xf3, 0x56, 0x3d, 0x71, 0xbc, 0x0e, 0xa3, 0x4c, 0xfa, - 0x54, 0x97, 0x7a, 0x6c, 0x25, 0x13, 0x4c, 0x63, 0xf6, 0x0f, 0x1c, 0x89, 0x6c, 0x41, 0x61, 0xcd, - 0x09, 0xc2, 0x1a, 0xa5, 0x9d, 0x21, 0x5e, 0x83, 0x17, 0x44, 0x57, 0x1d, 0xc3, 0xa7, 0xd6, 0x80, - 0xd2, 0x4e, 0xec, 0x39, 0x4f, 0x31, 0x23, 0x5f, 0x06, 0x28, 0x7b, 0x9d, 0xd0, 0xf7, 0x5a, 0x6b, - 0xde, 0xee, 0xfc, 0x28, 0xde, 0xa6, 0x9e, 0x8f, 0x0d, 0x40, 0x84, 0xc0, 0x2f, 0x54, 0x4a, 0x65, - 0xd0, 0xe0, 0x05, 0xf5, 0x96, 0xb7, 0xab, 0xcf, 0xd7, 0x08, 0x9f, 0x5c, 0x87, 0xa2, 0xbc, 0xaa, - 0xde, 0xe9, 0xee, 0xfa, 0x38, 0x41, 0xc6, 0xa2, 0xe3, 0x95, 0x3e, 0x0c, 0xeb, 0x3d, 0x01, 0xd7, - 0x77, 0xb4, 0x38, 0x0d, 0xf9, 0x12, 0x9c, 0x8c, 0xc3, 0xe4, 0x28, 0x17, 0x22, 0xc1, 0x53, 0x67, - 0x97, 0x32, 0xef, 0xfb, 0xb1, 0xb0, 0xbe, 0x9b, 0x85, 0x93, 0x7d, 0x3e, 0x96, 0xad, 0x07, 0x3c, - 0x56, 0xb5, 0xf5, 0x10, 0x3b, 0x4d, 0xb9, 0x41, 0xcb, 0x59, 0x34, 0x7d, 0x60, 0x33, 0x38, 0xbf, - 0x54, 0x8c, 0x9b, 0x3e, 0xa0, 0xe1, 0xc3, 0x4d, 0xc8, 0xb3, 0x21, 0x1a, 0xe2, 0x31, 0x56, 0x6a, - 0x29, 0xa6, 0x43, 0x57, 0x9f, 0x3e, 0x38, 0x74, 0xc8, 0x83, 0x7c, 0x16, 0x72, 0x9b, 0x9b, 0x6b, - 0x38, 0x77, 0x72, 0xf8, 0xed, 0x53, 0x61, 0xd8, 0x32, 0xa6, 0xea, 0x14, 0xa3, 0xbd, 0xa4, 0xde, - 0xee, 0x19, 0x3a, 0xf9, 0x62, 0xcc, 0x7c, 0xe4, 0x95, 0xc1, 0x03, 0x3d, 0xbc, 0x35, 0xc9, 0xe3, - 0x18, 0x68, 0xfc, 0x9d, 0x6c, 0xb4, 0x86, 0xaf, 0xbb, 0xad, 0x90, 0xfa, 0xe4, 0x34, 0x5f, 0x92, - 0xd1, 0x3d, 0xd5, 0x56, 0xbf, 0xc9, 0x7c, 0xb4, 0xbe, 0x39, 0x2b, 0xb5, 0x90, 0x5f, 0xd1, 0x16, - 0x72, 0x0e, 0x17, 0xf2, 0x74, 0xdf, 0x25, 0xfb, 0x4a, 0xca, 0xbc, 0xc4, 0x85, 0x98, 0x32, 0xf7, - 0x5e, 0x84, 0xa9, 0x75, 0x6f, 0xe5, 0x61, 0xa8, 0x10, 0xd9, 0x02, 0x2c, 0xd8, 0x26, 0x90, 0x71, - 0xdc, 0x68, 0x35, 0xa9, 0xbf, 0xb9, 0xe7, 0x74, 0x8c, 0xd7, 0x50, 0x3b, 0x01, 0x67, 0xb8, 0xeb, - 0xf4, 0x81, 0x89, 0x3b, 0xc6, 0x71, 0xe3, 0x70, 0xeb, 0x87, 0xb3, 0xb2, 0x33, 0xee, 0x2e, 0x3e, - 0xa5, 0xaf, 0x6e, 0x6f, 0x18, 0xaf, 0x6e, 0xc7, 0x94, 0xbe, 0x50, 0x3d, 0x21, 0x2f, 0x1e, 0xf2, - 0xf2, 0xfc, 0xc3, 0xa3, 0x30, 0xa9, 0xa3, 0xb3, 0x7e, 0x28, 0x35, 0x9b, 0xbe, 0xde, 0x0f, 0x4e, - 0xb3, 0xe9, 0xdb, 0x08, 0x65, 0xe7, 0x6b, 0xb5, 0xb7, 0xdd, 0x72, 0x1b, 0x88, 0xa3, 0xc9, 0x86, - 0x5d, 0x84, 0xd6, 0x19, 0xaa, 0xbe, 0x5f, 0x45, 0xc8, 0xc6, 0x1b, 0x75, 0x6e, 0xe0, 0x1b, 0xf5, - 0x57, 0x60, 0xbc, 0xdc, 0x6e, 0x1a, 0x2f, 0x67, 0x56, 0xca, 0x97, 0x5d, 0x52, 0x48, 0x7c, 0x19, - 0x29, 0x0d, 0x5a, 0xa3, 0xdd, 0x4c, 0xbe, 0x97, 0x45, 0x2c, 0x8d, 0xe7, 0xed, 0x91, 0xc7, 0x79, - 0xde, 0xbe, 0x06, 0xe3, 0x77, 0x02, 0xba, 0xd9, 0xeb, 0x74, 0x68, 0x0b, 0x67, 0x64, 0x81, 0x8b, - 0xf3, 0xbd, 0x80, 0xd6, 0x43, 0x84, 0xea, 0x0d, 0x50, 0xa8, 0xfa, 0xdc, 0x18, 0x1b, 0x30, 0x37, - 0xae, 0x42, 0xa1, 0x4a, 0xa9, 0x8f, 0x5d, 0x3d, 0x11, 0x49, 0x6d, 0x5d, 0x4a, 0xfd, 0x78, 0x47, - 0x2b, 0x44, 0xe3, 0xad, 0x7c, 0x72, 0xc8, 0xb7, 0x72, 0xf2, 0x02, 0x4c, 0x6a, 0x03, 0x28, 0x1e, - 0xd9, 0xed, 0x89, 0xae, 0x1a, 0xbd, 0x80, 0x7c, 0x11, 0xa6, 0xf0, 0x1a, 0xa3, 0x66, 0xeb, 0xb4, - 0xf1, 0xc4, 0x64, 0x94, 0x71, 0x21, 0xa9, 0xc1, 0x40, 0xf5, 0x14, 0x5b, 0x10, 0x93, 0xd1, 0xe9, - 0x1a, 0x4c, 0x9b, 0x23, 0xf9, 0x04, 0x5e, 0x9a, 0x6e, 0xe6, 0x0b, 0x85, 0xe2, 0xf8, 0xcd, 0x7c, - 0x01, 0x8a, 0x13, 0xfc, 0xad, 0xdf, 0x26, 0xb7, 0x7a, 0xdb, 0xd4, 0xef, 0xd0, 0x90, 0x06, 0x42, - 0xaa, 0x0f, 0xec, 0x7c, 0xa9, 0xdb, 0x0d, 0xac, 0x7f, 0x98, 0x85, 0xb1, 0xd2, 0x56, 0xad, 0xd2, - 0xd9, 0xf1, 0xf0, 0x75, 0x48, 0x3d, 0x0a, 0xe8, 0xaf, 0x43, 0xea, 0x51, 0x40, 0x7f, 0x0a, 0xb8, - 0x9c, 0x72, 0x2f, 0x43, 0x9b, 0x53, 0xed, 0x5e, 0x66, 0x28, 0xeb, 0xa2, 0xf7, 0x91, 0xdc, 0x10, - 0xef, 0x23, 0x4a, 0x1d, 0x96, 0x3f, 0x54, 0x1d, 0x46, 0xde, 0x86, 0x89, 0x4a, 0x27, 0xa4, 0xbb, - 0x7e, 0x34, 0xaf, 0xd5, 0x1d, 0x51, 0x81, 0x75, 0x59, 0x5d, 0xc3, 0x66, 0x93, 0x86, 0xab, 0xe0, - 0x94, 0xea, 0x0d, 0x27, 0x0d, 0xd7, 0xd4, 0xc5, 0x6e, 0xc7, 0x12, 0xd1, 0x5a, 0x8e, 0xcd, 0x08, - 0xf9, 0x06, 0xcd, 0xa5, 0xd4, 0xe9, 0x48, 0x6f, 0xcc, 0x3a, 0x76, 0x69, 0x36, 0xfd, 0x0d, 0xda, - 0xfa, 0x46, 0x16, 0x26, 0x4a, 0xdd, 0xee, 0x53, 0x6e, 0x09, 0xf4, 0x79, 0x63, 0x1f, 0x96, 0x97, - 0x1b, 0xf5, 0x5d, 0x43, 0x19, 0x01, 0xfd, 0x4a, 0x16, 0x66, 0x62, 0x14, 0x7a, 0xeb, 0x33, 0x43, - 0xda, 0xff, 0x64, 0x87, 0xb4, 0xff, 0xc9, 0x0d, 0x67, 0xff, 0x93, 0x7f, 0x9c, 0x0d, 0xf2, 0x65, - 0xc8, 0x95, 0xba, 0xdd, 0xf8, 0x3b, 0x62, 0xb7, 0x7b, 0xf7, 0x2a, 0xbf, 0xa0, 0x3a, 0xdd, 0xae, - 0xcd, 0x30, 0x8c, 0x5d, 0x6b, 0x74, 0xc8, 0x5d, 0xcb, 0x7a, 0x1d, 0xc6, 0x91, 0x17, 0x5a, 0xdd, - 0x9c, 0x05, 0x5c, 0xcc, 0xc2, 0xe0, 0xc6, 0xa8, 0x4b, 0x2c, 0xf3, 0xff, 0x2b, 0x03, 0x23, 0xf8, - 0xfb, 0x29, 0x9d, 0x63, 0x8b, 0xc6, 0x1c, 0x2b, 0x6a, 0x73, 0x6c, 0x98, 0xd9, 0xf5, 0xef, 0xe6, - 0xb1, 0xb7, 0xc4, 0xbc, 0x12, 0xc6, 0x2e, 0x99, 0x14, 0x63, 0x97, 0xc7, 0x38, 0xe2, 0xef, 0xc5, - 0xcd, 0x5e, 0x72, 0x38, 0x18, 0xe7, 0xe2, 0x4d, 0x7d, 0x22, 0x16, 0x2f, 0xab, 0x40, 0x2a, 0x9d, - 0x80, 0x36, 0x7a, 0x3e, 0xad, 0xdd, 0x73, 0xbb, 0x77, 0xa9, 0xef, 0xee, 0xec, 0x0b, 0x75, 0x11, - 0x9e, 0xc2, 0xae, 0x28, 0xad, 0x07, 0xf7, 0xdc, 0x2e, 0xbb, 0xb3, 0xb8, 0x3b, 0xfb, 0x76, 0x0a, - 0x0d, 0x79, 0x1f, 0xc6, 0x6c, 0xfa, 0xc0, 0x77, 0x43, 0xf9, 0x98, 0x3b, 0xad, 0x6e, 0xd8, 0x08, - 0xe5, 0x37, 0x48, 0x9f, 0xff, 0xd0, 0xc7, 0x5f, 0x94, 0x93, 0x45, 0xbe, 0xf1, 0xf1, 0x47, 0xdb, - 0xa9, 0xe8, 0x6b, 0x4b, 0x5b, 0xb5, 0x7e, 0xfb, 0x1e, 0xb9, 0x08, 0x23, 0xb8, 0x7b, 0x0a, 0x09, - 0x00, 0x8d, 0xa0, 0xf1, 0xc4, 0xd4, 0xb7, 0x76, 0xc4, 0x20, 0xcf, 0x03, 0x28, 0x7d, 0x7c, 0x30, - 0x5f, 0xc0, 0xb3, 0x59, 0x83, 0x7c, 0x7a, 0xe6, 0x1a, 0xbf, 0x94, 0x85, 0x73, 0x6a, 0x47, 0xda, - 0xf0, 0x6b, 0xa5, 0xdb, 0x6b, 0x95, 0x66, 0x55, 0x48, 0xfa, 0x55, 0xdf, 0xbb, 0xef, 0xb2, 0x9b, - 0xde, 0x95, 0x43, 0xd6, 0xd3, 0x1a, 0x9f, 0x78, 0x5c, 0x9d, 0x97, 0x35, 0x1e, 0xb6, 0xb5, 0x8d, - 0x5f, 0xbc, 0xbd, 0x77, 0xbb, 0x09, 0xed, 0xde, 0xea, 0x33, 0x76, 0xc4, 0x80, 0xfc, 0x48, 0x06, - 0x4e, 0xa4, 0x37, 0x44, 0xdc, 0xfe, 0x16, 0xa4, 0xa8, 0xd8, 0xa7, 0xb5, 0x4b, 0x2f, 0x3f, 0x3a, - 0x58, 0x38, 0x17, 0x38, 0xed, 0x56, 0xdd, 0x6d, 0xf2, 0xda, 0xdc, 0x06, 0xad, 0x77, 0x05, 0x82, - 0x51, 0x6f, 0x9f, 0x9a, 0xa2, 0x65, 0xb5, 0x04, 0x50, 0x90, 0x7a, 0x18, 0xeb, 0x1f, 0x65, 0x40, - 0x9b, 0x12, 0x05, 0x9b, 0x36, 0x5d, 0x9f, 0x36, 0x42, 0xdc, 0x92, 0x94, 0x29, 0x3e, 0x87, 0xc5, - 0xac, 0x18, 0x10, 0x46, 0xde, 0x83, 0x31, 0xae, 0xb5, 0xe1, 0xda, 0x92, 0x68, 0x2a, 0x09, 0x0d, - 0x0f, 0x77, 0xe4, 0xe0, 0x18, 0xfa, 0x34, 0x14, 0x44, 0x4c, 0x1c, 0xbd, 0xb9, 0xb5, 0x59, 0x6e, - 0x39, 0x6e, 0x3b, 0x10, 0x1b, 0x11, 0x76, 0xea, 0xc7, 0x0f, 0xc2, 0x7a, 0x03, 0xa1, 0xba, 0x38, - 0xaa, 0x50, 0xad, 0x1b, 0x52, 0xc1, 0x74, 0x88, 0x29, 0xce, 0x02, 0x8c, 0xdc, 0x8d, 0x2e, 0x9a, - 0x4b, 0xe3, 0x8f, 0x0e, 0x16, 0xf8, 0x64, 0xb1, 0x39, 0xdc, 0xfa, 0xeb, 0x19, 0x98, 0x36, 0x67, - 0x13, 0xb9, 0x04, 0xa3, 0xc2, 0x20, 0x3e, 0x83, 0x17, 0x6a, 0xd6, 0x0b, 0xa3, 0xdc, 0x14, 0xde, - 0x30, 0x80, 0x17, 0x58, 0x6c, 0x2b, 0x15, 0x1c, 0x84, 0xc6, 0x08, 0xb7, 0xd2, 0x06, 0x07, 0xd9, - 0xb2, 0x8c, 0x58, 0x4c, 0x8e, 0x0a, 0x7a, 0xad, 0x50, 0xd7, 0x87, 0xfa, 0x08, 0xb1, 0x45, 0x89, - 0x55, 0x86, 0x51, 0xbe, 0x06, 0x63, 0x26, 0x00, 0x99, 0x23, 0x98, 0x00, 0x58, 0x07, 0x19, 0x80, - 0x5a, 0x6d, 0xf5, 0x16, 0xdd, 0xaf, 0x3a, 0xae, 0x8f, 0x0a, 0x7c, 0xdc, 0xef, 0x6e, 0x89, 0xa5, - 0x35, 0x29, 0x14, 0xf8, 0x7c, 0x6f, 0xbc, 0x47, 0xf7, 0x0d, 0x05, 0xbe, 0x44, 0xc5, 0x4d, 0xd5, - 0x77, 0xef, 0x3b, 0x21, 0x65, 0x84, 0x59, 0x24, 0xe4, 0x9b, 0x2a, 0x87, 0xc6, 0x28, 0x35, 0x64, - 0xf2, 0x65, 0x98, 0x8e, 0x7e, 0xa9, 0x67, 0x88, 0x69, 0xb5, 0x7c, 0xcd, 0xc2, 0xa5, 0xe7, 0x1f, - 0x1d, 0x2c, 0x9c, 0xd6, 0xb8, 0xc6, 0x1f, 0x28, 0x62, 0xcc, 0xac, 0x9f, 0xcf, 0xe0, 0xcb, 0x95, - 0xfc, 0xc0, 0xf3, 0x90, 0x57, 0x86, 0x4d, 0x93, 0x5c, 0x27, 0x13, 0x53, 0xb5, 0x62, 0x39, 0x39, - 0x07, 0xb9, 0xe8, 0x4b, 0x70, 0x8f, 0x33, 0xbf, 0x80, 0x95, 0x92, 0x1b, 0x30, 0x36, 0x54, 0x9b, - 0x71, 0x69, 0xa4, 0xb4, 0x55, 0x52, 0xe3, 0x28, 0xdc, 0xdc, 0xda, 0xfc, 0xde, 0x1d, 0x85, 0x6f, - 0x66, 0x61, 0x86, 0xf5, 0x6b, 0xa9, 0x17, 0xee, 0x79, 0xbe, 0x1b, 0xee, 0x3f, 0xb5, 0x1a, 0x89, - 0x77, 0x0c, 0x29, 0xe5, 0xb4, 0x3c, 0x63, 0xf4, 0x6f, 0x1b, 0x4a, 0x31, 0xf1, 0x3b, 0x23, 0x70, - 0x2c, 0x85, 0x8a, 0xbc, 0x66, 0x28, 0x0d, 0xe7, 0xa5, 0xef, 0xdb, 0x77, 0x0f, 0x16, 0x26, 0x25, - 0xfa, 0x66, 0xe4, 0x0b, 0xb7, 0x68, 0x3e, 0x03, 0xf3, 0x9e, 0x42, 0x1d, 0xa2, 0xfe, 0x0c, 0x6c, - 0x3e, 0xfe, 0x5e, 0x84, 0x11, 0xdb, 0x6b, 0x51, 0x69, 0xb3, 0x80, 0x27, 0xb3, 0xcf, 0x00, 0xc6, - 0x6b, 0x15, 0x03, 0x90, 0x55, 0x18, 0x63, 0x7f, 0xdc, 0x76, 0xba, 0x42, 0xbf, 0x4b, 0x94, 0x9c, - 0x8c, 0xd0, 0xae, 0xdb, 0xd9, 0xd5, 0x45, 0xe5, 0x16, 0xad, 0xb7, 0x9d, 0xae, 0x21, 0x42, 0x70, - 0x44, 0x43, 0xe4, 0x2e, 0xf4, 0x17, 0xb9, 0x33, 0x87, 0x8a, 0xdc, 0x4d, 0x80, 0x9a, 0xbb, 0xdb, - 0x71, 0x3b, 0xbb, 0xa5, 0xd6, 0xae, 0xf0, 0x20, 0xbc, 0xd8, 0x7f, 0x14, 0x2e, 0x45, 0xc8, 0x38, - 0x71, 0xf9, 0x63, 0x09, 0x87, 0xd5, 0x9d, 0x96, 0xa1, 0x7c, 0x8e, 0x50, 0xc9, 0x3a, 0x40, 0xa9, - 0x11, 0xba, 0xf7, 0xd9, 0x04, 0x0e, 0x84, 0x39, 0xac, 0x6c, 0x70, 0xb9, 0x74, 0x8b, 0xee, 0xd7, - 0x68, 0x18, 0x29, 0xb3, 0x1d, 0x44, 0x65, 0xeb, 0xc0, 0xb0, 0x5c, 0x8d, 0x38, 0x90, 0x2e, 0x1c, - 0x2f, 0x35, 0x9b, 0x2e, 0xfb, 0x02, 0xa7, 0xb5, 0xe9, 0xb3, 0xc1, 0x68, 0x22, 0xeb, 0xc9, 0x74, - 0xd6, 0x17, 0x05, 0xeb, 0x17, 0x1c, 0x45, 0x55, 0x0f, 0x39, 0x59, 0xbc, 0x9a, 0x74, 0xc6, 0xd6, - 0x06, 0x4c, 0x9b, 0x9f, 0x6e, 0xfa, 0x3d, 0x4e, 0x42, 0xc1, 0xae, 0x95, 0xea, 0xb5, 0xd5, 0xd2, - 0x95, 0x62, 0x86, 0x14, 0x61, 0x52, 0xfc, 0x5a, 0xac, 0x2f, 0xbe, 0x71, 0xad, 0x98, 0x35, 0x20, - 0x6f, 0x5c, 0x59, 0x4c, 0xf8, 0x18, 0x8c, 0x15, 0x0b, 0x5c, 0xfb, 0x60, 0xfd, 0x6a, 0x06, 0x0a, - 0xb2, 0xdd, 0xe4, 0x1a, 0xe4, 0x6a, 0xb5, 0xd5, 0x98, 0x57, 0x40, 0x74, 0xbe, 0xf0, 0x9d, 0x34, - 0x08, 0x74, 0xd3, 0x2f, 0x46, 0xc0, 0xe8, 0x36, 0xd7, 0x6a, 0x42, 0x2c, 0x90, 0x74, 0xd1, 0xb6, - 0xcd, 0xe9, 0x52, 0x4c, 0xa5, 0xaf, 0x41, 0xee, 0xe6, 0xd6, 0xa6, 0x90, 0xc3, 0x25, 0x5d, 0xb4, - 0x93, 0x72, 0xba, 0x8f, 0x1f, 0xe8, 0xfb, 0x3b, 0x23, 0xb0, 0x6c, 0x98, 0xd0, 0xa6, 0x30, 0x3f, - 0x6e, 0xdb, 0x9e, 0xf2, 0xee, 0x13, 0xc7, 0x2d, 0x83, 0xd8, 0xa2, 0x84, 0x49, 0x07, 0x6b, 0x5e, - 0xc3, 0x69, 0x89, 0x73, 0x1b, 0xa5, 0x83, 0x16, 0x03, 0xd8, 0x1c, 0x6e, 0xfd, 0x56, 0x06, 0x8a, - 0x28, 0x41, 0xa1, 0x19, 0x98, 0x77, 0x8f, 0x76, 0xee, 0x5e, 0x21, 0xaf, 0xcb, 0xc5, 0x96, 0x51, - 0xb7, 0xbe, 0x11, 0x5c, 0x6c, 0x31, 0xfd, 0xb2, 0x58, 0x70, 0x9a, 0x6b, 0x65, 0x76, 0x78, 0xc7, - 0xab, 0x43, 0x5c, 0x2b, 0x17, 0x60, 0x04, 0x9b, 0x23, 0xb6, 0x45, 0x6c, 0x79, 0xc8, 0x00, 0x36, - 0x87, 0x6b, 0xbb, 0xd2, 0x4f, 0x65, 0x13, 0xdf, 0xb0, 0xf8, 0x3d, 0xe5, 0xbc, 0x64, 0x7e, 0xdc, - 0x50, 0x3b, 0xf5, 0x87, 0x30, 0x17, 0xef, 0x12, 0xbc, 0x91, 0x97, 0x60, 0xc6, 0x84, 0xcb, 0xcb, - 0xf9, 0xc9, 0xd4, 0xba, 0xee, 0x2e, 0xda, 0x71, 0x7c, 0xeb, 0xbf, 0xcd, 0xc0, 0x38, 0xfe, 0x69, - 0xf7, 0x5a, 0x68, 0x98, 0x50, 0xda, 0xaa, 0x09, 0xed, 0x9b, 0x2e, 0xc6, 0x39, 0x0f, 0x82, 0xba, - 0x50, 0xd0, 0x19, 0xfb, 0x8b, 0x42, 0x16, 0xa4, 0x5c, 0xad, 0x26, 0xdf, 0x22, 0x15, 0x29, 0xd7, - 0xbf, 0x05, 0x31, 0x52, 0x81, 0x8c, 0xb6, 0x40, 0x5b, 0x35, 0x36, 0xfd, 0xf4, 0x17, 0x48, 0xa4, - 0xf3, 0x5a, 0xa6, 0x2d, 0x10, 0x47, 0xc3, 0x07, 0xc8, 0xad, 0x5a, 0xc9, 0x5e, 0x37, 0x1e, 0x20, - 0x59, 0x1b, 0x0d, 0x3b, 0x51, 0x81, 0x64, 0xfd, 0xb5, 0xf1, 0x78, 0x07, 0x8a, 0xa3, 0xee, 0x88, - 0x6b, 0xe3, 0x6d, 0x18, 0x29, 0xb5, 0x5a, 0xde, 0x03, 0xb1, 0x4b, 0x48, 0x05, 0x81, 0xea, 0x3f, - 0x7e, 0x92, 0x39, 0x0c, 0xc5, 0x70, 0xc8, 0x60, 0x00, 0x52, 0x86, 0xf1, 0xd2, 0x56, 0xad, 0x52, - 0x59, 0xde, 0xdc, 0x5c, 0x13, 0x7e, 0xee, 0x2f, 0xc9, 0xfe, 0x71, 0xdd, 0x66, 0x3d, 0xfe, 0x06, - 0x16, 0x49, 0xee, 0x11, 0x1d, 0x79, 0x17, 0xe0, 0xa6, 0xe7, 0x76, 0x6e, 0xd3, 0x70, 0xcf, 0x6b, - 0x8a, 0x8f, 0x3f, 0xf3, 0xe8, 0x60, 0x61, 0xe2, 0x63, 0xcf, 0xed, 0xd4, 0xdb, 0x08, 0x66, 0x6d, - 0x8f, 0x90, 0x6c, 0xed, 0x6f, 0xd6, 0xd3, 0x4b, 0x1e, 0x37, 0x36, 0x18, 0x89, 0x7a, 0x7a, 0xdb, - 0x4b, 0xd8, 0x19, 0x48, 0x34, 0xd2, 0x86, 0x99, 0x5a, 0x6f, 0x77, 0x97, 0xb2, 0x5d, 0x5d, 0xa8, - 0x1c, 0x46, 0xc5, 0xdd, 0x56, 0x45, 0x09, 0xe0, 0x37, 0x11, 0x76, 0x3f, 0x09, 0x96, 0x5e, 0x63, - 0x13, 0xf9, 0x3b, 0x07, 0x0b, 0xe2, 0x6d, 0x8d, 0x09, 0x69, 0x81, 0xa4, 0x4f, 0x2a, 0x1c, 0xe2, - 0xbc, 0xc9, 0x06, 0x8c, 0xde, 0x70, 0xc3, 0xd5, 0xde, 0xb6, 0x30, 0xa6, 0x7e, 0x61, 0xc0, 0xa2, - 0xe1, 0x88, 0x5c, 0x67, 0xbb, 0xeb, 0x86, 0x7b, 0x3d, 0xdd, 0xb0, 0x5a, 0xb0, 0x21, 0x5b, 0x50, - 0x28, 0xbb, 0x7e, 0xa3, 0x45, 0xcb, 0x15, 0x71, 0xea, 0x9f, 0x1b, 0xc0, 0x52, 0xa2, 0xf2, 0x7e, - 0x69, 0xe0, 0xaf, 0x86, 0xab, 0x4b, 0x01, 0x12, 0x83, 0xfc, 0xab, 0x19, 0x78, 0x56, 0xb5, 0xbe, - 0xb4, 0x4b, 0x3b, 0xe1, 0x6d, 0x27, 0x6c, 0xec, 0x51, 0x5f, 0xf4, 0xd2, 0xf8, 0xa0, 0x5e, 0x7a, - 0x2b, 0xd1, 0x4b, 0x17, 0xa2, 0x5e, 0x72, 0x18, 0xb3, 0x7a, 0x9b, 0x73, 0x4b, 0xf6, 0xd9, 0xa0, - 0x5a, 0x49, 0x1d, 0x20, 0x52, 0xc2, 0x0b, 0x67, 0x9c, 0x97, 0x06, 0x7c, 0x70, 0x84, 0x2c, 0x0c, - 0x72, 0xd5, 0x6f, 0xc3, 0xb6, 0x46, 0x41, 0xc9, 0x2d, 0xe9, 0xb9, 0xc0, 0x25, 0x92, 0xb3, 0x03, - 0x78, 0x73, 0x6f, 0x86, 0x63, 0x03, 0x7c, 0x94, 0xf8, 0x68, 0xaf, 0x39, 0xdb, 0x42, 0x08, 0x39, - 0x64, 0xb4, 0xd7, 0x9c, 0x68, 0xb4, 0x5b, 0x4e, 0x7c, 0xb4, 0xd7, 0x9c, 0x6d, 0x52, 0xe6, 0xee, - 0x56, 0xdc, 0x37, 0xe7, 0xf9, 0x41, 0xdc, 0xca, 0x55, 0x7e, 0x32, 0xa7, 0xb8, 0x5d, 0x7d, 0x04, - 0xe3, 0xb5, 0xae, 0xd3, 0xa0, 0x2d, 0x77, 0x27, 0x14, 0x6f, 0x30, 0x2f, 0x0e, 0x60, 0xa5, 0x70, - 0x85, 0x46, 0x5f, 0xfe, 0xd4, 0x2f, 0x48, 0x0a, 0xc7, 0xfa, 0x47, 0x23, 0x70, 0xba, 0xff, 0x64, - 0x26, 0x1f, 0xc8, 0x1d, 0x86, 0xef, 0xe3, 0xe7, 0x0f, 0x9d, 0xfe, 0x97, 0x0e, 0xdd, 0x77, 0xbe, - 0x08, 0x73, 0x2b, 0x9d, 0x90, 0xfa, 0x5d, 0xdf, 0x95, 0xae, 0xaf, 0xab, 0x5e, 0x20, 0xad, 0x7d, - 0x5e, 0x7c, 0x74, 0xb0, 0x70, 0x96, 0xaa, 0x72, 0xa1, 0x1a, 0x42, 0xdb, 0x23, 0x8d, 0x55, 0x2a, - 0x07, 0xb2, 0x02, 0xd3, 0x1a, 0xbc, 0xd5, 0xdb, 0x15, 0xdb, 0x37, 0x9a, 0x92, 0xe9, 0x3c, 0x5b, - 0x3d, 0x5d, 0xca, 0x8d, 0x11, 0x9d, 0xfe, 0xf9, 0x1c, 0xe4, 0xf1, 0xf4, 0x39, 0x07, 0xb9, 0x5a, - 0x6f, 0x5b, 0x1c, 0x3b, 0x5c, 0x4e, 0x33, 0xd6, 0x34, 0x2b, 0x25, 0x9f, 0x07, 0xb0, 0x69, 0xd7, - 0x0b, 0xdc, 0xd0, 0xf3, 0xf7, 0x75, 0x6b, 0x6c, 0x5f, 0x41, 0x4d, 0xd3, 0x39, 0x09, 0x25, 0xab, - 0x30, 0x13, 0xfd, 0xda, 0x78, 0xd0, 0x11, 0xfa, 0xac, 0x71, 0x7e, 0x95, 0x8c, 0xc8, 0xeb, 0x1e, - 0x2b, 0xd3, 0x77, 0xa9, 0x18, 0x19, 0x59, 0x84, 0xc2, 0x96, 0xe7, 0xdf, 0xdb, 0x61, 0x03, 0x95, - 0x8f, 0xf6, 0xd1, 0x07, 0x02, 0xa6, 0xef, 0x17, 0x12, 0x8f, 0xbc, 0x0d, 0x13, 0x2b, 0x9d, 0xfb, - 0xae, 0xef, 0x75, 0xda, 0xb4, 0x13, 0xea, 0xaf, 0x47, 0x34, 0x02, 0x1b, 0xbe, 0x2b, 0x11, 0x98, - 0x5d, 0x98, 0x4a, 0x8d, 0xd0, 0xf3, 0xc5, 0xd3, 0x11, 0x1f, 0x6e, 0x06, 0x30, 0x86, 0x9b, 0x01, - 0x58, 0x27, 0xda, 0x74, 0x47, 0xe8, 0x3c, 0xb1, 0x13, 0x7d, 0xba, 0x63, 0x38, 0xe6, 0xd0, 0x1d, - 0x76, 0x0e, 0xd8, 0x74, 0x07, 0x6f, 0x79, 0x46, 0x14, 0x8b, 0x9d, 0x84, 0x7e, 0x40, 0xa0, 0x59, - 0xbf, 0x3b, 0xde, 0x77, 0xde, 0xb2, 0x85, 0x77, 0xb4, 0x79, 0xbb, 0xe6, 0x0c, 0x31, 0x6f, 0x5f, - 0x53, 0x06, 0x79, 0xba, 0x37, 0x1a, 0x42, 0xf4, 0x95, 0xcf, 0x71, 0x4e, 0xff, 0x42, 0xe1, 0x28, - 0x93, 0x48, 0x74, 0x52, 0x76, 0xd8, 0x4e, 0xca, 0x0d, 0xd5, 0x49, 0x64, 0x09, 0xa6, 0x54, 0xac, - 0x94, 0xaa, 0x23, 0x6c, 0xf7, 0x85, 0x41, 0x9b, 0x8a, 0x7c, 0x53, 0xef, 0x3a, 0xa1, 0x7e, 0xfb, - 0x30, 0x49, 0xc8, 0x3b, 0x30, 0x21, 0xac, 0x52, 0x91, 0xc3, 0x48, 0x64, 0x6f, 0x24, 0x4d, 0x58, - 0x63, 0xf4, 0x3a, 0x3a, 0x5b, 0x92, 0x55, 0xb7, 0x4b, 0x5b, 0x6e, 0x87, 0xd6, 0x50, 0x65, 0x2a, - 0x66, 0x0c, 0x2e, 0xc9, 0xae, 0x28, 0xa9, 0x73, 0x6d, 0xaa, 0xa1, 0x2c, 0x31, 0x88, 0xe2, 0x93, - 0x75, 0xec, 0x48, 0x93, 0x95, 0xbf, 0xd9, 0xfb, 0x6b, 0xde, 0xae, 0x2b, 0x0d, 0x9c, 0xe4, 0x9b, - 0xbd, 0x5f, 0x6f, 0x31, 0x68, 0xec, 0xcd, 0x9e, 0xa3, 0x32, 0xa1, 0x8e, 0xfd, 0xa8, 0x70, 0xc7, - 0x53, 0x21, 0xd4, 0x21, 0x91, 0x69, 0x55, 0xc6, 0x91, 0x64, 0x35, 0x2b, 0x6d, 0xc7, 0x6d, 0x09, - 0xa7, 0xa3, 0xa8, 0x1a, 0xca, 0xa0, 0xf1, 0x6a, 0x10, 0x95, 0x34, 0x60, 0xd2, 0xa6, 0x3b, 0x55, - 0xdf, 0x0b, 0x69, 0x23, 0xa4, 0x4d, 0x71, 0x90, 0x49, 0x59, 0x6e, 0xc9, 0xf3, 0xf8, 0x21, 0xbd, - 0xf4, 0xfa, 0xef, 0x1e, 0x2c, 0x64, 0xbe, 0x73, 0xb0, 0x00, 0x0c, 0xc4, 0x4d, 0x16, 0x1f, 0x1d, - 0x2c, 0x9c, 0x64, 0xe3, 0xdf, 0x95, 0xc4, 0xba, 0x59, 0xb2, 0xce, 0x94, 0x7c, 0x3f, 0xdb, 0x74, - 0x55, 0x97, 0x44, 0x95, 0x4d, 0xf6, 0xa9, 0xec, 0x8d, 0xd4, 0xca, 0x16, 0xb4, 0xde, 0x4e, 0xad, - 0x34, 0xb5, 0x12, 0xf2, 0x2e, 0x4c, 0x94, 0x2b, 0x65, 0xaf, 0xb3, 0xe3, 0xee, 0xd6, 0x56, 0x4b, - 0x78, 0x1a, 0x0a, 0xb3, 0xd2, 0x86, 0x5b, 0x6f, 0x20, 0xbc, 0x1e, 0xec, 0x39, 0x86, 0x69, 0x7e, - 0x84, 0x4f, 0x6e, 0xc0, 0xb4, 0xfc, 0x69, 0xd3, 0x9d, 0x3b, 0x76, 0x05, 0x0f, 0x41, 0x69, 0xcb, - 0xab, 0x38, 0xb0, 0x8e, 0xe8, 0xf9, 0xba, 0x70, 0x14, 0x23, 0x63, 0x93, 0x71, 0x99, 0x76, 0x5b, - 0xde, 0x3e, 0x6b, 0xde, 0xa6, 0x4b, 0xfd, 0xf9, 0x99, 0x68, 0x32, 0x36, 0x55, 0x49, 0x3d, 0x74, - 0x8d, 0xed, 0x36, 0x46, 0x44, 0xd6, 0x61, 0x56, 0x4c, 0xf1, 0xbb, 0x6e, 0xe0, 0x6e, 0xbb, 0x2d, - 0x37, 0xdc, 0x9f, 0x2f, 0x22, 0xa7, 0xb3, 0x8f, 0x0e, 0x16, 0x9e, 0x93, 0xeb, 0xe2, 0xbe, 0x2a, - 0xd5, 0x98, 0x25, 0x49, 0xad, 0x5f, 0xcd, 0xc2, 0x73, 0x83, 0x84, 0x3f, 0x52, 0x33, 0x37, 0xb3, - 0x0b, 0x43, 0x08, 0x8c, 0x87, 0x6f, 0x67, 0x2b, 0x30, 0xbd, 0xe1, 0xef, 0x3a, 0x1d, 0xf7, 0xeb, - 0x28, 0xd4, 0x2b, 0x63, 0x06, 0xec, 0x0c, 0x4f, 0x2b, 0x31, 0x67, 0x7b, 0x8c, 0xe8, 0xf4, 0x7d, - 0xb1, 0xcd, 0x7d, 0x52, 0x3b, 0xf7, 0x6b, 0x30, 0x5e, 0xf6, 0x3a, 0x21, 0x7d, 0x18, 0xc6, 0x7c, - 0x99, 0x38, 0x30, 0xee, 0xcb, 0x24, 0x51, 0xad, 0xff, 0x27, 0x0b, 0x67, 0x06, 0x4a, 0x3f, 0x64, - 0xd3, 0xec, 0xb5, 0x8b, 0xc3, 0x88, 0x4c, 0x87, 0x77, 0xdb, 0x62, 0xe2, 0xdd, 0xfd, 0x50, 0xf3, - 0xd4, 0xd3, 0xff, 0x59, 0x46, 0x74, 0xd2, 0x67, 0x60, 0x0c, 0xab, 0x52, 0x5d, 0xc4, 0x15, 0x03, - 0xb8, 0x0b, 0xbb, 0xa6, 0x62, 0x80, 0xa3, 0x91, 0xab, 0x50, 0x28, 0x3b, 0xad, 0x96, 0xe6, 0xe9, - 0x85, 0x42, 0x5d, 0x03, 0x61, 0x31, 0x33, 0x0d, 0x89, 0xc8, 0xae, 0xbe, 0xfc, 0x6f, 0xed, 0xac, - 0xc0, 0xcd, 0x52, 0x90, 0xc5, 0x8e, 0x0b, 0x0d, 0x19, 0x63, 0x3a, 0x35, 0x3c, 0xe5, 0x92, 0xc2, - 0x63, 0x3a, 0x31, 0x80, 0x11, 0xd3, 0x89, 0x01, 0xac, 0x5f, 0xcb, 0xc1, 0xf3, 0x83, 0x45, 0x78, - 0x72, 0xc7, 0x1c, 0x82, 0x57, 0x86, 0x12, 0xfc, 0x0f, 0x1f, 0x03, 0x19, 0x2c, 0x8d, 0x77, 0xc8, - 0x85, 0xa4, 0x15, 0xe9, 0x77, 0x0f, 0x16, 0x34, 0xdb, 0x1f, 0x76, 0xdf, 0xd4, 0x14, 0xc4, 0x5f, - 0x03, 0xa8, 0x85, 0x4e, 0xe8, 0x36, 0x6e, 0x6e, 0xdd, 0x92, 0x0e, 0xc4, 0xd7, 0x86, 0x6b, 0x59, - 0x44, 0xc7, 0xf7, 0x15, 0xa1, 0x3b, 0x45, 0x68, 0xfd, 0xe3, 0x07, 0xf7, 0x8c, 0x4b, 0x4a, 0x84, - 0x7c, 0xfa, 0x2d, 0x28, 0xc6, 0x49, 0xc9, 0x79, 0xc8, 0x63, 0x03, 0x34, 0x53, 0xd8, 0x18, 0x07, - 0x2c, 0x3f, 0x7d, 0x5b, 0xcc, 0x9d, 0x15, 0x98, 0x16, 0x6f, 0x92, 0xa6, 0x3a, 0x04, 0xd7, 0xab, - 0x7c, 0xd2, 0x4c, 0xaa, 0x44, 0x62, 0x44, 0xd6, 0x9f, 0x65, 0xe0, 0x54, 0xdf, 0xcb, 0x11, 0xa9, - 0x9a, 0x03, 0xf6, 0xd2, 0x61, 0xb7, 0xa9, 0x43, 0xc7, 0xea, 0xf4, 0x8f, 0xcb, 0xb9, 0xff, 0x1e, - 0x4c, 0xd6, 0x7a, 0xdb, 0x51, 0xac, 0x36, 0xcd, 0x3f, 0x2b, 0xd0, 0xe0, 0xfa, 0x09, 0xa6, 0xe3, - 0xb3, 0xef, 0x97, 0xcf, 0xae, 0xe2, 0x59, 0x9c, 0xeb, 0x74, 0xf0, 0xfb, 0x95, 0x9f, 0x0a, 0xba, - 0x11, 0xe9, 0x9d, 0x18, 0x23, 0xb2, 0x7e, 0x25, 0x0b, 0x27, 0xfb, 0x5c, 0xc0, 0xc8, 0xba, 0xf9, - 0xf5, 0xe7, 0x06, 0xdf, 0xd7, 0x0e, 0xff, 0xf6, 0xff, 0x48, 0x7e, 0x3b, 0xbe, 0x42, 0x89, 0x1d, - 0x4f, 0xea, 0x76, 0xc4, 0x2b, 0x94, 0xdc, 0x1d, 0x03, 0xf3, 0x15, 0x4a, 0x22, 0x93, 0x37, 0x60, - 0x7c, 0xcd, 0xe3, 0xee, 0x7d, 0xf2, 0x8b, 0xb9, 0x23, 0x87, 0x04, 0xea, 0xdb, 0xa3, 0xc2, 0x64, - 0x77, 0x0b, 0x73, 0xe0, 0xa5, 0x15, 0x2f, 0xde, 0x2d, 0x62, 0xd3, 0xc5, 0xd4, 0x80, 0x98, 0x64, - 0xd6, 0x8f, 0x67, 0x61, 0x9a, 0x4f, 0x5e, 0xae, 0xa1, 0x7b, 0x6a, 0xb5, 0x9f, 0x6f, 0x1b, 0xda, - 0x4f, 0xe9, 0x79, 0xae, 0x7f, 0xda, 0x50, 0xba, 0xcf, 0x3d, 0x20, 0x49, 0x1a, 0x62, 0xc3, 0xa4, - 0x0e, 0x1d, 0xac, 0xf6, 0xbc, 0x12, 0x05, 0x29, 0x10, 0x7b, 0x07, 0xea, 0x9e, 0x03, 0xdb, 0xe0, - 0x61, 0xfd, 0xf5, 0x2c, 0x4c, 0x69, 0xaf, 0x54, 0x4f, 0x6d, 0xc7, 0xbf, 0x65, 0x74, 0xfc, 0xbc, - 0x32, 0x1f, 0x55, 0x5f, 0x36, 0x54, 0xbf, 0xf7, 0x60, 0x36, 0x41, 0x12, 0x7f, 0xec, 0xcb, 0x0c, - 0xf3, 0xd8, 0xf7, 0x5a, 0xd2, 0x7b, 0x9a, 0x07, 0x0e, 0x54, 0xde, 0xd3, 0xba, 0xbb, 0xf6, 0x37, - 0xb3, 0x30, 0x27, 0x7e, 0x61, 0x88, 0x10, 0xbe, 0x7b, 0x3f, 0xb5, 0x63, 0x51, 0x32, 0xc6, 0x62, - 0xc1, 0x1c, 0x0b, 0xed, 0x03, 0xfb, 0x0f, 0x89, 0xf5, 0x57, 0x00, 0xe6, 0xfb, 0x11, 0x0c, 0xed, - 0xe0, 0x11, 0x59, 0xc5, 0x66, 0x87, 0xb0, 0x8a, 0x5d, 0x83, 0x22, 0x56, 0x25, 0x02, 0x0a, 0x04, - 0xec, 0x0e, 0x90, 0x8b, 0x04, 0x6e, 0x1e, 0xc7, 0x45, 0x04, 0x25, 0x08, 0x62, 0x97, 0x80, 0x04, - 0x25, 0xf9, 0xf9, 0x0c, 0x4c, 0x23, 0x70, 0xe5, 0x3e, 0xed, 0x84, 0xc8, 0x2c, 0x2f, 0x8c, 0x38, - 0x95, 0x72, 0xb4, 0x16, 0xfa, 0x6e, 0x67, 0x57, 0x68, 0x47, 0xb7, 0x85, 0x76, 0xf4, 0x1d, 0xae, - 0xd5, 0xbd, 0xd4, 0xf0, 0xda, 0x97, 0x77, 0x7d, 0xe7, 0xbe, 0xcb, 0x1f, 0x60, 0x9d, 0xd6, 0xe5, - 0x28, 0xd4, 0x6d, 0xd7, 0x8d, 0x05, 0xaf, 0x15, 0xac, 0x50, 0xf3, 0xcc, 0x1b, 0x4a, 0xb1, 0xda, - 0xf8, 0x5d, 0xc5, 0x6c, 0x11, 0xf9, 0x3e, 0x38, 0xc9, 0xbd, 0x85, 0x99, 0xc8, 0xeb, 0x76, 0x7a, - 0x5e, 0x2f, 0x58, 0x72, 0x1a, 0xf7, 0xd8, 0xb9, 0xc7, 0xcd, 0xce, 0xf1, 0xcb, 0x1b, 0xaa, 0xb0, - 0xbe, 0xcd, 0x4b, 0x0d, 0x0f, 0x9d, 0x74, 0x06, 0x64, 0x15, 0x66, 0x79, 0x51, 0xa9, 0x17, 0x7a, - 0xb5, 0x86, 0xd3, 0x72, 0x3b, 0xbb, 0x78, 0xa7, 0x2e, 0xf0, 0xf3, 0xd8, 0xe9, 0x85, 0x5e, 0x3d, - 0xe0, 0x70, 0xfd, 0xea, 0x92, 0x20, 0x22, 0x15, 0x98, 0xb1, 0xa9, 0xd3, 0xbc, 0xed, 0x3c, 0x2c, - 0x3b, 0x5d, 0xa7, 0xc1, 0x2e, 0x42, 0x05, 0x7c, 0x49, 0xc0, 0xbb, 0x99, 0x4f, 0x9d, 0x66, 0xbd, - 0xed, 0x3c, 0xac, 0x37, 0x44, 0xa1, 0xa9, 0xc3, 0x32, 0xe8, 0x14, 0x2b, 0xb7, 0xa3, 0x58, 0x8d, - 0xc7, 0x59, 0xb9, 0x9d, 0xfe, 0xac, 0x22, 0x3a, 0xc9, 0x6a, 0xd3, 0xf1, 0x77, 0x69, 0xc8, 0xed, - 0x97, 0xd8, 0x7d, 0x3c, 0xa3, 0xb1, 0x0a, 0xb1, 0xac, 0x8e, 0xb6, 0x4c, 0x71, 0x56, 0x1a, 0x1d, - 0x9b, 0x79, 0x5b, 0xbe, 0x1b, 0x52, 0xfd, 0x0b, 0x27, 0xb0, 0x59, 0xd8, 0xff, 0x68, 0xf9, 0xd5, - 0xef, 0x13, 0x13, 0x94, 0x11, 0x37, 0xed, 0x23, 0x27, 0x13, 0xdc, 0xd2, 0xbf, 0x32, 0x41, 0xa9, - 0xb8, 0xe9, 0xdf, 0x39, 0x85, 0xdf, 0xa9, 0x71, 0xeb, 0xf3, 0xa1, 0x09, 0x4a, 0xb2, 0xce, 0x3a, - 0x2d, 0xa4, 0x1d, 0x36, 0xa3, 0x85, 0xfd, 0xd6, 0x34, 0x36, 0xed, 0x45, 0x61, 0x84, 0x50, 0xf4, - 0x65, 0x71, 0x3d, 0xc5, 0x9a, 0x2b, 0x4e, 0x4c, 0x7e, 0x00, 0x66, 0xee, 0x04, 0xf4, 0x7a, 0xa5, - 0x5a, 0x93, 0xfe, 0xd1, 0x78, 0xdb, 0x9e, 0x5e, 0xbc, 0x72, 0xc8, 0xa6, 0x73, 0x49, 0xa7, 0xc1, - 0xf0, 0xb1, 0x7c, 0xdc, 0x7a, 0x01, 0xad, 0xef, 0xb8, 0xdd, 0x40, 0x45, 0x6a, 0xd0, 0xc7, 0x2d, - 0x56, 0x95, 0xb5, 0x0a, 0xb3, 0x09, 0x36, 0x64, 0x1a, 0x80, 0x01, 0xeb, 0x77, 0xd6, 0x6b, 0x2b, - 0x9b, 0xc5, 0x67, 0x48, 0x11, 0x26, 0xf1, 0xf7, 0xca, 0x7a, 0x69, 0x69, 0x6d, 0x65, 0xb9, 0x98, - 0x21, 0xb3, 0x30, 0x85, 0x90, 0xe5, 0x4a, 0x8d, 0x83, 0xb2, 0x3c, 0x78, 0xa0, 0x5d, 0xe4, 0x4b, - 0x37, 0x64, 0x0b, 0x00, 0xcf, 0x14, 0xeb, 0x6f, 0x67, 0xe1, 0x94, 0x3c, 0x56, 0x68, 0xf8, 0xc0, - 0xf3, 0xef, 0xb9, 0x9d, 0xdd, 0xa7, 0xfc, 0x74, 0xb8, 0x6e, 0x9c, 0x0e, 0x2f, 0xc6, 0x4e, 0xea, - 0xd8, 0x57, 0x0e, 0x38, 0x22, 0xfe, 0xa7, 0x02, 0x9c, 0x19, 0x48, 0x45, 0x3e, 0x60, 0xa7, 0xb9, - 0x4b, 0x3b, 0x61, 0xa5, 0xd9, 0xa2, 0x9b, 0x6e, 0x9b, 0x7a, 0xbd, 0x50, 0xd8, 0x0b, 0x9e, 0xc3, - 0x0b, 0x2e, 0x16, 0xd6, 0xdd, 0x66, 0x8b, 0xd6, 0x43, 0x5e, 0x6c, 0x4c, 0xb7, 0x24, 0x35, 0x63, - 0xa9, 0xa2, 0x5a, 0x57, 0x3a, 0x21, 0xf5, 0xef, 0xa3, 0x65, 0x82, 0x62, 0x79, 0x8f, 0xd2, 0x6e, - 0xdd, 0x61, 0xa5, 0x75, 0x57, 0x14, 0x9b, 0x2c, 0x13, 0xd4, 0xe4, 0xba, 0xc6, 0xb2, 0xcc, 0xc4, - 0xe1, 0xdb, 0xce, 0x43, 0xf1, 0x54, 0x2a, 0xa2, 0xcc, 0x28, 0x96, 0xdc, 0x57, 0xa4, 0xed, 0x3c, - 0xb4, 0x93, 0x24, 0xe4, 0xcb, 0x70, 0x5c, 0x1c, 0x40, 0xc2, 0x29, 0x50, 0x7e, 0x31, 0x77, 0x39, - 0x7c, 0xf9, 0xd1, 0xc1, 0xc2, 0x49, 0x19, 0x53, 0x47, 0xba, 0x81, 0xa6, 0x7d, 0x75, 0x3a, 0x17, - 0xb2, 0xc9, 0x0e, 0xe4, 0x58, 0x77, 0xdc, 0xa6, 0x41, 0xe0, 0xec, 0xca, 0x67, 0x55, 0x6e, 0x1d, - 0xad, 0x75, 0x66, 0xbd, 0xcd, 0xcb, 0xed, 0xbe, 0x94, 0x64, 0x15, 0xa6, 0xb7, 0xe8, 0xb6, 0x3e, - 0x3e, 0xa3, 0x6a, 0xab, 0x2a, 0x3e, 0xa0, 0xdb, 0xfd, 0x07, 0x27, 0x46, 0x47, 0x5c, 0x54, 0x98, - 0x3d, 0xdc, 0x5f, 0x73, 0x83, 0x90, 0x76, 0xa8, 0x8f, 0x4e, 0xe1, 0x63, 0xb8, 0x19, 0xcc, 0x47, - 0x12, 0xb2, 0x59, 0xbe, 0xf4, 0xc2, 0xa3, 0x83, 0x85, 0x33, 0xdc, 0x1b, 0xa0, 0x25, 0xe0, 0xf5, - 0x58, 0x20, 0xe8, 0x24, 0x57, 0xf2, 0x55, 0x98, 0xb1, 0xbd, 0x5e, 0xe8, 0x76, 0x76, 0x6b, 0xa1, - 0xef, 0x84, 0x74, 0x97, 0x1f, 0x48, 0x91, 0xf7, 0x79, 0xac, 0x54, 0xbc, 0xb5, 0x70, 0x60, 0x3d, - 0x10, 0x50, 0xe3, 0x44, 0x30, 0x09, 0xc8, 0x57, 0x60, 0x9a, 0xfb, 0x74, 0xa9, 0x0a, 0xc6, 0x8d, - 0x20, 0x96, 0x66, 0xe1, 0xdd, 0x2b, 0xfc, 0x82, 0xca, 0x7d, 0xc3, 0xd2, 0x2a, 0x88, 0x71, 0x23, - 0x1f, 0x89, 0xce, 0xaa, 0xba, 0x9d, 0x5d, 0x35, 0x8d, 0x01, 0x7b, 0xfe, 0xf5, 0xa8, 0x4b, 0xba, - 0xac, 0xb9, 0x72, 0x1a, 0xf7, 0x79, 0xa6, 0x4f, 0xf2, 0x21, 0x21, 0x9c, 0x29, 0x05, 0x81, 0x1b, - 0x84, 0xc2, 0xaa, 0x76, 0xe5, 0x21, 0x6d, 0xf4, 0x18, 0xf2, 0x96, 0xe7, 0xdf, 0xa3, 0x3e, 0xb7, - 0xeb, 0x1a, 0x59, 0xba, 0xf4, 0xe8, 0x60, 0xe1, 0x15, 0x07, 0x11, 0xeb, 0xc2, 0x10, 0xb7, 0x4e, - 0x25, 0x6a, 0xfd, 0x01, 0xc7, 0xd5, 0xbe, 0x61, 0x30, 0x53, 0xf2, 0x15, 0x38, 0x51, 0x76, 0x02, - 0x5a, 0xe9, 0x04, 0xb4, 0x13, 0xb8, 0xa1, 0x7b, 0x9f, 0x8a, 0x4e, 0xc5, 0xc3, 0xaf, 0x80, 0x21, - 0xb3, 0xad, 0x06, 0x46, 0xd7, 0x8f, 0x50, 0xea, 0x62, 0x50, 0xb4, 0x6a, 0xfa, 0x70, 0xb1, 0x0e, - 0x32, 0x50, 0x8c, 0x77, 0x3b, 0xf9, 0x22, 0x8c, 0xf3, 0xf7, 0x68, 0x1a, 0xec, 0x09, 0x07, 0x25, - 0xf9, 0x00, 0xab, 0xe0, 0x26, 0x91, 0xb0, 0x47, 0xe7, 0xaf, 0xdd, 0x54, 0xb7, 0xc8, 0x42, 0x7b, - 0x74, 0x49, 0x44, 0x9a, 0x30, 0xc9, 0x7b, 0x96, 0x62, 0x98, 0x08, 0x61, 0x96, 0xf4, 0x82, 0x3e, - 0x93, 0x45, 0x51, 0x8c, 0x3f, 0xaa, 0xbc, 0xc5, 0xf8, 0x71, 0x04, 0xa3, 0x0a, 0x83, 0xeb, 0x12, - 0x40, 0x41, 0x12, 0x5a, 0xa7, 0xe0, 0x64, 0x9f, 0x36, 0x5b, 0xf7, 0xf1, 0x19, 0xac, 0x4f, 0x8d, - 0xe4, 0x8b, 0x30, 0x87, 0x84, 0x65, 0xaf, 0xd3, 0xa1, 0x8d, 0x10, 0xb7, 0x0e, 0xa9, 0x3a, 0xca, - 0xf1, 0xb7, 0x56, 0xfe, 0xbd, 0x0d, 0x85, 0x50, 0x8f, 0x6b, 0x90, 0x52, 0x39, 0x58, 0x3f, 0x93, - 0x85, 0x79, 0xb1, 0x1b, 0xd9, 0xb4, 0xe1, 0xf9, 0xcd, 0xa7, 0xff, 0xf4, 0x5b, 0x31, 0x4e, 0xbf, - 0x73, 0xca, 0xff, 0x34, 0xed, 0x23, 0x07, 0x1c, 0x7e, 0xbf, 0x92, 0x81, 0xe7, 0x06, 0x11, 0xb1, - 0xde, 0x51, 0x61, 0x31, 0xc6, 0x13, 0xe1, 0x2f, 0xba, 0x70, 0x0c, 0x07, 0xb4, 0xbc, 0x47, 0x1b, - 0xf7, 0x82, 0x55, 0x2f, 0x08, 0xd1, 0x2a, 0x32, 0xdb, 0xe7, 0xa1, 0xe6, 0xb5, 0xd4, 0x87, 0x9a, - 0x13, 0x7c, 0x96, 0x35, 0x90, 0x07, 0x0f, 0xdc, 0x71, 0x8f, 0xee, 0x07, 0x76, 0x1a, 0x6b, 0xb4, - 0x70, 0x2b, 0xf5, 0xc2, 0xbd, 0xaa, 0x4f, 0x77, 0xa8, 0x4f, 0x3b, 0x0d, 0xfa, 0x3d, 0x66, 0xe1, - 0x66, 0x7e, 0xdc, 0x50, 0xda, 0x86, 0x5f, 0x99, 0x84, 0xb9, 0x34, 0x32, 0xd6, 0x2f, 0xda, 0x05, - 0x37, 0x9e, 0x88, 0xe3, 0x2f, 0x67, 0x60, 0xb2, 0x46, 0x1b, 0x5e, 0xa7, 0x79, 0x1d, 0x9f, 0xc3, - 0x45, 0xef, 0xd4, 0xf9, 0x01, 0xcf, 0xe0, 0xf5, 0x9d, 0xd8, 0x3b, 0xf9, 0x77, 0x0f, 0x16, 0xbe, - 0x30, 0xdc, 0xbd, 0xb2, 0xe1, 0xa1, 0x57, 0x69, 0x88, 0xd1, 0x21, 0x55, 0x15, 0xa8, 0xd9, 0x36, - 0x2a, 0x25, 0x4b, 0x30, 0x25, 0x96, 0xab, 0xa7, 0x47, 0x45, 0xe1, 0x2e, 0xba, 0xb2, 0x20, 0x11, - 0x06, 0xca, 0x20, 0x21, 0x57, 0x21, 0x77, 0x67, 0xf1, 0xba, 0x18, 0x03, 0x19, 0x5f, 0xf3, 0xce, - 0xe2, 0x75, 0x54, 0x5d, 0xb1, 0xeb, 0xc0, 0x54, 0x6f, 0xd1, 0x78, 0xa1, 0xbe, 0xb3, 0x78, 0x9d, - 0xfc, 0x20, 0x1c, 0x5f, 0x76, 0x03, 0x51, 0x05, 0xb7, 0xb5, 0x6c, 0xa2, 0x6f, 0xc1, 0x68, 0x9f, - 0xd9, 0xfb, 0xb9, 0xd4, 0xd9, 0xfb, 0x42, 0x53, 0x31, 0xa9, 0x73, 0x43, 0xce, 0x66, 0x3c, 0xfa, - 0x4b, 0x7a, 0x3d, 0xe4, 0x63, 0x98, 0x46, 0xd5, 0x2b, 0x9a, 0x9f, 0x62, 0xb4, 0xba, 0xb1, 0x3e, - 0x35, 0x7f, 0x26, 0xb5, 0xe6, 0xd3, 0xa8, 0xc9, 0xad, 0xa3, 0x11, 0x2b, 0x46, 0xb6, 0x33, 0x6e, - 0xe8, 0x06, 0x67, 0x72, 0x13, 0x66, 0x84, 0xa8, 0xb4, 0xb1, 0xb3, 0xb9, 0x47, 0x97, 0x9d, 0x7d, - 0xf1, 0xb8, 0x8c, 0xb7, 0x2f, 0x21, 0x5f, 0xd5, 0xbd, 0x9d, 0x7a, 0xb8, 0x47, 0xeb, 0x4d, 0xc7, - 0x10, 0x2a, 0x62, 0x84, 0xe4, 0xfb, 0x61, 0x62, 0xcd, 0x6b, 0x30, 0x29, 0x19, 0x77, 0x06, 0xfe, - 0xde, 0xfc, 0x21, 0xe6, 0x77, 0xe0, 0xe0, 0x98, 0xe8, 0xf3, 0xdd, 0x83, 0x85, 0xb7, 0x8f, 0x3a, - 0x69, 0xb4, 0x0a, 0x6c, 0xbd, 0x36, 0x52, 0x86, 0xc2, 0x16, 0xdd, 0x66, 0x5f, 0x1b, 0x8f, 0xfd, - 0x2e, 0xc1, 0xc2, 0x9c, 0x44, 0xfc, 0x32, 0xcc, 0x49, 0x04, 0x8c, 0xf8, 0x30, 0x8b, 0xfd, 0x53, - 0x75, 0x82, 0xe0, 0x81, 0xe7, 0x37, 0x31, 0xc8, 0x67, 0xbf, 0xa7, 0xec, 0xc5, 0xd4, 0xce, 0x7f, - 0x8e, 0x77, 0x7e, 0x57, 0xe3, 0xa0, 0x0b, 0x7b, 0x09, 0xf6, 0xe4, 0xab, 0x30, 0x6d, 0xd3, 0xaf, - 0xf5, 0x5c, 0x9f, 0xde, 0xbe, 0x5e, 0xc2, 0x55, 0x39, 0x69, 0x78, 0x68, 0x98, 0x85, 0x5c, 0xa2, - 0xf4, 0x39, 0x4c, 0x6a, 0x8b, 0xea, 0xed, 0x1d, 0xc7, 0x7c, 0x2d, 0xd0, 0x49, 0x48, 0x15, 0x26, - 0x96, 0xe9, 0x7d, 0xb7, 0x41, 0xd1, 0x8e, 0x5c, 0xd8, 0x71, 0xa9, 0xe0, 0xd5, 0x51, 0x09, 0xd7, - 0x9b, 0x34, 0x11, 0xc0, 0xad, 0xd2, 0xcd, 0xa4, 0x33, 0x0a, 0x91, 0x5c, 0x83, 0x5c, 0x65, 0xb9, - 0x2a, 0xcc, 0xb8, 0xa4, 0x79, 0x76, 0xa5, 0x59, 0x95, 0xa1, 0x7e, 0xd1, 0xf8, 0xc3, 0x6d, 0x1a, - 0x46, 0x60, 0x95, 0xe5, 0x2a, 0xd9, 0x81, 0x29, 0xec, 0x80, 0x55, 0xea, 0xf0, 0xbe, 0x9d, 0xe9, - 0xd3, 0xb7, 0x97, 0x52, 0xfb, 0x76, 0x9e, 0xf7, 0xed, 0x9e, 0xa0, 0x36, 0x62, 0x97, 0xea, 0x6c, - 0x99, 0xf8, 0x29, 0xe2, 0x29, 0xcb, 0xe8, 0x9d, 0x9b, 0x6b, 0xf8, 0xb8, 0x2d, 0xc4, 0x4f, 0x19, - 0x7e, 0x59, 0x85, 0x00, 0xed, 0x6b, 0x25, 0x9a, 0xe4, 0x43, 0xde, 0x82, 0xfc, 0xc6, 0xbd, 0xd0, - 0x99, 0x9f, 0x35, 0xfa, 0x91, 0x81, 0xe4, 0xe7, 0xa3, 0xc6, 0xd0, 0xbb, 0x67, 0x04, 0x0f, 0x40, - 0x1a, 0xb2, 0x08, 0x63, 0xd5, 0xca, 0xdd, 0x5a, 0xcb, 0x0b, 0xe7, 0x89, 0xba, 0xd3, 0x90, 0xae, - 0x7b, 0xbf, 0x1e, 0xb4, 0x3c, 0x33, 0x26, 0xbb, 0x44, 0x64, 0xc3, 0xb7, 0xea, 0xf8, 0xcd, 0x07, - 0x8e, 0x8f, 0xee, 0x3f, 0xc7, 0x8c, 0x6a, 0xb5, 0x12, 0x3e, 0x7c, 0x7b, 0x02, 0x10, 0xf3, 0x09, - 0xd2, 0x59, 0x08, 0x6d, 0xc0, 0xac, 0x98, 0x26, 0xe2, 0xd3, 0x6e, 0x5f, 0x2f, 0x59, 0xff, 0x5e, - 0x06, 0x37, 0x4c, 0xf2, 0x0a, 0x7a, 0x1c, 0xab, 0x07, 0x5e, 0xd4, 0x6b, 0x3a, 0xdd, 0x58, 0xc4, - 0x3b, 0x8e, 0x42, 0x5e, 0x83, 0xd1, 0xeb, 0x4e, 0x83, 0x86, 0xf2, 0x61, 0x07, 0x91, 0x77, 0x10, - 0xa2, 0x2b, 0x41, 0x39, 0x0e, 0x93, 0xe5, 0xf8, 0x44, 0x2a, 0x45, 0xf9, 0xb3, 0xca, 0x25, 0xf9, - 0xae, 0x83, 0xb2, 0x9c, 0x98, 0x80, 0x5a, 0x82, 0xad, 0x7a, 0xc3, 0x08, 0x1d, 0x9e, 0xca, 0xc1, - 0xfa, 0x93, 0x4c, 0xb4, 0x03, 0x90, 0x97, 0x21, 0x6f, 0x57, 0x55, 0xfb, 0xb9, 0x2b, 0x4c, 0xac, - 0xf9, 0x88, 0x40, 0x3e, 0x82, 0xe3, 0x1a, 0x1f, 0x9c, 0x45, 0xb4, 0xc9, 0x1a, 0xc4, 0x3f, 0xe6, - 0x25, 0xf4, 0xd5, 0xd0, 0x5a, 0xe2, 0x70, 0x8c, 0x58, 0x8b, 0xd2, 0x79, 0xa0, 0xe0, 0x1a, 0x15, - 0x2c, 0xd3, 0x8e, 0xcb, 0x79, 0x6b, 0x1f, 0xab, 0xf3, 0x6e, 0x22, 0x42, 0xfc, 0x63, 0xd3, 0x38, - 0x70, 0x77, 0x0d, 0xeb, 0x37, 0x33, 0xc6, 0xca, 0x56, 0x59, 0x87, 0x32, 0x87, 0x64, 0x1d, 0x7a, - 0x13, 0xa0, 0xd4, 0x0b, 0xbd, 0x95, 0x8e, 0xef, 0xb5, 0xb8, 0x76, 0x41, 0x04, 0x7d, 0x44, 0x9d, - 0x29, 0x45, 0xb0, 0x61, 0x55, 0xae, 0x90, 0xc9, 0x1a, 0x14, 0x57, 0x6e, 0xa1, 0x3f, 0x4e, 0xd4, - 0x55, 0xfc, 0x73, 0xf0, 0xc0, 0xa0, 0xf7, 0xd8, 0x11, 0xd7, 0xa7, 0x97, 0x12, 0x94, 0xd6, 0xef, - 0x65, 0x8c, 0xb9, 0xcd, 0x24, 0x32, 0xb9, 0x3c, 0x34, 0xd3, 0x82, 0xe4, 0xf2, 0x88, 0x16, 0xc7, - 0x5f, 0xcb, 0xc0, 0x89, 0x1a, 0xf5, 0x5d, 0xa7, 0xb5, 0xde, 0x6b, 0x6f, 0x53, 0xff, 0xae, 0xd3, - 0x72, 0x9b, 0xdc, 0x1d, 0x89, 0x0b, 0x9b, 0x17, 0x92, 0x0b, 0x25, 0x1d, 0x9f, 0x5f, 0xe0, 0x02, - 0x2c, 0xab, 0x77, 0xb0, 0xb0, 0x7e, 0x5f, 0x95, 0xea, 0x17, 0xb8, 0x74, 0x7a, 0xeb, 0x57, 0x33, - 0xf0, 0xc2, 0xa1, 0xb5, 0x90, 0xcb, 0x30, 0x26, 0xa3, 0x6d, 0x66, 0xb0, 0xe3, 0xd1, 0x20, 0x2b, - 0x19, 0x69, 0x53, 0x62, 0x91, 0x2f, 0xc1, 0x71, 0x9d, 0xd5, 0xa6, 0xef, 0xb8, 0x7a, 0x4c, 0xcb, - 0x94, 0x56, 0x87, 0x0c, 0x25, 0x2e, 0x19, 0xa5, 0x33, 0xb1, 0xfe, 0xcf, 0x8c, 0x96, 0xa1, 0xec, - 0x29, 0x95, 0x97, 0xaf, 0x19, 0xf2, 0xb2, 0x8c, 0xec, 0xa2, 0xbe, 0x8a, 0x95, 0xa5, 0xde, 0x71, - 0x66, 0x34, 0xc3, 0x42, 0x04, 0x7c, 0x23, 0x0b, 0x13, 0x77, 0x02, 0xea, 0xf3, 0x07, 0xce, 0xef, - 0xad, 0x98, 0x1e, 0xea, 0xbb, 0x86, 0x8a, 0xba, 0xf0, 0x47, 0x19, 0x54, 0x7c, 0xeb, 0x14, 0xac, - 0x37, 0xb4, 0xdc, 0x03, 0xd8, 0x1b, 0x98, 0x75, 0x00, 0xa1, 0x3c, 0x32, 0xc3, 0x9a, 0x99, 0x86, - 0x04, 0x73, 0xd1, 0xac, 0x91, 0x2f, 0xc0, 0xc8, 0x1d, 0x54, 0xe3, 0x99, 0xae, 0xa7, 0x8a, 0x3f, - 0x16, 0xf2, 0x4d, 0xba, 0xc7, 0xfe, 0xd4, 0xcf, 0x18, 0x2c, 0x23, 0x35, 0x18, 0x2b, 0xfb, 0x14, - 0xb3, 0x8a, 0xe5, 0x87, 0x77, 0x9f, 0x6a, 0x70, 0x92, 0xb8, 0xfb, 0x94, 0xe0, 0x64, 0xfd, 0x74, - 0x16, 0x48, 0xf4, 0x8d, 0x18, 0x8e, 0x3b, 0x78, 0x6a, 0x07, 0xfd, 0x7d, 0x63, 0xd0, 0xcf, 0x24, - 0x06, 0x9d, 0x7f, 0xde, 0x50, 0x63, 0xff, 0x5b, 0x19, 0x38, 0x91, 0x4e, 0x48, 0xce, 0xc1, 0xe8, - 0xc6, 0x66, 0x55, 0x7a, 0x2f, 0x8b, 0x4f, 0xf1, 0xba, 0x78, 0x2f, 0xb7, 0x45, 0x11, 0x79, 0x1d, - 0x46, 0x3f, 0xb0, 0xcb, 0xec, 0x1c, 0xd2, 0x42, 0x5f, 0x7e, 0xcd, 0xaf, 0x37, 0xcc, 0xa3, 0x48, - 0x20, 0xe9, 0x63, 0x9b, 0x7b, 0x62, 0x63, 0xfb, 0xcd, 0x2c, 0xcc, 0x94, 0x1a, 0x0d, 0x1a, 0x04, - 0x4c, 0xc8, 0xa1, 0x41, 0xf8, 0xd4, 0x0e, 0x6c, 0xba, 0x5f, 0xb2, 0xf1, 0x6d, 0x43, 0x8d, 0xea, - 0xef, 0x64, 0xe0, 0xb8, 0xa4, 0xba, 0xef, 0xd2, 0x07, 0x9b, 0x7b, 0x3e, 0x0d, 0xf6, 0xbc, 0x56, - 0x73, 0xe8, 0xf8, 0xba, 0x4c, 0xd0, 0xc3, 0x60, 0x7c, 0xfa, 0x6b, 0xf7, 0x0e, 0x42, 0x0c, 0x41, - 0x8f, 0x07, 0xec, 0xbb, 0x0c, 0x63, 0xa5, 0x6e, 0xd7, 0xf7, 0xee, 0xf3, 0x65, 0x3f, 0x25, 0xbc, - 0xc9, 0x38, 0xc8, 0xf0, 0x3e, 0xe3, 0x20, 0xd6, 0x8c, 0x65, 0xda, 0xe1, 0x91, 0x50, 0xa6, 0x78, - 0x33, 0x9a, 0xb4, 0xa3, 0xcb, 0xb0, 0x58, 0x6e, 0xd5, 0x80, 0x54, 0x7d, 0xaf, 0xed, 0x85, 0xb4, - 0xc9, 0xbf, 0x07, 0x9d, 0xf6, 0x0e, 0x8d, 0x00, 0xb1, 0xe9, 0x86, 0x2d, 0x23, 0x02, 0x44, 0xc8, - 0x00, 0x36, 0x87, 0x5b, 0xff, 0xeb, 0x08, 0x4c, 0xea, 0xbd, 0x43, 0x2c, 0x1e, 0x8c, 0xd3, 0xf3, - 0x75, 0xcf, 0x51, 0x07, 0x21, 0xb6, 0x28, 0x89, 0x1c, 0xae, 0xb3, 0x87, 0x3a, 0x5c, 0x6f, 0xc1, - 0x54, 0xd5, 0xf7, 0xba, 0x5e, 0x40, 0x9b, 0x3c, 0xdb, 0x24, 0xdf, 0x0a, 0x8f, 0x69, 0x77, 0x3c, - 0x36, 0x90, 0xf8, 0x4e, 0x88, 0x1a, 0x8e, 0xae, 0xc0, 0xae, 0xc7, 0x73, 0x51, 0x9a, 0x7c, 0xb8, - 0x09, 0x82, 0x13, 0x88, 0x80, 0x47, 0xca, 0x04, 0x81, 0x41, 0x4c, 0x13, 0x04, 0x06, 0xd1, 0xd7, - 0xda, 0xc8, 0x93, 0x5a, 0x6b, 0xe4, 0xa7, 0x33, 0x30, 0x51, 0xea, 0x74, 0x84, 0x23, 0xf7, 0x21, - 0x9e, 0x6c, 0x5f, 0x12, 0x56, 0x08, 0x6f, 0x7f, 0x22, 0x2b, 0x04, 0x94, 0x5b, 0x02, 0x94, 0x54, - 0xa3, 0x0a, 0xf5, 0x5b, 0x8e, 0xd6, 0x0e, 0xf2, 0x36, 0x14, 0xd5, 0x24, 0xaf, 0x74, 0x9a, 0xf4, - 0x21, 0x0d, 0xe6, 0xc7, 0xce, 0xe6, 0x2e, 0x4c, 0x89, 0x50, 0x67, 0xba, 0x64, 0x1a, 0x47, 0x24, - 0x9b, 0x00, 0x8e, 0x9a, 0x5d, 0xb1, 0x3c, 0x1f, 0xc9, 0xe9, 0x27, 0xa4, 0x67, 0xfc, 0x8d, 0x0f, - 0x3d, 0xba, 0xf4, 0x1c, 0xf1, 0x21, 0x6d, 0x98, 0xe1, 0x49, 0x36, 0x30, 0xf9, 0x26, 0x86, 0xfe, - 0x84, 0x43, 0xc7, 0xe1, 0x65, 0xa1, 0xab, 0x7a, 0x56, 0xa4, 0xee, 0xc0, 0x7c, 0x9e, 0xf5, 0x94, - 0x38, 0xa0, 0x71, 0xde, 0x3c, 0x98, 0x9c, 0x7d, 0x32, 0xd9, 0x5e, 0x3e, 0xe9, 0xbf, 0x99, 0x81, - 0x13, 0xfa, 0xa4, 0xaf, 0xf5, 0xb6, 0xdb, 0x2e, 0xde, 0x05, 0xc9, 0x25, 0x18, 0x17, 0x73, 0x52, - 0x5d, 0xa2, 0x92, 0x11, 0x4c, 0x23, 0x14, 0xb2, 0xc2, 0xa6, 0x21, 0xe3, 0x21, 0xa4, 0xee, 0x63, - 0xb1, 0x7d, 0x8a, 0x15, 0x45, 0x09, 0x9c, 0x7c, 0xfc, 0x6d, 0xce, 0x4f, 0x06, 0xb1, 0xde, 0x83, - 0x59, 0x73, 0x24, 0x6a, 0x34, 0x24, 0x17, 0x61, 0x4c, 0x0e, 0x5f, 0x26, 0x7d, 0xf8, 0x64, 0xb9, - 0xb5, 0x05, 0x24, 0x41, 0x1f, 0xa0, 0xb9, 0x10, 0x0d, 0xa5, 0x39, 0x9b, 0x7c, 0xac, 0x4b, 0x20, - 0xaa, 0xe4, 0xc6, 0x13, 0x86, 0xfd, 0x2a, 0x23, 0xb5, 0xfe, 0x64, 0x1a, 0x8e, 0xa5, 0xec, 0xb9, - 0x87, 0xc8, 0x44, 0x0b, 0xe6, 0x06, 0x31, 0xae, 0x1c, 0x61, 0xe5, 0xb6, 0xf0, 0x9e, 0x4c, 0x3e, - 0x3b, 0x60, 0x3b, 0x18, 0x94, 0x91, 0xf6, 0xd3, 0x90, 0x8b, 0x74, 0x5f, 0xf5, 0x91, 0x27, 0xe6, - 0xab, 0xbe, 0x04, 0x53, 0xe2, 0xab, 0xc4, 0x76, 0x35, 0x1a, 0x69, 0x73, 0x7d, 0x5e, 0x50, 0x4f, - 0x6c, 0x5b, 0x26, 0x09, 0xe7, 0x11, 0x78, 0xad, 0xfb, 0x54, 0xf0, 0x18, 0xd3, 0x79, 0x60, 0x41, - 0x2a, 0x0f, 0x8d, 0x84, 0xfc, 0xdb, 0x98, 0x73, 0x00, 0x21, 0xfa, 0x9e, 0x55, 0x18, 0xb4, 0x67, - 0x35, 0x9f, 0xcc, 0x9e, 0x75, 0x46, 0xb6, 0x31, 0x7d, 0xef, 0x4a, 0x69, 0x16, 0xf9, 0x85, 0x0c, - 0xcc, 0x72, 0x87, 0x69, 0xbd, 0xb1, 0x03, 0x9d, 0x60, 0x1b, 0x4f, 0xa6, 0xb1, 0xcf, 0x05, 0x58, - 0x6d, 0x9f, 0xb6, 0x26, 0x1b, 0x45, 0xbe, 0x0f, 0x40, 0xad, 0xa8, 0x60, 0x1e, 0x70, 0xa9, 0x3d, - 0x97, 0xb2, 0x0b, 0x28, 0xa4, 0x28, 0xee, 0x69, 0xa8, 0xe8, 0x8c, 0x4c, 0x13, 0x0a, 0x4a, 0x7e, - 0x10, 0xe6, 0xd8, 0x7a, 0x51, 0x10, 0x11, 0xde, 0x61, 0x7e, 0x02, 0x6b, 0xf9, 0x6c, 0x7f, 0x99, - 0xe8, 0x52, 0x1a, 0x19, 0x8f, 0xdb, 0x16, 0x65, 0xd8, 0x0a, 0xdb, 0xba, 0xba, 0x25, 0x8d, 0x02, - 0xe3, 0xa5, 0x60, 0xeb, 0x79, 0x6c, 0xd2, 0x3e, 0xfb, 0xdb, 0x29, 0xb9, 0x16, 0xf8, 0xfe, 0x16, - 0x98, 0xce, 0x6c, 0x08, 0x22, 0x1f, 0x00, 0x51, 0x9e, 0xc6, 0x1c, 0x46, 0x65, 0xdc, 0x52, 0xae, - 0xda, 0x8d, 0x3c, 0x96, 0x7d, 0x59, 0xac, 0x4f, 0x92, 0x24, 0x31, 0xa1, 0x30, 0x27, 0x3e, 0x9a, - 0x41, 0x65, 0x4e, 0x83, 0x60, 0x7e, 0xda, 0x08, 0x9e, 0x11, 0x95, 0x44, 0xa9, 0xb8, 0xb4, 0xc4, - 0x08, 0x86, 0xca, 0x29, 0x8d, 0x1d, 0xb9, 0x06, 0xe3, 0xe8, 0x51, 0xb6, 0x2a, 0x8d, 0xa0, 0x84, - 0x41, 0x06, 0xfa, 0x9e, 0xd5, 0xf7, 0x4c, 0x53, 0xa6, 0x08, 0x95, 0x5d, 0x07, 0x96, 0xfd, 0x7d, - 0xbb, 0xd7, 0x41, 0x05, 0xac, 0xd0, 0x77, 0x34, 0xfd, 0xfd, 0xba, 0xdf, 0x33, 0x5d, 0x0e, 0x11, - 0x89, 0x7c, 0x15, 0x26, 0x6e, 0x3b, 0x0f, 0xa5, 0xfe, 0x55, 0x28, 0x59, 0x87, 0x4a, 0x22, 0xdd, - 0x76, 0x1e, 0xd6, 0x9b, 0xbd, 0x78, 0xc0, 0x50, 0x9e, 0x44, 0x5a, 0x63, 0x49, 0xbe, 0x0c, 0xa0, - 0x69, 0x85, 0xc9, 0xa1, 0x15, 0xbc, 0x20, 0xc3, 0xc1, 0xa4, 0x6a, 0x8b, 0x91, 0xbf, 0xc6, 0x30, - 0x26, 0x39, 0xcc, 0x7d, 0x7a, 0x92, 0xc3, 0xf1, 0x4f, 0x4f, 0x72, 0x38, 0xbd, 0x0d, 0xa7, 0xfa, - 0x2e, 0x9d, 0x94, 0x08, 0x7d, 0x97, 0xcd, 0x08, 0x7d, 0xa7, 0xfa, 0x1d, 0xb1, 0x81, 0x19, 0xea, - 0xf6, 0x58, 0x71, 0xae, 0xbf, 0x74, 0xf2, 0xb3, 0x99, 0xd8, 0x91, 0x2b, 0x2e, 0x16, 0x3c, 0xaa, - 0x7a, 0x3f, 0x99, 0x24, 0x8b, 0x69, 0x9e, 0xf8, 0xa1, 0x9c, 0x8d, 0x2e, 0x34, 0xb1, 0x6c, 0x96, - 0xfc, 0x78, 0x7e, 0xcc, 0xd3, 0xd7, 0xfa, 0xc3, 0x1c, 0x10, 0xde, 0xc2, 0xb2, 0xd3, 0x75, 0xd0, - 0x0f, 0xce, 0x45, 0x67, 0xfe, 0xa2, 0x60, 0xe1, 0x6c, 0xb7, 0xa8, 0x1e, 0x09, 0x43, 0x58, 0x6e, - 0xaa, 0xb2, 0x7a, 0xfc, 0xb6, 0x90, 0x20, 0xec, 0xb3, 0x5f, 0x64, 0x1f, 0x67, 0xbf, 0xf8, 0x2a, - 0x3c, 0x5b, 0xea, 0x62, 0xba, 0x25, 0x59, 0xcb, 0x75, 0xcf, 0x97, 0x2b, 0xdd, 0xf0, 0xb0, 0x70, - 0x14, 0x5a, 0xa2, 0xa5, 0x83, 0x58, 0x68, 0x87, 0x3d, 0x1b, 0xdc, 0x6e, 0xa8, 0x7b, 0xec, 0xca, - 0xc3, 0xbe, 0x8b, 0x25, 0x29, 0x87, 0x3d, 0x27, 0x91, 0x3c, 0x5c, 0x5f, 0x1e, 0xf6, 0x18, 0x62, - 0x3d, 0xe2, 0xe1, 0xfa, 0xb4, 0x8f, 0xc0, 0xa0, 0x48, 0xc8, 0x3b, 0x30, 0x51, 0xea, 0x85, 0x9e, - 0x60, 0x2c, 0x4c, 0x8e, 0x23, 0xe3, 0x60, 0xd1, 0x14, 0xe3, 0xfe, 0x10, 0xa1, 0x5b, 0xbf, 0x9e, - 0x85, 0x53, 0xc9, 0xe1, 0x15, 0xa5, 0x6a, 0x92, 0x65, 0x0e, 0x99, 0x64, 0x69, 0xb3, 0x81, 0x6b, - 0xdc, 0x9f, 0xd8, 0x6c, 0xe0, 0x59, 0x9b, 0x3e, 0xe1, 0x6c, 0xa8, 0xc1, 0x84, 0x7e, 0x68, 0xe4, - 0x3f, 0xe9, 0xa1, 0xa1, 0x73, 0xc1, 0xfc, 0x47, 0x5a, 0x7a, 0x9d, 0xd7, 0xd3, 0x1c, 0x1c, 0x78, - 0x80, 0x44, 0x0e, 0x36, 0x7d, 0x1b, 0xa4, 0xa2, 0x26, 0x9b, 0xaa, 0xa8, 0x91, 0x37, 0xfd, 0x5c, - 0xea, 0x4d, 0x7f, 0x19, 0x66, 0x6a, 0xbd, 0x6d, 0x59, 0x37, 0x22, 0xe6, 0x0d, 0x1f, 0xad, 0xba, - 0x6c, 0xbf, 0x19, 0x30, 0xc5, 0x20, 0xb1, 0x7e, 0x2c, 0x0b, 0x93, 0xd5, 0x56, 0x6f, 0xd7, 0xed, - 0x2c, 0x3b, 0xa1, 0xf3, 0xd4, 0xea, 0x8e, 0xde, 0x34, 0x74, 0x47, 0xca, 0x8f, 0x47, 0x7d, 0xd8, - 0x50, 0x8a, 0xa3, 0x6f, 0x65, 0x60, 0x26, 0x22, 0xe1, 0x27, 0xc0, 0x2a, 0xe4, 0xd9, 0x0f, 0x71, - 0xa3, 0x3a, 0x9b, 0x60, 0xcc, 0x73, 0x45, 0xa8, 0xbf, 0x84, 0x36, 0xc7, 0x8c, 0xa6, 0x8e, 0x1c, - 0x4e, 0x7f, 0x8e, 0x27, 0x1d, 0x3f, 0x7a, 0x8e, 0x88, 0x5f, 0xcb, 0x40, 0x31, 0xfe, 0x25, 0xe4, - 0x16, 0x8c, 0x31, 0x4e, 0xae, 0x4a, 0x60, 0xfe, 0x62, 0x9f, 0x6f, 0xbe, 0x24, 0xd0, 0x78, 0xf3, - 0xb0, 0xf3, 0x29, 0x87, 0xd8, 0x92, 0xc3, 0x69, 0x1b, 0x26, 0x75, 0xac, 0x94, 0xd6, 0xbd, 0x66, - 0x1e, 0x7b, 0x27, 0xd2, 0xfb, 0xc1, 0xc8, 0x6c, 0x61, 0xb4, 0x5a, 0x9c, 0x68, 0xe7, 0x8d, 0xc9, - 0x85, 0x7d, 0x15, 0x9b, 0x37, 0x7c, 0x9a, 0x2d, 0x46, 0x31, 0x5b, 0xf5, 0x79, 0x96, 0x32, 0xa1, - 0x15, 0x1e, 0x79, 0x0d, 0x46, 0x79, 0x7d, 0x7a, 0xe0, 0xf6, 0x2e, 0x42, 0x74, 0xe1, 0x8b, 0xe3, - 0x58, 0x7f, 0x37, 0x07, 0x27, 0xa2, 0xe6, 0xdd, 0xe9, 0x36, 0x9d, 0x90, 0x56, 0x1d, 0xdf, 0x69, - 0x07, 0x87, 0xac, 0x80, 0x0b, 0x89, 0xa6, 0x61, 0x20, 0x6f, 0xd9, 0x34, 0xad, 0x41, 0x56, 0xac, - 0x41, 0xa8, 0x58, 0xe3, 0x0d, 0x92, 0xcd, 0x20, 0xb7, 0x20, 0x57, 0xa3, 0xa1, 0xd8, 0x8b, 0xce, - 0x27, 0x7a, 0x55, 0x6f, 0xd7, 0xa5, 0x1a, 0x0d, 0xf9, 0x20, 0xf2, 0xa8, 0x14, 0xd4, 0x08, 0x09, - 0x57, 0xa3, 0x21, 0xd9, 0x82, 0xd1, 0x95, 0x87, 0x5d, 0xda, 0x08, 0x45, 0x86, 0x93, 0x8b, 0x83, - 0xf9, 0x71, 0x5c, 0x2d, 0xc1, 0x09, 0x45, 0x80, 0xde, 0x59, 0x1c, 0xe5, 0xf4, 0x35, 0x28, 0xc8, - 0xca, 0x8f, 0x32, 0x73, 0x4f, 0xbf, 0x09, 0x13, 0x5a, 0x25, 0x47, 0x9a, 0xf4, 0x7f, 0x96, 0x81, - 0x51, 0x76, 0x12, 0xdc, 0xbd, 0xf6, 0x94, 0xee, 0x48, 0x57, 0x8d, 0x1d, 0x69, 0x56, 0x8b, 0x3a, - 0x89, 0xeb, 0xf2, 0xda, 0x21, 0x7b, 0xd1, 0x01, 0x3b, 0x57, 0x14, 0x32, 0xb9, 0x01, 0x63, 0xc2, - 0xe4, 0x42, 0xd8, 0xc6, 0xea, 0x61, 0x2c, 0xa5, 0x31, 0x86, 0xba, 0x95, 0x79, 0xdd, 0xf8, 0x35, - 0x56, 0x52, 0x93, 0xe5, 0x28, 0x04, 0x99, 0x91, 0xa9, 0xca, 0x43, 0xc7, 0x23, 0x1e, 0x86, 0x51, - 0xcb, 0x01, 0xd7, 0xc7, 0xa3, 0xbb, 0x24, 0x34, 0xd8, 0xb9, 0x41, 0x4c, 0x4e, 0xc8, 0x44, 0x3e, - 0xa9, 0xca, 0xed, 0x7f, 0x7e, 0x8c, 0x07, 0x30, 0x94, 0x0d, 0x7b, 0x17, 0x26, 0xaf, 0x7b, 0xfe, - 0x03, 0xc7, 0xe7, 0x61, 0xa9, 0xc4, 0x93, 0x31, 0xbb, 0x33, 0x4c, 0xed, 0x70, 0x38, 0x0f, 0x6c, - 0xf5, 0xdd, 0x83, 0x85, 0xfc, 0x92, 0xe7, 0xb5, 0x6c, 0x03, 0x9d, 0x6c, 0xc0, 0xd4, 0x6d, 0xe7, - 0xa1, 0x76, 0xdb, 0xe1, 0x9e, 0x04, 0x17, 0x1f, 0x1d, 0x2c, 0x9c, 0x62, 0xd7, 0xa5, 0xc3, 0xed, - 0x5f, 0x4c, 0x7a, 0xe2, 0xc2, 0x74, 0xd5, 0xf3, 0x43, 0x51, 0x09, 0xbb, 0x83, 0xe7, 0xfa, 0x58, - 0xf0, 0x5c, 0x4e, 0xb5, 0xe0, 0x39, 0xd5, 0xf5, 0xfc, 0xb0, 0xbe, 0xa3, 0xc8, 0x8d, 0x68, 0x29, - 0x06, 0x63, 0xf2, 0x2e, 0xcc, 0x96, 0xa9, 0x1f, 0xba, 0x3b, 0x6e, 0xc3, 0x09, 0xe9, 0x75, 0xcf, - 0x6f, 0x3b, 0x52, 0x90, 0x44, 0x05, 0x20, 0x1a, 0x1a, 0xec, 0x20, 0xd8, 0x4e, 0x62, 0x92, 0x8f, - 0xd2, 0x7c, 0x33, 0x46, 0x22, 0x13, 0xa0, 0x14, 0xdf, 0x8c, 0x7e, 0x26, 0x40, 0x49, 0x2f, 0x8d, - 0xdd, 0x41, 0x26, 0x82, 0x85, 0xa5, 0x2b, 0xe2, 0xde, 0x75, 0xb8, 0x09, 0xa0, 0x1a, 0xb7, 0x3e, - 0xa6, 0x80, 0x8b, 0x90, 0x5b, 0xaa, 0x5e, 0x47, 0xb5, 0xb5, 0xb4, 0xb0, 0xe8, 0xec, 0x39, 0x9d, - 0x06, 0x0a, 0x78, 0xc2, 0x2c, 0x57, 0xdf, 0xf0, 0x96, 0xaa, 0xd7, 0x89, 0x03, 0xc7, 0xaa, 0xd4, - 0x6f, 0xbb, 0xe1, 0x17, 0xaf, 0x5c, 0xd1, 0x06, 0xaa, 0x80, 0x4d, 0xbb, 0x2c, 0x9a, 0xb6, 0xd0, - 0x45, 0x94, 0xfa, 0xc3, 0x2b, 0x57, 0x52, 0x87, 0x43, 0x35, 0x2c, 0x8d, 0x17, 0x59, 0x81, 0xe9, - 0xdb, 0xce, 0xc3, 0xc8, 0x9a, 0x3a, 0x10, 0x5e, 0x6e, 0x67, 0xe4, 0xc4, 0x8a, 0x2c, 0xb1, 0x0d, - 0x37, 0x76, 0x93, 0x88, 0xc9, 0xe7, 0xd1, 0xf4, 0x0a, 0x84, 0x7f, 0xc0, 0x69, 0x79, 0x97, 0x97, - 0xae, 0x90, 0xba, 0x90, 0xa9, 0xa1, 0x93, 0x3b, 0xea, 0x96, 0xc1, 0xa5, 0x74, 0x91, 0x6b, 0xe6, - 0xb2, 0x7e, 0xcb, 0xe0, 0x37, 0x68, 0xe3, 0xb3, 0x66, 0xd4, 0xfd, 0x8e, 0x9b, 0x97, 0xdb, 0x26, - 0x97, 0xe4, 0xe5, 0x65, 0xf2, 0xe8, 0x97, 0x17, 0x0a, 0xf9, 0x35, 0xaf, 0x71, 0x4f, 0x84, 0x78, - 0xf9, 0x80, 0x2d, 0xf7, 0x96, 0xd7, 0xb8, 0xf7, 0xe4, 0x4c, 0x1f, 0x91, 0x3d, 0x59, 0x67, 0x4d, - 0x65, 0xb3, 0x40, 0xf4, 0x89, 0x30, 0xa7, 0x9b, 0x53, 0xd2, 0xbb, 0x56, 0xc6, 0xe5, 0x0a, 0x3e, - 0x69, 0x64, 0xd7, 0xda, 0x26, 0x39, 0xa1, 0x50, 0x5c, 0xa6, 0xc1, 0xbd, 0xd0, 0xeb, 0x96, 0x5b, - 0x6e, 0x77, 0xdb, 0x73, 0xfc, 0x26, 0x2a, 0x6d, 0xd2, 0xd6, 0xf7, 0xcb, 0xa9, 0xeb, 0x7b, 0xb6, - 0xc9, 0xe9, 0xeb, 0x0d, 0xc9, 0xc0, 0x4e, 0xb0, 0x24, 0x1f, 0xc1, 0x34, 0x9b, 0xdc, 0x2b, 0x0f, - 0x43, 0xda, 0xe1, 0x23, 0x3f, 0x8b, 0x27, 0xf3, 0x9c, 0x16, 0xee, 0x57, 0x15, 0xf2, 0x39, 0x85, - 0x8b, 0x9d, 0x2a, 0x02, 0x23, 0x3c, 0x8e, 0xc1, 0x8a, 0x34, 0x61, 0xfe, 0xb6, 0xf3, 0x50, 0xcb, - 0x99, 0xa3, 0x4d, 0x52, 0x82, 0x13, 0x0c, 0x93, 0xfe, 0xb2, 0x09, 0x16, 0x85, 0xe5, 0xeb, 0x33, - 0x5f, 0xfb, 0x72, 0x22, 0xdf, 0x0f, 0x27, 0xc5, 0x67, 0x2d, 0x63, 0x0c, 0x7c, 0xcf, 0xdf, 0xaf, - 0xed, 0x39, 0xe8, 0x48, 0x71, 0xec, 0x68, 0x1b, 0xa2, 0xec, 0xb0, 0xa6, 0xe4, 0x53, 0x0f, 0x38, - 0x23, 0xbb, 0x5f, 0x0d, 0xe4, 0x63, 0x98, 0xe6, 0xba, 0xfa, 0x55, 0x2f, 0x08, 0xf1, 0x12, 0x3a, - 0x77, 0x34, 0xfb, 0x60, 0xfe, 0x00, 0xc0, 0x2d, 0xea, 0x63, 0x97, 0xd6, 0x18, 0x67, 0xf2, 0x36, - 0x4c, 0x54, 0xdd, 0x0e, 0x0f, 0x60, 0x55, 0xa9, 0xa2, 0xce, 0x49, 0x9c, 0x3f, 0x5d, 0xb7, 0x53, - 0x97, 0x37, 0xc1, 0xae, 0xda, 0x2e, 0x74, 0x6c, 0xb2, 0x05, 0x13, 0xb5, 0xda, 0xea, 0x75, 0x97, - 0x1d, 0x80, 0xdd, 0xfd, 0xf9, 0x13, 0x7d, 0x5a, 0x79, 0x2e, 0xb5, 0x95, 0x53, 0x41, 0xb0, 0x87, - 0x89, 0x45, 0xeb, 0x0d, 0xaf, 0xbb, 0x6f, 0xeb, 0x9c, 0x52, 0x6c, 0x66, 0x4f, 0x3e, 0x61, 0x9b, - 0xd9, 0x0a, 0xcc, 0x68, 0x96, 0x75, 0x68, 0x55, 0x37, 0x1f, 0xc5, 0x6b, 0xd2, 0x6d, 0x64, 0xe3, - 0xfe, 0x5c, 0x71, 0x3a, 0x69, 0x2c, 0x7b, 0xea, 0xa8, 0xc6, 0xb2, 0x2e, 0xcc, 0xf2, 0xc1, 0x10, - 0xf3, 0x00, 0x47, 0xfa, 0x74, 0x9f, 0x3e, 0xbc, 0x98, 0xda, 0x87, 0xc7, 0xc4, 0x48, 0xcb, 0x49, - 0x86, 0x6f, 0x53, 0x49, 0xae, 0x64, 0x07, 0x88, 0x00, 0x8a, 0xb4, 0xa6, 0x58, 0xd7, 0xb3, 0x7d, - 0xea, 0x7a, 0x31, 0xb5, 0xae, 0x69, 0x59, 0xd7, 0x36, 0xaf, 0x26, 0x85, 0x23, 0xe9, 0xc8, 0x7a, - 0xe4, 0xfc, 0xc2, 0x8e, 0x7d, 0x0e, 0xc7, 0x4e, 0x2a, 0x0d, 0x93, 0x08, 0xe8, 0xf9, 0xb8, 0x10, - 0x9f, 0xb4, 0xf1, 0x7e, 0x4f, 0xe1, 0x4c, 0x1e, 0xc2, 0x89, 0x64, 0x2b, 0xb0, 0xce, 0x33, 0x58, - 0xe7, 0x19, 0xa3, 0xce, 0x38, 0x12, 0x9f, 0x37, 0xe6, 0x67, 0xc5, 0x6b, 0xed, 0xc3, 0x5f, 0x24, - 0xfe, 0x4f, 0x31, 0xb1, 0xfd, 0xa7, 0xd9, 0xd8, 0xa6, 0x4d, 0x2a, 0x30, 0x26, 0xc6, 0x42, 0x48, - 0xb1, 0xc9, 0x1e, 0x3f, 0x93, 0xda, 0xe3, 0x63, 0x62, 0x58, 0x6d, 0x49, 0x4f, 0x1e, 0x30, 0x56, - 0x68, 0xaf, 0x2c, 0xc4, 0xfe, 0x2f, 0xf3, 0x3d, 0x19, 0x41, 0xc6, 0xe9, 0xb3, 0x7c, 0x74, 0x6f, - 0x0d, 0xd3, 0x19, 0x08, 0x8f, 0x21, 0x59, 0x1b, 0xb9, 0xc7, 0xe3, 0x83, 0xe7, 0x94, 0xc9, 0xbf, - 0x19, 0x0c, 0xfc, 0x89, 0x55, 0xc8, 0x6a, 0xb1, 0x7e, 0x33, 0x03, 0x53, 0xc6, 0xae, 0x4f, 0xae, - 0x69, 0xfe, 0x2c, 0x91, 0x3b, 0xa6, 0x81, 0x83, 0x1b, 0x41, 0xdc, 0xd3, 0xe5, 0x9a, 0x30, 0x98, - 0xcd, 0xf6, 0xa7, 0x4b, 0xcd, 0xee, 0x3b, 0x58, 0x07, 0xa5, 0xf2, 0x8d, 0xe4, 0xfb, 0xe4, 0x1b, - 0xf9, 0xc5, 0x53, 0x30, 0x6d, 0x5e, 0x0b, 0xd8, 0x3d, 0x1d, 0x9f, 0x4c, 0xa4, 0xaa, 0x98, 0xe7, - 0xd6, 0x44, 0x88, 0x91, 0x5b, 0x13, 0x21, 0xe4, 0x25, 0x00, 0x65, 0xb9, 0x28, 0xb5, 0xc1, 0x23, - 0x8f, 0x0e, 0x16, 0x32, 0xaf, 0xdb, 0x5a, 0x01, 0xf9, 0x0a, 0xc0, 0xba, 0xd7, 0xa4, 0x2a, 0xa9, - 0xd1, 0x80, 0x67, 0xc3, 0x97, 0x13, 0xb1, 0x73, 0x8f, 0x77, 0xbc, 0x26, 0x4d, 0x06, 0xca, 0xd5, - 0x38, 0x92, 0xb7, 0x60, 0xc4, 0xee, 0xb5, 0xa8, 0xd4, 0x1a, 0x4e, 0xc8, 0xdd, 0xb7, 0xd7, 0xa2, - 0x5a, 0xc2, 0xec, 0x5e, 0xdc, 0x22, 0x86, 0x01, 0xc8, 0xfb, 0x3c, 0xa6, 0xae, 0x88, 0x82, 0x34, - 0x12, 0xe9, 0xc7, 0xb5, 0x53, 0x39, 0x11, 0x07, 0x49, 0x23, 0x21, 0x1b, 0x30, 0xa6, 0x2b, 0x76, - 0x35, 0xc7, 0x48, 0xfd, 0xd1, 0x40, 0xbb, 0x79, 0x89, 0x6c, 0x48, 0x71, 0x9d, 0xaf, 0xe4, 0x42, - 0xde, 0x81, 0x71, 0xc6, 0x9e, 0x2d, 0xe1, 0x40, 0x48, 0xdc, 0xa8, 0x05, 0xd7, 0x1a, 0xc4, 0x76, - 0x00, 0x23, 0x56, 0x91, 0x22, 0x20, 0x1f, 0x61, 0xb6, 0x20, 0xd1, 0xd5, 0x03, 0x9f, 0x93, 0xcf, - 0x27, 0xba, 0x1a, 0xd3, 0x07, 0x25, 0x33, 0x3f, 0x2a, 0x7e, 0x64, 0x57, 0xc5, 0xd0, 0x19, 0x26, - 0x0e, 0xf2, 0x2b, 0x89, 0x0a, 0xe6, 0x65, 0x58, 0x98, 0x64, 0x72, 0x2a, 0x83, 0x2f, 0xe9, 0x42, - 0x31, 0x12, 0x78, 0x44, 0x5d, 0x30, 0xa8, 0xae, 0xd7, 0x13, 0x75, 0xe9, 0x03, 0x98, 0xa8, 0x2e, - 0xc1, 0x9d, 0x34, 0x61, 0x5a, 0x6e, 0x9e, 0xa2, 0xbe, 0x89, 0x41, 0xf5, 0xbd, 0x94, 0xa8, 0xef, - 0x58, 0x73, 0x3b, 0x59, 0x4f, 0x8c, 0x27, 0x79, 0x07, 0xa6, 0x24, 0x04, 0xd7, 0x87, 0x48, 0x31, - 0x89, 0x5a, 0x91, 0xe6, 0x36, 0xda, 0x4a, 0x9b, 0x29, 0xbb, 0x74, 0x64, 0x9d, 0x9a, 0xcf, 0x8e, - 0x29, 0x83, 0x3a, 0x3e, 0x2b, 0x4c, 0x64, 0xf2, 0x21, 0x4c, 0x54, 0xda, 0xec, 0x43, 0xbc, 0x8e, - 0x13, 0x52, 0xe1, 0x34, 0x23, 0x9f, 0xc6, 0xb5, 0x12, 0x6d, 0xaa, 0xf2, 0xfc, 0x87, 0x51, 0x91, - 0x91, 0xff, 0x30, 0x02, 0xb3, 0xce, 0xe3, 0x9a, 0x7c, 0x31, 0x87, 0xa5, 0x43, 0xcd, 0x99, 0x94, - 0xe7, 0x69, 0x8d, 0xbd, 0x88, 0x36, 0xc6, 0xa0, 0xf2, 0x11, 0x24, 0x16, 0x6d, 0x4c, 0xe7, 0x49, - 0xde, 0x85, 0x09, 0x11, 0x22, 0xbe, 0x64, 0xaf, 0x07, 0xf3, 0x45, 0xfc, 0x78, 0x74, 0x03, 0x96, - 0xd1, 0xe4, 0xeb, 0x8e, 0x1f, 0xb3, 0xc3, 0x8a, 0xf0, 0xc9, 0x17, 0x61, 0x6e, 0xcb, 0xed, 0x34, - 0xbd, 0x07, 0x81, 0x38, 0xa6, 0xc4, 0x46, 0x37, 0x1b, 0x79, 0x41, 0x3c, 0xe0, 0xe5, 0x4a, 0x4e, - 0x49, 0x6c, 0x7c, 0xa9, 0x1c, 0xc8, 0x5f, 0x4a, 0x70, 0xe6, 0x33, 0x88, 0x0c, 0x9a, 0x41, 0x8b, - 0x89, 0x19, 0x94, 0xac, 0x3e, 0x3e, 0x9d, 0x52, 0xab, 0x21, 0x1e, 0x10, 0xf3, 0x7c, 0xbf, 0xe9, - 0xb9, 0x9d, 0xf9, 0x63, 0xb8, 0x17, 0x3e, 0x1b, 0x77, 0xbc, 0x45, 0x3c, 0x9e, 0x8c, 0x9f, 0x67, - 0xa6, 0x8e, 0xcb, 0xa3, 0x1f, 0x7b, 0x86, 0x4a, 0x36, 0x85, 0x35, 0xf9, 0x10, 0x26, 0xd9, 0xff, - 0xea, 0xc2, 0x3c, 0x67, 0x18, 0x34, 0x69, 0x98, 0xa2, 0x1e, 0x1c, 0x23, 0x8c, 0x61, 0x9f, 0x72, - 0x97, 0x36, 0x58, 0x91, 0x37, 0x01, 0x98, 0xe4, 0x24, 0xb6, 0xe3, 0xe3, 0x51, 0x70, 0x37, 0x94, - 0xb7, 0x92, 0x1b, 0x71, 0x84, 0xcc, 0x6e, 0xf1, 0xec, 0x57, 0xad, 0xd7, 0xf4, 0xd8, 0xda, 0x38, - 0x81, 0xb4, 0xdc, 0x17, 0x89, 0xd1, 0x06, 0x1c, 0x6e, 0xf8, 0x22, 0x45, 0xe8, 0x64, 0x15, 0x66, - 0x30, 0x08, 0x5f, 0xa5, 0x49, 0x3b, 0x21, 0xbe, 0xb0, 0xcd, 0x9f, 0xd4, 0x5e, 0x20, 0x59, 0x51, - 0xdd, 0x55, 0x65, 0xba, 0x9c, 0x1d, 0x23, 0x23, 0x01, 0x1c, 0x8b, 0x76, 0x97, 0xe8, 0x3d, 0x73, - 0x1e, 0x3b, 0x49, 0x4a, 0x97, 0x49, 0x0c, 0xbe, 0x1f, 0xb3, 0x11, 0xd1, 0x36, 0x2e, 0xa9, 0xb8, - 0xd6, 0x2b, 0x4c, 0xe3, 0x4e, 0x6c, 0x20, 0x37, 0xca, 0xd5, 0x78, 0x94, 0xba, 0x53, 0xf8, 0x05, - 0x38, 0xcc, 0xbb, 0x8d, 0x28, 0x57, 0x5b, 0x4a, 0xa4, 0xba, 0x14, 0x6a, 0xf2, 0x75, 0x38, 0x2e, - 0x77, 0x10, 0x51, 0x24, 0xe6, 0xf5, 0xe9, 0x23, 0xee, 0xc4, 0xcd, 0x6d, 0x55, 0x75, 0x62, 0x4a, - 0xa7, 0x57, 0x41, 0x1c, 0x98, 0xc0, 0x61, 0x15, 0x35, 0x3e, 0x3b, 0xa8, 0xc6, 0x0b, 0x89, 0x1a, - 0x4f, 0xe0, 0x44, 0x49, 0x56, 0xa6, 0xf3, 0x24, 0x4b, 0x30, 0x25, 0xd6, 0x91, 0x98, 0x6d, 0xcf, - 0x61, 0x6f, 0xa1, 0x82, 0x45, 0xae, 0xc0, 0xc4, 0x84, 0x33, 0x49, 0xf4, 0x1d, 0x99, 0x3f, 0xa9, - 0x9e, 0x31, 0x76, 0xe4, 0xf8, 0x4b, 0xaa, 0x89, 0xcc, 0x76, 0xa4, 0x48, 0x8a, 0x59, 0x79, 0xd8, - 0xf5, 0x85, 0xfa, 0xe4, 0xf9, 0x28, 0x78, 0xbb, 0x26, 0xfc, 0xd4, 0xa9, 0xc2, 0xd0, 0xb7, 0x84, - 0x34, 0x0e, 0xe4, 0x0e, 0x1c, 0x53, 0xa7, 0xb6, 0xc6, 0x78, 0x01, 0x19, 0xe3, 0x35, 0x26, 0x3a, - 0xea, 0xd3, 0xf9, 0xa6, 0xd1, 0x13, 0x07, 0x4e, 0x1a, 0xe7, 0xb4, 0xc6, 0xfa, 0x2c, 0xb2, 0xc6, - 0xdc, 0x80, 0xe6, 0x21, 0x9f, 0xce, 0xbe, 0x1f, 0x1f, 0xf2, 0x31, 0x9c, 0x8e, 0x9f, 0xcd, 0x5a, - 0x2d, 0x2f, 0x60, 0x2d, 0xaf, 0x3c, 0x3a, 0x58, 0x38, 0x9f, 0x38, 0xde, 0xd3, 0x2b, 0x1a, 0xc0, - 0x8d, 0x7c, 0x05, 0xe6, 0xcd, 0xf3, 0x59, 0xab, 0xc9, 0x8a, 0x72, 0xf7, 0xab, 0x83, 0x3d, 0xbd, - 0x86, 0xbe, 0x3c, 0x48, 0x08, 0x0b, 0xa9, 0xb3, 0x5b, 0xab, 0xe6, 0x5c, 0xf4, 0x41, 0x89, 0x55, - 0x92, 0x5e, 0xdd, 0x61, 0x2c, 0xc9, 0x03, 0x78, 0x3e, 0xed, 0x98, 0xd0, 0x2a, 0x7d, 0x51, 0x29, - 0x28, 0x5f, 0x4d, 0x3f, 0x72, 0xd2, 0x6b, 0x3e, 0x84, 0x2d, 0xf9, 0x08, 0x8e, 0x6b, 0xeb, 0x4b, - 0xab, 0xef, 0x25, 0xac, 0x0f, 0x7d, 0x18, 0xf5, 0x85, 0x99, 0x5e, 0x4b, 0x3a, 0x0f, 0xeb, 0x77, - 0x32, 0x40, 0x92, 0x1b, 0xdf, 0xd0, 0x6f, 0x96, 0x6f, 0x68, 0xee, 0x65, 0x7a, 0xec, 0x5f, 0x15, - 0xb8, 0x5d, 0x17, 0x78, 0x23, 0x47, 0xb4, 0xf3, 0xc6, 0x05, 0xab, 0xbf, 0x4f, 0xc2, 0x45, 0x18, - 0xb9, 0x4b, 0xfd, 0x6d, 0x7e, 0x03, 0x11, 0x26, 0xf8, 0xf7, 0x19, 0xc0, 0x48, 0x34, 0xcd, 0x00, - 0xd6, 0x1f, 0x67, 0x60, 0x2e, 0xed, 0x34, 0x3e, 0xc4, 0x75, 0xc0, 0x8a, 0x79, 0x3d, 0xe0, 0x7b, - 0x25, 0xf7, 0x7a, 0x50, 0xbe, 0x0e, 0x0b, 0x30, 0xc2, 0x3e, 0x56, 0xda, 0xce, 0xe0, 0x85, 0x8f, - 0xf5, 0x46, 0x60, 0x73, 0x38, 0x43, 0xe0, 0x21, 0x4b, 0xf2, 0x18, 0x99, 0x06, 0x11, 0x70, 0xb3, - 0xb7, 0x39, 0x9c, 0x21, 0xb0, 0x8b, 0xa5, 0xbc, 0x08, 0x21, 0x02, 0xbb, 0x6f, 0x06, 0x36, 0x87, - 0x93, 0xf3, 0x30, 0xb6, 0xd1, 0x59, 0xa3, 0xce, 0x7d, 0x19, 0x7b, 0x1e, 0xdf, 0x57, 0xbd, 0x4e, - 0xbd, 0xc5, 0x60, 0xb6, 0x2c, 0xb4, 0xbe, 0x95, 0x81, 0xd9, 0x84, 0x20, 0x70, 0xb8, 0x77, 0xc4, - 0x60, 0x33, 0xe5, 0x61, 0xbe, 0x8f, 0x37, 0x3f, 0x9f, 0xde, 0x7c, 0xeb, 0xff, 0xc8, 0xc3, 0xc9, - 0x3e, 0xf7, 0xb2, 0xc8, 0x8d, 0x22, 0x73, 0xa8, 0x1b, 0xc5, 0x97, 0xd8, 0x3d, 0xc8, 0x71, 0xdb, - 0xc1, 0xa6, 0x17, 0xb5, 0x38, 0xb2, 0xc6, 0xc4, 0x32, 0x99, 0xbe, 0x4e, 0x9a, 0xed, 0x9d, 0xe2, - 0x29, 0x44, 0xeb, 0xa1, 0x97, 0x3c, 0x16, 0x0c, 0x66, 0x09, 0x47, 0x86, 0xdc, 0x5f, 0x10, 0x47, - 0x06, 0xd3, 0xb4, 0x36, 0xff, 0x44, 0x4d, 0x6b, 0xd3, 0x2d, 0x8a, 0x46, 0x1e, 0xc7, 0xbe, 0xac, - 0x0c, 0x53, 0x35, 0xea, 0xf8, 0x8d, 0xbd, 0x52, 0xc0, 0x07, 0x69, 0x34, 0x0a, 0x71, 0x1c, 0x60, - 0x41, 0xdd, 0x09, 0x92, 0x63, 0x61, 0xd0, 0x90, 0x55, 0xd3, 0x0c, 0x74, 0x0c, 0x35, 0xf7, 0xe7, - 0xfb, 0x9b, 0x79, 0x1a, 0x2f, 0x76, 0x3a, 0xa9, 0xf5, 0xad, 0xac, 0xe9, 0xe5, 0xf0, 0x17, 0x71, - 0xe6, 0x5d, 0x84, 0x91, 0xad, 0x3d, 0xea, 0xcb, 0xfd, 0x0e, 0x1b, 0xf2, 0x80, 0x01, 0xf4, 0x86, - 0x20, 0x06, 0xb9, 0x0e, 0xd3, 0x55, 0x3e, 0x12, 0xb2, 0x7b, 0xf3, 0x91, 0xb8, 0xdc, 0x15, 0x97, - 0xba, 0x94, 0xfe, 0x8d, 0x51, 0x59, 0x37, 0xe0, 0x8c, 0xb1, 0x20, 0x85, 0x57, 0x36, 0xb7, 0xc6, - 0x64, 0xa7, 0xca, 0x79, 0x98, 0x8e, 0xec, 0x4f, 0xa3, 0xdd, 0xc3, 0x8e, 0x41, 0xad, 0x1d, 0x78, - 0x7e, 0x20, 0xa3, 0x80, 0x2c, 0x03, 0x74, 0xd5, 0xaf, 0x98, 0x61, 0xce, 0x40, 0x52, 0x5b, 0xa3, - 0xb3, 0xbe, 0x1f, 0x26, 0xf5, 0x5e, 0xc6, 0x3d, 0x95, 0xfd, 0x16, 0x9b, 0x1a, 0xdf, 0x53, 0x19, - 0xc0, 0xe6, 0xf0, 0x43, 0xd3, 0xfe, 0x46, 0xc3, 0x9f, 0x3b, 0x6c, 0xf8, 0x59, 0xe5, 0xb8, 0x64, - 0xb5, 0xca, 0xf1, 0xb7, 0x5e, 0x39, 0xba, 0x5d, 0xdb, 0x1c, 0xfe, 0x44, 0x2b, 0xff, 0x6d, 0x19, - 0x81, 0xfb, 0x0d, 0x18, 0x8f, 0xee, 0x35, 0x51, 0x72, 0xb5, 0x63, 0x69, 0xb7, 0x95, 0x08, 0x33, - 0x3a, 0x24, 0xb3, 0x87, 0x1d, 0x92, 0x47, 0x99, 0x88, 0x97, 0x61, 0xac, 0x24, 0xde, 0xd5, 0xf8, - 0x0c, 0xe4, 0x0e, 0x7e, 0x89, 0x47, 0x34, 0x89, 0x65, 0x7d, 0x3b, 0x03, 0xc7, 0x53, 0xd5, 0x1d, - 0xac, 0x56, 0xae, 0x57, 0xd1, 0xd6, 0x61, 0x5c, 0xa9, 0xc2, 0x31, 0x8e, 0xe2, 0x73, 0x37, 0xfc, - 0xb7, 0x58, 0x2f, 0xc0, 0xb8, 0x52, 0xb6, 0x93, 0x39, 0x39, 0x74, 0x68, 0x6c, 0x21, 0x75, 0xb6, - 0x7f, 0x96, 0xe1, 0x89, 0x54, 0x9e, 0xda, 0xa8, 0x52, 0xe9, 0xa6, 0x37, 0xec, 0x93, 0x86, 0x8a, - 0x25, 0xf5, 0x27, 0xa3, 0x3c, 0x9b, 0xbb, 0x88, 0x20, 0xb5, 0x0d, 0xd3, 0x1b, 0x95, 0xe5, 0xb2, - 0x76, 0x6b, 0x37, 0x83, 0x85, 0xab, 0x54, 0xd4, 0x1c, 0x61, 0x3f, 0xda, 0x14, 0x3d, 0xb7, 0xd9, - 0x48, 0xbf, 0xd1, 0xc7, 0x38, 0xb2, 0x3a, 0x78, 0x1e, 0x73, 0x55, 0x47, 0x76, 0xc8, 0x3a, 0x44, - 0x96, 0xf4, 0xb4, 0x3a, 0x4c, 0x8e, 0x64, 0x0f, 0x8a, 0x37, 0xf0, 0x00, 0xd7, 0x6a, 0xc9, 0x0d, - 0xae, 0xe5, 0x9c, 0xa8, 0xe5, 0x59, 0x7e, 0xf2, 0xa7, 0xd7, 0x93, 0xe0, 0x1a, 0xcd, 0xdc, 0xfc, - 0xa1, 0x33, 0xf7, 0xaf, 0x66, 0x60, 0x94, 0x4b, 0x08, 0x62, 0xb4, 0xfa, 0xc8, 0x20, 0x5b, 0x4f, - 0x46, 0x06, 0x29, 0xe2, 0xce, 0x65, 0xbc, 0x33, 0xf0, 0x32, 0xb2, 0x0c, 0xa3, 0xb5, 0xd0, 0x09, - 0x7b, 0xd2, 0xa9, 0x53, 0xda, 0x57, 0xa1, 0xfe, 0x8d, 0x97, 0x44, 0x5e, 0x7d, 0x01, 0xfe, 0xd6, - 0xb9, 0x70, 0x0c, 0x52, 0x89, 0x1c, 0xca, 0xc6, 0x0e, 0xf5, 0x59, 0x90, 0x4e, 0x78, 0x63, 0xc2, - 0xa1, 0xcc, 0x74, 0x23, 0x5b, 0x83, 0x71, 0xe1, 0xa6, 0xb6, 0xb4, 0x2f, 0xb4, 0xec, 0x45, 0xe3, - 0x0d, 0xaf, 0xb9, 0xb4, 0x1f, 0x49, 0x3f, 0xc2, 0xd1, 0xad, 0xbe, 0x6d, 0xe4, 0xd5, 0x56, 0x88, - 0x64, 0x83, 0xa7, 0x25, 0xe0, 0x31, 0xb6, 0xcc, 0x00, 0x98, 0x0a, 0x2e, 0x1c, 0xe0, 0xa5, 0xaf, - 0x4b, 0x4a, 0x48, 0xad, 0x88, 0x07, 0x59, 0x83, 0xa2, 0xc8, 0xd5, 0xcb, 0x1f, 0x81, 0x2b, 0xcb, - 0xdc, 0x15, 0x4a, 0xd8, 0xee, 0xc8, 0x4c, 0xbf, 0xe2, 0xf9, 0xd8, 0x34, 0xa0, 0x4e, 0x50, 0x5a, - 0x3f, 0x91, 0x81, 0x62, 0x7c, 0xf6, 0x91, 0x77, 0x60, 0x42, 0xc5, 0x38, 0x53, 0x7e, 0x10, 0xa8, - 0x6d, 0x8b, 0x82, 0xa2, 0x19, 0x1e, 0x11, 0x3a, 0x3a, 0x59, 0x84, 0x02, 0x5b, 0xc4, 0xf1, 0xc4, - 0x2f, 0x3d, 0x01, 0xd3, 0x4d, 0x48, 0x25, 0x9e, 0xb6, 0x07, 0xfc, 0xb3, 0x1c, 0x4c, 0x68, 0x43, - 0x4f, 0x2e, 0x42, 0xa1, 0x12, 0xac, 0x79, 0x8d, 0x7b, 0x2a, 0x98, 0xc9, 0xd4, 0xa3, 0x83, 0x85, - 0x71, 0x37, 0xa8, 0xb7, 0x10, 0x68, 0xab, 0x62, 0xb2, 0x04, 0x53, 0xfc, 0x2f, 0x19, 0xd2, 0x35, - 0x1b, 0x59, 0xd5, 0x70, 0x64, 0x19, 0xcc, 0x55, 0x97, 0x92, 0x0c, 0x12, 0xf2, 0x65, 0x00, 0x0e, - 0x40, 0xf7, 0x97, 0xdc, 0xf0, 0x8e, 0x3b, 0xa2, 0x82, 0x14, 0xc7, 0x17, 0x8d, 0x21, 0xf9, 0x2a, - 0x0f, 0x5f, 0x26, 0xa7, 0x6a, 0x7e, 0x78, 0xcf, 0x23, 0xc6, 0xbf, 0x9e, 0xee, 0x00, 0xa9, 0xb3, - 0x24, 0xdf, 0xcc, 0xc0, 0x69, 0x9b, 0x36, 0xbc, 0xfb, 0xd4, 0xdf, 0x2f, 0x85, 0x88, 0xa5, 0xd7, - 0x78, 0xb8, 0xb7, 0xe5, 0x55, 0x51, 0xe3, 0xcb, 0xbe, 0xe0, 0x82, 0x51, 0x92, 0xda, 0xdd, 0xb0, - 0x3e, 0xa0, 0x09, 0x03, 0xaa, 0xb4, 0xfe, 0xab, 0x8c, 0xb6, 0xa0, 0xc8, 0x3a, 0xa6, 0x31, 0xe2, - 0x93, 0x45, 0xbc, 0x45, 0x2b, 0x01, 0x57, 0xc2, 0x6d, 0xba, 0xb3, 0xf4, 0xac, 0x30, 0x22, 0x3b, - 0xa6, 0xa6, 0x5c, 0x2c, 0xbd, 0x11, 0x07, 0x92, 0x2f, 0x40, 0x1e, 0x87, 0xea, 0xf0, 0x94, 0xc7, - 0xf2, 0xe0, 0xca, 0xb3, 0x31, 0xc2, 0x56, 0x23, 0x25, 0xf9, 0x8c, 0xf0, 0xb2, 0xe0, 0x83, 0x3d, - 0xad, 0x1d, 0x5a, 0xac, 0x1d, 0xea, 0xc4, 0x8a, 0x7c, 0x6e, 0xb5, 0xd9, 0xfa, 0xb7, 0xb2, 0x50, - 0x8c, 0x2f, 0x63, 0xf2, 0x3e, 0x4c, 0xca, 0xe8, 0x6b, 0xab, 0x8e, 0x88, 0xa9, 0x3a, 0x29, 0x62, - 0x9a, 0x0a, 0x78, 0x7d, 0xcf, 0x31, 0x12, 0x59, 0x1b, 0x04, 0xec, 0x78, 0xdf, 0x14, 0x31, 0x30, - 0xb4, 0x05, 0x14, 0x7a, 0x61, 0x37, 0x16, 0x71, 0x4b, 0xa2, 0x91, 0x37, 0x20, 0x77, 0xfb, 0x7a, - 0x49, 0x58, 0x1f, 0xcb, 0xdd, 0xea, 0xf6, 0xf5, 0x12, 0x5f, 0xe8, 0xdc, 0xfc, 0xc3, 0x34, 0x46, - 0x61, 0xf8, 0x64, 0x4d, 0x0b, 0x68, 0x37, 0x6a, 0x24, 0x9d, 0x90, 0x60, 0xf5, 0x71, 0x87, 0x47, - 0xb6, 0xd3, 0xb3, 0x7c, 0x5b, 0xbf, 0x98, 0x83, 0x71, 0x55, 0x3f, 0x21, 0x80, 0xd2, 0x8b, 0x90, - 0xee, 0xf1, 0x6f, 0x72, 0x0a, 0x0a, 0x52, 0x60, 0x11, 0x46, 0xc8, 0x63, 0x81, 0x10, 0x56, 0xe6, - 0x41, 0x4a, 0x26, 0x5c, 0x58, 0xb1, 0xe5, 0x4f, 0x72, 0x05, 0x94, 0xd8, 0xd1, 0x4f, 0x3e, 0xc9, - 0xb3, 0x01, 0xb3, 0x15, 0x1a, 0x99, 0x86, 0xac, 0xcb, 0x43, 0x11, 0x8c, 0xdb, 0x59, 0xb7, 0x49, - 0xde, 0x87, 0x82, 0xd3, 0x6c, 0xd2, 0x66, 0xdd, 0x91, 0x8f, 0xba, 0x83, 0x26, 0x4d, 0x81, 0x71, - 0xe3, 0xe7, 0x03, 0x52, 0x95, 0x42, 0x52, 0x82, 0xf1, 0x96, 0xc3, 0x0d, 0x44, 0x9a, 0x43, 0x1c, - 0x36, 0x11, 0x87, 0x02, 0x23, 0xbb, 0x13, 0xd0, 0x26, 0x79, 0x19, 0xf2, 0x6c, 0x34, 0xc5, 0xe9, - 0xa2, 0x72, 0x96, 0x6f, 0x6c, 0x56, 0x79, 0x87, 0xad, 0x3e, 0x63, 0x23, 0x02, 0x79, 0x11, 0x72, - 0xbd, 0xc5, 0x1d, 0x71, 0x6e, 0x14, 0xa3, 0xe0, 0x92, 0x0a, 0x8d, 0x15, 0x93, 0xab, 0x50, 0x78, - 0x60, 0xc6, 0x25, 0x3c, 0x1e, 0x1b, 0x46, 0x85, 0xaf, 0x10, 0x97, 0x0a, 0x30, 0xca, 0xcf, 0x08, - 0xeb, 0x79, 0x80, 0xa8, 0xea, 0xa4, 0xad, 0xb8, 0xf5, 0x65, 0x18, 0x57, 0x55, 0x92, 0x33, 0x00, - 0xf7, 0xe8, 0x7e, 0x7d, 0xcf, 0xe9, 0x34, 0x5b, 0x5c, 0x7c, 0x9d, 0xb4, 0xc7, 0xef, 0xd1, 0xfd, - 0x55, 0x04, 0x90, 0x93, 0x30, 0xd6, 0x65, 0xa3, 0x2a, 0xa6, 0xee, 0xa4, 0x3d, 0xda, 0xed, 0x6d, - 0xb3, 0x19, 0x3a, 0x0f, 0x63, 0xa8, 0x8d, 0x12, 0x0b, 0x6d, 0xca, 0x96, 0x3f, 0xad, 0xff, 0x38, - 0x8b, 0xf1, 0xb3, 0xb5, 0x76, 0x92, 0x73, 0x30, 0xd5, 0xf0, 0x29, 0x1e, 0x47, 0x0e, 0x13, 0xb2, - 0x44, 0x3d, 0x93, 0x11, 0xb0, 0xd2, 0x24, 0xe7, 0x61, 0xa6, 0xdb, 0xdb, 0x6e, 0xb9, 0x0d, 0x56, - 0x5b, 0xbd, 0xb1, 0x2d, 0x82, 0x88, 0x4e, 0xda, 0x53, 0x1c, 0x7c, 0x8b, 0xee, 0x97, 0xb7, 0x31, - 0x84, 0x46, 0x51, 0x8f, 0x80, 0x16, 0xaa, 0x54, 0x5f, 0xf6, 0x8c, 0x06, 0x47, 0x5b, 0x8d, 0x13, - 0x30, 0xea, 0x38, 0xbb, 0x3d, 0x97, 0xbb, 0xba, 0x4f, 0xda, 0xe2, 0x17, 0x79, 0x15, 0x66, 0x03, - 0x77, 0xb7, 0xe3, 0x84, 0x3d, 0x5f, 0x04, 0x30, 0xa7, 0x3e, 0x4e, 0xa9, 0x29, 0xbb, 0xa8, 0x0a, - 0xca, 0x1c, 0x4e, 0x5e, 0x07, 0xa2, 0xd7, 0xe7, 0x6d, 0x7f, 0x4c, 0x1b, 0x7c, 0xaa, 0x4d, 0xda, - 0xb3, 0x5a, 0xc9, 0x06, 0x16, 0x90, 0x17, 0x60, 0xd2, 0xa7, 0x01, 0x0a, 0x78, 0xd8, 0x6d, 0x98, - 0x5e, 0xc2, 0x9e, 0x90, 0x30, 0xd6, 0x77, 0x17, 0xa0, 0xa8, 0x75, 0x07, 0x06, 0x99, 0xe3, 0x11, - 0x34, 0xed, 0xe9, 0x08, 0x6e, 0x77, 0x2b, 0x4d, 0x6b, 0x09, 0x66, 0x13, 0x2b, 0x57, 0x4b, 0xcf, - 0xc8, 0x77, 0xa2, 0xc1, 0xe9, 0x19, 0xad, 0x0e, 0x4c, 0xea, 0x3b, 0xf1, 0x21, 0x81, 0x5c, 0x4f, - 0xa0, 0xab, 0x24, 0xdf, 0xa6, 0x46, 0x1f, 0x1d, 0x2c, 0x64, 0xdd, 0x26, 0x3a, 0x48, 0x5e, 0x80, - 0x82, 0x94, 0x27, 0xc4, 0x8d, 0x03, 0xb5, 0x89, 0x42, 0x90, 0xdd, 0xb7, 0x55, 0xa9, 0xf5, 0x32, - 0x8c, 0x89, 0xcd, 0x76, 0xb0, 0x0e, 0xd1, 0xfa, 0xd1, 0x2c, 0xcc, 0xd8, 0x94, 0x6d, 0x05, 0x94, - 0x47, 0x6f, 0x7e, 0x6a, 0xef, 0x49, 0xe9, 0x01, 0x77, 0x8c, 0x6f, 0x1b, 0x10, 0x37, 0xf9, 0x97, - 0x33, 0x70, 0x2c, 0x05, 0xf7, 0x13, 0xe5, 0xf8, 0xb9, 0x06, 0xe3, 0xcb, 0xae, 0xd3, 0x2a, 0x35, - 0x9b, 0xca, 0xe5, 0x13, 0xa5, 0xd0, 0x26, 0x9b, 0x69, 0x0e, 0x83, 0xea, 0xc7, 0xae, 0x42, 0x25, - 0xaf, 0x88, 0x49, 0x11, 0xe5, 0x57, 0xc5, 0x49, 0xf1, 0xdd, 0x83, 0x05, 0xe0, 0x6d, 0x8a, 0xf2, - 0xc8, 0x61, 0x10, 0x2c, 0x0e, 0x8c, 0xcc, 0x5b, 0x9f, 0xda, 0xa1, 0x4b, 0x0f, 0x82, 0x15, 0xff, - 0xbc, 0xa1, 0xae, 0xbb, 0x3f, 0x91, 0x85, 0x13, 0xe9, 0x84, 0x9f, 0x34, 0x5d, 0x13, 0x06, 0xad, - 0xd6, 0x02, 0xf7, 0x61, 0xba, 0x26, 0x1e, 0xe1, 0x1a, 0xf1, 0x23, 0x04, 0xb2, 0x03, 0x53, 0x6b, - 0x4e, 0x10, 0xae, 0x52, 0xc7, 0x0f, 0xb7, 0xa9, 0x13, 0x0e, 0x21, 0xeb, 0xbe, 0x28, 0xbe, 0x66, - 0x1e, 0x8f, 0xbf, 0x3d, 0x49, 0x19, 0x13, 0x05, 0x4d, 0xb6, 0x6a, 0xa2, 0xe4, 0x87, 0x98, 0x28, - 0x5f, 0x83, 0x99, 0x1a, 0x6d, 0x3b, 0xdd, 0x3d, 0xcf, 0xa7, 0xe2, 0xd9, 0xe3, 0x12, 0x4c, 0x29, - 0x50, 0xea, 0x6c, 0x31, 0x8b, 0x0d, 0x7c, 0xad, 0x23, 0xa2, 0xad, 0xc4, 0x2c, 0xb6, 0xfe, 0x76, - 0x16, 0x4e, 0x96, 0x1a, 0xc2, 0x0a, 0x42, 0x14, 0x48, 0x63, 0xad, 0x4f, 0xb9, 0x6e, 0x72, 0x19, - 0xc6, 0x6f, 0x3b, 0x0f, 0xd7, 0xa8, 0x13, 0xd0, 0x40, 0x24, 0xcb, 0xe0, 0x82, 0x9a, 0xf3, 0x30, - 0x32, 0x0e, 0xb0, 0x23, 0x1c, 0xfd, 0x92, 0x9b, 0x7f, 0xcc, 0x4b, 0xae, 0x05, 0xa3, 0xab, 0x5e, - 0xab, 0x29, 0x8e, 0x31, 0xf1, 0xe4, 0xb4, 0x87, 0x10, 0x5b, 0x94, 0x58, 0x7f, 0x9c, 0x81, 0x69, - 0xd5, 0x62, 0x6c, 0xc2, 0xa7, 0xde, 0x25, 0xe7, 0x61, 0x0c, 0x2b, 0xaa, 0x2c, 0xeb, 0x87, 0x46, - 0x8b, 0x62, 0xca, 0x83, 0xa6, 0x2d, 0x0b, 0xf5, 0x9e, 0x18, 0x79, 0xbc, 0x9e, 0xb0, 0xfe, 0x2d, - 0x7c, 0xcd, 0xd2, 0xbf, 0x92, 0x9d, 0x44, 0x5a, 0x43, 0x32, 0x43, 0x36, 0x24, 0xfb, 0xc4, 0x86, - 0x24, 0xd7, 0x77, 0x48, 0xbe, 0x91, 0x85, 0x09, 0xd5, 0xd8, 0xef, 0xb1, 0xe8, 0x91, 0xea, 0xbb, - 0x86, 0x72, 0x19, 0xae, 0x69, 0x7b, 0x85, 0xf0, 0xcc, 0xfd, 0x02, 0x8c, 0x8a, 0xc5, 0x94, 0x89, - 0x19, 0x2d, 0xc5, 0x46, 0x77, 0x69, 0x5a, 0xb0, 0x1e, 0xc5, 0x01, 0x0d, 0x6c, 0x41, 0x87, 0x3e, - 0xd9, 0x5b, 0x74, 0x5b, 0x3c, 0x6e, 0x3e, 0xb5, 0x67, 0x54, 0xba, 0x4f, 0x76, 0xf4, 0x61, 0x43, - 0x9d, 0x4e, 0x07, 0x23, 0x50, 0x8c, 0x93, 0x1c, 0x1e, 0x9f, 0xb3, 0xda, 0xdb, 0xe6, 0x52, 0x38, - 0x8f, 0xcf, 0xd9, 0xed, 0x6d, 0xdb, 0x0c, 0x46, 0xce, 0x43, 0xbe, 0xea, 0xbb, 0xf7, 0xf1, 0xab, - 0x27, 0xf9, 0x63, 0x7b, 0xd7, 0x77, 0xef, 0xeb, 0x8f, 0xed, 0xac, 0x1c, 0xaf, 0xbe, 0x6b, 0x35, - 0xf4, 0x73, 0x43, 0x11, 0x5c, 0x5c, 0x7d, 0x5b, 0x41, 0x3c, 0xae, 0xbd, 0x44, 0x63, 0x47, 0xe5, - 0x12, 0x75, 0x7c, 0x11, 0x4b, 0x52, 0x6c, 0x67, 0x78, 0x54, 0x6e, 0x23, 0x98, 0xa7, 0x8c, 0xb4, - 0x75, 0x24, 0xd2, 0x02, 0xa2, 0xfd, 0x94, 0x0b, 0xf8, 0xf0, 0xdb, 0xe0, 0x59, 0xa9, 0xf5, 0xd3, - 0x59, 0xd7, 0xf5, 0xd5, 0x9c, 0xc2, 0xf7, 0x49, 0xea, 0x26, 0xab, 0x22, 0x40, 0x0e, 0xaa, 0x3c, - 0x0a, 0x87, 0x32, 0x93, 0x8e, 0xa0, 0xc0, 0x03, 0xe8, 0x28, 0xc5, 0x47, 0xc4, 0x84, 0xbc, 0x07, - 0x13, 0xba, 0xf7, 0x22, 0xf7, 0xb1, 0x7b, 0x8e, 0xc7, 0x3c, 0xe9, 0x93, 0xb5, 0x48, 0x27, 0x20, - 0xdb, 0x70, 0xb2, 0xec, 0x75, 0x82, 0x5e, 0x5b, 0x46, 0x57, 0x89, 0x62, 0xba, 0x81, 0xca, 0x3a, - 0xfc, 0x62, 0x43, 0xa0, 0x08, 0x67, 0x39, 0x69, 0x11, 0x6a, 0x5e, 0x40, 0xfa, 0x31, 0x22, 0x9b, - 0x30, 0x51, 0x2b, 0xdd, 0x5e, 0x93, 0x1e, 0x68, 0x13, 0xe6, 0xb6, 0x11, 0x95, 0x2c, 0xb3, 0x85, - 0xc1, 0x83, 0x30, 0x38, 0xed, 0x96, 0x34, 0x48, 0xd4, 0xf5, 0x94, 0x1a, 0xb2, 0xf5, 0x19, 0x7d, - 0x7e, 0x0b, 0x71, 0x63, 0xe0, 0xfc, 0xb6, 0xfe, 0x8b, 0x51, 0x98, 0x89, 0x55, 0x27, 0xee, 0x3f, - 0x99, 0xc4, 0xfd, 0xa7, 0x06, 0xc0, 0x95, 0x5e, 0x43, 0x6a, 0xa7, 0xa4, 0x2d, 0xfb, 0x84, 0xf0, - 0x05, 0x51, 0x63, 0xa5, 0xb1, 0x61, 0x4c, 0xf9, 0x4c, 0x18, 0x52, 0x3b, 0xa9, 0x98, 0xf2, 0xc9, - 0xa4, 0x31, 0x8d, 0xd8, 0x90, 0x05, 0x18, 0xc1, 0xd8, 0x39, 0xba, 0x2b, 0x81, 0xcb, 0x00, 0x36, - 0x87, 0x93, 0x73, 0x30, 0xca, 0x0e, 0xe7, 0xca, 0xb2, 0x58, 0x5c, 0xb8, 0x67, 0xb1, 0xd3, 0x9b, - 0x9d, 0x84, 0xa2, 0x88, 0x5c, 0x83, 0x49, 0xfe, 0x97, 0xf0, 0xa2, 0x1d, 0x35, 0xad, 0x6a, 0xea, - 0x6e, 0x53, 0x3a, 0xd2, 0x1a, 0x78, 0x4c, 0x6a, 0xad, 0xf5, 0xb6, 0x45, 0x3a, 0xf4, 0xb1, 0x48, - 0x6a, 0x0d, 0x38, 0x10, 0x93, 0x8c, 0x2a, 0x04, 0x76, 0x46, 0x0a, 0x83, 0xbe, 0x02, 0xde, 0x55, - 0xf0, 0x8c, 0xe4, 0x86, 0x7c, 0xb6, 0x28, 0x21, 0x17, 0xb9, 0xfe, 0x19, 0xc5, 0x0d, 0x9e, 0x1f, - 0x02, 0x35, 0xc6, 0x78, 0xe1, 0x45, 0x99, 0x43, 0x15, 0xb3, 0xca, 0xd9, 0xdf, 0x2b, 0x6d, 0xc7, - 0x6d, 0x89, 0xe9, 0x8a, 0x95, 0x23, 0x2e, 0x65, 0x50, 0x3b, 0x42, 0x20, 0xef, 0xc0, 0x34, 0xfb, - 0x51, 0xf6, 0xda, 0x6d, 0xaf, 0x83, 0xec, 0x27, 0xa2, 0x78, 0x07, 0x48, 0xd2, 0xc0, 0x22, 0x5e, - 0x4b, 0x0c, 0x97, 0xed, 0x53, 0xf8, 0xb6, 0xd5, 0xe3, 0x9a, 0xf1, 0xc9, 0x68, 0x9f, 0x42, 0xd2, - 0x80, 0xc3, 0x6d, 0x1d, 0x89, 0xbc, 0x09, 0x53, 0xec, 0xe7, 0x0d, 0xf7, 0x3e, 0xe5, 0x15, 0x4e, - 0x45, 0xcf, 0x8c, 0x48, 0xb5, 0xcb, 0x4a, 0x78, 0x7d, 0x26, 0x26, 0xf9, 0x00, 0x8e, 0x23, 0xa7, - 0x86, 0xd7, 0xa5, 0xcd, 0xd2, 0xce, 0x8e, 0xdb, 0x72, 0xb9, 0x99, 0x03, 0xf7, 0x17, 0x45, 0x6d, - 0x24, 0xaf, 0x18, 0x31, 0xea, 0x4e, 0x84, 0x62, 0xa7, 0x53, 0x92, 0x2d, 0x28, 0x96, 0x7b, 0x41, - 0xe8, 0xb5, 0x4b, 0x61, 0xe8, 0xbb, 0xdb, 0xbd, 0x90, 0x06, 0xf3, 0x33, 0x86, 0x57, 0x25, 0x5b, - 0x1c, 0xaa, 0x90, 0xeb, 0x19, 0x1a, 0x48, 0x51, 0x77, 0x14, 0x89, 0x9d, 0x60, 0x62, 0xfd, 0xe7, - 0x19, 0x98, 0x32, 0x48, 0xc9, 0x1b, 0x30, 0x79, 0xdd, 0x77, 0x69, 0xa7, 0xd9, 0xda, 0xd7, 0x2e, - 0x40, 0x28, 0x1d, 0xef, 0x08, 0x38, 0xff, 0x6a, 0x03, 0x4d, 0xe9, 0x0f, 0xb2, 0xa9, 0x36, 0x48, - 0x97, 0xb9, 0x47, 0x8b, 0x98, 0xa0, 0xb9, 0xc8, 0xcd, 0x1b, 0x27, 0xa8, 0x98, 0x9d, 0x1a, 0x0a, - 0x79, 0x17, 0x46, 0xf9, 0x2b, 0x98, 0x30, 0x88, 0x39, 0x95, 0xf6, 0x99, 0xdc, 0x7b, 0x0a, 0x27, - 0x22, 0x3e, 0xbe, 0x07, 0xb6, 0x20, 0xb2, 0x7e, 0x3a, 0x03, 0x24, 0x89, 0x7a, 0x88, 0x3e, 0xe5, - 0xd0, 0x47, 0xfd, 0x2f, 0xa8, 0xd5, 0x98, 0x33, 0xb4, 0x87, 0xac, 0x26, 0x5e, 0xc0, 0x3b, 0x5e, - 0xac, 0x3a, 0x5d, 0xc1, 0xc3, 0x8b, 0xad, 0xbf, 0x92, 0x05, 0x88, 0xb0, 0xc9, 0xe7, 0x79, 0x88, - 0xf2, 0x0f, 0x7a, 0x4e, 0xcb, 0xdd, 0x71, 0xcd, 0x70, 0x43, 0xc8, 0xe4, 0x6b, 0xb2, 0xc4, 0x36, - 0x11, 0xc9, 0xfb, 0x30, 0x53, 0xab, 0x9a, 0xb4, 0x5a, 0x38, 0xe6, 0xa0, 0x5b, 0x8f, 0x91, 0xc7, - 0xb1, 0xd1, 0xf0, 0x4d, 0x1f, 0x0d, 0x6e, 0xf8, 0xc6, 0x07, 0x42, 0x94, 0xb0, 0x8d, 0xa5, 0x56, - 0xc5, 0xbc, 0xd0, 0x4d, 0xda, 0xac, 0x2c, 0x8b, 0x5d, 0x0a, 0x5b, 0x17, 0x74, 0xeb, 0x5d, 0x5e, - 0x80, 0xc9, 0x88, 0x0d, 0xbc, 0xa8, 0x23, 0x47, 0xfa, 0x78, 0x48, 0xfd, 0x0c, 0xaa, 0x93, 0xda, - 0x5e, 0x48, 0xc5, 0x2d, 0xfa, 0xa9, 0x95, 0xa7, 0xa3, 0x27, 0xd4, 0x11, 0xc3, 0xf1, 0xc3, 0xf8, - 0x3a, 0x8e, 0x71, 0xf7, 0x6a, 0x24, 0xfc, 0xf2, 0xc7, 0x54, 0xf9, 0x84, 0xaa, 0x89, 0x7e, 0x7f, - 0x3f, 0x03, 0xc7, 0x53, 0x69, 0xc9, 0x25, 0x80, 0x48, 0x57, 0x21, 0x7a, 0x89, 0xe7, 0x84, 0x56, - 0x50, 0x5b, 0xc3, 0x20, 0x5f, 0x8a, 0x6b, 0x19, 0x0e, 0x3f, 0x08, 0x4f, 0xcb, 0xe0, 0x15, 0xa6, - 0x96, 0x21, 0x45, 0xb7, 0x60, 0xfd, 0x72, 0x0e, 0x66, 0x35, 0xdf, 0x69, 0xde, 0xd6, 0x43, 0x0c, - 0x11, 0xef, 0xc9, 0xfc, 0xe3, 0xc2, 0xfa, 0x9c, 0x3f, 0xf7, 0xbf, 0x92, 0x30, 0xdd, 0x17, 0xdc, - 0x2e, 0xe9, 0xc8, 0x3c, 0x62, 0x0b, 0x6e, 0x9d, 0x22, 0x1d, 0x79, 0xc2, 0x0a, 0xdd, 0x60, 0x4e, - 0x02, 0x98, 0x5a, 0xde, 0xef, 0x38, 0x6d, 0x55, 0x1b, 0x7f, 0xf6, 0x7f, 0xb5, 0x6f, 0x6d, 0x06, - 0x36, 0xaf, 0x4e, 0xca, 0x9c, 0xf3, 0x4d, 0x5e, 0x96, 0xe2, 0x5f, 0x65, 0x50, 0x9d, 0x7e, 0x1f, - 0x66, 0x13, 0x8d, 0x3e, 0x52, 0xf0, 0x98, 0x2d, 0x20, 0xc9, 0x76, 0xa4, 0x70, 0x78, 0xd5, 0x0c, - 0x4d, 0x74, 0x5c, 0x3d, 0xe3, 0x61, 0x72, 0x43, 0x6e, 0x44, 0xb0, 0xa8, 0x87, 0x96, 0xf9, 0x99, - 0xac, 0xee, 0x3e, 0xf1, 0xb4, 0xaf, 0xba, 0x2f, 0x18, 0xb7, 0xac, 0xe7, 0xfb, 0x8d, 0xe9, 0x50, - 0xb7, 0xd9, 0xef, 0xe4, 0xe0, 0x64, 0x1f, 0x4a, 0xb2, 0x1f, 0x9f, 0x44, 0xfc, 0x76, 0x7b, 0x65, - 0x70, 0x85, 0x4f, 0x62, 0x2a, 0x91, 0xcf, 0x73, 0x07, 0xca, 0x06, 0x26, 0xe5, 0x13, 0xf7, 0x3a, - 0x9e, 0xcf, 0x55, 0x41, 0xe3, 0x9e, 0x93, 0x1c, 0x4a, 0xde, 0x87, 0x11, 0xf4, 0x9d, 0x89, 0xc5, - 0x6e, 0x61, 0x18, 0x08, 0xd7, 0x02, 0xdd, 0xb0, 0x9f, 0x46, 0xa0, 0x1b, 0x06, 0x20, 0x9f, 0x83, - 0x5c, 0x69, 0xab, 0x26, 0xc6, 0x65, 0x5a, 0x27, 0xdf, 0xaa, 0x45, 0x81, 0x55, 0x1d, 0x23, 0x02, - 0x2a, 0xa3, 0x60, 0x84, 0x37, 0xca, 0x55, 0x31, 0x2a, 0x3a, 0xe1, 0x8d, 0x72, 0x35, 0x22, 0xdc, - 0x6d, 0x18, 0xbe, 0xf0, 0x37, 0xca, 0xd5, 0x4f, 0x6f, 0xda, 0xff, 0x8d, 0x2c, 0xf7, 0xfa, 0xe4, - 0x1f, 0xf6, 0x3e, 0x4c, 0x1a, 0xa1, 0xe3, 0x32, 0x91, 0x3c, 0xa6, 0xc2, 0xde, 0xc5, 0xec, 0x24, - 0x0c, 0x02, 0x19, 0xa2, 0x98, 0xfd, 0x46, 0x89, 0x57, 0x37, 0x73, 0x50, 0x1c, 0x50, 0x26, 0x8e, - 0x87, 0x28, 0x56, 0x24, 0xe4, 0x2a, 0x14, 0x36, 0x69, 0xc7, 0xe9, 0x84, 0x4a, 0xd1, 0x86, 0x46, - 0x7e, 0x21, 0xc2, 0x4c, 0xa9, 0x41, 0x21, 0x92, 0x15, 0x98, 0xae, 0xf5, 0xb6, 0x83, 0x86, 0xef, - 0xa2, 0x77, 0xb8, 0x3a, 0x8b, 0xb9, 0xd5, 0xad, 0x56, 0x62, 0x32, 0x88, 0x11, 0x59, 0x3f, 0x93, - 0x81, 0x31, 0x31, 0x90, 0x5a, 0x76, 0xfb, 0xcc, 0x10, 0xd9, 0xed, 0xaf, 0xc1, 0xb8, 0x70, 0x60, - 0x52, 0x4f, 0x4e, 0x3c, 0x13, 0x29, 0x07, 0x9a, 0xd5, 0x46, 0xa8, 0xc3, 0x5a, 0xfa, 0x5b, 0x7f, - 0x57, 0xb4, 0xec, 0x46, 0xb9, 0x4a, 0x16, 0xa1, 0xb0, 0xe6, 0x35, 0x1c, 0xed, 0x9c, 0xc3, 0x6d, - 0xa7, 0x25, 0x60, 0x7a, 0x07, 0x49, 0x3c, 0xd6, 0xbe, 0xaa, 0xef, 0x89, 0xbb, 0x8c, 0xd6, 0xbe, - 0x2e, 0x07, 0xc6, 0xda, 0xa7, 0x50, 0x87, 0x6e, 0x1f, 0x4d, 0xd9, 0x24, 0xee, 0x5e, 0xc5, 0xd8, - 0xad, 0x37, 0x75, 0x0f, 0x0a, 0x51, 0x24, 0x77, 0x8a, 0xd3, 0xfd, 0x76, 0x8a, 0xbb, 0x57, 0xed, - 0x14, 0x2a, 0x7c, 0xaf, 0x89, 0xc0, 0x35, 0xea, 0xdf, 0x7f, 0x8a, 0x77, 0xe9, 0xf4, 0xf7, 0x9a, - 0xf8, 0xe7, 0x0d, 0xb5, 0x49, 0xff, 0xb3, 0x2c, 0x9c, 0x48, 0x27, 0xd4, 0xbf, 0x25, 0x33, 0xe0, - 0x5b, 0x2e, 0x40, 0x61, 0xd5, 0x0b, 0x42, 0xcd, 0x34, 0x0a, 0xd5, 0xca, 0x7b, 0x02, 0x66, 0xab, - 0x52, 0x76, 0xe7, 0x66, 0x7f, 0xab, 0xe5, 0x89, 0xfc, 0xd0, 0xd7, 0x91, 0xdd, 0xb9, 0x79, 0x11, - 0xb9, 0x01, 0x05, 0x5b, 0x58, 0xf0, 0xc7, 0xba, 0x46, 0x82, 0x95, 0x34, 0x45, 0x7c, 0x01, 0x31, - 0x22, 0xf8, 0x09, 0x18, 0x29, 0xc1, 0x98, 0x18, 0xfd, 0xd8, 0x93, 0x64, 0xca, 0x94, 0x31, 0x83, - 0x6a, 0x4a, 0x3a, 0xb6, 0xa3, 0xe0, 0xe3, 0x52, 0x65, 0x59, 0x1a, 0xe3, 0xe3, 0x8e, 0xc2, 0x1f, - 0x9f, 0x4c, 0x2b, 0x34, 0x85, 0x68, 0xfd, 0x68, 0x16, 0x60, 0x8b, 0x6e, 0x3f, 0xdd, 0xb9, 0x90, - 0x3e, 0x67, 0xcc, 0x30, 0xcd, 0xf2, 0x62, 0xf8, 0x54, 0x48, 0x1b, 0x68, 0x01, 0x31, 0x7c, 0x22, - 0xa4, 0x05, 0x18, 0xe1, 0xda, 0x4e, 0x3d, 0xd7, 0x08, 0xaa, 0x39, 0x39, 0xdc, 0xda, 0x86, 0xb9, - 0x1b, 0x34, 0x8c, 0xd4, 0x5b, 0xf2, 0x49, 0x6b, 0x30, 0xdb, 0xd7, 0x60, 0x5c, 0xe0, 0xab, 0xfd, - 0x8b, 0xeb, 0x62, 0x84, 0xfb, 0x30, 0xea, 0x62, 0x24, 0x02, 0xdb, 0x8d, 0x96, 0x69, 0x8b, 0x86, - 0xf4, 0xd3, 0xad, 0xa6, 0x06, 0x84, 0x7f, 0x0a, 0x7e, 0xd9, 0x70, 0x35, 0x1c, 0xda, 0x3f, 0x77, - 0xe1, 0xb8, 0x6a, 0xfb, 0x93, 0xe4, 0x7b, 0x99, 0x5d, 0x29, 0x45, 0x3c, 0xca, 0x88, 0xe3, 0x00, - 0x9b, 0x86, 0x87, 0x70, 0x5a, 0x12, 0x6c, 0xb9, 0xca, 0x84, 0x6c, 0x28, 0x5a, 0xf2, 0x0e, 0x4c, - 0x68, 0x34, 0x22, 0xe2, 0x2f, 0xaa, 0x3f, 0x1f, 0xb8, 0xe1, 0x5e, 0x3d, 0xe0, 0x70, 0x5d, 0xfd, - 0xa9, 0xa1, 0x5b, 0x1f, 0xc1, 0xb3, 0xca, 0x7c, 0x3f, 0xa5, 0xea, 0x18, 0xf3, 0xcc, 0xd1, 0x98, - 0xaf, 0x47, 0x9f, 0x55, 0xe9, 0x28, 0x97, 0x3b, 0xc9, 0x9b, 0xe8, 0x9f, 0x25, 0x3e, 0xe6, 0xb9, - 0x84, 0x13, 0x9f, 0xe6, 0xab, 0x67, 0xbd, 0xad, 0x35, 0x36, 0x85, 0xa1, 0x41, 0x9c, 0x89, 0x13, - 0xff, 0x68, 0x16, 0x66, 0x36, 0x2a, 0xcb, 0x65, 0x65, 0xd5, 0xf2, 0x3d, 0x96, 0xa8, 0xc9, 0xf8, - 0xb6, 0xfe, 0xfb, 0x8d, 0x75, 0x07, 0x8e, 0xc5, 0xba, 0x01, 0x45, 0x87, 0xf7, 0xb8, 0x99, 0xbd, - 0x02, 0x4b, 0xb1, 0xe1, 0x44, 0x1a, 0xfb, 0xbb, 0x57, 0xed, 0x18, 0xb6, 0xf5, 0x47, 0x85, 0x18, - 0x5f, 0xb1, 0x85, 0xbd, 0x06, 0xe3, 0x95, 0x20, 0xe8, 0x51, 0xff, 0x8e, 0xbd, 0xa6, 0xab, 0x0a, - 0x5c, 0x04, 0xd6, 0x7b, 0x7e, 0xcb, 0x8e, 0x10, 0xc8, 0x45, 0x28, 0x88, 0x18, 0x88, 0x72, 0x4f, - 0x40, 0xad, 0xad, 0x0a, 0xa1, 0x68, 0xab, 0x62, 0xf2, 0x06, 0x4c, 0xf2, 0xbf, 0xf9, 0x6c, 0x13, - 0x1d, 0x8e, 0xca, 0x41, 0x81, 0xce, 0x67, 0xa7, 0x6d, 0xa0, 0x91, 0x57, 0x20, 0x57, 0x2a, 0xdb, - 0x42, 0x1d, 0x24, 0xe4, 0x46, 0x4c, 0xbf, 0xd8, 0xa3, 0xe6, 0x25, 0xa2, 0x6c, 0x33, 0xe9, 0x4f, - 0xa8, 0x92, 0x7c, 0xa1, 0xc9, 0xe6, 0x59, 0x22, 0x05, 0x2c, 0x76, 0x98, 0x21, 0x8c, 0x5c, 0x86, - 0xb1, 0x65, 0x37, 0xe8, 0xb6, 0x9c, 0x7d, 0xa1, 0xc7, 0xe6, 0x59, 0x08, 0x38, 0x48, 0x9f, 0x33, - 0x02, 0x8b, 0x5c, 0x84, 0x11, 0x54, 0xb2, 0x0a, 0x5d, 0x36, 0x0f, 0x03, 0xcf, 0x00, 0x46, 0x18, - 0x78, 0x06, 0xc0, 0x10, 0xbb, 0x3c, 0x52, 0xe0, 0xb8, 0x16, 0x62, 0x37, 0x1e, 0x21, 0x50, 0xe0, - 0x24, 0x1d, 0xc9, 0xe0, 0x49, 0x3a, 0x92, 0x6d, 0xc3, 0xc9, 0x1b, 0xa8, 0xbd, 0x31, 0x63, 0x0a, - 0xdc, 0xb1, 0x2b, 0x42, 0x1f, 0x8e, 0x2f, 0x3e, 0x5c, 0xc1, 0x13, 0x0f, 0x4b, 0x50, 0xef, 0xf9, - 0x7a, 0x52, 0x9d, 0x7e, 0x8c, 0xc8, 0x17, 0x61, 0x2e, 0xad, 0x48, 0x68, 0xcd, 0xd1, 0x7b, 0x3e, - 0xbd, 0x02, 0xdd, 0x7b, 0x3e, 0x8d, 0x03, 0x59, 0x83, 0x22, 0x87, 0x97, 0x9a, 0x6d, 0xb7, 0xc3, - 0x35, 0xff, 0x53, 0x51, 0x36, 0x6a, 0xc1, 0xd5, 0x61, 0x85, 0xfc, 0x05, 0xc0, 0x70, 0xb8, 0x88, - 0x51, 0x92, 0x9f, 0xcc, 0xb0, 0xdb, 0x1c, 0x8f, 0xab, 0x77, 0xc7, 0x5e, 0x0b, 0x44, 0xe4, 0x95, - 0x13, 0x91, 0x2f, 0x45, 0x2d, 0xf4, 0xdd, 0xce, 0xae, 0x70, 0xa6, 0xd8, 0x14, 0xce, 0x14, 0xef, - 0x7c, 0x22, 0x67, 0x0a, 0xce, 0x2a, 0x78, 0x74, 0xb0, 0x30, 0xe9, 0x8b, 0x3a, 0x71, 0x15, 0x19, - 0x2d, 0xc0, 0x84, 0xb0, 0xad, 0x96, 0xf7, 0xe0, 0x4e, 0xe7, 0x3e, 0xf5, 0xdd, 0x1d, 0x97, 0x36, - 0xf9, 0x47, 0xce, 0xe0, 0x0e, 0xce, 0x13, 0xc2, 0x62, 0x8a, 0xe3, 0x9e, 0x42, 0x48, 0x7c, 0x68, - 0x2a, 0x07, 0x76, 0xf1, 0x94, 0x06, 0xfb, 0xdc, 0x2b, 0xae, 0x18, 0x5d, 0x3c, 0xa5, 0x75, 0x7f, - 0x1d, 0xa7, 0x91, 0x3e, 0x79, 0x0c, 0x12, 0x72, 0x19, 0x46, 0x6f, 0x3b, 0x0f, 0x4b, 0xbb, 0x54, - 0x64, 0xdd, 0x98, 0x92, 0xdb, 0x1f, 0x02, 0x97, 0x0a, 0x7f, 0xc0, 0xad, 0xbe, 0x9f, 0xb1, 0x05, - 0x9a, 0x30, 0x27, 0xfe, 0x9c, 0x24, 0x23, 0xaf, 0xeb, 0x9e, 0x53, 0x39, 0x14, 0x32, 0xc7, 0xda, - 0xce, 0xc3, 0xba, 0xb3, 0x4b, 0x8d, 0x47, 0x4a, 0xa1, 0xe4, 0xfd, 0x5b, 0xe3, 0x7c, 0xef, 0x2f, - 0xf5, 0xc2, 0x3d, 0x79, 0x5a, 0x2c, 0xa6, 0xb9, 0x37, 0x70, 0xe3, 0x2a, 0xcd, 0xbd, 0xc1, 0x74, - 0x6a, 0x90, 0x4a, 0xfb, 0x6c, 0xaa, 0xd2, 0xfe, 0x35, 0x18, 0x2f, 0xef, 0xd1, 0xc6, 0x3d, 0x65, - 0x47, 0x5e, 0x10, 0x5a, 0x51, 0x06, 0xe4, 0xa1, 0xea, 0x22, 0x04, 0x72, 0x19, 0x00, 0x93, 0x3b, - 0x70, 0x51, 0x42, 0x0b, 0x37, 0x8b, 0x39, 0x20, 0xc4, 0x7b, 0xb5, 0x86, 0x82, 0xec, 0x6b, 0xf6, - 0x75, 0xfd, 0x81, 0x9b, 0xb3, 0x0f, 0xfc, 0x1d, 0x81, 0x1e, 0x21, 0xb0, 0xcf, 0xd3, 0x26, 0x84, - 0xd8, 0xbe, 0x8a, 0x89, 0x59, 0xa3, 0x23, 0xa1, 0xed, 0x98, 0x34, 0x9a, 0xc5, 0xdd, 0x6b, 0x52, - 0xd8, 0x8e, 0x29, 0x03, 0x5b, 0x3b, 0x42, 0x20, 0x9f, 0x83, 0xb1, 0x32, 0xf5, 0xc3, 0xcd, 0xcd, - 0x35, 0x7c, 0x83, 0xe6, 0x31, 0x59, 0x0b, 0x18, 0x3f, 0x33, 0x0c, 0x5b, 0xdf, 0x3d, 0x58, 0x98, - 0x0a, 0xdd, 0x36, 0xbd, 0xa4, 0xc6, 0x42, 0x62, 0x93, 0x25, 0x28, 0xf2, 0xd7, 0xcc, 0x48, 0x64, - 0xc4, 0x0d, 0xad, 0xc0, 0xb7, 0x57, 0xf1, 0xf4, 0xf9, 0x80, 0x6e, 0xab, 0xe8, 0xa1, 0x09, 0x7c, - 0xb2, 0x22, 0x83, 0xee, 0xea, 0x1f, 0x09, 0x91, 0x0e, 0x43, 0x1c, 0x01, 0xc6, 0xb7, 0x26, 0x29, - 0x48, 0x09, 0xa6, 0xca, 0x5e, 0xbb, 0xeb, 0x84, 0x2e, 0x66, 0x5d, 0xd8, 0x17, 0x7b, 0x17, 0xea, - 0x61, 0x1a, 0x7a, 0x81, 0x99, 0xf9, 0x5f, 0x2b, 0x20, 0xd7, 0x61, 0xda, 0xf6, 0x7a, 0x6c, 0x90, - 0xe4, 0xe5, 0x89, 0x6f, 0x4f, 0xe8, 0x26, 0xeb, 0xb3, 0x12, 0xb6, 0x9b, 0x8a, 0x9b, 0x92, 0x11, - 0xfb, 0xc8, 0xa0, 0x22, 0xeb, 0x29, 0x5a, 0x6c, 0x7d, 0x4f, 0xd2, 0x63, 0x88, 0x26, 0x98, 0xa5, - 0x28, 0xc0, 0xaf, 0xc2, 0x44, 0xad, 0xb6, 0xb1, 0x49, 0x83, 0xf0, 0x7a, 0xcb, 0x7b, 0x80, 0x5b, - 0x52, 0x41, 0x84, 0x2e, 0x0f, 0xbc, 0x7a, 0x48, 0x83, 0xb0, 0xbe, 0xd3, 0xf2, 0x1e, 0xd8, 0x3a, - 0x16, 0xf9, 0x0a, 0xeb, 0x0f, 0xed, 0x00, 0x17, 0x51, 0x9e, 0x06, 0xc9, 0x18, 0xb8, 0xf0, 0xa3, - 0x25, 0xc3, 0x24, 0x0d, 0xb3, 0xb3, 0x34, 0x74, 0x74, 0x8a, 0x60, 0xd7, 0xbe, 0x52, 0xb3, 0xe9, - 0xd3, 0x20, 0x10, 0x7b, 0x07, 0x77, 0x8a, 0xc0, 0x3b, 0xa2, 0xc3, 0x0b, 0x0c, 0xa7, 0x08, 0x8d, - 0x80, 0x7c, 0x23, 0x03, 0xc7, 0x75, 0xbb, 0x6a, 0x5c, 0x2c, 0x6d, 0xda, 0x09, 0xc5, 0x4e, 0xf2, - 0xfa, 0x25, 0xb9, 0x77, 0x5e, 0xd2, 0xd0, 0x2e, 0xdd, 0xbf, 0x72, 0x49, 0xcb, 0x6e, 0x5d, 0x93, - 0x44, 0x22, 0x50, 0x4a, 0x1a, 0x3f, 0x7d, 0x1f, 0x74, 0x52, 0x48, 0x49, 0x99, 0x1d, 0xaf, 0x6c, - 0x3e, 0xa1, 0x15, 0x45, 0xa5, 0x2a, 0xd2, 0xac, 0xf3, 0x20, 0xb2, 0x7c, 0xf6, 0x71, 0x7b, 0x0b, - 0xb7, 0x6b, 0x9e, 0xa2, 0x1a, 0x0d, 0x0a, 0xa5, 0xb5, 0xd2, 0xed, 0xb5, 0x48, 0xb2, 0xfa, 0xde, - 0x32, 0x66, 0x36, 0xbe, 0x6d, 0x80, 0x31, 0xf3, 0x1d, 0x38, 0x16, 0xeb, 0x06, 0x29, 0x94, 0x1a, - 0xe0, 0xb8, 0x50, 0x1a, 0xa3, 0xb1, 0x63, 0xd8, 0xd6, 0x2f, 0x8d, 0xc5, 0xf8, 0x0a, 0x03, 0x26, - 0x0b, 0x46, 0xb9, 0xcc, 0xa9, 0xe7, 0xdc, 0xe4, 0x12, 0xa9, 0x2d, 0x4a, 0xc8, 0x29, 0xc8, 0xd5, - 0x6a, 0x1b, 0x7a, 0x9a, 0xe1, 0x20, 0xf0, 0x6c, 0x06, 0x63, 0x23, 0x84, 0xb6, 0x49, 0x5a, 0x50, - 0x46, 0xb6, 0xed, 0xd9, 0x08, 0x65, 0xfd, 0x2d, 0x25, 0xc0, 0x7c, 0xd4, 0xdf, 0x42, 0x02, 0x8c, - 0xe4, 0xbe, 0x32, 0xcc, 0x97, 0x82, 0x80, 0xfa, 0x98, 0x55, 0x9e, 0x9b, 0xbc, 0xf8, 0x42, 0x4a, - 0x11, 0xbb, 0x3b, 0x56, 0xea, 0x34, 0x02, 0xbb, 0x2f, 0x22, 0xb9, 0x00, 0x85, 0x52, 0xaf, 0xe9, - 0xd2, 0x4e, 0xc3, 0x88, 0xd6, 0xe1, 0x08, 0x98, 0xad, 0x4a, 0xc9, 0x07, 0x98, 0xdc, 0x9b, 0x11, - 0x49, 0x51, 0x55, 0xf4, 0xc0, 0x58, 0xb4, 0x04, 0xa5, 0x14, 0x15, 0x3d, 0xa7, 0xf2, 0x2e, 0x49, - 0xa7, 0x24, 0x25, 0x28, 0xae, 0xa0, 0xf1, 0xfe, 0x32, 0xe5, 0x9a, 0x5d, 0xcf, 0xe7, 0x0e, 0x09, - 0x32, 0xd3, 0x38, 0x2b, 0xab, 0x37, 0x55, 0xa1, 0x9d, 0x40, 0x27, 0xb7, 0xe0, 0x58, 0x1c, 0xc6, - 0x36, 0x72, 0x2e, 0xde, 0x62, 0x54, 0xb0, 0x04, 0x17, 0xdc, 0xca, 0xd3, 0xa8, 0xc8, 0x36, 0xcc, - 0x46, 0xe6, 0x04, 0xa6, 0xd0, 0x2b, 0xad, 0xdf, 0x54, 0xb9, 0x14, 0x7c, 0x9f, 0x15, 0x93, 0xf1, - 0x58, 0x64, 0x9a, 0xa0, 0x84, 0x5f, 0x3b, 0xc9, 0x8e, 0x34, 0x61, 0xba, 0xe6, 0xee, 0x76, 0xdc, - 0xce, 0xee, 0x2d, 0xba, 0x5f, 0x75, 0x5c, 0x5f, 0xd8, 0x21, 0x49, 0x2b, 0xc3, 0x52, 0xb0, 0xdf, - 0x6e, 0xd3, 0xd0, 0xc7, 0x23, 0x92, 0x95, 0xa3, 0xef, 0x1e, 0x13, 0x66, 0x4e, 0x07, 0x9c, 0x0e, - 0xfd, 0x54, 0xba, 0x8e, 0x6b, 0x9c, 0x05, 0x26, 0x4f, 0xe3, 0xe2, 0x31, 0x39, 0xe4, 0xc5, 0xa3, - 0x05, 0xb3, 0x2b, 0x9d, 0x86, 0xbf, 0x8f, 0x0a, 0x76, 0xd9, 0xb8, 0xa9, 0x43, 0x1a, 0xf7, 0xa2, - 0x68, 0xdc, 0x73, 0x8e, 0x9c, 0x61, 0x69, 0xcd, 0x4b, 0x32, 0x26, 0x35, 0x98, 0x45, 0xe9, 0xb0, - 0xb2, 0x5c, 0xad, 0x74, 0xdc, 0xd0, 0xc5, 0xcc, 0x90, 0xfc, 0x8c, 0x79, 0x49, 0xf0, 0x3c, 0xc3, - 0x05, 0x4c, 0xb7, 0xd9, 0xad, 0xbb, 0x12, 0x45, 0x67, 0x9a, 0xa0, 0xb7, 0xfe, 0x83, 0x02, 0xdf, - 0x0d, 0x75, 0x31, 0xad, 0x9f, 0x65, 0x55, 0x4c, 0x7c, 0xcb, 0x1e, 0x45, 0x7c, 0xcb, 0x1d, 0x2e, - 0xbe, 0xe5, 0x0f, 0x13, 0xdf, 0x62, 0xf2, 0xd5, 0xc8, 0x91, 0xe5, 0xab, 0xd1, 0x23, 0xc8, 0x57, - 0x63, 0x47, 0x92, 0xaf, 0x0c, 0x41, 0xb1, 0x70, 0x98, 0xa0, 0xf8, 0x2f, 0xa5, 0xb1, 0xa7, 0x55, - 0x1a, 0x4b, 0x3b, 0x5c, 0x8f, 0x24, 0x8d, 0xf5, 0x17, 0xa6, 0x8a, 0x7f, 0xde, 0xc2, 0xd4, 0xec, - 0x27, 0x10, 0xa6, 0x7e, 0x00, 0x8a, 0xf1, 0xfd, 0xfd, 0xf0, 0x78, 0x54, 0x4f, 0x2c, 0x76, 0x0a, - 0x3b, 0x7d, 0xe2, 0xfb, 0x2b, 0xbb, 0xe4, 0x55, 0x7d, 0xf7, 0xbe, 0x13, 0xd2, 0x28, 0x95, 0x3d, - 0x5e, 0xf2, 0xba, 0x1c, 0x8a, 0x6b, 0x5e, 0x43, 0x51, 0xa2, 0x45, 0x36, 0x4d, 0xb4, 0xb0, 0x7e, - 0x2c, 0x0b, 0xb3, 0x3c, 0xdc, 0xc3, 0xd3, 0xaf, 0xc5, 0x7c, 0xcf, 0x10, 0x18, 0xa5, 0xb1, 0x52, - 0xec, 0xeb, 0x06, 0xe8, 0x31, 0xbf, 0x0c, 0xc7, 0x13, 0x5d, 0x81, 0x42, 0xe3, 0xb2, 0x0c, 0xb4, - 0x91, 0x10, 0x1b, 0xe7, 0xd3, 0x2b, 0xb9, 0x7b, 0xd5, 0x4e, 0x50, 0x58, 0xff, 0x73, 0x2e, 0xc1, - 0x5f, 0x68, 0x34, 0x75, 0x1d, 0x65, 0xe6, 0x68, 0x3a, 0xca, 0xec, 0x70, 0x3a, 0xca, 0xd8, 0xd9, - 0x92, 0x1b, 0xe6, 0x6c, 0xf9, 0x00, 0xa6, 0x36, 0xa9, 0xd3, 0x0e, 0x36, 0x3d, 0x11, 0xf4, 0x96, - 0x1b, 0x2b, 0xca, 0x38, 0x1a, 0xac, 0x4c, 0xca, 0x3c, 0xca, 0xe8, 0x22, 0x64, 0x04, 0x6c, 0x3f, - 0xe4, 0x51, 0x70, 0x6d, 0x93, 0x83, 0x2e, 0xc8, 0x8e, 0x0c, 0x10, 0x64, 0x6b, 0x30, 0x29, 0xe8, - 0xa2, 0x20, 0x5c, 0x91, 0xc4, 0xc5, 0x8a, 0x10, 0x2e, 0x6b, 0x57, 0x69, 0x89, 0x54, 0xed, 0x5c, - 0xd8, 0x32, 0x98, 0xb0, 0x2e, 0x58, 0xe9, 0x34, 0xbb, 0x9e, 0xdb, 0xc1, 0x2e, 0x18, 0x8b, 0xba, - 0x80, 0x0a, 0x30, 0xef, 0x02, 0x0d, 0x89, 0xbc, 0x03, 0xd3, 0xa5, 0x6a, 0x45, 0x27, 0x2b, 0x44, - 0x6a, 0x52, 0xa7, 0xeb, 0xd6, 0x0d, 0xd2, 0x18, 0xae, 0xf5, 0x43, 0xe3, 0x72, 0x6d, 0x7d, 0xba, - 0x5a, 0x22, 0x53, 0xef, 0x93, 0x3b, 0xa2, 0xde, 0x27, 0x7f, 0xd8, 0x71, 0x6e, 0xc8, 0x18, 0x23, - 0x47, 0x90, 0x31, 0x46, 0x1f, 0x5b, 0x87, 0x33, 0x76, 0x44, 0xa9, 0x21, 0x36, 0xcd, 0x0b, 0xc3, - 0x4c, 0xf3, 0x54, 0x49, 0x63, 0xfc, 0xf1, 0x25, 0x0d, 0x38, 0xb2, 0xa4, 0xa1, 0x25, 0x2f, 0x9f, - 0x18, 0x2a, 0x79, 0x79, 0x66, 0x88, 0xe4, 0xe5, 0xdf, 0x53, 0xe2, 0xcb, 0x57, 0xd3, 0xc5, 0x97, - 0xc1, 0x5b, 0xfd, 0xff, 0x9f, 0x05, 0x18, 0x1f, 0x7b, 0x79, 0xcb, 0xf1, 0xd9, 0x5d, 0x30, 0x20, - 0x97, 0x61, 0x4c, 0xc6, 0xb0, 0xc9, 0x44, 0xd7, 0xea, 0x64, 0xf0, 0x1a, 0x89, 0xc5, 0xae, 0x8d, - 0x92, 0x58, 0x78, 0x71, 0xf3, 0x70, 0x1d, 0x02, 0x66, 0x84, 0xeb, 0x10, 0x30, 0xeb, 0x1f, 0xe4, - 0xe5, 0x4a, 0x66, 0xd7, 0x1a, 0x91, 0x82, 0x71, 0x49, 0x1b, 0x39, 0x4d, 0x7c, 0x8a, 0x8d, 0x4d, - 0xcc, 0x3a, 0xc9, 0x24, 0xf9, 0x24, 0x01, 0x80, 0xb4, 0xdc, 0x14, 0xb9, 0x21, 0x72, 0x53, 0xbc, - 0x69, 0x24, 0x76, 0xc8, 0x47, 0x91, 0xc4, 0xd9, 0xec, 0x1e, 0x9c, 0xd2, 0xe1, 0x9a, 0x9e, 0x81, - 0x61, 0x24, 0x72, 0x78, 0x47, 0xca, 0x01, 0xb9, 0x17, 0x94, 0x3c, 0x38, 0x7a, 0x94, 0xd0, 0x5a, - 0x63, 0x7f, 0xae, 0xa1, 0xb5, 0x56, 0x8c, 0x2c, 0xe4, 0x5c, 0x55, 0xff, 0x52, 0xdf, 0x2c, 0xe3, - 0xc6, 0xf3, 0x89, 0x46, 0x68, 0xfd, 0x1e, 0x81, 0xd9, 0x5a, 0x6d, 0x63, 0xd9, 0x75, 0x76, 0x3b, - 0x5e, 0x10, 0xba, 0x8d, 0x4a, 0x67, 0xc7, 0x63, 0xc2, 0x90, 0xda, 0x15, 0xb4, 0xc0, 0x4c, 0xd1, - 0x8e, 0xa0, 0x8a, 0x99, 0xb0, 0xbd, 0xe2, 0xfb, 0x9e, 0xaf, 0x0b, 0xdb, 0x94, 0x01, 0x6c, 0x0e, - 0x67, 0xf2, 0x46, 0xad, 0xc7, 0x13, 0xac, 0xf1, 0xd7, 0x13, 0x94, 0x37, 0x02, 0x0e, 0xb2, 0x65, - 0x19, 0xa1, 0xc9, 0x09, 0x2b, 0xe4, 0xcf, 0x93, 0x46, 0x80, 0xae, 0xa8, 0x98, 0xef, 0x79, 0xe2, - 0x4c, 0x42, 0x77, 0x97, 0x2e, 0xc2, 0xf5, 0x47, 0xbd, 0xc4, 0x1a, 0xd8, 0x87, 0xe3, 0x86, 0xdb, - 0xc6, 0xb0, 0x1a, 0xa5, 0x57, 0x84, 0x7c, 0x63, 0xa1, 0xf7, 0x59, 0x8a, 0x5a, 0x49, 0x8f, 0x84, - 0x9c, 0x5a, 0x03, 0xf9, 0xb1, 0x0c, 0x9c, 0x49, 0x2d, 0x51, 0xab, 0x7b, 0xc2, 0x08, 0x92, 0xa6, - 0x6d, 0x1a, 0x3c, 0xe6, 0x73, 0xbf, 0xaa, 0xeb, 0x29, 0x5b, 0xc1, 0xe0, 0x9a, 0xc8, 0x6f, 0x64, - 0xe0, 0xa4, 0x81, 0xa1, 0xf6, 0xbc, 0x00, 0xcf, 0xa6, 0xbe, 0xf3, 0xfa, 0xe3, 0x27, 0x33, 0xaf, - 0xcf, 0x99, 0xdf, 0x12, 0x6d, 0xc9, 0xfa, 0x37, 0xf4, 0x6b, 0x21, 0xb9, 0x0f, 0xb3, 0x58, 0x24, - 0xb5, 0x5b, 0x6c, 0xce, 0x0a, 0xa5, 0xd8, 0x5c, 0xd4, 0x6c, 0xee, 0x8a, 0x84, 0x79, 0x7b, 0x16, - 0xbf, 0x73, 0xb0, 0x30, 0x65, 0xa0, 0x63, 0x68, 0x5a, 0x6c, 0x83, 0x52, 0x91, 0xb9, 0x9d, 0x1d, - 0x4f, 0x3f, 0x2f, 0x13, 0x55, 0x90, 0xff, 0x30, 0x03, 0xf3, 0x0c, 0xca, 0x3f, 0xe3, 0xba, 0xef, - 0xb5, 0x55, 0xb9, 0x7c, 0x1d, 0xee, 0xd3, 0x6d, 0xad, 0x27, 0xd3, 0x6d, 0x2f, 0x61, 0x93, 0xf9, - 0x9e, 0x50, 0xdf, 0xf1, 0xbd, 0x76, 0xd4, 0x7c, 0x23, 0xef, 0x5c, 0xbf, 0x46, 0x92, 0x1f, 0xce, - 0xc0, 0x29, 0x43, 0xc1, 0xa0, 0x47, 0x25, 0x15, 0x0e, 0x5f, 0xd2, 0x94, 0x40, 0x2f, 0x5a, 0xba, - 0x24, 0xe6, 0xff, 0x79, 0x6c, 0x41, 0x74, 0x5a, 0x60, 0x5b, 0xea, 0x6d, 0x8e, 0xa5, 0x35, 0xa1, - 0x7f, 0x2d, 0xc4, 0x85, 0x59, 0x7c, 0x71, 0x32, 0xac, 0x18, 0xe6, 0xfa, 0x5b, 0x31, 0xa8, 0xfc, - 0x0a, 0x18, 0xf9, 0xb1, 0xbf, 0x29, 0x43, 0x92, 0x2b, 0xf9, 0x4b, 0x70, 0x2a, 0x01, 0x54, 0xab, - 0xed, 0x78, 0xdf, 0xd5, 0xf6, 0xea, 0xa3, 0x83, 0x85, 0x97, 0xd3, 0x6a, 0x4b, 0x5b, 0x69, 0xfd, - 0x6b, 0x20, 0x0e, 0x40, 0x54, 0x28, 0xd2, 0xd7, 0xa5, 0x4f, 0xd0, 0x57, 0xc5, 0xfc, 0xd0, 0xf0, - 0xd9, 0x5e, 0xae, 0xb5, 0x41, 0x3f, 0xf2, 0x22, 0x24, 0x42, 0x61, 0x52, 0x8b, 0x7a, 0xb9, 0x8f, - 0x79, 0xec, 0xfa, 0x56, 0xf2, 0x9d, 0x83, 0x05, 0x03, 0x9b, 0xc9, 0xc5, 0x7a, 0x38, 0x4d, 0x5d, - 0x2e, 0x36, 0x10, 0xc9, 0xaf, 0x65, 0x60, 0x8e, 0x01, 0xa2, 0x49, 0x25, 0x3e, 0x6a, 0x7e, 0xd0, - 0xac, 0xdf, 0x7b, 0x32, 0xb3, 0xfe, 0x05, 0x6c, 0xa3, 0x3e, 0xeb, 0x13, 0x5d, 0x92, 0xda, 0x38, - 0x9c, 0xed, 0xc6, 0xe3, 0xa6, 0x31, 0xdb, 0x4f, 0x0d, 0x31, 0xdb, 0xf9, 0x00, 0x1c, 0x3e, 0xdb, - 0xfb, 0xd6, 0x42, 0x36, 0x61, 0x52, 0x88, 0xc4, 0xbc, 0xc3, 0x9e, 0x37, 0xc2, 0xe2, 0xe9, 0x45, - 0xfc, 0x9e, 0x22, 0x82, 0x82, 0x26, 0xbe, 0xd0, 0xe0, 0x42, 0x3a, 0x70, 0x8c, 0xff, 0x36, 0xb5, - 0x03, 0x0b, 0x7d, 0xb5, 0x03, 0x17, 0xc4, 0x17, 0x9d, 0x15, 0xfc, 0x63, 0x4a, 0x02, 0x3d, 0x81, - 0x44, 0x0a, 0x63, 0xd2, 0x05, 0x62, 0x80, 0xf9, 0xa2, 0x3d, 0x3b, 0x58, 0x27, 0xf0, 0xb2, 0xa8, - 0x73, 0x21, 0x5e, 0x67, 0x7c, 0xe5, 0xa6, 0xf0, 0x26, 0x0e, 0xcc, 0x08, 0x28, 0xbb, 0x00, 0xe3, - 0x0e, 0xff, 0x82, 0xe1, 0x1b, 0x1e, 0x2b, 0xe5, 0xc9, 0xbf, 0x64, 0x4d, 0xe8, 0xbb, 0x1f, 0xdb, - 0xd0, 0xe3, 0xfc, 0xc8, 0x06, 0xcc, 0x96, 0xba, 0xdd, 0x96, 0x4b, 0x9b, 0xf8, 0x95, 0x3c, 0x15, - 0x99, 0x15, 0x85, 0x2e, 0x77, 0x78, 0xa1, 0x10, 0xf1, 0xe3, 0x79, 0xc8, 0x92, 0xb4, 0xd6, 0x37, - 0x32, 0x89, 0x46, 0xb3, 0x9b, 0x3b, 0xfe, 0xd0, 0xdc, 0x42, 0xf1, 0xe6, 0xce, 0x9b, 0x88, 0x1a, - 0x84, 0x08, 0x81, 0x09, 0x4b, 0x7a, 0xc8, 0x91, 0x9c, 0x48, 0x2d, 0xcf, 0x41, 0xd1, 0x85, 0x72, - 0x41, 0x5a, 0x97, 0xe5, 0x22, 0xa1, 0x0b, 0xad, 0xcb, 0x84, 0x4d, 0x99, 0xf5, 0xc3, 0x59, 0x73, - 0xda, 0x91, 0x0b, 0x9a, 0xdc, 0xae, 0x05, 0x3d, 0x91, 0x72, 0xbb, 0x26, 0xad, 0xff, 0xfd, 0x0c, - 0x1c, 0xdb, 0xf0, 0x77, 0x9d, 0x8e, 0xfb, 0x75, 0x1e, 0x3c, 0xcd, 0xc3, 0x71, 0x51, 0x1e, 0x31, - 0x9f, 0x6a, 0x34, 0x7b, 0x4f, 0xab, 0x98, 0xcd, 0x14, 0x9c, 0x32, 0x76, 0x5a, 0x7b, 0xd0, 0x5e, - 0x17, 0x1b, 0xa6, 0x25, 0x15, 0xe0, 0xe8, 0x1c, 0x6e, 0xfd, 0x44, 0x16, 0x26, 0xb4, 0x25, 0x40, - 0x3e, 0x0b, 0x93, 0x3a, 0x1f, 0x5d, 0xeb, 0xa3, 0x57, 0x6b, 0x1b, 0x58, 0xa8, 0xf6, 0xa1, 0x4e, - 0xdb, 0x50, 0xfb, 0xb0, 0x89, 0x8e, 0xd0, 0x23, 0x5e, 0x6d, 0xde, 0x4f, 0xb9, 0xda, 0x1c, 0x29, - 0x67, 0xdd, 0x3b, 0xc9, 0x0b, 0xce, 0xf0, 0x29, 0xe6, 0xac, 0x9f, 0xca, 0x40, 0x31, 0xbe, 0x48, - 0x3f, 0x95, 0x5e, 0x39, 0x82, 0x7e, 0xfd, 0xc7, 0xb3, 0x2a, 0xe4, 0xad, 0xf4, 0x42, 0x78, 0x5a, - 0x6d, 0x25, 0xde, 0x35, 0x54, 0xdf, 0xcf, 0xaa, 0x73, 0x45, 0xff, 0xb8, 0x01, 0xd1, 0x59, 0xf2, - 0xdf, 0xfe, 0xb9, 0x85, 0x67, 0xac, 0x0f, 0x61, 0x2e, 0xde, 0x1d, 0xa8, 0xfe, 0x2e, 0xc1, 0x8c, - 0x09, 0x8f, 0x07, 0xcc, 0x8e, 0x53, 0xd9, 0x71, 0x7c, 0xeb, 0x0f, 0xb2, 0x71, 0xde, 0xc2, 0x6e, - 0x82, 0x6d, 0x3a, 0x1d, 0x67, 0xbb, 0xa5, 0xa2, 0xf0, 0xf2, 0x4d, 0x87, 0x83, 0x6c, 0x59, 0x76, - 0x94, 0xd0, 0xe9, 0xca, 0x96, 0x3e, 0x97, 0x6e, 0x4b, 0x4f, 0xae, 0xc5, 0x2c, 0x86, 0x34, 0xc7, - 0xef, 0x07, 0x74, 0xbb, 0x1e, 0x59, 0x0d, 0xc5, 0x0c, 0x85, 0xca, 0x30, 0x67, 0x44, 0xc7, 0x93, - 0xf4, 0x23, 0x91, 0xc2, 0x35, 0xc4, 0x02, 0x4e, 0x9c, 0x8a, 0x4c, 0x56, 0x61, 0x8c, 0x35, 0xf3, - 0xb6, 0xd3, 0x15, 0x5a, 0x6d, 0x3d, 0xed, 0xbf, 0x3c, 0xbc, 0x34, 0xe7, 0x9a, 0x16, 0x65, 0x47, - 0xbe, 0x91, 0xf2, 0x91, 0x23, 0x5a, 0x7f, 0x9a, 0x61, 0xeb, 0xbf, 0x71, 0xef, 0x7b, 0x2c, 0xa8, - 0x3b, 0xfb, 0xa4, 0x01, 0x66, 0x3d, 0x7f, 0x94, 0xe5, 0x81, 0x94, 0xc5, 0xf4, 0x79, 0x13, 0x46, - 0x37, 0x1d, 0x7f, 0x97, 0x86, 0x22, 0xe4, 0xaf, 0xce, 0x85, 0x17, 0x44, 0x6e, 0xe9, 0x21, 0xfe, - 0xb6, 0x05, 0x81, 0xae, 0x0b, 0xcb, 0x0e, 0xa5, 0x0b, 0xd3, 0xd4, 0xb3, 0xb9, 0x27, 0xa6, 0x9e, - 0xfd, 0x3e, 0x15, 0xc3, 0xb8, 0x14, 0x0e, 0x11, 0x7c, 0xed, 0x6c, 0x3c, 0x3c, 0x78, 0x22, 0x4c, - 0x5e, 0xc4, 0x8e, 0x5c, 0xd3, 0x03, 0x8e, 0x6b, 0xe6, 0xe9, 0x87, 0x84, 0x16, 0xb7, 0xfe, 0x28, - 0xc7, 0xfb, 0x58, 0x74, 0xd4, 0x79, 0xc3, 0x75, 0x05, 0xd7, 0x49, 0x2c, 0xf1, 0x36, 0x77, 0x62, - 0x39, 0x0f, 0x79, 0x36, 0x37, 0x45, 0x6f, 0xf2, 0x94, 0xed, 0x5e, 0xcb, 0xf0, 0x36, 0x64, 0xe5, - 0x6c, 0x2d, 0xe3, 0x99, 0xa4, 0xe7, 0x36, 0xc0, 0x63, 0x4b, 0x5f, 0xcb, 0x88, 0x41, 0x2e, 0x40, - 0x7e, 0xdd, 0x6b, 0xca, 0x20, 0x7f, 0x73, 0xe8, 0xc0, 0x68, 0xe4, 0x30, 0x9e, 0xcf, 0xd8, 0x88, - 0xc1, 0xbe, 0x55, 0x85, 0x05, 0xd6, 0xbf, 0xb5, 0xbd, 0xe3, 0x88, 0x90, 0xe5, 0xfa, 0xb7, 0x46, - 0x11, 0x84, 0x57, 0x60, 0xda, 0xcc, 0x50, 0x25, 0x8c, 0x9e, 0x50, 0xcd, 0x1a, 0x4b, 0x74, 0xa5, - 0x6b, 0xc7, 0x4d, 0x22, 0xb2, 0x04, 0x53, 0x46, 0x70, 0x21, 0xf1, 0xbc, 0x84, 0xea, 0x4d, 0x33, - 0x34, 0x91, 0xae, 0xde, 0x34, 0x48, 0xd8, 0x79, 0x2e, 0xda, 0xaf, 0x3d, 0x32, 0x25, 0xda, 0x2e, - 0x70, 0xc8, 0x55, 0x28, 0x70, 0x4f, 0xc1, 0xca, 0xb2, 0xfe, 0x5a, 0x11, 0x20, 0x2c, 0xe6, 0x69, - 0x2b, 0x11, 0x35, 0xcf, 0xb0, 0xcf, 0x40, 0x51, 0x6c, 0x49, 0x2a, 0x97, 0x05, 0xbe, 0x14, 0x57, - 0x96, 0x6d, 0x7d, 0x1b, 0x69, 0xb8, 0x4d, 0xdf, 0x46, 0xa8, 0xf5, 0xad, 0x0c, 0x9c, 0x5a, 0xa7, - 0xe1, 0x03, 0xcf, 0xbf, 0x67, 0xd3, 0x20, 0xf4, 0x5d, 0x9e, 0x1a, 0x03, 0x17, 0xe2, 0x67, 0xc9, - 0x3b, 0x30, 0x82, 0xd6, 0x37, 0xb1, 0x93, 0x21, 0x5e, 0xc7, 0xd2, 0x94, 0x98, 0xc0, 0x23, 0x68, - 0xca, 0x63, 0x73, 0x22, 0xf2, 0x26, 0xe4, 0x97, 0x69, 0x67, 0x3f, 0x96, 0x23, 0x21, 0x41, 0xac, - 0x36, 0x84, 0x26, 0xed, 0xec, 0xdb, 0x48, 0x62, 0xfd, 0x54, 0x16, 0x8e, 0xa7, 0x34, 0xeb, 0xee, - 0x67, 0x9f, 0xd2, 0x5d, 0x71, 0xc9, 0xd8, 0x15, 0xcf, 0x0a, 0xd2, 0xbe, 0x1d, 0x9f, 0xba, 0x49, - 0xfe, 0x9d, 0x0c, 0x9c, 0x34, 0x27, 0xa8, 0x30, 0xb7, 0xbb, 0x7b, 0x95, 0xbc, 0x0d, 0xa3, 0xab, - 0xd4, 0x69, 0x52, 0x19, 0x24, 0x3d, 0x4a, 0x3b, 0xcf, 0xdd, 0xa0, 0x78, 0x21, 0x67, 0x1b, 0x19, - 0xcd, 0x73, 0x28, 0x59, 0x16, 0x8d, 0xe3, 0xf2, 0xb8, 0x25, 0x5d, 0x12, 0xd3, 0xaa, 0x1a, 0xf0, - 0xce, 0xfe, 0x9d, 0x0c, 0x3c, 0x3b, 0x80, 0x86, 0x0d, 0x1c, 0x1b, 0x7a, 0x7d, 0xe0, 0xf0, 0x44, - 0x45, 0x28, 0x79, 0x0f, 0x66, 0x36, 0x85, 0x3c, 0x2f, 0x87, 0x23, 0x1b, 0xad, 0x17, 0x29, 0xea, - 0xd7, 0xe5, 0xb8, 0xc4, 0x91, 0x0d, 0x5f, 0xd9, 0xdc, 0x40, 0x5f, 0x59, 0xdd, 0xf5, 0x34, 0x3f, - 0xac, 0xeb, 0xe9, 0x87, 0xf1, 0xbc, 0xae, 0x22, 0x02, 0x58, 0xe4, 0x78, 0x9b, 0xe9, 0xef, 0x78, - 0x3b, 0x30, 0xce, 0x10, 0xe6, 0x54, 0x30, 0x79, 0x3f, 0xee, 0x78, 0xbe, 0x6b, 0x8c, 0xe7, 0xb3, - 0xe9, 0xe3, 0xd9, 0x7f, 0x20, 0x7f, 0x36, 0x13, 0xff, 0xd8, 0xa1, 0x46, 0xd0, 0x82, 0xd1, 0x65, - 0xaf, 0xed, 0xb8, 0x1d, 0x3d, 0x2d, 0x5d, 0x13, 0x21, 0xb6, 0x28, 0x19, 0xce, 0x4f, 0xf9, 0x2c, - 0x8c, 0xac, 0x7b, 0x9d, 0xd2, 0xb2, 0xb0, 0xad, 0x43, 0x3e, 0x1d, 0xaf, 0x53, 0x77, 0x9a, 0x36, - 0x2f, 0xb0, 0x7e, 0x6c, 0x04, 0x4e, 0xd9, 0x74, 0xd7, 0x65, 0x12, 0xe7, 0x9d, 0xc0, 0xed, 0xec, - 0x1a, 0x4e, 0x99, 0x56, 0x6c, 0x4c, 0x44, 0x64, 0x4c, 0x06, 0x51, 0x75, 0x5c, 0x84, 0x02, 0x3b, - 0x60, 0xb4, 0x61, 0xc1, 0xe7, 0x08, 0xcc, 0xb1, 0xc9, 0xe7, 0x8b, 0x2c, 0x26, 0xaf, 0x88, 0x03, - 0x50, 0x8b, 0x5d, 0xcc, 0x0e, 0xc0, 0xef, 0x1e, 0x2c, 0x40, 0x6d, 0x3f, 0x08, 0x29, 0x5e, 0x7e, - 0xc4, 0x21, 0xa8, 0xa4, 0xd4, 0x7c, 0x1f, 0x29, 0xf5, 0x36, 0xcc, 0x95, 0x9a, 0x7c, 0xdf, 0x73, - 0x5a, 0x55, 0xdf, 0xed, 0x34, 0xdc, 0xae, 0xd3, 0x92, 0x37, 0x2f, 0x7c, 0x94, 0x72, 0x54, 0x79, - 0xbd, 0xab, 0x10, 0xec, 0x54, 0x32, 0xf6, 0x19, 0xcb, 0xeb, 0x35, 0x9e, 0x3f, 0x9a, 0xbf, 0x34, - 0xe1, 0x67, 0x34, 0x3b, 0x01, 0x4f, 0x20, 0x6d, 0xab, 0x62, 0x94, 0x8f, 0xf1, 0x39, 0x7f, 0x73, - 0xad, 0x16, 0xb9, 0x6d, 0xf0, 0xd0, 0x8a, 0xfc, 0xc9, 0x3f, 0x6c, 0x05, 0xf8, 0xec, 0x6f, 0xe0, - 0x45, 0x74, 0xb5, 0xda, 0x2a, 0xa3, 0x2b, 0x24, 0xe8, 0x82, 0x60, 0x4f, 0xa7, 0xe3, 0x78, 0xe4, - 0x32, 0x00, 0x0f, 0x0a, 0x84, 0x53, 0x66, 0x3c, 0x92, 0xa6, 0x7d, 0x84, 0x72, 0x69, 0x5a, 0x43, - 0x21, 0xef, 0xc0, 0xb1, 0x95, 0xf2, 0xa2, 0xd4, 0x0f, 0x2e, 0x7b, 0x8d, 0x1e, 0x3e, 0xd0, 0x02, - 0xd6, 0x87, 0x63, 0x48, 0x1b, 0x8b, 0x6c, 0x9e, 0xa4, 0xa1, 0x91, 0xf3, 0x30, 0x56, 0x59, 0xe6, - 0x7d, 0x3f, 0xa1, 0xc7, 0x0f, 0x17, 0x86, 0x0f, 0xb2, 0x90, 0x6c, 0x44, 0xe2, 0xde, 0xe4, 0xa1, - 0x72, 0xd9, 0xa9, 0xc3, 0x45, 0x3d, 0x11, 0x66, 0x9c, 0xa7, 0xb3, 0x28, 0x7b, 0x4d, 0x1a, 0xdc, - 0xbd, 0xf2, 0x3d, 0x16, 0x66, 0x5c, 0xfb, 0x36, 0xdc, 0x08, 0xae, 0xa4, 0xee, 0x1a, 0xff, 0x1a, - 0x86, 0x19, 0x4f, 0xe0, 0x92, 0xcf, 0xc3, 0x08, 0xfe, 0x14, 0x22, 0xc4, 0xb1, 0x14, 0xb6, 0x91, - 0xf8, 0xd0, 0xe0, 0x19, 0x1a, 0x91, 0x80, 0x54, 0x60, 0x4c, 0x48, 0xaf, 0x47, 0x09, 0x96, 0x2b, - 0xc4, 0x60, 0x3e, 0x48, 0x82, 0xde, 0x6a, 0xc2, 0xa4, 0x5e, 0x21, 0x9b, 0x9c, 0xab, 0x4e, 0xb0, - 0x47, 0x9b, 0xec, 0x97, 0x88, 0x73, 0x8f, 0x93, 0x73, 0x0f, 0xa1, 0x75, 0xd6, 0x0e, 0x5b, 0x43, - 0x61, 0x1b, 0x57, 0x25, 0xb8, 0x13, 0x88, 0xa6, 0x88, 0xfb, 0xac, 0x8b, 0xba, 0x91, 0xa6, 0x2d, - 0x8a, 0xac, 0xef, 0x83, 0xb9, 0xf5, 0x5e, 0xab, 0xc5, 0xee, 0xb6, 0x32, 0x0e, 0x6a, 0xe8, 0x84, - 0x94, 0x2c, 0xc1, 0x08, 0xfe, 0x81, 0x15, 0x4d, 0xab, 0x2e, 0xd0, 0x71, 0xd0, 0xd6, 0x2a, 0x83, - 0x2e, 0x9d, 0xa1, 0x99, 0x5d, 0x9d, 0x93, 0x5a, 0xbf, 0x1b, 0xe5, 0x0a, 0xdd, 0xf4, 0x9d, 0xc6, - 0x3d, 0xea, 0x8b, 0x13, 0x68, 0xd8, 0xb4, 0xa7, 0x37, 0x65, 0x23, 0xcc, 0x53, 0x21, 0xad, 0xc1, - 0x87, 0x35, 0x86, 0xbc, 0x03, 0x13, 0xe2, 0x64, 0xd0, 0x02, 0x91, 0xa0, 0xb7, 0xb7, 0x4c, 0x1e, - 0x1b, 0x7b, 0xb9, 0xd7, 0xd1, 0xf1, 0xc0, 0x33, 0x3f, 0xe5, 0xee, 0x95, 0x4f, 0xe3, 0xc0, 0x33, - 0xeb, 0x18, 0x30, 0x75, 0xff, 0xe9, 0x44, 0xbc, 0x6f, 0xc5, 0xdc, 0xbd, 0xa6, 0x87, 0x1e, 0xc8, - 0x44, 0xd7, 0x8f, 0x28, 0xf4, 0x80, 0x7e, 0xfd, 0x50, 0xa8, 0x6a, 0x4c, 0xb2, 0x87, 0x8c, 0xc9, - 0x7b, 0x72, 0x4c, 0x72, 0xfd, 0x27, 0xc6, 0xb1, 0x01, 0xe3, 0x50, 0x8b, 0x56, 0x48, 0x7e, 0xa8, - 0xbb, 0xeb, 0x33, 0x18, 0x63, 0x91, 0x93, 0xc4, 0x37, 0x34, 0xc1, 0x49, 0xbf, 0x10, 0x8f, 0x0c, - 0xcf, 0xf4, 0x90, 0x0b, 0xf1, 0x5b, 0x30, 0x59, 0x0a, 0x43, 0xa7, 0xb1, 0x47, 0x9b, 0xcb, 0x6c, - 0x7b, 0xd2, 0xbc, 0xa4, 0x1d, 0x01, 0xd7, 0x5f, 0x26, 0x74, 0x5c, 0x1e, 0xf5, 0xc7, 0x09, 0x84, - 0xe1, 0x98, 0x8a, 0xfa, 0xc3, 0x20, 0x66, 0xd4, 0x1f, 0x06, 0x21, 0x97, 0x61, 0xac, 0xd2, 0xb9, - 0xef, 0xb2, 0x3e, 0x29, 0x44, 0x49, 0x00, 0x5d, 0x0e, 0xd2, 0x37, 0x57, 0x81, 0x45, 0xde, 0xd4, - 0x24, 0xc7, 0xf1, 0xe8, 0x96, 0xc8, 0xf5, 0x0a, 0x75, 0x29, 0x40, 0xea, 0x52, 0xa1, 0x12, 0x25, - 0xaf, 0xc1, 0x98, 0x54, 0x17, 0x41, 0x74, 0x33, 0x14, 0x94, 0x49, 0x0f, 0x35, 0x89, 0x8c, 0x19, - 0xb3, 0xb4, 0x78, 0xfd, 0x13, 0x5a, 0xc6, 0x2c, 0x2d, 0x5e, 0xbf, 0x91, 0x31, 0x4b, 0x8b, 0xdc, - 0xaf, 0x6e, 0xda, 0x93, 0x87, 0xde, 0xb4, 0xef, 0xc2, 0x64, 0xd5, 0xf1, 0x43, 0x97, 0x89, 0x0b, - 0x9d, 0x30, 0x98, 0x9f, 0x32, 0x94, 0x53, 0x5a, 0xd1, 0xd2, 0xf3, 0x32, 0x73, 0x54, 0x57, 0xc3, - 0x37, 0x53, 0x0e, 0x45, 0xf0, 0x74, 0xb3, 0xb1, 0xe9, 0xc7, 0x31, 0x1b, 0xc3, 0x4e, 0x45, 0x85, - 0xc4, 0x4c, 0x74, 0xed, 0x45, 0xc9, 0x30, 0xa6, 0x95, 0x50, 0x88, 0xe4, 0x4b, 0x30, 0xc9, 0xfe, - 0xc6, 0x84, 0xc2, 0x2e, 0x0d, 0xe6, 0x8b, 0xf8, 0x71, 0xcf, 0xa7, 0xae, 0x7e, 0x9e, 0x75, 0xb8, - 0x46, 0x43, 0xbe, 0x80, 0x91, 0x71, 0x5c, 0xd3, 0x68, 0x70, 0x23, 0xef, 0xc3, 0xa4, 0x4c, 0xaf, - 0x8d, 0x83, 0x34, 0x1b, 0x19, 0xfe, 0x35, 0x05, 0x3c, 0x11, 0x78, 0x4b, 0x27, 0x60, 0xc7, 0x7c, - 0xa9, 0xcb, 0x37, 0x48, 0xa2, 0xcd, 0xf6, 0x6e, 0x62, 0x73, 0x94, 0x68, 0xe4, 0x0b, 0x30, 0x59, - 0xea, 0x76, 0xa3, 0x1d, 0xe7, 0x98, 0xa6, 0x6d, 0xe8, 0x76, 0xeb, 0xa9, 0xbb, 0x8e, 0x41, 0x11, - 0xdf, 0x98, 0xe7, 0x8e, 0xb4, 0x31, 0x93, 0xd7, 0x95, 0xe0, 0x7c, 0x3c, 0x52, 0x9d, 0x09, 0xe9, - 0x5c, 0x5f, 0x69, 0x42, 0x86, 0x2e, 0xc3, 0x14, 0xd7, 0x25, 0x49, 0x69, 0xe6, 0x44, 0x62, 0xf5, - 0xa4, 0x08, 0x35, 0x26, 0x0d, 0x59, 0x81, 0x69, 0xee, 0xd7, 0xd3, 0x12, 0x11, 0xd1, 0xe6, 0x4f, - 0x46, 0xb9, 0x79, 0xb9, 0x3b, 0x50, 0x0b, 0x03, 0xe5, 0x3a, 0x06, 0x97, 0x18, 0x91, 0xf5, 0xc7, - 0x19, 0x38, 0xd9, 0x67, 0xc4, 0x55, 0xbc, 0xac, 0xcc, 0x21, 0x99, 0xbb, 0x2f, 0x47, 0x52, 0x96, - 0xa6, 0x3a, 0x14, 0x52, 0x96, 0x3e, 0x5e, 0x52, 0xde, 0xf2, 0x80, 0x88, 0xbc, 0xdd, 0x5a, 0x7e, - 0x6b, 0x11, 0xb4, 0x31, 0x76, 0x08, 0x19, 0xf9, 0xbd, 0x79, 0x2e, 0x79, 0x9f, 0x83, 0xd4, 0xb0, - 0x7e, 0xec, 0x19, 0x2b, 0x38, 0x85, 0xb5, 0x75, 0x90, 0x81, 0x09, 0x6d, 0x1d, 0x92, 0xb3, 0x9a, - 0xcf, 0x53, 0x91, 0x07, 0xe1, 0xd6, 0x38, 0x64, 0xf9, 0x49, 0x84, 0x8b, 0x2a, 0x7b, 0xb8, 0x96, - 0xef, 0x36, 0x13, 0x85, 0xb4, 0x98, 0x62, 0x6d, 0x43, 0x25, 0x67, 0x63, 0x39, 0x26, 0xbc, 0x73, - 0x82, 0xb0, 0xd4, 0x08, 0xdd, 0xfb, 0x74, 0x88, 0x43, 0x27, 0x4a, 0x78, 0xe7, 0x04, 0x61, 0xdd, - 0x41, 0xb2, 0x44, 0xc2, 0x3b, 0xc5, 0xd0, 0xfa, 0x91, 0x0c, 0xc0, 0x9d, 0x4a, 0x19, 0x83, 0x02, - 0x3e, 0xae, 0x50, 0x90, 0x1e, 0x68, 0x49, 0x72, 0x1f, 0x20, 0x0e, 0x54, 0x61, 0xda, 0xc4, 0x22, - 0xef, 0xc1, 0x4c, 0xad, 0xe1, 0x7b, 0xad, 0xd6, 0xb6, 0xd3, 0xb8, 0xb7, 0xe6, 0x76, 0x28, 0x8f, - 0x70, 0x33, 0xc2, 0x8f, 0xa2, 0x40, 0x15, 0xd5, 0x5b, 0xac, 0xcc, 0x8e, 0x23, 0x5b, 0x7f, 0x96, - 0x81, 0x89, 0x4a, 0x27, 0x08, 0x9d, 0x56, 0x0b, 0x85, 0x9d, 0xef, 0xa5, 0x3c, 0x0c, 0xea, 0xbb, - 0x06, 0xf4, 0xe8, 0x1b, 0x30, 0x13, 0x43, 0x63, 0x97, 0xf4, 0x1a, 0xba, 0x64, 0xea, 0x97, 0x74, - 0xee, 0xa4, 0x69, 0x8b, 0x12, 0x6b, 0x45, 0x23, 0xbb, 0x7b, 0x05, 0x1f, 0xad, 0x16, 0x01, 0x5c, - 0x09, 0x92, 0x57, 0x0a, 0x12, 0x6f, 0xc9, 0xdd, 0x2b, 0xb6, 0x86, 0x65, 0xad, 0xc3, 0x68, 0xcd, - 0xf3, 0xc3, 0xa5, 0x7d, 0x2e, 0xc5, 0x2f, 0xd3, 0xa0, 0xa1, 0xbf, 0x4a, 0xb9, 0xa8, 0x09, 0x6e, - 0xd8, 0xa2, 0x88, 0xdd, 0xe1, 0xaf, 0xbb, 0xb4, 0xd5, 0xd4, 0xcd, 0x0f, 0x77, 0x18, 0xc0, 0xe6, - 0x70, 0x76, 0xd3, 0x39, 0x11, 0x05, 0xad, 0x8d, 0xec, 0x1c, 0x1f, 0x77, 0xc2, 0x96, 0x8d, 0xfe, - 0x7d, 0xc1, 0x4c, 0x73, 0x68, 0xd4, 0x34, 0xa0, 0xab, 0xff, 0x9d, 0x0c, 0x9c, 0xee, 0x4f, 0xa2, - 0x9b, 0x4e, 0x66, 0x06, 0x98, 0x4e, 0xbe, 0x14, 0x7f, 0x45, 0x41, 0x34, 0xf1, 0x8a, 0x12, 0xbd, - 0x9d, 0x2c, 0xa3, 0xe5, 0x6a, 0x43, 0x25, 0xa8, 0x3d, 0x3b, 0xa0, 0xcd, 0x88, 0xc8, 0x87, 0x39, - 0x44, 0x1a, 0x5b, 0xd0, 0x5a, 0xbf, 0x99, 0x87, 0x53, 0x7d, 0x29, 0xc8, 0xaa, 0x16, 0xff, 0x7a, - 0x5a, 0x45, 0xde, 0xed, 0x8b, 0x7f, 0x09, 0xff, 0x45, 0xe3, 0xa4, 0xb8, 0x43, 0xc5, 0x86, 0x8a, - 0x7b, 0x9c, 0x45, 0x5e, 0xaf, 0x1e, 0xca, 0x8b, 0xa3, 0x23, 0x33, 0x48, 0x86, 0x40, 0x46, 0xbf, - 0x17, 0x1a, 0x3a, 0x6e, 0x2b, 0xd0, 0x97, 0x5d, 0x93, 0x83, 0x6c, 0x59, 0x16, 0xd9, 0xb3, 0xe6, - 0xd3, 0xed, 0x59, 0xad, 0xff, 0x3b, 0x03, 0xe3, 0xaa, 0xd9, 0xe4, 0x34, 0x9c, 0xd8, 0xb4, 0x4b, - 0xe5, 0x95, 0xfa, 0xe6, 0x87, 0xd5, 0x95, 0xfa, 0x9d, 0xf5, 0x5a, 0x75, 0xa5, 0x5c, 0xb9, 0x5e, - 0x59, 0x59, 0x2e, 0x3e, 0x43, 0x66, 0x61, 0xea, 0xce, 0xfa, 0xad, 0xf5, 0x8d, 0xad, 0xf5, 0xfa, - 0x8a, 0x6d, 0x6f, 0xd8, 0xc5, 0x0c, 0x99, 0x82, 0x71, 0x7b, 0xa9, 0x54, 0xae, 0xaf, 0x6f, 0x2c, - 0xaf, 0x14, 0xb3, 0xa4, 0x08, 0x93, 0xe5, 0x8d, 0xf5, 0xf5, 0x95, 0xf2, 0x66, 0xe5, 0x6e, 0x65, - 0xf3, 0xc3, 0x62, 0x8e, 0x10, 0x98, 0x46, 0x84, 0xaa, 0x5d, 0x59, 0x2f, 0x57, 0xaa, 0xa5, 0xb5, - 0x62, 0x9e, 0xc1, 0x18, 0xbe, 0x06, 0x1b, 0x51, 0x8c, 0x6e, 0xdd, 0x59, 0x5a, 0x29, 0x8e, 0x32, - 0x14, 0xf6, 0x97, 0x86, 0x32, 0xc6, 0xaa, 0x47, 0x94, 0xe5, 0xd2, 0x66, 0x69, 0xa9, 0x54, 0x5b, - 0x29, 0x16, 0xc8, 0x49, 0x38, 0x66, 0x80, 0xea, 0x6b, 0x1b, 0x37, 0x2a, 0xeb, 0xc5, 0x71, 0x32, - 0x07, 0x45, 0x05, 0x5b, 0x5e, 0xaa, 0xdf, 0xa9, 0xad, 0xd8, 0x45, 0x88, 0x43, 0xd7, 0x4b, 0xb7, - 0x57, 0x8a, 0x13, 0xd6, 0xbb, 0xdc, 0xd5, 0x85, 0x77, 0x35, 0x39, 0x01, 0xa4, 0xb6, 0x59, 0xda, - 0xbc, 0x53, 0x8b, 0x7d, 0xfc, 0x04, 0x8c, 0xd5, 0xee, 0x94, 0xcb, 0x2b, 0xb5, 0x5a, 0x31, 0x43, - 0x00, 0x46, 0xaf, 0x97, 0x2a, 0x6b, 0x2b, 0xcb, 0xc5, 0xac, 0xf5, 0x93, 0x19, 0x98, 0x95, 0xa2, - 0x97, 0x54, 0x89, 0x3f, 0xe6, 0x5a, 0x7c, 0xcf, 0xb8, 0x51, 0x4a, 0x4f, 0x84, 0x58, 0x25, 0x03, - 0x96, 0xa1, 0x0f, 0xc7, 0x53, 0x91, 0xc9, 0x87, 0x50, 0x94, 0x0d, 0xb8, 0xed, 0x84, 0x8d, 0xbd, - 0x68, 0x1b, 0x7b, 0x3e, 0x56, 0x49, 0x0c, 0x8d, 0x6b, 0xf6, 0xa2, 0x44, 0x4f, 0x09, 0x36, 0xd6, - 0xb7, 0x33, 0x70, 0xb2, 0x0f, 0x31, 0x29, 0xc3, 0xa8, 0x0a, 0x07, 0x3c, 0xc0, 0xe8, 0x66, 0xee, - 0x3b, 0x07, 0x0b, 0x02, 0x11, 0xf3, 0xdd, 0xe0, 0x5f, 0xf6, 0xa8, 0x8a, 0xef, 0x8b, 0x41, 0x76, - 0x79, 0x9f, 0x9c, 0x8a, 0x75, 0xa7, 0xa8, 0xa9, 0xb4, 0x55, 0x5b, 0x9a, 0x10, 0x1d, 0x92, 0x73, - 0x1e, 0x04, 0x18, 0x65, 0xd7, 0xfa, 0x56, 0x86, 0x89, 0x4a, 0x71, 0x44, 0x26, 0x41, 0x96, 0x82, - 0xa0, 0xd7, 0xa6, 0xb6, 0xd7, 0xa2, 0x25, 0x7b, 0x5d, 0x9c, 0x05, 0x28, 0xfb, 0x39, 0x58, 0x80, - 0x42, 0x7a, 0xdd, 0xf1, 0x3b, 0xc6, 0x03, 0x9b, 0x4e, 0x43, 0xde, 0x04, 0x50, 0x29, 0x89, 0xa5, - 0x7f, 0x37, 0x8f, 0x08, 0x20, 0xa0, 0xa6, 0xf4, 0xaa, 0x21, 0x5b, 0x7f, 0x35, 0x03, 0x93, 0xe2, - 0x0a, 0x52, 0x6a, 0x51, 0x3f, 0x7c, 0xbc, 0x39, 0xf3, 0xa6, 0x31, 0x67, 0x94, 0x8d, 0xb9, 0xc6, - 0x9f, 0x15, 0xa7, 0x4e, 0x97, 0xff, 0x34, 0x03, 0xc5, 0x38, 0x22, 0x79, 0x0f, 0x0a, 0x35, 0x7a, - 0x9f, 0xfa, 0x6e, 0xb8, 0x2f, 0x76, 0x3f, 0x99, 0x38, 0x81, 0xe3, 0x88, 0x32, 0xae, 0xe9, 0x0c, - 0xc4, 0x2f, 0x5b, 0xd1, 0x0c, 0xbb, 0x89, 0x6b, 0x4a, 0x84, 0xdc, 0x93, 0x52, 0x22, 0x58, 0xff, - 0x4d, 0x16, 0x4e, 0xde, 0xa0, 0xa1, 0xfe, 0x4d, 0xea, 0x45, 0xf4, 0x33, 0xc3, 0x7d, 0x97, 0xf6, - 0x25, 0xf3, 0x30, 0x86, 0x45, 0x72, 0x7c, 0x6d, 0xf9, 0x93, 0x2c, 0xa9, 0x79, 0x9d, 0x33, 0x22, - 0xb3, 0xf7, 0xa9, 0xfb, 0x92, 0x16, 0xab, 0x59, 0x4d, 0xeb, 0xf3, 0x30, 0x8d, 0xc1, 0x08, 0x7b, - 0x6c, 0x39, 0xd0, 0xa6, 0x50, 0xa6, 0x14, 0xec, 0x18, 0x94, 0xbc, 0x02, 0x45, 0x06, 0x29, 0x35, - 0xee, 0x75, 0xbc, 0x07, 0x2d, 0xda, 0xdc, 0xa5, 0x3c, 0x51, 0x6c, 0xc1, 0x4e, 0xc0, 0x25, 0xcf, - 0x3b, 0x1d, 0x7e, 0x11, 0xa2, 0x4d, 0xd4, 0x78, 0x08, 0x9e, 0x11, 0xf4, 0xf4, 0x9b, 0x30, 0xf1, - 0x09, 0xe3, 0xae, 0x5b, 0xff, 0x75, 0x06, 0xe6, 0xf0, 0xe3, 0xb4, 0x8a, 0x51, 0x15, 0xfe, 0x99, - 0xa8, 0xb7, 0xb4, 0x50, 0xc4, 0x0e, 0x03, 0x99, 0x4b, 0x41, 0xf5, 0x62, 0xa4, 0x61, 0xc9, 0x0e, - 0xa1, 0x61, 0xa9, 0x1d, 0x25, 0xaf, 0xdc, 0x90, 0x0a, 0x22, 0x9e, 0x0d, 0x38, 0x1a, 0x72, 0xeb, - 0x2f, 0x67, 0x61, 0xcc, 0xa6, 0x98, 0x70, 0x8b, 0x9c, 0x87, 0xb1, 0x75, 0x2f, 0xa4, 0xc1, 0x6d, - 0x23, 0xbb, 0x5a, 0x87, 0x81, 0xea, 0xed, 0xa6, 0x2d, 0x0b, 0xd9, 0x84, 0xaf, 0xfa, 0x5e, 0xb3, - 0xd7, 0x08, 0xf5, 0x09, 0xdf, 0xe5, 0x20, 0x5b, 0x96, 0x91, 0xd7, 0x60, 0x5c, 0x70, 0x56, 0xef, - 0x50, 0x68, 0x3f, 0xe9, 0x53, 0x95, 0xb0, 0x2d, 0x42, 0x40, 0x41, 0x95, 0x4b, 0x0d, 0x79, 0x4d, - 0x50, 0x4d, 0x08, 0x02, 0x52, 0xfe, 0x1e, 0x19, 0x20, 0x7f, 0x7f, 0x06, 0x46, 0x4b, 0x41, 0x40, - 0x43, 0xe9, 0xfa, 0x3a, 0xa9, 0xc2, 0x6d, 0x04, 0x34, 0xe4, 0x8c, 0x1d, 0x2c, 0xb7, 0x05, 0x9e, - 0xf5, 0xa7, 0x59, 0x18, 0xc1, 0x3f, 0xf1, 0xed, 0xcd, 0x6f, 0xec, 0x19, 0x6f, 0x6f, 0x7e, 0x63, - 0xcf, 0x46, 0x28, 0xb9, 0x82, 0xf7, 0x7e, 0x19, 0x35, 0x5b, 0x7c, 0x3d, 0x2a, 0xb4, 0x9b, 0x11, - 0xd8, 0xd6, 0x71, 0xd4, 0xa3, 0x64, 0x2e, 0xd5, 0xe1, 0xfd, 0x04, 0x64, 0x37, 0x6a, 0xe2, 0x8b, - 0x31, 0x9a, 0x86, 0x17, 0xd8, 0xd9, 0x8d, 0x1a, 0xf6, 0xc6, 0x6a, 0x69, 0xf1, 0x8d, 0x6b, 0x7a, - 0x22, 0xc0, 0x60, 0xcf, 0x59, 0x7c, 0xe3, 0x9a, 0x2d, 0x4a, 0x58, 0xff, 0x62, 0x9b, 0x6b, 0xee, - 0xd7, 0xa9, 0xf0, 0x16, 0xc5, 0xfe, 0xc5, 0x6f, 0xab, 0x07, 0xee, 0xd7, 0xa9, 0x1d, 0x21, 0x90, - 0x45, 0x98, 0x10, 0x0e, 0xc2, 0x88, 0xaf, 0x39, 0xf0, 0x0a, 0x07, 0x62, 0x4e, 0xa1, 0x23, 0xf1, - 0xb7, 0x25, 0x31, 0x40, 0x32, 0xb7, 0x8f, 0x78, 0x5b, 0x92, 0x43, 0x18, 0xd8, 0x1a, 0x4a, 0xe4, - 0xec, 0x1a, 0x79, 0x81, 0xea, 0xce, 0xae, 0x18, 0x5c, 0x52, 0x21, 0x58, 0xbf, 0x90, 0x85, 0x42, - 0xb5, 0xd5, 0xdb, 0x75, 0x3b, 0x77, 0xaf, 0xfc, 0xb9, 0x26, 0xa3, 0x7e, 0x1d, 0xf0, 0x90, 0x10, - 0x37, 0x02, 0xa9, 0x1e, 0xe6, 0x4d, 0x13, 0xc2, 0x07, 0x27, 0x41, 0x34, 0x72, 0x15, 0xc4, 0xc4, - 0x14, 0xb9, 0xc9, 0x8e, 0x9b, 0x04, 0x3c, 0x2b, 0x87, 0x24, 0x11, 0xa8, 0xe4, 0x1d, 0x98, 0x88, - 0xb2, 0x02, 0x47, 0x29, 0xc7, 0x74, 0xca, 0x72, 0x54, 0x7e, 0xf7, 0x8a, 0xad, 0xa3, 0x5b, 0x3f, - 0x32, 0x02, 0x93, 0x7a, 0x7b, 0x88, 0x0d, 0xc7, 0x82, 0x16, 0xbb, 0x0a, 0x0b, 0xfb, 0x98, 0x2e, - 0x16, 0x8a, 0xe3, 0xf4, 0xac, 0xd9, 0x20, 0x86, 0xc7, 0x8d, 0x65, 0x6a, 0x34, 0x0c, 0xdd, 0xce, - 0x6e, 0xb0, 0xfa, 0x8c, 0x3d, 0x1b, 0x44, 0x60, 0x8e, 0x47, 0x4a, 0x50, 0xf0, 0xba, 0xc1, 0x2e, - 0xed, 0xb8, 0xf2, 0xf5, 0xe2, 0x9c, 0xc1, 0x68, 0x43, 0x14, 0x26, 0x78, 0x29, 0x32, 0xf2, 0x06, - 0x8c, 0x7a, 0x5d, 0xda, 0x71, 0x5c, 0x71, 0xc6, 0x3d, 0x1b, 0x63, 0x40, 0x3b, 0xa5, 0x8a, 0x46, - 0x28, 0x90, 0xc9, 0x65, 0xc8, 0x7b, 0xf7, 0xd4, 0x78, 0x9d, 0x32, 0x89, 0xee, 0x85, 0x8e, 0x46, - 0x82, 0x88, 0x8c, 0xe0, 0x63, 0xa7, 0xbd, 0x23, 0x46, 0xcc, 0x24, 0xb8, 0xe9, 0xb4, 0x77, 0x74, - 0x02, 0x86, 0x48, 0xde, 0x07, 0xe8, 0x3a, 0xbb, 0xd4, 0xaf, 0x37, 0x7b, 0xe1, 0xbe, 0x18, 0xb7, - 0xe7, 0x0d, 0xb2, 0x2a, 0x2b, 0x5e, 0xee, 0x85, 0xfb, 0x1a, 0xed, 0x78, 0x57, 0x02, 0x49, 0x09, - 0xa0, 0xed, 0x84, 0x21, 0xf5, 0xdb, 0x9e, 0x30, 0x50, 0x9a, 0x58, 0x5c, 0x30, 0x18, 0xdc, 0x56, - 0xc5, 0x1a, 0x07, 0x8d, 0x08, 0x1b, 0xed, 0xfa, 0x8e, 0xc8, 0x10, 0x17, 0x6b, 0xb4, 0xeb, 0x1b, - 0x5f, 0xc9, 0x10, 0xc9, 0xe7, 0x61, 0xac, 0xe9, 0x06, 0x0d, 0xcf, 0x6f, 0x8a, 0x5c, 0xe3, 0xcf, - 0x19, 0x34, 0xcb, 0xbc, 0x4c, 0x23, 0x93, 0xe8, 0xac, 0xb5, 0x22, 0x78, 0xd4, 0xba, 0xf7, 0x40, - 0x64, 0x1f, 0x37, 0x5b, 0x5b, 0x53, 0xc5, 0x7a, 0x6b, 0x23, 0xa2, 0xb7, 0xf2, 0xff, 0xe3, 0xcf, - 0x2d, 0x64, 0x96, 0x00, 0x0a, 0x81, 0x28, 0xb7, 0xd6, 0xe0, 0x54, 0xdf, 0x19, 0x45, 0x2e, 0x42, - 0x71, 0xc7, 0x11, 0xea, 0x99, 0xc6, 0x9e, 0xd3, 0xe9, 0xd0, 0x96, 0x58, 0xcb, 0x33, 0x12, 0x5e, - 0xe6, 0x60, 0xce, 0xd9, 0xfa, 0x8d, 0x0c, 0x3c, 0x37, 0x68, 0x5e, 0x91, 0xd3, 0x50, 0xe8, 0xfa, - 0xae, 0x87, 0xf2, 0x0b, 0x5f, 0xfd, 0xea, 0x37, 0x39, 0x03, 0xc0, 0x0f, 0xda, 0xd0, 0xd9, 0x15, - 0xc6, 0xca, 0xf6, 0x38, 0x42, 0x36, 0x9d, 0xdd, 0x80, 0xbc, 0x0a, 0xb3, 0x4d, 0xba, 0xe3, 0xf4, - 0x5a, 0x61, 0x3d, 0x68, 0xec, 0xd1, 0x26, 0xfa, 0x07, 0xa0, 0x11, 0x8a, 0x5d, 0x14, 0x05, 0x35, - 0x09, 0x27, 0x2f, 0xc0, 0xa4, 0x1e, 0x8c, 0x40, 0x24, 0xa5, 0x9f, 0x70, 0xba, 0xae, 0x0c, 0x47, - 0xc0, 0x5b, 0x7c, 0x33, 0x5f, 0xc8, 0x14, 0xb3, 0x36, 0xda, 0x62, 0x58, 0x3f, 0x94, 0x85, 0xf9, - 0x7e, 0x1d, 0x49, 0xde, 0x8d, 0x71, 0xcc, 0x44, 0xfa, 0x61, 0x1d, 0xae, 0xeb, 0x87, 0xb5, 0xda, - 0xc8, 0x22, 0x28, 0xeb, 0xfe, 0xc3, 0x3c, 0x75, 0x25, 0x8c, 0xd1, 0x74, 0x9d, 0x20, 0x78, 0xc0, - 0xe6, 0x4a, 0x4e, 0x8b, 0x50, 0x25, 0x60, 0x3a, 0x8d, 0x84, 0x91, 0xcf, 0x01, 0x34, 0x5a, 0x5e, - 0x40, 0xf1, 0x19, 0x56, 0x1c, 0x42, 0xdc, 0xc4, 0x51, 0x41, 0xf5, 0x77, 0x37, 0x84, 0x96, 0xbd, - 0x26, 0x15, 0x03, 0xe8, 0xc0, 0xc9, 0x3e, 0x2b, 0x87, 0x0d, 0x4f, 0x94, 0xac, 0x4d, 0x86, 0x7e, - 0xee, 0xa9, 0x94, 0x6d, 0xf1, 0x1e, 0xcf, 0xf6, 0xe9, 0x71, 0x6b, 0x1f, 0x48, 0x72, 0x79, 0x30, - 0xee, 0xc2, 0x50, 0xaf, 0xe7, 0x2b, 0xee, 0x1c, 0x72, 0xc7, 0x6f, 0x91, 0x05, 0x98, 0x90, 0xa9, - 0x1d, 0x64, 0xc2, 0xfb, 0x71, 0x1b, 0x04, 0xe8, 0x16, 0xc5, 0xc9, 0x83, 0x81, 0xd4, 0xf4, 0xa4, - 0xf3, 0xe3, 0x08, 0x61, 0xf7, 0x62, 0x51, 0xf5, 0x73, 0x30, 0x97, 0xb6, 0x69, 0x89, 0xd2, 0x9f, - 0xce, 0xc8, 0xe1, 0x4f, 0xae, 0xfa, 0xc3, 0xda, 0x47, 0x00, 0x2d, 0xee, 0x45, 0xc3, 0xf0, 0x6f, - 0xcc, 0xc3, 0x2f, 0x16, 0x8d, 0x38, 0xce, 0xc4, 0x4f, 0x72, 0x1e, 0x66, 0x7c, 0x6e, 0x93, 0x15, - 0x7a, 0xa2, 0x3f, 0x71, 0xa4, 0xec, 0x29, 0x0e, 0xde, 0xf4, 0xb0, 0x4f, 0x45, 0xbb, 0x6e, 0xaa, - 0x0e, 0xd3, 0x36, 0x41, 0x72, 0x09, 0xc6, 0xd9, 0x26, 0x88, 0xce, 0xfb, 0x31, 0x53, 0x5f, 0xc4, - 0xc3, 0x23, 0xc5, 0x2e, 0x7c, 0x2c, 0xfe, 0x16, 0xbc, 0x7e, 0x3f, 0x23, 0x99, 0xe9, 0x5b, 0x30, - 0x39, 0x09, 0x63, 0x9e, 0xbf, 0xab, 0x7d, 0xda, 0xa8, 0xe7, 0xef, 0xb2, 0xef, 0xba, 0x00, 0x45, - 0x6e, 0x79, 0xce, 0x5d, 0x7a, 0x83, 0xfd, 0x0e, 0xbf, 0xa3, 0x15, 0xec, 0x69, 0x0e, 0xc7, 0xfc, - 0x75, 0xfb, 0x9d, 0x06, 0xc3, 0x0c, 0x02, 0xaf, 0xae, 0x47, 0xec, 0x10, 0x9f, 0x3d, 0x1d, 0x04, - 0x5e, 0x14, 0xba, 0xa3, 0x49, 0x96, 0x60, 0x8a, 0xf1, 0xa9, 0xcb, 0x3d, 0x48, 0x9c, 0x10, 0x67, - 0x92, 0x27, 0xc4, 0x7e, 0xa7, 0x21, 0x9b, 0x68, 0x4f, 0x06, 0xda, 0x2f, 0xf1, 0x35, 0xff, 0x7e, - 0x06, 0x4e, 0xa4, 0xa3, 0xe3, 0x78, 0xb1, 0x4a, 0xd0, 0x01, 0x83, 0xeb, 0xeb, 0xec, 0x71, 0x06, - 0xe1, 0x3e, 0xe6, 0x69, 0xad, 0xcd, 0xa6, 0xb6, 0xf6, 0x15, 0x98, 0x45, 0x46, 0xe2, 0x4c, 0x6e, - 0xb9, 0x41, 0x28, 0x5c, 0xa7, 0xed, 0x19, 0x56, 0xc0, 0x37, 0xb8, 0x35, 0x06, 0x26, 0x2f, 0xc1, - 0xb4, 0xdc, 0xa2, 0xbc, 0x07, 0x1d, 0x56, 0x31, 0xdf, 0x9f, 0xa6, 0x04, 0x74, 0x03, 0x81, 0xa2, - 0xf1, 0x9f, 0x87, 0x19, 0xb1, 0xd9, 0x8b, 0x3d, 0x34, 0x60, 0xb3, 0x5c, 0x4c, 0x11, 0x26, 0x85, - 0xa1, 0x6e, 0x63, 0xdc, 0x06, 0x01, 0xaa, 0x34, 0x25, 0xe5, 0x1f, 0x66, 0xe0, 0x78, 0xea, 0x69, - 0x41, 0xbe, 0x0a, 0xdc, 0x40, 0x3e, 0xf4, 0xea, 0x3e, 0x6d, 0xb8, 0x5d, 0x17, 0x5d, 0x88, 0xb9, - 0x8e, 0x64, 0x71, 0xd0, 0x39, 0x83, 0xc6, 0xf6, 0x9b, 0x9e, 0xad, 0x88, 0xf8, 0x35, 0xaf, 0xe8, - 0xc7, 0xc0, 0xa7, 0x3f, 0x82, 0xe3, 0xa9, 0xa8, 0x29, 0xd7, 0xaf, 0xd7, 0xcc, 0xec, 0x3d, 0x52, - 0xe9, 0x1d, 0xfb, 0x68, 0xed, 0x5a, 0x26, 0x3e, 0xef, 0x1f, 0x64, 0xe5, 0x21, 0xb2, 0xe4, 0x79, - 0x61, 0x10, 0xfa, 0x4e, 0xd7, 0x90, 0xa2, 0x48, 0x1b, 0x4e, 0x79, 0x4e, 0x2f, 0xdc, 0x5b, 0xac, - 0xb3, 0x7f, 0x3d, 0x5f, 0x7a, 0x28, 0x35, 0xa4, 0x41, 0xca, 0xc4, 0xe2, 0x65, 0x73, 0x32, 0x95, - 0x18, 0x76, 0x49, 0x47, 0x66, 0x7b, 0x9e, 0xc6, 0x75, 0xf5, 0x19, 0xfb, 0x24, 0xe7, 0x99, 0xc0, - 0x22, 0xab, 0x60, 0xe4, 0xb7, 0x4d, 0x15, 0xa3, 0xb4, 0x5c, 0xb4, 0x26, 0xd7, 0x89, 0x6d, 0x2d, - 0x19, 0xee, 0x7b, 0x30, 0xee, 0x36, 0x45, 0x38, 0x22, 0x21, 0x4c, 0x99, 0x07, 0x78, 0xa5, 0xc9, - 0xa3, 0x13, 0x45, 0x3c, 0x98, 0x24, 0xe6, 0x0a, 0xe8, 0xd2, 0x94, 0x21, 0x6f, 0x5a, 0x4b, 0x72, - 0xbf, 0x4a, 0x92, 0x91, 0x69, 0xc8, 0xba, 0x52, 0xf0, 0xce, 0xba, 0x4d, 0x72, 0x02, 0x46, 0x03, - 0x2d, 0x3e, 0x92, 0x2d, 0x7e, 0x59, 0x3f, 0x00, 0x17, 0x86, 0xed, 0x23, 0xf2, 0x3a, 0x90, 0x3e, - 0x1d, 0x3e, 0x6e, 0xcf, 0x3a, 0x89, 0x7e, 0x7b, 0x01, 0xf4, 0x18, 0x33, 0xae, 0x3c, 0x11, 0x24, - 0xec, 0x8e, 0xef, 0x5a, 0xef, 0xc2, 0xb4, 0x29, 0x60, 0x93, 0x57, 0x21, 0xaf, 0xb8, 0x4e, 0x2b, - 0x45, 0x90, 0x8e, 0xc4, 0x78, 0xdb, 0x88, 0x64, 0xfd, 0x0f, 0x59, 0x38, 0x96, 0x22, 0x66, 0x93, - 0x8f, 0xe0, 0x98, 0x9c, 0x20, 0x7c, 0xd5, 0xf2, 0x81, 0xe3, 0x53, 0xe3, 0x62, 0xda, 0xd4, 0x40, - 0xb4, 0x94, 0xe1, 0x9b, 0x15, 0x93, 0x22, 0x2a, 0xff, 0x8b, 0x33, 0x1d, 0xc8, 0x87, 0x70, 0x42, - 0x24, 0xc7, 0xd3, 0x66, 0x45, 0xdd, 0xa7, 0x3b, 0x62, 0x47, 0x7d, 0x21, 0xd1, 0x7b, 0x6e, 0x43, - 0x6b, 0x8e, 0x4d, 0x77, 0x56, 0x9f, 0xb1, 0xe7, 0x82, 0x14, 0x78, 0x7c, 0xa6, 0xfd, 0x52, 0x06, - 0xac, 0xc3, 0xfb, 0x0b, 0x65, 0x80, 0x78, 0x87, 0x33, 0x19, 0x40, 0xeb, 0xbd, 0x73, 0x30, 0xe5, - 0xd3, 0x1d, 0x9f, 0x06, 0x7b, 0x5a, 0xf7, 0x8d, 0xdb, 0x93, 0x02, 0x28, 0x3b, 0x46, 0x3a, 0x59, - 0x0e, 0xa1, 0x56, 0x2b, 0xb0, 0x2b, 0x19, 0x57, 0x88, 0x08, 0x22, 0xeb, 0xba, 0xda, 0x40, 0x52, - 0xc7, 0x81, 0xcc, 0xc1, 0x88, 0xde, 0x40, 0xfe, 0xe3, 0x66, 0xbe, 0x90, 0x2d, 0xe6, 0x6c, 0xe1, - 0x0a, 0xba, 0xe3, 0xb6, 0xa8, 0xf5, 0x0f, 0x33, 0x70, 0xba, 0x7f, 0xe7, 0x91, 0x8f, 0x34, 0xc5, - 0x70, 0x8e, 0x47, 0xc2, 0x39, 0xa4, 0xbf, 0x75, 0x1d, 0x9a, 0xf0, 0x4e, 0x8c, 0xe7, 0x85, 0x13, - 0x2c, 0x1f, 0x47, 0xbb, 0xf5, 0xa6, 0xbc, 0x57, 0xb2, 0x53, 0xe9, 0xee, 0x15, 0x72, 0x11, 0xc6, - 0xf8, 0x55, 0x52, 0x36, 0x74, 0xc6, 0x68, 0xe8, 0xdd, 0x2b, 0xb6, 0x2c, 0xb7, 0xbe, 0x9d, 0x51, - 0xf7, 0x81, 0x78, 0xf3, 0xef, 0x5e, 0x21, 0x9f, 0x1b, 0x4e, 0xc5, 0x5b, 0x90, 0x2a, 0x5e, 0xa5, - 0xde, 0xfd, 0xbc, 0xa1, 0xde, 0x7d, 0x71, 0x70, 0x3f, 0x09, 0xd1, 0x25, 0x9e, 0xb9, 0xe7, 0x5f, - 0x64, 0xe0, 0xcc, 0x40, 0x0a, 0xf2, 0x1c, 0x14, 0x4a, 0xd5, 0xca, 0x66, 0x34, 0xb2, 0x6c, 0xb5, - 0x48, 0x08, 0xb9, 0x01, 0xe3, 0x4b, 0x4e, 0xe0, 0x36, 0xd8, 0x04, 0x16, 0x0d, 0x79, 0x79, 0x70, - 0x43, 0x14, 0x3a, 0xbb, 0x35, 0xaa, 0x1f, 0xa4, 0x0e, 0xb3, 0xb8, 0x0a, 0x12, 0x99, 0x31, 0xe2, - 0xc7, 0x4e, 0x82, 0x61, 0x82, 0x8c, 0xed, 0x30, 0x09, 0x60, 0x7c, 0xf1, 0xdd, 0x87, 0xb3, 0x87, - 0x35, 0xf0, 0x08, 0x0e, 0xc5, 0x17, 0xa0, 0x50, 0x95, 0x97, 0x0a, 0x2d, 0x31, 0x96, 0xbc, 0x40, - 0xd8, 0xaa, 0xd4, 0xfa, 0x1b, 0x19, 0x79, 0x36, 0x1c, 0xfe, 0x21, 0x5a, 0xc0, 0xbe, 0xe6, 0xe0, - 0x80, 0x7d, 0xcd, 0x4f, 0x18, 0xb0, 0xcf, 0xfa, 0x05, 0x11, 0xee, 0xa3, 0xd2, 0xac, 0xc6, 0x42, - 0x25, 0x3f, 0xee, 0x83, 0xd5, 0x8a, 0x31, 0x3b, 0xcf, 0x69, 0x91, 0x3f, 0x93, 0x75, 0xf5, 0x7f, - 0xb7, 0xd2, 0xa6, 0xea, 0x4f, 0x65, 0xe1, 0xb9, 0x41, 0xe4, 0xa9, 0x51, 0x9d, 0x33, 0x47, 0x8b, - 0xea, 0x7c, 0x11, 0x0a, 0x1c, 0x66, 0x66, 0x71, 0x11, 0xa4, 0xac, 0xc3, 0x65, 0x31, 0x39, 0x07, - 0xa3, 0xa5, 0x72, 0x2d, 0x8a, 0x72, 0x88, 0x1a, 0x56, 0xa7, 0x11, 0xa0, 0xee, 0x4e, 0x14, 0x91, - 0xaf, 0x24, 0x03, 0x7b, 0x8a, 0xf0, 0x86, 0xcf, 0xa6, 0xe5, 0x62, 0x96, 0x8e, 0x99, 0xd8, 0xde, - 0x28, 0x72, 0x8c, 0x08, 0xc6, 0x60, 0x27, 0x78, 0x59, 0xdf, 0xc8, 0xc0, 0x5c, 0x1a, 0x07, 0xf2, - 0x1c, 0xe4, 0x3b, 0xa9, 0xd1, 0x43, 0x3b, 0xdc, 0x12, 0x4c, 0xcf, 0x19, 0xad, 0x6b, 0x67, 0x8d, - 0x54, 0xd2, 0x9d, 0x28, 0x95, 0xf4, 0x82, 0xdc, 0x17, 0x73, 0x89, 0x78, 0xa3, 0xf8, 0x9f, 0x55, - 0x02, 0xa8, 0x34, 0xab, 0x1b, 0x5d, 0x1e, 0x83, 0xe5, 0x2a, 0xe4, 0x59, 0xb3, 0x62, 0xf3, 0x86, - 0x8d, 0x5c, 0xe9, 0xf6, 0x9a, 0x40, 0xe2, 0xad, 0x0a, 0x9c, 0x76, 0xcb, 0x46, 0x64, 0x6b, 0x0b, - 0xa6, 0x4d, 0x0c, 0xb2, 0x62, 0x7a, 0xed, 0x46, 0x79, 0x38, 0x97, 0x3c, 0x8f, 0xbf, 0x10, 0x2e, - 0x9d, 0xfa, 0xce, 0xc1, 0x02, 0xb0, 0x9f, 0x9c, 0x26, 0xcd, 0xab, 0xd7, 0xfa, 0x66, 0x16, 0xe6, - 0x22, 0x13, 0x3f, 0x39, 0x7b, 0x9f, 0x5a, 0xb3, 0x97, 0x92, 0x61, 0x96, 0xb1, 0x90, 0x48, 0x75, - 0x27, 0x3f, 0x70, 0xc0, 0x6b, 0xf0, 0x0d, 0x98, 0xef, 0x87, 0x4f, 0x5e, 0x4d, 0x24, 0xa3, 0x12, - 0xae, 0x28, 0x2a, 0x6b, 0x95, 0x96, 0x9b, 0xea, 0x3f, 0xc9, 0xc0, 0x69, 0xf1, 0xae, 0x75, 0xdb, - 0x71, 0x3b, 0x98, 0x80, 0xb3, 0x41, 0x9f, 0x8c, 0xbd, 0xd4, 0x0d, 0x63, 0x07, 0x79, 0xc9, 0x7c, - 0xbe, 0x4c, 0xd4, 0xd6, 0xff, 0x6b, 0xc9, 0x45, 0xf4, 0xdf, 0x69, 0xf0, 0xc9, 0x9b, 0xe7, 0xf6, - 0xa9, 0x1d, 0x06, 0xd0, 0xed, 0x53, 0x11, 0xc3, 0xfa, 0x41, 0x78, 0x7e, 0x70, 0x05, 0xe4, 0xcb, - 0x30, 0x55, 0xda, 0xa5, 0x9d, 0xf0, 0x4e, 0x77, 0xd7, 0x77, 0x9a, 0x54, 0xbe, 0x5f, 0x4b, 0x25, - 0xa5, 0x5e, 0xc6, 0x7d, 0x96, 0x84, 0xbd, 0x24, 0x83, 0xd7, 0x7b, 0x82, 0xc8, 0x78, 0x3c, 0xd6, - 0xb9, 0x59, 0x3f, 0x94, 0x01, 0x92, 0xe4, 0x41, 0xae, 0xc1, 0xe4, 0x9d, 0xcd, 0x72, 0x2d, 0x74, - 0xfc, 0x70, 0xd5, 0xeb, 0xf1, 0xee, 0x9c, 0x12, 0xe6, 0x73, 0x61, 0xa3, 0x1e, 0xb0, 0x82, 0xfa, - 0x9e, 0xd7, 0xf3, 0x6d, 0x03, 0x0f, 0x03, 0xeb, 0x51, 0x7a, 0xaf, 0xe9, 0xec, 0x9b, 0x81, 0xf5, - 0x04, 0xcc, 0x08, 0xac, 0x27, 0x60, 0xd6, 0xdf, 0xcb, 0xc0, 0xb3, 0x52, 0xe9, 0xd7, 0x4c, 0x69, - 0x4b, 0x19, 0x8d, 0xc4, 0x7d, 0xe9, 0x0b, 0x3d, 0x48, 0x8c, 0x9c, 0x95, 0x7e, 0x14, 0xd8, 0x40, - 0x94, 0x27, 0x39, 0x2d, 0x66, 0x1f, 0x0e, 0xbd, 0xee, 0x10, 0x8e, 0x14, 0x45, 0x35, 0xa2, 0xa1, - 0xd7, 0x45, 0x16, 0x48, 0x69, 0x51, 0x98, 0xd3, 0x1b, 0x27, 0x5b, 0x4c, 0x6e, 0xc3, 0x98, 0x70, - 0x16, 0x13, 0x82, 0x99, 0xf4, 0x1f, 0x1c, 0xf0, 0x4d, 0x4b, 0x33, 0xd2, 0x5b, 0x43, 0xf8, 0xe2, - 0xda, 0x92, 0x87, 0xf5, 0x13, 0x19, 0x98, 0x60, 0xe7, 0x3c, 0x86, 0xa7, 0x78, 0xdc, 0x29, 0x6d, - 0x8a, 0x6c, 0xf2, 0xf2, 0xae, 0xd8, 0x0f, 0x75, 0x0e, 0xbe, 0x01, 0x33, 0x31, 0x02, 0x62, 0xa1, - 0x9d, 0x6e, 0xcb, 0xe5, 0x79, 0x5c, 0xa5, 0x8e, 0xc3, 0x80, 0x59, 0xff, 0x4a, 0x06, 0xe6, 0x36, - 0xee, 0x85, 0x4e, 0xa5, 0xdd, 0xf5, 0xfc, 0xd0, 0xee, 0xb5, 0xe4, 0x7a, 0x67, 0xb2, 0x8b, 0xd4, - 0x1e, 0x73, 0x23, 0x42, 0x2e, 0xbb, 0x08, 0x98, 0xad, 0x4a, 0xc9, 0x2a, 0x14, 0xc4, 0xf9, 0x22, - 0xf3, 0x8e, 0xcb, 0x87, 0x01, 0x93, 0xb1, 0x40, 0x62, 0x5f, 0x82, 0x5b, 0x98, 0xa0, 0xb1, 0x15, - 0xb5, 0xf5, 0xa7, 0x19, 0x38, 0xd9, 0x87, 0x86, 0xbc, 0x0b, 0x23, 0x68, 0x91, 0x21, 0x46, 0xef, - 0xb9, 0x3e, 0x55, 0x84, 0x8d, 0xbd, 0xbb, 0x57, 0xf8, 0x41, 0xd4, 0x66, 0x3f, 0x6c, 0x4e, 0x45, - 0x3e, 0x82, 0xf1, 0x52, 0xb3, 0x69, 0x64, 0x47, 0x7f, 0x7d, 0x70, 0x2b, 0x2f, 0x29, 0x7c, 0x7e, - 0x85, 0xe0, 0x6f, 0x83, 0xcd, 0xa6, 0x48, 0x2f, 0x6d, 0x47, 0xfc, 0x4e, 0xbf, 0x03, 0xd3, 0x26, - 0xf2, 0x91, 0xae, 0x10, 0xdf, 0xce, 0x40, 0xd1, 0x6c, 0xc3, 0xa7, 0xe3, 0x67, 0x92, 0x36, 0xcc, - 0x87, 0x0b, 0x57, 0xc7, 0x53, 0x7b, 0x98, 0xbc, 0x0e, 0xa3, 0xa5, 0x6e, 0xb7, 0xb2, 0x2c, 0x66, - 0x95, 0x90, 0x4d, 0xba, 0xdd, 0x98, 0x67, 0xaa, 0x40, 0x22, 0x57, 0xa1, 0x80, 0x33, 0x93, 0x11, - 0x64, 0x23, 0x67, 0x56, 0x0c, 0xf9, 0x12, 0x77, 0x66, 0x95, 0x88, 0xe4, 0x3a, 0x4c, 0x0b, 0x93, - 0x73, 0x9b, 0xee, 0xd2, 0x87, 0x2a, 0xaa, 0x0a, 0x06, 0x7e, 0x91, 0x06, 0xea, 0x75, 0x9f, 0x97, - 0xe9, 0x46, 0xd7, 0x26, 0x15, 0x26, 0x47, 0x63, 0x3c, 0x75, 0x4e, 0xdc, 0xa3, 0x96, 0x27, 0x47, - 0xc3, 0x46, 0xf4, 0xe1, 0x95, 0xa0, 0x54, 0xc3, 0x55, 0x0a, 0x02, 0x77, 0xb7, 0xd3, 0xa6, 0x9d, - 0xf0, 0xd3, 0x1b, 0xae, 0xa8, 0x8e, 0xa1, 0x86, 0xeb, 0x5b, 0x79, 0xbe, 0x98, 0xe3, 0x64, 0x87, - 0xe4, 0xff, 0x5c, 0x86, 0x31, 0x6e, 0xec, 0x2e, 0x57, 0xc6, 0x99, 0xd4, 0x26, 0x70, 0x9c, 0xbb, - 0x57, 0xb8, 0xf8, 0xc2, 0x4d, 0x43, 0x02, 0x5b, 0x92, 0x92, 0xbb, 0x30, 0x51, 0x6e, 0x51, 0xa7, - 0xd3, 0xeb, 0xb2, 0x4d, 0x7a, 0x08, 0x65, 0xc2, 0xbc, 0xf8, 0x96, 0xc9, 0x06, 0x27, 0xab, 0x87, - 0x6e, 0x9b, 0xe2, 0x4e, 0xae, 0x33, 0x22, 0x9b, 0xea, 0xb5, 0x38, 0x8f, 0x7a, 0xaa, 0xcf, 0x0c, - 0xe8, 0x9f, 0x38, 0x10, 0xe9, 0x4c, 0x53, 0x08, 0xf1, 0x9c, 0x5c, 0x87, 0xe9, 0x35, 0x27, 0x08, - 0x37, 0x7d, 0xa7, 0x13, 0xa0, 0xbf, 0xea, 0x10, 0x4e, 0x44, 0x32, 0xb7, 0xca, 0x0c, 0x1a, 0x89, - 0x87, 0x8a, 0x14, 0xdb, 0x1c, 0x63, 0xc7, 0xe4, 0xa5, 0xeb, 0x6e, 0xc7, 0x69, 0xb9, 0x5f, 0x97, - 0x46, 0x35, 0x5c, 0x5e, 0xda, 0x91, 0x40, 0x3b, 0x2a, 0xb7, 0xbe, 0x94, 0x18, 0x37, 0xde, 0xca, - 0x09, 0x18, 0x13, 0x76, 0x94, 0xdc, 0xae, 0xb0, 0xba, 0xb2, 0xbe, 0x5c, 0x59, 0xbf, 0x51, 0xcc, - 0x90, 0x69, 0x80, 0xaa, 0xbd, 0x51, 0x5e, 0xa9, 0xd5, 0xd8, 0xef, 0x2c, 0xfb, 0x2d, 0x8c, 0x0e, - 0xaf, 0xdf, 0x59, 0x2b, 0xe6, 0x34, 0xbb, 0xc3, 0xbc, 0xf5, 0xfb, 0x19, 0x38, 0x91, 0x3e, 0x94, - 0x64, 0x13, 0xd0, 0xf2, 0x54, 0xa8, 0x00, 0xaf, 0x0d, 0x1c, 0xf7, 0x54, 0x70, 0xdc, 0x82, 0x35, - 0xe4, 0x96, 0x91, 0x59, 0xa9, 0xe3, 0x8f, 0x72, 0x9c, 0xb8, 0x4d, 0xab, 0x0c, 0xf3, 0xfd, 0x78, - 0x98, 0x9f, 0x3a, 0x03, 0x13, 0xa5, 0x6a, 0x75, 0xad, 0x52, 0x2e, 0x6d, 0x56, 0x36, 0xd6, 0x8b, - 0x19, 0x32, 0x0e, 0x23, 0x37, 0xec, 0x8d, 0x3b, 0xd5, 0x62, 0xd6, 0xfa, 0x9b, 0x19, 0x98, 0xaa, - 0x74, 0x42, 0xba, 0xcb, 0x63, 0xba, 0x3e, 0xee, 0xe2, 0x7b, 0xcb, 0x58, 0x7c, 0xf3, 0xca, 0x46, - 0x5b, 0x55, 0x30, 0xd4, 0xca, 0x7b, 0x00, 0xb3, 0x09, 0x12, 0x52, 0x83, 0xb1, 0xd2, 0x56, 0x6d, - 0xa3, 0xb2, 0x5c, 0x16, 0x0d, 0x93, 0x42, 0xb9, 0x80, 0x26, 0x2b, 0xe1, 0x16, 0x50, 0x0f, 0x82, - 0xba, 0xe7, 0x36, 0xb5, 0x30, 0xd1, 0xab, 0xcf, 0xd8, 0x92, 0xd3, 0xd2, 0x14, 0x4c, 0x88, 0x7b, - 0x05, 0x8a, 0xec, 0x6b, 0x30, 0xdf, 0x8f, 0x1b, 0xbb, 0xa9, 0x98, 0x06, 0x8b, 0x27, 0x54, 0x54, - 0x1f, 0xd3, 0x52, 0x51, 0xa2, 0x59, 0xff, 0x7a, 0x16, 0x4e, 0xb0, 0x7e, 0x69, 0xd1, 0x20, 0x28, - 0xf5, 0xc2, 0x3d, 0x76, 0xc3, 0x15, 0x59, 0xe0, 0x3f, 0x07, 0xa3, 0x7b, 0x47, 0xd3, 0x47, 0x71, - 0x74, 0x42, 0x00, 0xf7, 0x1a, 0xf9, 0x5c, 0xc7, 0xfe, 0x26, 0x67, 0x40, 0x8b, 0xdf, 0x8e, 0x5b, - 0xc5, 0xa4, 0x3d, 0xde, 0x55, 0x51, 0xdc, 0x3f, 0x0f, 0x23, 0xe8, 0x49, 0x28, 0x56, 0xbc, 0x94, - 0xd4, 0xd2, 0x5b, 0x86, 0x2e, 0x86, 0x36, 0x27, 0x20, 0x97, 0x01, 0xa2, 0x98, 0x2b, 0x62, 0x49, - 0xcb, 0xdb, 0xa1, 0x0a, 0xbb, 0x62, 0x8f, 0xb7, 0x77, 0x1c, 0x11, 0xc8, 0xe4, 0x15, 0x98, 0x95, - 0x7a, 0x93, 0xae, 0x74, 0x85, 0xe3, 0x5e, 0x7f, 0xf6, 0x0c, 0x2f, 0xa8, 0x74, 0x85, 0x3b, 0x9c, - 0xf5, 0xdf, 0x67, 0x61, 0x7c, 0x8b, 0x9d, 0x7f, 0x78, 0xab, 0x1b, 0x7c, 0x4b, 0x5c, 0x84, 0x89, - 0x35, 0xcf, 0x69, 0x9a, 0x59, 0x8c, 0xd1, 0x5c, 0xa8, 0xe5, 0x39, 0x52, 0x11, 0x1d, 0xd8, 0x3a, - 0xd2, 0x21, 0xa6, 0x4e, 0x37, 0x61, 0x94, 0xbb, 0xd2, 0x0a, 0x55, 0x81, 0x94, 0x80, 0x54, 0x8b, - 0x2e, 0xf1, 0x62, 0x4d, 0xe1, 0xb9, 0x83, 0x00, 0xfd, 0x38, 0x16, 0xce, 0xb8, 0xda, 0x1d, 0x76, - 0x64, 0xb8, 0x3b, 0xac, 0xe6, 0x74, 0x34, 0x3a, 0x8c, 0xd3, 0xd1, 0xe9, 0x37, 0x61, 0x42, 0x6b, - 0xcf, 0x91, 0x04, 0xa2, 0x1f, 0xce, 0xc2, 0x14, 0x7e, 0x95, 0x7a, 0xa9, 0x78, 0x3a, 0x6f, 0xe4, - 0x6f, 0x19, 0x37, 0xf2, 0x79, 0x7d, 0xbc, 0xf8, 0x97, 0x0d, 0xb8, 0x8a, 0xdf, 0x84, 0xd9, 0x04, - 0x22, 0x79, 0x03, 0x46, 0x58, 0xf3, 0xe5, 0x0d, 0xa6, 0x18, 0x9f, 0x01, 0x91, 0x83, 0x3a, 0xfb, - 0xf0, 0xc0, 0xe6, 0xd8, 0xd6, 0xff, 0x9e, 0x81, 0x49, 0x11, 0x84, 0xa7, 0xb3, 0xe3, 0x1d, 0xda, - 0x9d, 0xe7, 0xe3, 0xdd, 0xc9, 0x0d, 0x77, 0x45, 0x77, 0xfe, 0x7f, 0xdd, 0x89, 0x6f, 0x1a, 0x9d, - 0x78, 0x52, 0xb9, 0xab, 0xc9, 0xcf, 0x19, 0xd0, 0x87, 0xbf, 0x81, 0x0e, 0xdc, 0x26, 0x22, 0xf9, - 0x0a, 0x8c, 0xaf, 0xd3, 0x07, 0xc6, 0x45, 0xe0, 0x7c, 0x1f, 0xa6, 0x97, 0x14, 0x22, 0x5f, 0x53, - 0x68, 0xdb, 0xd1, 0xa1, 0x0f, 0xea, 0x89, 0x87, 0x84, 0x88, 0x25, 0xbb, 0x0b, 0x98, 0x64, 0x47, - 0x99, 0xfa, 0xc2, 0x44, 0x06, 0x6d, 0xd1, 0x7f, 0x31, 0x07, 0x10, 0x59, 0x17, 0xb0, 0x05, 0x48, - 0x8d, 0x50, 0x75, 0x42, 0x7b, 0x89, 0x20, 0x7d, 0x8e, 0x0b, 0x10, 0x39, 0x2f, 0x74, 0x7d, 0xd9, - 0xfe, 0xee, 0x84, 0xa8, 0xf5, 0x2b, 0x8b, 0xd7, 0xfb, 0x26, 0x6d, 0x39, 0x7c, 0x2f, 0xce, 0x61, - 0x3e, 0xdd, 0xb9, 0x08, 0xda, 0x27, 0x9a, 0x3a, 0xbe, 0xf1, 0x2f, 0x33, 0x84, 0x84, 0xc5, 0x4e, - 0xfe, 0x93, 0x5b, 0xec, 0x8c, 0x7c, 0x02, 0x8b, 0x9d, 0xd1, 0x21, 0x2d, 0x76, 0xaa, 0x30, 0xee, - 0x76, 0xee, 0xd3, 0x4e, 0xe8, 0xf9, 0xfb, 0xf3, 0x63, 0x38, 0xf8, 0xa7, 0x34, 0x43, 0x8e, 0x8a, - 0x2c, 0xe3, 0xe3, 0x8d, 0x57, 0x14, 0x85, 0xaf, 0x0f, 0xb7, 0x02, 0x8a, 0x67, 0xf4, 0xdf, 0xce, - 0x02, 0x49, 0x32, 0x20, 0x6f, 0xc1, 0x04, 0xdf, 0x82, 0xeb, 0x7e, 0xf0, 0x35, 0x61, 0xee, 0xc1, - 0x6d, 0xfe, 0x35, 0xb0, 0x6e, 0xf3, 0xcf, 0xc1, 0x76, 0xf0, 0xb5, 0x16, 0xf9, 0x32, 0x1c, 0xc3, - 0x01, 0xe8, 0x52, 0xdf, 0xf5, 0x9a, 0x75, 0x74, 0x77, 0x76, 0x5a, 0x22, 0x36, 0xea, 0xeb, 0x18, - 0xc4, 0x3b, 0x59, 0xdc, 0x67, 0xa0, 0xd0, 0xaa, 0xa2, 0x8a, 0x98, 0x55, 0x8e, 0x48, 0x36, 0xa1, - 0xa8, 0xd3, 0xef, 0xf4, 0x5a, 0x2d, 0x31, 0xf6, 0xaf, 0x60, 0x6e, 0xbf, 0x58, 0x59, 0x1f, 0xc6, - 0xd3, 0x11, 0xe3, 0xeb, 0xbd, 0x56, 0x8b, 0x7c, 0x0e, 0xc0, 0xeb, 0xd4, 0xdb, 0x6e, 0x10, 0x70, - 0x95, 0xb6, 0xb2, 0x88, 0x8a, 0xa0, 0x7a, 0x37, 0x7a, 0x9d, 0xdb, 0x1c, 0x28, 0xba, 0xf1, 0xfb, - 0x60, 0x56, 0x58, 0xfb, 0x6f, 0xb9, 0xe1, 0x9e, 0x10, 0xd0, 0x1e, 0x47, 0xba, 0xd3, 0x24, 0xb4, - 0xdf, 0xc8, 0x01, 0x94, 0xb6, 0x6a, 0xd2, 0xd1, 0xe4, 0x22, 0x8c, 0x30, 0xb1, 0x53, 0x5e, 0x5f, - 0x51, 0xf9, 0x87, 0x7c, 0x75, 0xe5, 0x1f, 0x62, 0xb0, 0x95, 0x67, 0xd3, 0x5d, 0xd4, 0xa0, 0x64, - 0xa3, 0xbb, 0xae, 0xcf, 0x41, 0x86, 0x14, 0xc5, 0x41, 0x64, 0x0d, 0x20, 0x72, 0xfd, 0x10, 0x17, - 0xa1, 0xd9, 0xc8, 0x86, 0x5a, 0x14, 0x88, 0x28, 0x3a, 0x91, 0xfb, 0x88, 0x3e, 0x11, 0x22, 0x34, - 0x72, 0x0b, 0xf2, 0x9b, 0x8e, 0xb2, 0xdc, 0xe9, 0xe3, 0x10, 0x73, 0x56, 0x44, 0xa1, 0x8d, 0x9c, - 0x62, 0xa6, 0x43, 0xc7, 0x08, 0xd6, 0x8d, 0x4c, 0xc8, 0x0a, 0x8c, 0x8a, 0x0c, 0x03, 0x7d, 0xbc, - 0x23, 0x45, 0x82, 0x01, 0x11, 0x8c, 0x00, 0x81, 0x46, 0x2a, 0x76, 0x9e, 0x4b, 0x60, 0x11, 0x72, - 0xb5, 0xda, 0x6d, 0x61, 0x06, 0x3a, 0x15, 0x49, 0xb5, 0xb5, 0xda, 0x6d, 0x99, 0x45, 0x45, 0xcf, - 0x96, 0xcd, 0x90, 0xc9, 0xdb, 0x30, 0xa1, 0x89, 0xa8, 0xc2, 0x80, 0x1a, 0xfb, 0xc0, 0x8d, 0xc0, - 0xfa, 0x06, 0xa1, 0x61, 0x5b, 0x54, 0xef, 0x52, 0x76, 0x42, 0x99, 0x82, 0x2d, 0x9e, 0x50, 0x52, - 0xb0, 0x55, 0xe2, 0x2c, 0x93, 0x06, 0x13, 0x2e, 0x37, 0xf8, 0x9e, 0xa1, 0xb9, 0xdc, 0x18, 0x8e, - 0x36, 0xbf, 0x97, 0xd3, 0x5c, 0x39, 0xc5, 0xb7, 0xbe, 0x0b, 0x70, 0xd3, 0x73, 0x3b, 0xb7, 0x69, - 0xb8, 0xe7, 0x35, 0x35, 0xcf, 0x9f, 0x89, 0x8f, 0x3d, 0xb7, 0x53, 0x6f, 0x23, 0xf8, 0xbb, 0x07, - 0x0b, 0x1a, 0x92, 0xad, 0xfd, 0x4d, 0x5e, 0x83, 0x71, 0xf6, 0x6b, 0x33, 0x7a, 0x80, 0xe7, 0x9a, - 0x24, 0xa4, 0x16, 0xd9, 0x8e, 0x14, 0x02, 0x79, 0x13, 0x80, 0x3b, 0x95, 0x6a, 0x82, 0x20, 0xf6, - 0x11, 0x7f, 0x8b, 0x8a, 0xbb, 0xc5, 0x6b, 0xc8, 0x64, 0x55, 0x35, 0x5d, 0xc6, 0x1c, 0x13, 0x81, - 0xa9, 0x50, 0x5d, 0x22, 0xc6, 0xb2, 0x2e, 0x23, 0x94, 0xe9, 0xd1, 0xa1, 0x63, 0x64, 0xd8, 0x88, - 0xda, 0xea, 0x32, 0xd7, 0x6f, 0x8b, 0xfd, 0x98, 0x37, 0x22, 0xd8, 0x6b, 0xd6, 0x1b, 0x08, 0x36, - 0x1a, 0xa1, 0x90, 0xc9, 0x12, 0xcc, 0x70, 0xfb, 0x74, 0x15, 0xbb, 0x54, 0xec, 0xcd, 0xb8, 0x0b, - 0x44, 0xc1, 0x4d, 0xf5, 0xea, 0x63, 0x04, 0xe4, 0x3a, 0x8c, 0x94, 0xbe, 0xde, 0xf3, 0xa9, 0x30, - 0x12, 0x96, 0xfa, 0x10, 0x84, 0xc5, 0xe7, 0x29, 0xae, 0x5b, 0x87, 0x95, 0xe8, 0xeb, 0x16, 0x51, - 0xad, 0x0a, 0x8c, 0xf2, 0x29, 0x89, 0x31, 0x12, 0x44, 0x00, 0x26, 0xcd, 0xc3, 0x9e, 0xc7, 0x48, - 0x10, 0xf0, 0x64, 0x8c, 0x04, 0x8d, 0xc0, 0xba, 0x05, 0x73, 0x69, 0xd5, 0x93, 0xab, 0x89, 0xd4, - 0x69, 0x7a, 0xd2, 0x26, 0x33, 0x0c, 0xa2, 0x44, 0xb4, 0x7e, 0x36, 0x07, 0x93, 0xc8, 0x4d, 0xee, - 0x45, 0x25, 0x98, 0xaa, 0xf5, 0xb6, 0x95, 0xcb, 0x83, 0xdc, 0x93, 0x78, 0x0a, 0x5b, 0xbd, 0x40, - 0x7f, 0x1f, 0x30, 0x28, 0xc8, 0x0a, 0x4c, 0xcb, 0xfd, 0x50, 0xc4, 0x58, 0xce, 0x46, 0xe1, 0x09, - 0xa4, 0x33, 0x5e, 0x32, 0xc2, 0x72, 0x8c, 0x28, 0xda, 0x15, 0x73, 0x47, 0xd9, 0x15, 0xf3, 0x43, - 0xed, 0x8a, 0x1f, 0xc1, 0xa4, 0xac, 0x0d, 0xf7, 0xb3, 0x91, 0xc7, 0xdb, 0xcf, 0x0c, 0x66, 0x64, - 0x4d, 0xed, 0x6b, 0xa3, 0x03, 0xf7, 0x35, 0x7c, 0x74, 0x91, 0x6b, 0x21, 0x91, 0x34, 0x45, 0xf0, - 0xc0, 0x10, 0xa4, 0x37, 0xca, 0xd5, 0x4f, 0x70, 0x56, 0xbc, 0x01, 0xe3, 0x6b, 0x9e, 0xd4, 0xb7, - 0x6b, 0x8a, 0xce, 0x96, 0x04, 0xea, 0xc7, 0x9f, 0xc2, 0x54, 0x7b, 0x7c, 0xee, 0x49, 0xec, 0xf1, - 0x6f, 0x02, 0x54, 0xb9, 0xb1, 0x6e, 0x14, 0x3a, 0x10, 0x97, 0xaf, 0xb4, 0xea, 0x35, 0xf5, 0xad, - 0x1a, 0x32, 0xdb, 0x43, 0xc4, 0x23, 0x7a, 0xa9, 0xd1, 0xf0, 0x7a, 0x9d, 0xd0, 0x88, 0xb5, 0x2d, - 0xd3, 0x29, 0x3b, 0xa2, 0x4c, 0x5f, 0xc4, 0x31, 0xb2, 0x27, 0x3b, 0x20, 0xe4, 0x03, 0x65, 0xfd, - 0x33, 0x30, 0xf5, 0x90, 0x95, 0xe8, 0xa1, 0xbe, 0x36, 0x3f, 0xd6, 0xef, 0x67, 0xf4, 0xd8, 0x30, - 0x9f, 0x60, 0xa8, 0x3f, 0x0f, 0xa0, 0x1e, 0x3c, 0xe5, 0x58, 0xf3, 0x1b, 0x82, 0x82, 0xea, 0xbd, - 0x1c, 0xe1, 0x6a, 0x5f, 0x93, 0x7b, 0x52, 0x5f, 0xb3, 0x09, 0x13, 0x1b, 0xf7, 0x42, 0x27, 0x7a, - 0x21, 0x87, 0x9a, 0x92, 0xcc, 0x70, 0x67, 0x92, 0x29, 0x92, 0x22, 0xb9, 0xae, 0x6f, 0x8a, 0x24, - 0x45, 0x68, 0x7d, 0x00, 0x33, 0xdc, 0xfa, 0xec, 0x86, 0xef, 0x74, 0xf7, 0xd0, 0xf4, 0xf8, 0x3d, - 0xee, 0x5b, 0x9b, 0x31, 0x64, 0x67, 0x0d, 0x89, 0xed, 0xb8, 0xfb, 0x9d, 0x06, 0x97, 0x02, 0x9c, - 0x07, 0x7a, 0x5b, 0xf1, 0x56, 0xf3, 0x07, 0x19, 0x20, 0x49, 0x74, 0x7d, 0x37, 0xc9, 0xfc, 0x39, - 0xc8, 0x58, 0x31, 0xd9, 0x24, 0x7f, 0x14, 0xd9, 0xe4, 0x95, 0x9f, 0xcc, 0xc0, 0x4c, 0xa5, 0x74, - 0x5b, 0x04, 0x72, 0xe1, 0x8a, 0xdb, 0xff, 0x97, 0xb2, 0xab, 0xdb, 0x8d, 0x9b, 0x88, 0xc2, 0x6b, - 0x3b, 0x4d, 0xd3, 0x93, 0xa4, 0x3b, 0xeb, 0xb6, 0xe9, 0xd2, 0x6e, 0x97, 0x1f, 0x01, 0xa2, 0x83, - 0x40, 0x14, 0xae, 0xb8, 0x40, 0x68, 0xd6, 0x1e, 0xaf, 0xad, 0xb5, 0x67, 0xac, 0x99, 0x71, 0x96, - 0x54, 0x48, 0x23, 0x50, 0xad, 0x68, 0xa5, 0xe2, 0xa2, 0x64, 0x23, 0xc1, 0x0b, 0x70, 0xc3, 0x1d, - 0x4f, 0xc0, 0xe3, 0xf4, 0x06, 0x89, 0x47, 0x80, 0x3c, 0x09, 0x9a, 0xb1, 0x9d, 0xec, 0x7a, 0x57, - 0x2b, 0x71, 0xe9, 0xf3, 0x1d, 0x7b, 0x4e, 0x4e, 0xbe, 0xb3, 0xb6, 0xce, 0xf8, 0x7c, 0x7e, 0x1f, - 0x9e, 0x25, 0x24, 0xd3, 0x39, 0x4f, 0x93, 0xe0, 0x4c, 0x6f, 0x1d, 0x13, 0x7f, 0x06, 0xef, 0x6c, - 0xba, 0xdc, 0x36, 0x78, 0x47, 0x30, 0xdc, 0x84, 0xdb, 0x51, 0xf2, 0xed, 0x27, 0xb7, 0x53, 0xe7, - 0x1e, 0xfe, 0x16, 0xfa, 0xed, 0x84, 0xb5, 0x4a, 0xa5, 0x55, 0x44, 0xe9, 0xc3, 0xe1, 0x29, 0x15, - 0x49, 0x74, 0xa6, 0xa3, 0x22, 0x4d, 0x51, 0xcf, 0x3f, 0x86, 0x7b, 0x8d, 0x21, 0x20, 0xc8, 0xf1, - 0x8f, 0xe0, 0x20, 0x61, 0x92, 0x06, 0x85, 0xa0, 0xc8, 0xc5, 0x5f, 0xc2, 0xfd, 0xdb, 0x8f, 0xb8, - 0xda, 0xfe, 0xec, 0x5d, 0xf0, 0x04, 0x99, 0xa3, 0x9e, 0x0f, 0xb0, 0x9f, 0xcf, 0x02, 0xf9, 0xe2, - 0x05, 0x72, 0xfc, 0x43, 0xb8, 0x3b, 0x0d, 0x72, 0x3d, 0xcb, 0x24, 0x72, 0xf1, 0x17, 0x30, 0xb0, - 0x37, 0xf1, 0x74, 0x71, 0xb9, 0x2c, 0xab, 0xf2, 0xc2, 0x2e, 0x7b, 0x04, 0x07, 0xb2, 0x34, 0x75, - 0xbd, 0x2c, 0xeb, 0x35, 0xb3, 0xab, 0xd7, 0xcb, 0xc5, 0xcf, 0xaf, 0xcb, 0x5f, 0x90, 0x83, 0xbf, - 0x86, 0xbe, 0x78, 0x73, 0xb5, 0x5c, 0x54, 0xe7, 0x72, 0x69, 0x3c, 0xce, 0x7f, 0xf5, 0x1f, 0xc1, - 0xa0, 0x60, 0x24, 0x9b, 0x24, 0xd3, 0x82, 0x17, 0x52, 0x67, 0x44, 0x05, 0x71, 0xdd, 0x10, 0xce, - 0xb8, 0x54, 0x5a, 0xd0, 0x80, 0x32, 0x85, 0x1c, 0xfc, 0xbb, 0x03, 0xf7, 0x8b, 0xcb, 0xe6, 0x7d, - 0xc3, 0xc2, 0x0e, 0x08, 0xbf, 0x07, 0xa3, 0x42, 0x52, 0xa1, 0x15, 0x9f, 0x51, 0xa6, 0x0b, 0x49, - 0xa6, 0x5d, 0x59, 0x82, 0x77, 0xe1, 0xe9, 0x8a, 0x87, 0xa0, 0x01, 0x3f, 0xa5, 0x42, 0xe7, 0x44, - 0xca, 0x39, 0x17, 0x21, 0x72, 0xfc, 0x27, 0x70, 0xb2, 0xc5, 0x21, 0x8b, 0x08, 0x72, 0x37, 0x30, - 0x46, 0xe7, 0x24, 0xd5, 0x13, 0xae, 0x90, 0x87, 0x33, 0x73, 0x6f, 0xb3, 0x93, 0xbb, 0xb5, 0xe0, - 0xd9, 0x01, 0xec, 0x31, 0xce, 0x68, 0xb7, 0x69, 0x7f, 0x04, 0x07, 0x24, 0xcf, 0x05, 0x3f, 0xb5, - 0xff, 0x43, 0x80, 0xfd, 0x90, 0x32, 0x13, 0x99, 0x67, 0x90, 0x5c, 0xf0, 0x8c, 0x2b, 0x1a, 0xa2, - 0x3d, 0xfc, 0xa7, 0x03, 0x7e, 0x3d, 0xa1, 0xdc, 0x8a, 0x48, 0xd9, 0x5c, 0x8e, 0xe1, 0x49, 0x6c, - 0x92, 0x60, 0xc3, 0xc8, 0x78, 0xd8, 0xfd, 0xf3, 0x4e, 0xc0, 0xef, 0xe0, 0x3c, 0x8a, 0x90, 0xe3, - 0x3f, 0x86, 0x07, 0x1d, 0x7b, 0x28, 0x78, 0x8e, 0xdc, 0x2d, 0xc0, 0x8c, 0xd2, 0x1c, 0x79, 0x26, - 0x95, 0x1d, 0xa0, 0xe5, 0x46, 0x7d, 0xea, 0x1e, 0xfe, 0xcd, 0x81, 0x93, 0x3a, 0xc4, 0x96, 0x68, - 0x37, 0x61, 0x8e, 0x60, 0xd8, 0x08, 0x29, 0x6c, 0x0b, 0xf2, 0x21, 0xa0, 0x35, 0xb4, 0x0e, 0xf1, - 0x11, 0x0c, 0xd6, 0xac, 0x36, 0x0e, 0xd7, 0x94, 0xd1, 0x9a, 0x79, 0x42, 0xa5, 0xd2, 0x34, 0x8a, - 0xb8, 0x50, 0x75, 0x20, 0x1e, 0xfe, 0x00, 0x06, 0x41, 0x79, 0xb1, 0x34, 0x0f, 0xf1, 0xd5, 0xe5, - 0xe2, 0x4d, 0x65, 0x43, 0x38, 0x86, 0x7b, 0xf4, 0x3b, 0x45, 0x99, 0x4c, 0x38, 0x43, 0x3d, 0x3c, - 0xea, 0xf8, 0xb4, 0x84, 0x96, 0x32, 0x46, 0x3d, 0xfc, 0x3d, 0x1c, 0xad, 0xc9, 0x20, 0x3e, 0x86, - 0x07, 0xab, 0xc7, 0x79, 0x59, 0xbd, 0x5a, 0x54, 0xe7, 0xa8, 0xd7, 0x05, 0xc4, 0x55, 0x55, 0x19, - 0xc0, 0xd2, 0x66, 0x15, 0x50, 0xe5, 0xc5, 0x4f, 0x8b, 0xea, 0x87, 0x65, 0xf9, 0x0a, 0xb9, 0xf8, - 0x73, 0x38, 0x5e, 0x1b, 0x17, 0x37, 0xeb, 0xa6, 0xbc, 0x29, 0xa4, 0x8c, 0x86, 0x49, 0x91, 0xa1, - 0x3b, 0x86, 0x30, 0x71, 0x32, 0x8d, 0x11, 0xe0, 0x3f, 0x1c, 0xf3, 0x28, 0x67, 0x25, 0x95, 0xb2, - 0x88, 0xb4, 0x91, 0x9a, 0x2c, 0xd5, 0xca, 0x12, 0x54, 0xca, 0x7a, 0x4b, 0x64, 0x04, 0xc3, 0xe6, - 0x40, 0x13, 0x16, 0xea, 0x98, 0x88, 0x70, 0x4e, 0x84, 0x49, 0xdd, 0x19, 0x72, 0x2d, 0x17, 0x56, - 0x2c, 0x5a, 0xf1, 0x22, 0x88, 0x91, 0x67, 0xd2, 0xbf, 0x66, 0xcf, 0x13, 0x86, 0xf6, 0x2c, 0xb3, - 0x36, 0xbc, 0xed, 0x65, 0x0d, 0x7e, 0x07, 0x2f, 0x00, 0x75, 0x5f, 0x0b, 0xdf, 0xd8, 0x9b, 0x12, - 0x05, 0x63, 0x35, 0xcd, 0xfb, 0x70, 0xc8, 0x55, 0x4c, 0x45, 0xa3, 0xfd, 0x61, 0xc5, 0x3e, 0x0a, - 0x46, 0x0a, 0x15, 0x73, 0x91, 0xbc, 0xb4, 0x7c, 0x1f, 0xc2, 0x43, 0x99, 0x92, 0x60, 0xa6, 0x19, - 0x57, 0x3a, 0x61, 0x3a, 0x88, 0x09, 0x63, 0x34, 0x45, 0x80, 0xff, 0x72, 0xe0, 0xe9, 0x8e, 0x46, - 0xbf, 0xff, 0x19, 0x3c, 0x8f, 0x29, 0x09, 0x53, 0x2a, 0xa5, 0x36, 0x97, 0xa4, 0x4c, 0x35, 0xdb, - 0x44, 0xf6, 0x67, 0xb0, 0x4b, 0xb7, 0xe7, 0xf0, 0xd1, 0x6e, 0xf7, 0xdb, 0xea, 0xfc, 0x04, 0x3e, - 0xdc, 0xed, 0xda, 0x54, 0xab, 0xeb, 0x63, 0xf8, 0x78, 0xb7, 0xe7, 0x4d, 0x95, 0x7b, 0x93, 0x6f, - 0xde, 0xfe, 0x3b, 0xee, 0xbd, 0xbd, 0x1e, 0x3b, 0x7f, 0x5f, 0x8f, 0x9d, 0x7f, 0xae, 0xc7, 0xce, - 0xcb, 0x4f, 0xff, 0xc7, 0x97, 0x62, 0x7e, 0xdc, 0xb7, 0xfb, 0x90, 0x5f, 0xfd, 0x17, 0x00, 0x00, - 0xff, 0xff, 0xa2, 0x17, 0x38, 0x9c, 0xaf, 0x6d, 0x01, 0x00, + // 24535 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xfd, 0x7d, 0x70, 0x1c, 0x49, + 0x76, 0x20, 0x86, 0x4f, 0x77, 0xe3, 0xa3, 0xf1, 0x1a, 0x1f, 0x8d, 0x24, 0x48, 0x82, 0x9c, 0xe1, + 0x80, 0x53, 0x9c, 0xe1, 0x90, 0xf3, 0x41, 0x2e, 0xc1, 0x1d, 0xee, 0xce, 0xf7, 0x36, 0x1a, 0x20, + 0xd1, 0x24, 0x08, 0xf4, 0x54, 0x83, 0xc4, 0x8e, 0x66, 0x77, 0x7b, 0x0b, 0xdd, 0x09, 0xa0, 0x86, + 0xdd, 0x5d, 0xbd, 0x55, 0xd5, 0x24, 0xb1, 0xd2, 0x85, 0x3e, 0xee, 0x74, 0x7b, 0xfa, 0xe9, 0xa4, + 0x95, 0xee, 0xb7, 0x3a, 0xed, 0xd9, 0x77, 0x96, 0x42, 0x71, 0x77, 0x96, 0x6c, 0x49, 0x61, 0x4b, + 0x77, 0x71, 0xb2, 0xe5, 0x93, 0x4f, 0x0e, 0x85, 0x42, 0x96, 0xc2, 0x3e, 0x45, 0xd8, 0x0e, 0x87, + 0xd7, 0x0a, 0x9c, 0x65, 0xd9, 0x0e, 0x07, 0xc3, 0xe1, 0x90, 0x2d, 0xfb, 0xc2, 0x5e, 0x87, 0x6c, + 0x47, 0xbe, 0xfc, 0xa8, 0xcc, 0xaa, 0xea, 0x46, 0x63, 0xc8, 0xb1, 0xc4, 0xb5, 0xff, 0x21, 0xd1, + 0x2f, 0xdf, 0x7b, 0x99, 0x95, 0x9f, 0x2f, 0x5f, 0xbe, 0x0f, 0x78, 0x21, 0xa4, 0x2d, 0xda, 0xf5, + 0xfc, 0xf0, 0x72, 0x8b, 0xee, 0x3a, 0x8d, 0xfd, 0xcb, 0xe1, 0x7e, 0x97, 0x06, 0xfc, 0xdf, 0x4b, + 0x5d, 0xdf, 0x0b, 0x3d, 0x32, 0x8a, 0x3f, 0x4e, 0xcf, 0xed, 0x7a, 0xbb, 0x1e, 0x42, 0x2e, 0xb3, + 0xbf, 0x78, 0xe1, 0xe9, 0x85, 0x5d, 0xcf, 0xdb, 0x6d, 0xd1, 0xcb, 0xf8, 0x6b, 0xbb, 0xb7, 0x73, + 0x39, 0x74, 0xdb, 0x34, 0x08, 0x9d, 0x76, 0x57, 0x20, 0x5c, 0x54, 0x15, 0x38, 0x61, 0xc8, 0x4a, + 0x42, 0xd7, 0xeb, 0x5c, 0xbe, 0x7f, 0x45, 0xff, 0x29, 0x50, 0x5f, 0x4f, 0x6f, 0xcb, 0x03, 0xdf, + 0xe9, 0x76, 0xa9, 0x1f, 0xfd, 0xc1, 0xd1, 0xad, 0x7f, 0x92, 0x83, 0x89, 0x5b, 0x94, 0x76, 0x4b, + 0x2d, 0xf7, 0x3e, 0x25, 0xe7, 0x60, 0x64, 0xdd, 0x69, 0xd3, 0xf9, 0xcc, 0xd9, 0xcc, 0x85, 0x89, + 0xa5, 0x99, 0x47, 0x07, 0x0b, 0x85, 0x80, 0xfa, 0xf7, 0xa9, 0x5f, 0xef, 0x38, 0x6d, 0x6a, 0x63, + 0x21, 0x79, 0x15, 0x26, 0xd8, 0xff, 0x41, 0xd7, 0x69, 0xd0, 0xf9, 0x2c, 0x62, 0x4e, 0x3d, 0x3a, + 0x58, 0x98, 0xe8, 0x48, 0xa0, 0x1d, 0x95, 0x93, 0xf3, 0x30, 0xbe, 0x46, 0x9d, 0x80, 0x56, 0x96, + 0xe7, 0x73, 0x67, 0x33, 0x17, 0x72, 0x4b, 0x93, 0x8f, 0x0e, 0x16, 0xf2, 0x2d, 0x06, 0xaa, 0xbb, + 0x4d, 0x5b, 0x16, 0x92, 0x0a, 0x8c, 0xaf, 0x3c, 0xec, 0xba, 0x3e, 0x0d, 0xe6, 0x47, 0xce, 0x66, + 0x2e, 0x14, 0x16, 0x4f, 0x5f, 0xe2, 0x9d, 0x72, 0x49, 0x76, 0xca, 0xa5, 0x4d, 0xd9, 0x29, 0x4b, + 0xc7, 0x7e, 0xef, 0x60, 0xe1, 0x99, 0x47, 0x07, 0x0b, 0xe3, 0x94, 0x93, 0xfc, 0xd4, 0xbf, 0x58, + 0xc8, 0xd8, 0x92, 0x9e, 0xbc, 0x03, 0x23, 0x9b, 0xfb, 0x5d, 0x3a, 0x3f, 0x71, 0x36, 0x73, 0x61, + 0x7a, 0xf1, 0xf9, 0x4b, 0x7c, 0x18, 0xd4, 0x47, 0x46, 0x7f, 0x31, 0xac, 0xa5, 0xfc, 0xa3, 0x83, + 0x85, 0x11, 0x86, 0x62, 0x23, 0x15, 0x79, 0x1d, 0xc6, 0x56, 0xbd, 0x20, 0xac, 0x2c, 0xcf, 0x03, + 0x7e, 0xda, 0xf1, 0x47, 0x07, 0x0b, 0xb3, 0x7b, 0x5e, 0x10, 0xd6, 0xdd, 0xe6, 0x6b, 0x5e, 0xdb, + 0x0d, 0x69, 0xbb, 0x1b, 0xee, 0xdb, 0x02, 0xc9, 0x7a, 0x08, 0x53, 0x06, 0x3f, 0x52, 0x80, 0xf1, + 0x3b, 0xeb, 0xb7, 0xd6, 0x37, 0xb6, 0xd6, 0x8b, 0xcf, 0x90, 0x3c, 0x8c, 0xac, 0x6f, 0x2c, 0xaf, + 0x14, 0x33, 0x64, 0x1c, 0x72, 0xa5, 0x6a, 0xb5, 0x98, 0x25, 0x93, 0x90, 0x5f, 0x2e, 0x6d, 0x96, + 0x96, 0x4a, 0xb5, 0x95, 0x62, 0x8e, 0x1c, 0x83, 0x99, 0xad, 0xca, 0xfa, 0xf2, 0xc6, 0x56, 0xad, + 0xbe, 0xbc, 0x52, 0xbb, 0xb5, 0xb9, 0x51, 0x2d, 0x8e, 0x90, 0x69, 0x80, 0x5b, 0x77, 0x96, 0x56, + 0xec, 0xf5, 0x95, 0xcd, 0x95, 0x5a, 0x71, 0x94, 0xcc, 0x41, 0x51, 0x92, 0xd4, 0x6b, 0x2b, 0xf6, + 0xdd, 0x4a, 0x79, 0xa5, 0x38, 0x66, 0xfd, 0xd3, 0x1c, 0xe4, 0x6f, 0xd3, 0xd0, 0x69, 0x3a, 0xa1, + 0x43, 0x9e, 0x33, 0x06, 0x0e, 0xbf, 0x49, 0x1b, 0xb1, 0x73, 0xc9, 0x11, 0x1b, 0x7d, 0x74, 0xb0, + 0x90, 0x79, 0x5d, 0x1f, 0xa9, 0xb7, 0xa1, 0xb0, 0x4c, 0x83, 0x86, 0xef, 0x76, 0xd9, 0x6c, 0xc2, + 0xd1, 0x9a, 0x58, 0x3a, 0xf5, 0xe8, 0x60, 0xe1, 0x78, 0x33, 0x02, 0x6b, 0x3d, 0xa0, 0x63, 0x93, + 0x0a, 0x8c, 0xad, 0x39, 0xdb, 0xb4, 0x15, 0xcc, 0x8f, 0x9e, 0xcd, 0x5d, 0x28, 0x2c, 0x3e, 0x2b, + 0x7a, 0x5d, 0x36, 0xf0, 0x12, 0x2f, 0x5d, 0xe9, 0x84, 0xfe, 0xfe, 0xd2, 0xdc, 0xa3, 0x83, 0x85, + 0x62, 0x0b, 0x01, 0x7a, 0x8f, 0x72, 0x14, 0x52, 0x8b, 0x66, 0xc2, 0xd8, 0xa1, 0x33, 0xe1, 0xcc, + 0xef, 0x1d, 0x2c, 0x64, 0xd8, 0x08, 0x89, 0x99, 0x10, 0xf1, 0x33, 0xe7, 0x84, 0x05, 0xd9, 0xca, + 0xf2, 0xfc, 0x38, 0xce, 0x40, 0xf2, 0xe8, 0x60, 0x61, 0x52, 0x1f, 0xcc, 0xf9, 0x8c, 0x9d, 0xad, + 0x2c, 0x93, 0x45, 0xc8, 0xdb, 0xf4, 0xbe, 0x1b, 0xb0, 0xaf, 0xcf, 0xe3, 0xd7, 0x9f, 0x78, 0x74, + 0xb0, 0x40, 0x7c, 0x01, 0xd3, 0x9a, 0xaa, 0xf0, 0x4e, 0xbf, 0x09, 0x05, 0xed, 0xcb, 0x48, 0x11, + 0x72, 0xf7, 0xe8, 0x3e, 0x1f, 0x05, 0x9b, 0xfd, 0x49, 0xe6, 0x60, 0xf4, 0xbe, 0xd3, 0xea, 0x89, + 0x6e, 0xb7, 0xf9, 0x8f, 0xb7, 0xb2, 0x9f, 0xcf, 0x58, 0x7f, 0x6b, 0x04, 0xf2, 0xb6, 0xc7, 0xd7, + 0x2e, 0xb9, 0x08, 0xa3, 0xb5, 0xd0, 0x09, 0xe5, 0x00, 0x1e, 0x7b, 0x74, 0xb0, 0x30, 0xc3, 0xd6, + 0x35, 0xd5, 0x6a, 0xe5, 0x18, 0x0c, 0xb5, 0xba, 0xe7, 0x04, 0x72, 0x20, 0x11, 0xb5, 0xcb, 0x00, + 0x3a, 0x2a, 0x62, 0x90, 0xf3, 0x30, 0x72, 0xdb, 0x6b, 0x52, 0x31, 0x96, 0xec, 0xbb, 0xa7, 0xdb, + 0x5e, 0x53, 0x47, 0xc4, 0x72, 0xf2, 0x1a, 0x4c, 0x94, 0x7b, 0xbe, 0x4f, 0x3b, 0x6c, 0xda, 0x8f, + 0x20, 0xf2, 0xf4, 0xa3, 0x83, 0x05, 0x68, 0x70, 0x20, 0x5b, 0xa8, 0x11, 0x02, 0x1b, 0xa0, 0x5a, + 0xe8, 0xf8, 0x21, 0x6d, 0xce, 0x8f, 0x0e, 0x35, 0x40, 0x6c, 0xa9, 0xce, 0x06, 0x9c, 0x24, 0x3e, + 0x40, 0x82, 0x13, 0x59, 0x85, 0xc2, 0x0d, 0xdf, 0x69, 0xd0, 0x2a, 0xf5, 0x5d, 0xaf, 0x89, 0x23, + 0x9f, 0x5b, 0x3a, 0xff, 0xe8, 0x60, 0xe1, 0xc4, 0x2e, 0x03, 0xd7, 0xbb, 0x08, 0x8f, 0xa8, 0xbf, + 0x7b, 0xb0, 0x90, 0x5f, 0xee, 0xf9, 0xd8, 0x7b, 0xb6, 0x4e, 0x4a, 0xbe, 0xca, 0x86, 0x24, 0x08, + 0xb1, 0x6b, 0x69, 0x13, 0xc7, 0x7c, 0x70, 0x13, 0x2d, 0xd1, 0xc4, 0x13, 0x2d, 0x27, 0x08, 0xeb, + 0x3e, 0xa7, 0x8b, 0xb5, 0x53, 0x67, 0x49, 0x36, 0x20, 0x5f, 0x6b, 0xec, 0xd1, 0x66, 0xaf, 0x45, + 0x71, 0xa2, 0x14, 0x16, 0x4f, 0x8a, 0xe9, 0x2e, 0xc7, 0x53, 0x16, 0x2f, 0x9d, 0x16, 0xbc, 0x49, + 0x20, 0x20, 0xfa, 0x2c, 0x92, 0x58, 0x6f, 0xe5, 0xbf, 0xfd, 0xf3, 0x0b, 0xcf, 0xfc, 0xd0, 0x1f, + 0x9d, 0x7d, 0xc6, 0xfa, 0x27, 0x59, 0x28, 0xc6, 0x99, 0x90, 0x1d, 0x98, 0xba, 0xd3, 0x6d, 0x3a, + 0x21, 0x2d, 0xb7, 0x5c, 0xda, 0x09, 0x03, 0x9c, 0x24, 0x83, 0xbf, 0xe9, 0x45, 0x51, 0xef, 0x7c, + 0x0f, 0x09, 0xeb, 0x0d, 0x4e, 0x19, 0xfb, 0x2a, 0x93, 0x6d, 0x54, 0x4f, 0x0d, 0xf7, 0xfc, 0x00, + 0x67, 0xd8, 0xd1, 0xea, 0xe1, 0xa7, 0x45, 0x9f, 0x7a, 0x04, 0x5b, 0x31, 0x81, 0x3a, 0xcd, 0xed, + 0x7d, 0x9c, 0x99, 0xc3, 0x4f, 0x20, 0x46, 0x92, 0x32, 0x81, 0x18, 0xd8, 0xfa, 0x6f, 0x32, 0x30, + 0x6d, 0xd3, 0xc0, 0xeb, 0xf9, 0x0d, 0xba, 0x4a, 0x9d, 0x26, 0xf5, 0xd9, 0xf4, 0xbf, 0xe5, 0x76, + 0x9a, 0x62, 0x4d, 0xe1, 0xf4, 0xbf, 0xe7, 0x76, 0xf4, 0x5d, 0x1c, 0xcb, 0xc9, 0x67, 0x60, 0xbc, + 0xd6, 0xdb, 0x46, 0xd4, 0x6c, 0xb4, 0xee, 0x83, 0xde, 0x76, 0x3d, 0x86, 0x2e, 0xd1, 0xc8, 0x65, + 0x18, 0xbf, 0x4b, 0xfd, 0x20, 0xda, 0x27, 0xf1, 0x94, 0xb8, 0xcf, 0x41, 0x3a, 0x81, 0xc0, 0x22, + 0x37, 0xa2, 0xbd, 0x5a, 0x9c, 0x6f, 0x33, 0xb1, 0x1d, 0x32, 0x9a, 0x2a, 0x6d, 0x01, 0xd1, 0xa7, + 0x8a, 0xc4, 0xb2, 0x7e, 0x3a, 0x0b, 0xc5, 0x65, 0x27, 0x74, 0xb6, 0x9d, 0x40, 0xf4, 0xe7, 0xdd, + 0xab, 0x6c, 0xf7, 0xd7, 0x3e, 0x14, 0x77, 0x7f, 0xd6, 0xf2, 0x4f, 0xfc, 0x79, 0x2f, 0xc5, 0x3f, + 0xaf, 0xc0, 0x0e, 0x5b, 0xf1, 0x79, 0xd1, 0x47, 0xbd, 0x7b, 0xf8, 0x47, 0x15, 0xc5, 0x47, 0xe5, + 0xe5, 0x47, 0x45, 0x9f, 0x42, 0xde, 0x85, 0x91, 0x5a, 0x97, 0x36, 0xc4, 0x26, 0x22, 0x4f, 0x0c, + 0xf3, 0xe3, 0x18, 0xc2, 0xdd, 0xab, 0x4b, 0x93, 0x82, 0xcd, 0x48, 0xd0, 0xa5, 0x0d, 0x1b, 0xc9, + 0xb4, 0x45, 0xf3, 0x1b, 0x39, 0x98, 0x4b, 0x23, 0xd3, 0xbf, 0x63, 0x6c, 0xc0, 0x77, 0x5c, 0x80, + 0x3c, 0x3b, 0xcd, 0xd9, 0x81, 0x89, 0xdb, 0xc5, 0x04, 0x17, 0x52, 0xf6, 0x04, 0xcc, 0x56, 0xa5, + 0xe4, 0x9c, 0x12, 0x0e, 0xf2, 0x11, 0x3f, 0x21, 0x1c, 0x48, 0x91, 0x80, 0x8d, 0xb5, 0x5c, 0xc2, + 0x28, 0x43, 0x44, 0xdd, 0x22, 0xc1, 0xd1, 0x58, 0xfb, 0x02, 0x62, 0x1c, 0x2e, 0xf2, 0x50, 0x58, + 0x81, 0xbc, 0xfc, 0xac, 0xf9, 0x49, 0x64, 0x34, 0x1b, 0xeb, 0xa4, 0xbb, 0x57, 0xf9, 0x60, 0x36, + 0xc5, 0x6f, 0x9d, 0x8d, 0xc4, 0x21, 0x57, 0x21, 0x5f, 0xf5, 0xbd, 0x87, 0xfb, 0x95, 0xe5, 0x60, + 0x7e, 0xea, 0x6c, 0xee, 0xc2, 0xc4, 0xd2, 0xc9, 0x47, 0x07, 0x0b, 0xc7, 0xba, 0x0c, 0x56, 0x77, + 0x9b, 0xfa, 0x19, 0xac, 0x10, 0x6f, 0x8e, 0xe4, 0x33, 0xc5, 0xec, 0xcd, 0x91, 0x7c, 0xb6, 0x98, + 0xbb, 0x39, 0x92, 0xcf, 0x15, 0x47, 0x6e, 0x8e, 0xe4, 0x47, 0x8a, 0xa3, 0x37, 0x47, 0xf2, 0xa3, + 0xc5, 0xb1, 0x9b, 0x23, 0xf9, 0x89, 0x22, 0xdc, 0x1c, 0xc9, 0x17, 0x8a, 0x93, 0x86, 0x1c, 0x80, + 0x0c, 0x42, 0xaf, 0xe1, 0xb5, 0xec, 0xdc, 0x1d, 0xbb, 0x62, 0x8f, 0x95, 0x4b, 0x65, 0xea, 0x87, + 0x76, 0xae, 0xb4, 0x55, 0xb3, 0xa7, 0x96, 0xf7, 0x3b, 0x4e, 0xdb, 0x6d, 0xf0, 0x03, 0xd3, 0xce, + 0xdd, 0x28, 0x57, 0xad, 0x12, 0x4c, 0x47, 0xdf, 0xb2, 0xe6, 0x06, 0x21, 0xb9, 0x0c, 0x13, 0x12, + 0xc2, 0x36, 0xba, 0x5c, 0xea, 0x57, 0xdb, 0x11, 0x8e, 0xf5, 0xbb, 0x59, 0x80, 0xa8, 0xe4, 0x29, + 0x5d, 0x0b, 0x9f, 0x33, 0xd6, 0xc2, 0xf1, 0xf8, 0x5a, 0xe8, 0xbb, 0x0a, 0xc8, 0xfb, 0x30, 0xc6, + 0xc4, 0x82, 0x9e, 0x14, 0x96, 0x4e, 0xc6, 0x49, 0xb1, 0xf0, 0xee, 0xd5, 0xa5, 0x69, 0x41, 0x3c, + 0x16, 0x20, 0xc4, 0x16, 0x64, 0xda, 0x32, 0xfa, 0xd7, 0xc6, 0xa3, 0xc1, 0x10, 0x0b, 0xe8, 0x02, + 0xa8, 0x01, 0x15, 0x1d, 0x8a, 0x2b, 0xa3, 0x2b, 0x07, 0x59, 0x95, 0x92, 0x53, 0xc0, 0x06, 0x5c, + 0x74, 0xea, 0xf8, 0xa3, 0x83, 0x85, 0x5c, 0xcf, 0x77, 0x71, 0x12, 0x90, 0xcb, 0x20, 0xa6, 0x81, + 0xe8, 0x40, 0x36, 0xfb, 0x66, 0x1b, 0x4e, 0xbd, 0x41, 0xfd, 0xd0, 0x10, 0xc2, 0x04, 0x1a, 0xe9, + 0x82, 0x39, 0x55, 0xe6, 0x47, 0x70, 0x1a, 0x5c, 0x48, 0xed, 0x95, 0x4b, 0x06, 0x2a, 0x17, 0x30, + 0xcf, 0xca, 0x53, 0xa9, 0xc9, 0xcb, 0xea, 0x09, 0x61, 0xd3, 0xac, 0x80, 0x5c, 0x05, 0x36, 0x43, + 0x45, 0xef, 0x83, 0xa8, 0xa7, 0xb4, 0x55, 0x5b, 0x3a, 0x2e, 0x38, 0x4d, 0x39, 0x0f, 0x74, 0x72, + 0x86, 0x4d, 0xde, 0x06, 0x36, 0x85, 0x45, 0xbf, 0x13, 0x41, 0x74, 0xa3, 0x5c, 0x2d, 0xb7, 0xbc, + 0x5e, 0xb3, 0xf6, 0xc1, 0x5a, 0x44, 0xbc, 0xdb, 0xe8, 0xea, 0xc4, 0x37, 0xca, 0x55, 0xf2, 0x36, + 0x8c, 0x96, 0xbe, 0xde, 0xf3, 0xa9, 0x90, 0x4f, 0x26, 0x65, 0x9d, 0x0c, 0xb6, 0x74, 0x52, 0x10, + 0xce, 0x38, 0xec, 0xa7, 0x2e, 0xd7, 0x61, 0x39, 0xab, 0x79, 0x73, 0xad, 0x26, 0x64, 0x0f, 0x12, + 0xeb, 0x96, 0xcd, 0x35, 0xad, 0xd9, 0xa1, 0xf1, 0xd5, 0x8c, 0x8a, 0x5c, 0x86, 0x6c, 0x69, 0x19, + 0x2f, 0x47, 0x85, 0xc5, 0x09, 0x59, 0xed, 0xf2, 0xd2, 0x9c, 0x20, 0x99, 0x74, 0xf4, 0x65, 0x90, + 0x2d, 0x2d, 0x93, 0x25, 0x18, 0xbd, 0xbd, 0x5f, 0xfb, 0x60, 0x4d, 0x6c, 0x66, 0xc7, 0xe4, 0xbc, + 0x66, 0xb0, 0x0d, 0x5c, 0xf6, 0x41, 0xd4, 0xe2, 0xf6, 0x7e, 0xf0, 0xb5, 0x96, 0xde, 0x62, 0x44, + 0x23, 0x55, 0x98, 0x28, 0x35, 0xdb, 0x6e, 0xe7, 0x4e, 0x40, 0xfd, 0xf9, 0x02, 0xf2, 0x99, 0x8f, + 0xb5, 0x5b, 0x95, 0x2f, 0xcd, 0x3f, 0x3a, 0x58, 0x98, 0x73, 0xd8, 0xcf, 0x7a, 0x2f, 0xa0, 0xbe, + 0xc6, 0x2d, 0x62, 0x42, 0xaa, 0x00, 0xb7, 0xbd, 0xce, 0xae, 0x57, 0x0a, 0x5b, 0x4e, 0x10, 0xdb, + 0x1e, 0xa3, 0x02, 0x25, 0x3e, 0x1c, 0x6f, 0x33, 0x58, 0xdd, 0x61, 0x40, 0x8d, 0xa1, 0xc6, 0x83, + 0x5c, 0x87, 0xb1, 0x0d, 0xdf, 0x69, 0xb4, 0xe8, 0xfc, 0x14, 0x72, 0x9b, 0x13, 0xdc, 0x38, 0x50, + 0x7e, 0xe9, 0xbc, 0x60, 0x58, 0xf4, 0x10, 0xac, 0x5f, 0x60, 0x38, 0xe2, 0xe9, 0x2d, 0x20, 0xc9, + 0x39, 0x99, 0x72, 0x35, 0x78, 0x55, 0xbf, 0x1a, 0x44, 0x8b, 0xbe, 0xec, 0xb5, 0xdb, 0x4e, 0xa7, + 0x89, 0xb4, 0x77, 0x17, 0xf5, 0x1b, 0xc3, 0xd7, 0x60, 0x36, 0xd1, 0x59, 0x87, 0xdc, 0xfc, 0xde, + 0x83, 0x99, 0x65, 0xba, 0xe3, 0xf4, 0x5a, 0xa1, 0x3a, 0x49, 0xf8, 0x12, 0xc5, 0x3b, 0x58, 0x93, + 0x17, 0xd5, 0xe5, 0xf1, 0x61, 0xc7, 0x91, 0xad, 0x77, 0x61, 0xca, 0xf8, 0x7c, 0x76, 0x55, 0x28, + 0xf5, 0x9a, 0x6e, 0x88, 0x03, 0x99, 0x89, 0xae, 0x0a, 0x0e, 0x03, 0xe2, 0x70, 0xd9, 0x11, 0x82, + 0xf5, 0xf7, 0x75, 0x69, 0x45, 0xec, 0x44, 0xec, 0x86, 0x2d, 0xf6, 0x83, 0x4c, 0x24, 0x3b, 0x25, + 0xf6, 0x03, 0xb5, 0x1b, 0x5c, 0xe4, 0x6b, 0x33, 0x9b, 0x58, 0x9b, 0x05, 0x31, 0x12, 0x39, 0xe7, + 0x41, 0xc0, 0x57, 0xa4, 0x9a, 0xa9, 0xb9, 0x4f, 0x3e, 0x53, 0xdf, 0x87, 0xc9, 0xdb, 0x4e, 0xc7, + 0xd9, 0xa5, 0x4d, 0xf6, 0x05, 0x7c, 0xef, 0x99, 0x58, 0x7a, 0xf6, 0xd1, 0xc1, 0xc2, 0xc9, 0x36, + 0x87, 0xe3, 0x57, 0xea, 0x93, 0xc8, 0x20, 0x20, 0x57, 0xe4, 0xca, 0x1e, 0x4d, 0x59, 0xd9, 0x53, + 0xa2, 0xf6, 0x51, 0x5c, 0xd9, 0x62, 0x3d, 0x5b, 0xff, 0x4b, 0x1e, 0xbf, 0x91, 0xbc, 0x06, 0x63, + 0x36, 0xdd, 0x65, 0x47, 0x4d, 0x26, 0x1a, 0x24, 0x1f, 0x21, 0x7a, 0xc7, 0x70, 0x1c, 0x94, 0x33, + 0x68, 0x33, 0xd8, 0x73, 0x77, 0x42, 0xd1, 0x3b, 0x4a, 0xce, 0x10, 0x60, 0x4d, 0xce, 0x10, 0x10, + 0xf3, 0x12, 0xcb, 0x61, 0x6c, 0xf7, 0xb3, 0x97, 0x6b, 0xa2, 0xd3, 0x64, 0x0f, 0xdb, 0xcb, 0xda, + 0x36, 0xe2, 0x1b, 0x52, 0x02, 0xc3, 0x26, 0xd7, 0x60, 0xa2, 0xd4, 0x68, 0x78, 0x3d, 0xed, 0xce, + 0xc8, 0xd7, 0x2d, 0x07, 0x9a, 0xda, 0x92, 0x08, 0x95, 0xd4, 0xa0, 0xb0, 0xc2, 0x2e, 0x5a, 0x6e, + 0xd9, 0x69, 0xec, 0xc9, 0x4e, 0x92, 0x7b, 0x98, 0x56, 0x12, 0xad, 0x5c, 0x8a, 0xc0, 0x06, 0x03, + 0xea, 0xea, 0x07, 0x0d, 0x97, 0x6c, 0x42, 0xa1, 0x46, 0x1b, 0x3e, 0x0d, 0x6b, 0xa1, 0xe7, 0xd3, + 0xd8, 0x96, 0xac, 0x95, 0x2c, 0x3d, 0x2f, 0xef, 0x7a, 0x01, 0x02, 0xeb, 0x01, 0x83, 0xea, 0x5c, + 0x35, 0x64, 0x2e, 0xb4, 0xb7, 0x3d, 0x7f, 0x7f, 0x79, 0x49, 0x6c, 0xd3, 0xd1, 0x99, 0xce, 0xc1, + 0xba, 0xd0, 0xce, 0x20, 0xcd, 0x6d, 0x53, 0x68, 0xe7, 0x58, 0x38, 0x52, 0xcb, 0x35, 0x94, 0xad, + 0xc4, 0xa6, 0x3d, 0x13, 0xf5, 0x32, 0x82, 0xb5, 0x91, 0x6a, 0x06, 0x28, 0x99, 0x19, 0x23, 0x25, + 0xb0, 0x48, 0x17, 0x88, 0x1c, 0x35, 0x2e, 0xe8, 0xb6, 0x68, 0x10, 0x88, 0xbd, 0xfc, 0x54, 0x6c, + 0xf0, 0x23, 0x84, 0xa5, 0x97, 0x04, 0xf3, 0x33, 0x72, 0x1a, 0x88, 0x7b, 0x1a, 0x2b, 0xd4, 0xea, + 0x49, 0xe1, 0x4d, 0xde, 0x04, 0x58, 0x79, 0x18, 0x52, 0xbf, 0xe3, 0xb4, 0x94, 0x4a, 0x0c, 0x95, + 0x42, 0x54, 0x40, 0xcd, 0x81, 0xd6, 0x90, 0x49, 0x19, 0xa6, 0x4a, 0x41, 0xd0, 0x6b, 0x53, 0xdb, + 0x6b, 0xd1, 0x92, 0xbd, 0x8e, 0xfb, 0xfe, 0xc4, 0xd2, 0x99, 0x47, 0x07, 0x0b, 0xa7, 0x1c, 0x2c, + 0xa8, 0xfb, 0x5e, 0x8b, 0xd6, 0x1d, 0x5f, 0x9f, 0xdd, 0x26, 0x0d, 0xd9, 0x00, 0xd8, 0xe8, 0xd2, + 0x4e, 0x8d, 0x3a, 0x7e, 0x63, 0x2f, 0xb6, 0xcd, 0x47, 0x05, 0x4b, 0xcf, 0x89, 0x2f, 0x9c, 0xf3, + 0xba, 0xb4, 0x13, 0x20, 0x4c, 0x6f, 0x55, 0x84, 0x49, 0xb6, 0x60, 0xa6, 0x52, 0xba, 0x5d, 0xf5, + 0x5a, 0x6e, 0x63, 0x5f, 0x48, 0x4e, 0xd3, 0xa8, 0x28, 0x3c, 0x21, 0xb8, 0xc6, 0x4a, 0xf9, 0xf6, + 0xe4, 0x3a, 0xed, 0x7a, 0x17, 0xa1, 0x75, 0x21, 0x3f, 0xc5, 0xb9, 0x90, 0x0f, 0xd9, 0x1c, 0x0c, + 0x98, 0x30, 0xb8, 0xe9, 0xec, 0x06, 0xf3, 0x33, 0x86, 0x1e, 0xac, 0xb4, 0x55, 0xbb, 0xa4, 0x95, + 0x72, 0x31, 0xe5, 0x34, 0x9f, 0x88, 0x08, 0xad, 0x87, 0xce, 0x6e, 0x60, 0x4e, 0x44, 0x85, 0x7d, + 0xfa, 0x3d, 0x28, 0xc6, 0x89, 0x8f, 0xa2, 0x6a, 0xba, 0x39, 0x92, 0x9f, 0x2a, 0x4e, 0x6b, 0x2d, + 0x5e, 0x79, 0xe8, 0x06, 0x61, 0x60, 0x7d, 0xbf, 0xb1, 0x6a, 0xd8, 0x8a, 0xbe, 0x45, 0xf7, 0xab, + 0x3e, 0xdd, 0x71, 0x1f, 0x8a, 0x0d, 0x08, 0x57, 0xf4, 0x3d, 0xba, 0x5f, 0xef, 0x22, 0x54, 0x5f, + 0xd1, 0x0a, 0x95, 0x7c, 0x16, 0xf2, 0xb7, 0x6e, 0xd7, 0x6e, 0xd1, 0xfd, 0xca, 0xb2, 0x38, 0x5c, + 0x38, 0x59, 0x3b, 0xa8, 0x33, 0x52, 0x63, 0x7e, 0x28, 0x4c, 0x6b, 0x29, 0xda, 0xbd, 0x58, 0xcd, + 0xe5, 0x56, 0x2f, 0x08, 0xa9, 0x5f, 0x59, 0xd6, 0x6b, 0x6e, 0x70, 0x60, 0x6c, 0x2f, 0x51, 0xa8, + 0xd6, 0x6f, 0x64, 0x71, 0xe7, 0x62, 0x93, 0xb4, 0xd2, 0x09, 0x42, 0xa7, 0xd3, 0xa0, 0x8a, 0x01, + 0x4e, 0x52, 0x57, 0x40, 0x63, 0x93, 0x34, 0x42, 0x36, 0xab, 0xce, 0x0e, 0x5d, 0x35, 0xab, 0x52, + 0x6a, 0x1b, 0x84, 0x6a, 0x5b, 0x54, 0xe9, 0x0b, 0x68, 0xac, 0xca, 0x08, 0x99, 0x9c, 0x87, 0xf1, + 0x4a, 0xe9, 0x76, 0xa9, 0x17, 0xee, 0xe1, 0xbe, 0x99, 0xe7, 0x32, 0x35, 0x9b, 0x61, 0x4e, 0x2f, + 0xdc, 0xb3, 0x65, 0x21, 0xb9, 0x8c, 0x77, 0x95, 0x0e, 0x0d, 0xb9, 0x52, 0x55, 0x1c, 0x94, 0x01, + 0x07, 0xc5, 0xae, 0x2a, 0x0c, 0x44, 0x5e, 0x81, 0xd1, 0xbb, 0xd5, 0x72, 0x65, 0x59, 0x5c, 0x76, + 0xf1, 0xf4, 0xb8, 0xdf, 0x6d, 0x98, 0x2d, 0xe1, 0x28, 0xd6, 0x6f, 0x67, 0xa2, 0x3d, 0x89, 0x9c, + 0x37, 0x64, 0x08, 0x54, 0x94, 0x30, 0x19, 0x42, 0x57, 0x94, 0xa0, 0x34, 0x61, 0x03, 0x29, 0xf7, + 0x82, 0xd0, 0x6b, 0xaf, 0x74, 0x9a, 0x5d, 0xcf, 0xed, 0x84, 0x48, 0xc5, 0x7b, 0xcd, 0x7a, 0x74, + 0xb0, 0xf0, 0x7c, 0x03, 0x4b, 0xeb, 0x54, 0x14, 0xd7, 0x63, 0x5c, 0x52, 0xa8, 0x1f, 0xa3, 0x23, + 0xad, 0xdf, 0xcf, 0x1a, 0x67, 0x09, 0x6b, 0x9e, 0x4d, 0xbb, 0x2d, 0xb7, 0x81, 0xd7, 0xe7, 0x1b, + 0xbe, 0xd7, 0xeb, 0xaa, 0xe9, 0x80, 0xcd, 0xf3, 0xa3, 0xd2, 0xfa, 0x2e, 0x2b, 0x36, 0x79, 0xa7, + 0x50, 0x93, 0x2f, 0xc0, 0x24, 0x3b, 0xd6, 0xc5, 0xcf, 0x60, 0x3e, 0x8b, 0x23, 0xf1, 0x1c, 0xaa, + 0xbc, 0x02, 0xea, 0x2b, 0x36, 0x86, 0x3c, 0xa0, 0x53, 0x90, 0x26, 0xcc, 0x6f, 0xfa, 0x4e, 0x27, + 0x70, 0xc3, 0x95, 0x4e, 0xc3, 0xdf, 0x47, 0x31, 0x64, 0xa5, 0xe3, 0x6c, 0xb7, 0x68, 0x13, 0x3f, + 0x37, 0xbf, 0x74, 0xe1, 0xd1, 0xc1, 0xc2, 0x8b, 0x21, 0xc7, 0xa9, 0x53, 0x85, 0x54, 0xa7, 0x1c, + 0x4b, 0xe3, 0xdc, 0x97, 0x13, 0x13, 0x5b, 0x64, 0xb7, 0xe2, 0xe3, 0x07, 0x3f, 0x91, 0x51, 0x6c, + 0x51, 0xa3, 0xc1, 0xb6, 0x22, 0xbd, 0x99, 0x3a, 0x81, 0xf5, 0x2f, 0x33, 0xd1, 0x69, 0x47, 0xde, + 0x81, 0x82, 0x98, 0xea, 0xda, 0xbc, 0xc0, 0xed, 0x4a, 0xae, 0x8b, 0xd8, 0xc8, 0xea, 0xe8, 0xec, + 0x92, 0x5d, 0x2a, 0xaf, 0x69, 0x73, 0x03, 0x2f, 0xd9, 0x4e, 0xa3, 0x15, 0xa7, 0x92, 0x68, 0x6c, + 0x12, 0x6c, 0xae, 0xd5, 0xcc, 0x5e, 0xc1, 0x49, 0x10, 0xb6, 0x82, 0x94, 0x6e, 0xd0, 0x90, 0x1f, + 0xff, 0xc3, 0xff, 0xf3, 0x4c, 0xda, 0xa1, 0x4a, 0x96, 0x60, 0x6a, 0xcb, 0xf3, 0xef, 0xe1, 0xf8, + 0x6a, 0x9d, 0x80, 0x23, 0xff, 0x40, 0x16, 0xc4, 0x3f, 0xc8, 0x24, 0xd1, 0xdb, 0xa6, 0xf5, 0x86, + 0xd9, 0xb6, 0x18, 0x07, 0x83, 0x80, 0x8d, 0x83, 0xe2, 0xa8, 0x56, 0x07, 0x8e, 0x43, 0xd4, 0x04, + 0x63, 0x0a, 0xeb, 0xe8, 0xd6, 0x3f, 0xcd, 0xe8, 0x87, 0x27, 0xeb, 0xe4, 0x65, 0xaf, 0xed, 0xb8, + 0x1d, 0xed, 0x73, 0xf8, 0xfb, 0x0e, 0x42, 0xe3, 0x2d, 0xd1, 0x90, 0xc9, 0x55, 0xc8, 0xf3, 0x5f, + 0x6a, 0x93, 0x44, 0x15, 0x92, 0x20, 0x34, 0x77, 0x78, 0x89, 0x98, 0x18, 0x99, 0xdc, 0x51, 0x47, + 0xe6, 0x87, 0x32, 0x50, 0xd0, 0xee, 0xd3, 0x6c, 0xaf, 0xae, 0xfa, 0xde, 0xc7, 0xb4, 0x11, 0x9a, + 0xc7, 0x44, 0x97, 0x03, 0x63, 0x7b, 0xb5, 0x42, 0x8d, 0x1d, 0x0f, 0xd9, 0x23, 0x1c, 0x0f, 0xd6, + 0xff, 0x94, 0x11, 0xd2, 0xfc, 0xd0, 0x7b, 0xa4, 0xb9, 0x9f, 0x65, 0x8f, 0x72, 0x30, 0x7c, 0x01, + 0x46, 0x6d, 0xda, 0x74, 0x03, 0x21, 0x89, 0xcf, 0xea, 0x37, 0x07, 0x2c, 0x88, 0x2e, 0x2f, 0x3e, + 0xfb, 0xa9, 0xef, 0xea, 0x58, 0xce, 0x44, 0xae, 0x4a, 0x70, 0xbd, 0x45, 0x1f, 0xba, 0x7c, 0x26, + 0x8b, 0x03, 0x06, 0x45, 0x2e, 0x37, 0xa8, 0xef, 0xb0, 0x12, 0x21, 0xfb, 0xe9, 0xb3, 0xd6, 0xa0, + 0xb1, 0x3e, 0x04, 0x88, 0xaa, 0x24, 0xb7, 0xa0, 0x28, 0xd6, 0xb6, 0xdb, 0xd9, 0xe5, 0xe2, 0x83, + 0xe8, 0x83, 0x85, 0x47, 0x07, 0x0b, 0xcf, 0x36, 0x54, 0x99, 0x90, 0x8f, 0x34, 0xbe, 0x09, 0x42, + 0xeb, 0x5f, 0xcf, 0x42, 0xb6, 0x84, 0x03, 0x72, 0x8b, 0xee, 0x87, 0xce, 0xf6, 0x75, 0xb7, 0x65, + 0xcc, 0xc4, 0x7b, 0x08, 0xad, 0xef, 0xb8, 0xc6, 0xc5, 0x5a, 0x43, 0x66, 0x33, 0xf1, 0x96, 0xbf, + 0xfd, 0x06, 0x12, 0x6a, 0x33, 0xf1, 0x9e, 0xbf, 0xfd, 0x46, 0x9c, 0x4c, 0x21, 0x12, 0x0b, 0xc6, + 0xf8, 0xac, 0x14, 0x73, 0x10, 0x1e, 0x1d, 0x2c, 0x8c, 0xf1, 0xc9, 0x6b, 0x8b, 0x12, 0x72, 0x0a, + 0x72, 0xb5, 0xea, 0xba, 0xd8, 0x3e, 0x50, 0x81, 0x15, 0x74, 0x3b, 0x36, 0x83, 0xb1, 0x3a, 0xd7, + 0x96, 0x4b, 0x55, 0xbc, 0xb2, 0x8e, 0x46, 0x75, 0xb6, 0x9a, 0x4e, 0x37, 0x7e, 0x69, 0x55, 0x88, + 0xe4, 0x5d, 0x28, 0xdc, 0x5a, 0x2e, 0xaf, 0x7a, 0x01, 0x5f, 0xfa, 0x63, 0xd1, 0xe4, 0xbf, 0xd7, + 0x6c, 0xd4, 0x51, 0x67, 0x1c, 0xdf, 0x43, 0x35, 0x7c, 0xeb, 0x57, 0x32, 0x50, 0xd0, 0x34, 0x3a, + 0xe4, 0xb3, 0xe2, 0x29, 0x2f, 0x63, 0xc8, 0xaa, 0x1a, 0x06, 0x2b, 0xe5, 0xd7, 0xff, 0xb6, 0xd7, + 0xa4, 0xe2, 0x61, 0x2f, 0xba, 0x6a, 0x67, 0x87, 0xb9, 0x6a, 0xbf, 0x09, 0xc0, 0xe7, 0x00, 0x36, + 0x59, 0x3b, 0x8b, 0x35, 0x23, 0x00, 0x7d, 0x5c, 0x22, 0x64, 0xcb, 0x86, 0x49, 0xfd, 0x9a, 0xcd, + 0xb6, 0x4f, 0xf1, 0x3c, 0x21, 0x94, 0xa7, 0xda, 0xf6, 0x29, 0xb8, 0x25, 0x9f, 0x4b, 0x4c, 0x12, + 0xeb, 0xb3, 0xba, 0x8a, 0x67, 0xd8, 0x05, 0x68, 0xfd, 0x48, 0x26, 0x5a, 0xee, 0x77, 0xaf, 0x90, + 0xb7, 0x61, 0x8c, 0x3f, 0x07, 0x89, 0x57, 0xb3, 0xe3, 0xea, 0x9a, 0xa4, 0xbf, 0x15, 0x71, 0xdd, + 0xea, 0x1f, 0xf2, 0xc7, 0xe4, 0x67, 0x6c, 0x41, 0xa2, 0xd4, 0xb2, 0xa6, 0x86, 0x46, 0x72, 0x47, + 0x05, 0xe4, 0x95, 0x34, 0xb5, 0xac, 0xf5, 0x3b, 0x23, 0x30, 0x6d, 0xa2, 0xe9, 0x6f, 0x46, 0x99, + 0xa1, 0xde, 0x8c, 0xbe, 0x00, 0x79, 0xd6, 0x1f, 0x6e, 0x83, 0x4a, 0xb1, 0xe3, 0x45, 0x54, 0x56, + 0x0b, 0x98, 0xf1, 0x16, 0x0a, 0xb5, 0xfd, 0x20, 0xa4, 0x6d, 0x76, 0x6b, 0xb2, 0x15, 0x15, 0x59, + 0xd4, 0x1e, 0x36, 0x72, 0xd1, 0x49, 0x2c, 0x1f, 0x36, 0xf4, 0x79, 0xab, 0x9e, 0x38, 0x5e, 0x87, + 0x31, 0x26, 0x7d, 0xaa, 0x4b, 0x3d, 0xb6, 0x92, 0x09, 0xa6, 0x31, 0xfb, 0x07, 0x8e, 0x44, 0xb6, + 0x20, 0xbf, 0xe6, 0x04, 0x61, 0x8d, 0xd2, 0xce, 0x10, 0xaf, 0xc1, 0x0b, 0xa2, 0xab, 0x8e, 0xe1, + 0x53, 0x6b, 0x40, 0x69, 0x27, 0xf6, 0x9c, 0xa7, 0x98, 0x91, 0x2f, 0x03, 0x94, 0xbd, 0x4e, 0xe8, + 0x7b, 0xad, 0x35, 0x6f, 0x77, 0x7e, 0x0c, 0x6f, 0x53, 0xcf, 0xc7, 0x06, 0x20, 0x42, 0xe0, 0x17, + 0x2a, 0xa5, 0x32, 0x68, 0xf0, 0x82, 0x7a, 0xcb, 0xdb, 0xd5, 0xe7, 0x6b, 0x84, 0x4f, 0xae, 0x43, + 0x51, 0x5e, 0x55, 0xef, 0x74, 0x77, 0x7d, 0x9c, 0x20, 0xe3, 0xd1, 0xf1, 0x4a, 0x1f, 0x86, 0xf5, + 0x9e, 0x80, 0xeb, 0x3b, 0x5a, 0x9c, 0x86, 0x7c, 0x09, 0x4e, 0xc6, 0x61, 0x72, 0x94, 0xf3, 0x91, + 0xe0, 0xa9, 0xb3, 0x4b, 0x99, 0xf7, 0xfd, 0x58, 0x58, 0xdf, 0xcd, 0xc2, 0xc9, 0x3e, 0x1f, 0xcb, + 0xd6, 0x03, 0x1e, 0xab, 0xda, 0x7a, 0x88, 0x9d, 0xa6, 0xdc, 0xa0, 0xe5, 0x2c, 0x9a, 0x3e, 0xb0, + 0x19, 0x3c, 0xb2, 0x54, 0x8c, 0x9b, 0x3e, 0xa0, 0xe1, 0xc3, 0x4d, 0x18, 0x61, 0x43, 0x34, 0xc4, + 0x63, 0xac, 0xd4, 0x52, 0x4c, 0x87, 0xae, 0x3e, 0x7d, 0x70, 0xe8, 0x90, 0x07, 0xf9, 0x2c, 0xe4, + 0x36, 0x37, 0xd7, 0x70, 0xee, 0xe4, 0xf0, 0xdb, 0xa7, 0xc2, 0xb0, 0x65, 0x4c, 0xd5, 0x29, 0x46, + 0x7b, 0x49, 0xbd, 0xdd, 0x33, 0x74, 0xf2, 0xc5, 0x98, 0xf9, 0xc8, 0x2b, 0x83, 0x07, 0x7a, 0x78, + 0x6b, 0x92, 0xc7, 0x31, 0xd0, 0xf8, 0xbb, 0xd9, 0x68, 0x0d, 0x5f, 0x77, 0x5b, 0x21, 0xf5, 0xc9, + 0x69, 0xbe, 0x24, 0xa3, 0x7b, 0xaa, 0xad, 0x7e, 0x93, 0xf9, 0x68, 0x7d, 0x73, 0x56, 0x6a, 0x21, + 0xbf, 0xa2, 0x2d, 0xe4, 0x1c, 0x2e, 0xe4, 0xe9, 0xbe, 0x4b, 0xf6, 0x95, 0x94, 0x79, 0x89, 0x0b, + 0x31, 0x65, 0xee, 0xbd, 0x08, 0x53, 0xeb, 0xde, 0xca, 0xc3, 0x50, 0x21, 0xb2, 0x05, 0x98, 0xb7, + 0x4d, 0x20, 0xe3, 0xb8, 0xd1, 0x6a, 0x52, 0x7f, 0x73, 0xcf, 0xe9, 0x18, 0xaf, 0xa1, 0x76, 0x02, + 0xce, 0x70, 0xd7, 0xe9, 0x03, 0x13, 0x77, 0x9c, 0xe3, 0xc6, 0xe1, 0xd6, 0x0f, 0x67, 0x65, 0x67, + 0xdc, 0x5d, 0x7c, 0x4a, 0x5f, 0xdd, 0xde, 0x30, 0x5e, 0xdd, 0x8e, 0x29, 0x7d, 0xa1, 0x7a, 0x42, + 0x5e, 0x3c, 0xe4, 0xe5, 0xf9, 0x87, 0xc7, 0x60, 0x52, 0x47, 0x67, 0xfd, 0x50, 0x6a, 0x36, 0x7d, + 0xbd, 0x1f, 0x9c, 0x66, 0xd3, 0xb7, 0x11, 0xca, 0xce, 0xd7, 0x6a, 0x6f, 0xbb, 0xe5, 0x36, 0x10, + 0x47, 0x93, 0x0d, 0xbb, 0x08, 0xad, 0x33, 0x54, 0x7d, 0xbf, 0x8a, 0x90, 0x8d, 0x37, 0xea, 0xdc, + 0xc0, 0x37, 0xea, 0xaf, 0xc0, 0x44, 0xb9, 0xdd, 0x34, 0x5e, 0xce, 0xac, 0x94, 0x2f, 0xbb, 0xa4, + 0x90, 0xf8, 0x32, 0x52, 0x1a, 0xb4, 0x46, 0xbb, 0x99, 0x7c, 0x2f, 0x8b, 0x58, 0x1a, 0xcf, 0xdb, + 0xa3, 0x8f, 0xf3, 0xbc, 0x7d, 0x0d, 0x26, 0xee, 0x04, 0x74, 0xb3, 0xd7, 0xe9, 0xd0, 0x16, 0xce, + 0xc8, 0x3c, 0x17, 0xe7, 0x7b, 0x01, 0xad, 0x87, 0x08, 0xd5, 0x1b, 0xa0, 0x50, 0xf5, 0xb9, 0x31, + 0x3e, 0x60, 0x6e, 0x5c, 0x85, 0x7c, 0x95, 0x52, 0x1f, 0xbb, 0xba, 0x10, 0x49, 0x6d, 0x5d, 0x4a, + 0xfd, 0x78, 0x47, 0x2b, 0x44, 0xe3, 0xad, 0x7c, 0x72, 0xc8, 0xb7, 0x72, 0xf2, 0x02, 0x4c, 0x6a, + 0x03, 0x28, 0x1e, 0xd9, 0xed, 0x42, 0x57, 0x8d, 0x5e, 0x40, 0xbe, 0x08, 0x53, 0x78, 0x8d, 0x51, + 0xb3, 0x75, 0xda, 0x78, 0x62, 0x32, 0xca, 0xb8, 0x90, 0xd4, 0x60, 0xa0, 0x7a, 0x8a, 0x2d, 0x88, + 0xc9, 0xe8, 0x74, 0x0d, 0xa6, 0xcd, 0x91, 0x7c, 0x02, 0x2f, 0x4d, 0x37, 0x47, 0xf2, 0xf9, 0xe2, + 0xc4, 0xcd, 0x91, 0x3c, 0x14, 0x0b, 0xfc, 0xad, 0xdf, 0x26, 0xb7, 0x7a, 0xdb, 0xd4, 0xef, 0xd0, + 0x90, 0x06, 0x42, 0xaa, 0x0f, 0xec, 0x91, 0x52, 0xb7, 0x1b, 0x58, 0xff, 0x28, 0x0b, 0xe3, 0xa5, + 0xad, 0x5a, 0xa5, 0xb3, 0xe3, 0xe1, 0xeb, 0x90, 0x7a, 0x14, 0xd0, 0x5f, 0x87, 0xd4, 0xa3, 0x80, + 0xfe, 0x14, 0x70, 0x39, 0xe5, 0x5e, 0x86, 0x36, 0xa7, 0xda, 0xbd, 0xcc, 0x50, 0xd6, 0x45, 0xef, + 0x23, 0xb9, 0x21, 0xde, 0x47, 0x94, 0x3a, 0x6c, 0xe4, 0x50, 0x75, 0x18, 0x79, 0x1b, 0x0a, 0x95, + 0x4e, 0x48, 0x77, 0xfd, 0x68, 0x5e, 0xab, 0x3b, 0xa2, 0x02, 0xeb, 0xb2, 0xba, 0x86, 0xcd, 0x26, + 0x0d, 0x57, 0xc1, 0x29, 0xd5, 0x1b, 0x4e, 0x1a, 0xae, 0xa9, 0x8b, 0xdd, 0x8e, 0x25, 0xa2, 0xb5, + 0x1c, 0x9b, 0x11, 0xf2, 0x0d, 0x9a, 0x4b, 0xa9, 0xd3, 0x91, 0xde, 0x98, 0x75, 0xec, 0xd2, 0x6c, + 0xfa, 0x1b, 0xb4, 0xf5, 0x8d, 0x2c, 0x14, 0x4a, 0xdd, 0xee, 0x53, 0x6e, 0x09, 0xf4, 0x79, 0x63, + 0x1f, 0x96, 0x97, 0x1b, 0xf5, 0x5d, 0x43, 0x19, 0x01, 0xfd, 0x6a, 0x16, 0x66, 0x62, 0x14, 0x7a, + 0xeb, 0x33, 0x43, 0xda, 0xff, 0x64, 0x87, 0xb4, 0xff, 0xc9, 0x0d, 0x67, 0xff, 0x33, 0xf2, 0x38, + 0x1b, 0xe4, 0xcb, 0x90, 0x2b, 0x75, 0xbb, 0xf1, 0x77, 0xc4, 0x6e, 0xf7, 0xee, 0x55, 0x7e, 0x41, + 0x75, 0xba, 0x5d, 0x9b, 0x61, 0x18, 0xbb, 0xd6, 0xd8, 0x90, 0xbb, 0x96, 0xf5, 0x3a, 0x4c, 0x20, + 0x2f, 0xb4, 0xba, 0x39, 0x0b, 0xb8, 0x98, 0x85, 0xc1, 0x8d, 0x51, 0x97, 0x58, 0xe6, 0xff, 0x47, + 0x06, 0x46, 0xf1, 0xf7, 0x53, 0x3a, 0xc7, 0x16, 0x8d, 0x39, 0x56, 0xd4, 0xe6, 0xd8, 0x30, 0xb3, + 0xeb, 0xdf, 0x1e, 0xc1, 0xde, 0x12, 0xf3, 0x4a, 0x18, 0xbb, 0x64, 0x52, 0x8c, 0x5d, 0x1e, 0xe3, + 0x88, 0xbf, 0x17, 0x37, 0x7b, 0xc9, 0xe1, 0x60, 0x9c, 0x8b, 0x37, 0xf5, 0x89, 0x58, 0xbc, 0xac, + 0x02, 0xa9, 0x74, 0x02, 0xda, 0xe8, 0xf9, 0xb4, 0x76, 0xcf, 0xed, 0xde, 0xa5, 0xbe, 0xbb, 0xb3, + 0x2f, 0xd4, 0x45, 0x78, 0x0a, 0xbb, 0xa2, 0xb4, 0x1e, 0xdc, 0x73, 0xbb, 0xec, 0xce, 0xe2, 0xee, + 0xec, 0xdb, 0x29, 0x34, 0xe4, 0x7d, 0x18, 0xb7, 0xe9, 0x03, 0xdf, 0x0d, 0xe5, 0x63, 0xee, 0xb4, + 0xba, 0x61, 0x23, 0x94, 0xdf, 0x20, 0x7d, 0xfe, 0x43, 0x1f, 0x7f, 0x51, 0x4e, 0x16, 0xf9, 0xc6, + 0xc7, 0x1f, 0x6d, 0xa7, 0xa2, 0xaf, 0x2d, 0x6d, 0xd5, 0xfa, 0xed, 0x7b, 0xe4, 0x22, 0x8c, 0xe2, + 0xee, 0x29, 0x24, 0x00, 0x34, 0x82, 0xc6, 0x13, 0x53, 0xdf, 0xda, 0x11, 0x83, 0x3c, 0x0f, 0xa0, + 0xf4, 0xf1, 0xc1, 0x7c, 0x1e, 0xcf, 0x66, 0x0d, 0xf2, 0xe9, 0x99, 0x6b, 0xfc, 0x72, 0x16, 0xce, + 0xa9, 0x1d, 0x69, 0xc3, 0xaf, 0x95, 0x6e, 0xaf, 0x55, 0x9a, 0x55, 0x21, 0xe9, 0x57, 0x7d, 0xef, + 0xbe, 0xcb, 0x6e, 0x7a, 0x57, 0x0e, 0x59, 0x4f, 0x6b, 0x7c, 0xe2, 0x71, 0x75, 0x5e, 0xd6, 0x78, + 0xd8, 0xd6, 0x36, 0x7e, 0xf1, 0xf6, 0xde, 0xed, 0x26, 0xb4, 0x7b, 0xab, 0xcf, 0xd8, 0x11, 0x03, + 0xf2, 0x23, 0x19, 0x38, 0x91, 0xde, 0x10, 0x71, 0xfb, 0x5b, 0x90, 0xa2, 0x62, 0x9f, 0xd6, 0x2e, + 0xbd, 0xfc, 0xe8, 0x60, 0xe1, 0x5c, 0xe0, 0xb4, 0x5b, 0x75, 0xb7, 0xc9, 0x6b, 0x73, 0x1b, 0xb4, + 0xde, 0x15, 0x08, 0x46, 0xbd, 0x7d, 0x6a, 0x8a, 0x96, 0xd5, 0x12, 0x40, 0x5e, 0xea, 0x61, 0xac, + 0x7f, 0x9c, 0x01, 0x6d, 0x4a, 0xe4, 0x6d, 0xda, 0x74, 0x7d, 0xda, 0x08, 0x71, 0x4b, 0x52, 0xa6, + 0xf8, 0x1c, 0x16, 0xb3, 0x62, 0x40, 0x18, 0x79, 0x0f, 0xc6, 0xb9, 0xd6, 0x86, 0x6b, 0x4b, 0xa2, + 0xa9, 0x24, 0x34, 0x3c, 0xdc, 0x91, 0x83, 0x63, 0xe8, 0xd3, 0x50, 0x10, 0x31, 0x71, 0xf4, 0xe6, + 0xd6, 0x66, 0xb9, 0xe5, 0xb8, 0xed, 0x40, 0x6c, 0x44, 0xd8, 0xa9, 0x1f, 0x3f, 0x08, 0xeb, 0x0d, + 0x84, 0xea, 0xe2, 0xa8, 0x42, 0xb5, 0x6e, 0x48, 0x05, 0xd3, 0x21, 0xa6, 0x38, 0x0b, 0x30, 0x7a, + 0x37, 0xba, 0x68, 0x2e, 0x4d, 0x3c, 0x3a, 0x58, 0xe0, 0x93, 0xc5, 0xe6, 0x70, 0xeb, 0xc7, 0x33, + 0x30, 0x6d, 0xce, 0x26, 0x72, 0x09, 0xc6, 0x84, 0x41, 0x7c, 0x06, 0x2f, 0xd4, 0xac, 0x17, 0xc6, + 0xb8, 0x29, 0xbc, 0x61, 0x00, 0x2f, 0xb0, 0xd8, 0x56, 0x2a, 0x38, 0x08, 0x8d, 0x11, 0x6e, 0xa5, + 0x0d, 0x0e, 0xb2, 0x65, 0x19, 0xb1, 0x98, 0x1c, 0x15, 0xf4, 0x5a, 0xa1, 0xae, 0x0f, 0xf5, 0x11, + 0x62, 0x8b, 0x12, 0xab, 0x0c, 0x63, 0x7c, 0x0d, 0xc6, 0x4c, 0x00, 0x32, 0x47, 0x30, 0x01, 0xb0, + 0x0e, 0x32, 0x00, 0xb5, 0xda, 0xea, 0x2d, 0xba, 0x5f, 0x75, 0x5c, 0x1f, 0x15, 0xf8, 0xb8, 0xdf, + 0xdd, 0x12, 0x4b, 0x6b, 0x52, 0x28, 0xf0, 0xf9, 0xde, 0x78, 0x8f, 0xee, 0x1b, 0x0a, 0x7c, 0x89, + 0x8a, 0x9b, 0xaa, 0xef, 0xde, 0x77, 0x42, 0xca, 0x08, 0xb3, 0x48, 0xc8, 0x37, 0x55, 0x0e, 0x8d, + 0x51, 0x6a, 0xc8, 0xe4, 0xcb, 0x30, 0x1d, 0xfd, 0x52, 0xcf, 0x10, 0xd3, 0x6a, 0xf9, 0x9a, 0x85, + 0x4b, 0xcf, 0x3f, 0x3a, 0x58, 0x38, 0xad, 0x71, 0x8d, 0x3f, 0x50, 0xc4, 0x98, 0x59, 0xbf, 0x90, + 0xc1, 0x97, 0x2b, 0xf9, 0x81, 0xe7, 0x61, 0x44, 0x19, 0x36, 0x4d, 0x72, 0x9d, 0x4c, 0x4c, 0xd5, + 0x8a, 0xe5, 0xe4, 0x1c, 0xe4, 0xa2, 0x2f, 0xc1, 0x3d, 0xce, 0xfc, 0x02, 0x56, 0x4a, 0x6e, 0xc0, + 0xf8, 0x50, 0x6d, 0xc6, 0xa5, 0x91, 0xd2, 0x56, 0x49, 0x8d, 0xa3, 0x70, 0x73, 0x6b, 0xf3, 0x7b, + 0x77, 0x14, 0xbe, 0x99, 0x85, 0x19, 0xd6, 0xaf, 0xa5, 0x5e, 0xb8, 0xe7, 0xf9, 0x6e, 0xb8, 0xff, + 0xd4, 0x6a, 0x24, 0xde, 0x31, 0xa4, 0x94, 0xd3, 0xf2, 0x8c, 0xd1, 0xbf, 0x6d, 0x28, 0xc5, 0xc4, + 0xef, 0x8e, 0xc2, 0xb1, 0x14, 0x2a, 0xf2, 0x9a, 0xa1, 0x34, 0x9c, 0x97, 0xbe, 0x6f, 0xdf, 0x3d, + 0x58, 0x98, 0x94, 0xe8, 0x9b, 0x91, 0x2f, 0xdc, 0xa2, 0xf9, 0x0c, 0xcc, 0x7b, 0x0a, 0x75, 0x88, + 0xfa, 0x33, 0xb0, 0xf9, 0xf8, 0x7b, 0x11, 0x46, 0x6d, 0xaf, 0x45, 0xa5, 0xcd, 0x02, 0x9e, 0xcc, + 0x3e, 0x03, 0x18, 0xaf, 0x55, 0x0c, 0x40, 0x56, 0x61, 0x9c, 0xfd, 0x71, 0xdb, 0xe9, 0x0a, 0xfd, + 0x2e, 0x51, 0x72, 0x32, 0x42, 0xbb, 0x6e, 0x67, 0x57, 0x17, 0x95, 0x5b, 0xb4, 0xde, 0x76, 0xba, + 0x86, 0x08, 0xc1, 0x11, 0x0d, 0x91, 0x3b, 0xdf, 0x5f, 0xe4, 0xce, 0x1c, 0x2a, 0x72, 0x37, 0x01, + 0x6a, 0xee, 0x6e, 0xc7, 0xed, 0xec, 0x96, 0x5a, 0xbb, 0xc2, 0x83, 0xf0, 0x62, 0xff, 0x51, 0xb8, + 0x14, 0x21, 0xe3, 0xc4, 0xe5, 0x8f, 0x25, 0x1c, 0x56, 0x77, 0x5a, 0x86, 0xf2, 0x39, 0x42, 0x25, + 0xeb, 0x00, 0xa5, 0x46, 0xe8, 0xde, 0x67, 0x13, 0x38, 0x10, 0xe6, 0xb0, 0xb2, 0xc1, 0xe5, 0xd2, + 0x2d, 0xba, 0x5f, 0xa3, 0x61, 0xa4, 0xcc, 0x76, 0x10, 0x95, 0xad, 0x03, 0xc3, 0x72, 0x35, 0xe2, + 0x40, 0xba, 0x70, 0xbc, 0xd4, 0x6c, 0xba, 0xec, 0x0b, 0x9c, 0xd6, 0xa6, 0xcf, 0x06, 0xa3, 0x89, + 0xac, 0x27, 0xd3, 0x59, 0x5f, 0x14, 0xac, 0x5f, 0x70, 0x14, 0x55, 0x3d, 0xe4, 0x64, 0xf1, 0x6a, + 0xd2, 0x19, 0x5b, 0x1b, 0x30, 0x6d, 0x7e, 0xba, 0xe9, 0xf7, 0x38, 0x09, 0x79, 0xbb, 0x56, 0xaa, + 0xd7, 0x56, 0x4b, 0x57, 0x8a, 0x19, 0x52, 0x84, 0x49, 0xf1, 0x6b, 0xb1, 0xbe, 0xf8, 0xc6, 0xb5, + 0x62, 0xd6, 0x80, 0xbc, 0x71, 0x65, 0x31, 0xe1, 0x63, 0x30, 0x5e, 0xcc, 0x73, 0xed, 0x83, 0xf5, + 0x6b, 0x19, 0xc8, 0xcb, 0x76, 0x93, 0x6b, 0x90, 0xab, 0xd5, 0x56, 0x63, 0x5e, 0x01, 0xd1, 0xf9, + 0xc2, 0x77, 0xd2, 0x20, 0xd0, 0x4d, 0xbf, 0x18, 0x01, 0xa3, 0xdb, 0x5c, 0xab, 0x09, 0xb1, 0x40, + 0xd2, 0x45, 0xdb, 0x36, 0xa7, 0x4b, 0x31, 0x95, 0xbe, 0x06, 0xb9, 0x9b, 0x5b, 0x9b, 0x42, 0x0e, + 0x97, 0x74, 0xd1, 0x4e, 0xca, 0xe9, 0x3e, 0x7e, 0xa0, 0xef, 0xef, 0x8c, 0xc0, 0xb2, 0xa1, 0xa0, + 0x4d, 0x61, 0x7e, 0xdc, 0xb6, 0x3d, 0xe5, 0xdd, 0x27, 0x8e, 0x5b, 0x06, 0xb1, 0x45, 0x09, 0x93, + 0x0e, 0xd6, 0xbc, 0x86, 0xd3, 0x12, 0xe7, 0x36, 0x4a, 0x07, 0x2d, 0x06, 0xb0, 0x39, 0xdc, 0xfa, + 0xed, 0x0c, 0x14, 0x51, 0x82, 0x42, 0x33, 0x30, 0xef, 0x1e, 0xed, 0xdc, 0xbd, 0x42, 0x5e, 0x97, + 0x8b, 0x2d, 0xa3, 0x6e, 0x7d, 0xa3, 0xb8, 0xd8, 0x62, 0xfa, 0x65, 0xb1, 0xe0, 0x34, 0xd7, 0xca, + 0xec, 0xf0, 0x8e, 0x57, 0x87, 0xb8, 0x56, 0x2e, 0xc0, 0x28, 0x36, 0x47, 0x6c, 0x8b, 0xd8, 0xf2, + 0x90, 0x01, 0x6c, 0x0e, 0xd7, 0x76, 0xa5, 0x9f, 0xce, 0x26, 0xbe, 0x61, 0xf1, 0x7b, 0xca, 0x79, + 0xc9, 0xfc, 0xb8, 0xa1, 0x76, 0xea, 0x0f, 0x61, 0x2e, 0xde, 0x25, 0x78, 0x23, 0x2f, 0xc1, 0x8c, + 0x09, 0x97, 0x97, 0xf3, 0x93, 0xa9, 0x75, 0xdd, 0x5d, 0xb4, 0xe3, 0xf8, 0xd6, 0x7f, 0x9d, 0x81, + 0x09, 0xfc, 0xd3, 0xee, 0xb5, 0xd0, 0x30, 0xa1, 0xb4, 0x55, 0x13, 0xda, 0x37, 0x5d, 0x8c, 0x73, + 0x1e, 0x04, 0x75, 0xa1, 0xa0, 0x33, 0xf6, 0x17, 0x85, 0x2c, 0x48, 0xb9, 0x5a, 0x4d, 0xbe, 0x45, + 0x2a, 0x52, 0xae, 0x7f, 0x0b, 0x62, 0xa4, 0x02, 0x19, 0x6d, 0x81, 0xb6, 0x6a, 0x6c, 0xfa, 0xe9, + 0x2f, 0x90, 0x48, 0xe7, 0xb5, 0x4c, 0x5b, 0x20, 0x8e, 0x86, 0x0f, 0x90, 0x5b, 0xb5, 0x92, 0xbd, + 0x6e, 0x3c, 0x40, 0xb2, 0x36, 0x1a, 0x76, 0xa2, 0x02, 0xc9, 0xfa, 0x1b, 0x13, 0xf1, 0x0e, 0x14, + 0x47, 0xdd, 0x11, 0xd7, 0xc6, 0xdb, 0x30, 0x5a, 0x6a, 0xb5, 0xbc, 0x07, 0x62, 0x97, 0x90, 0x0a, + 0x02, 0xd5, 0x7f, 0xfc, 0x24, 0x73, 0x18, 0x8a, 0xe1, 0x90, 0xc1, 0x00, 0xa4, 0x0c, 0x13, 0xa5, + 0xad, 0x5a, 0xa5, 0xb2, 0xbc, 0xb9, 0xb9, 0x26, 0xfc, 0xdc, 0x5f, 0x92, 0xfd, 0xe3, 0xba, 0xcd, + 0x7a, 0xfc, 0x0d, 0x2c, 0x92, 0xdc, 0x23, 0x3a, 0xf2, 0x2e, 0xc0, 0x4d, 0xcf, 0xed, 0xdc, 0xa6, + 0xe1, 0x9e, 0xd7, 0x14, 0x1f, 0x7f, 0xe6, 0xd1, 0xc1, 0x42, 0xe1, 0x63, 0xcf, 0xed, 0xd4, 0xdb, + 0x08, 0x66, 0x6d, 0x8f, 0x90, 0x6c, 0xed, 0x6f, 0xd6, 0xd3, 0x4b, 0x1e, 0x37, 0x36, 0x18, 0x8d, + 0x7a, 0x7a, 0xdb, 0x4b, 0xd8, 0x19, 0x48, 0x34, 0xd2, 0x86, 0x99, 0x5a, 0x6f, 0x77, 0x97, 0xb2, + 0x5d, 0x5d, 0xa8, 0x1c, 0xc6, 0xc4, 0xdd, 0x56, 0x45, 0x09, 0xe0, 0x37, 0x11, 0x76, 0x3f, 0x09, + 0x96, 0x5e, 0x63, 0x13, 0xf9, 0x3b, 0x07, 0x0b, 0xe2, 0x6d, 0x8d, 0x09, 0x69, 0x81, 0xa4, 0x4f, + 0x2a, 0x1c, 0xe2, 0xbc, 0xc9, 0x06, 0x8c, 0xdd, 0x70, 0xc3, 0xd5, 0xde, 0xb6, 0x30, 0xa6, 0x7e, + 0x61, 0xc0, 0xa2, 0xe1, 0x88, 0x5c, 0x67, 0xbb, 0xeb, 0x86, 0x7b, 0x3d, 0xdd, 0xb0, 0x5a, 0xb0, + 0x21, 0x5b, 0x90, 0x2f, 0xbb, 0x7e, 0xa3, 0x45, 0xcb, 0x15, 0x71, 0xea, 0x9f, 0x1b, 0xc0, 0x52, + 0xa2, 0xf2, 0x7e, 0x69, 0xe0, 0xaf, 0x86, 0xab, 0x4b, 0x01, 0x12, 0x83, 0xfc, 0xff, 0x33, 0xf0, + 0xac, 0x6a, 0x7d, 0x69, 0x97, 0x76, 0xc2, 0xdb, 0x4e, 0xd8, 0xd8, 0xa3, 0xbe, 0xe8, 0xa5, 0x89, + 0x41, 0xbd, 0xf4, 0x56, 0xa2, 0x97, 0x2e, 0x44, 0xbd, 0xe4, 0x30, 0x66, 0xf5, 0x36, 0xe7, 0x96, + 0xec, 0xb3, 0x41, 0xb5, 0x92, 0x3a, 0x40, 0xa4, 0x84, 0x17, 0xce, 0x38, 0x2f, 0x0d, 0xf8, 0xe0, + 0x08, 0x59, 0x18, 0xe4, 0xaa, 0xdf, 0x86, 0x6d, 0x8d, 0x82, 0x92, 0x5b, 0xd2, 0x73, 0x81, 0x4b, + 0x24, 0x67, 0x07, 0xf0, 0xe6, 0xde, 0x0c, 0xc7, 0x06, 0xf8, 0x28, 0xf1, 0xd1, 0x5e, 0x73, 0xb6, + 0x85, 0x10, 0x72, 0xc8, 0x68, 0xaf, 0x39, 0xd1, 0x68, 0xb7, 0x9c, 0xf8, 0x68, 0xaf, 0x39, 0xdb, + 0xa4, 0xcc, 0xdd, 0xad, 0xb8, 0x6f, 0xce, 0xf3, 0x83, 0xb8, 0x95, 0xab, 0xfc, 0x64, 0x4e, 0x71, + 0xbb, 0xfa, 0x08, 0x26, 0x6a, 0x5d, 0xa7, 0x41, 0x5b, 0xee, 0x4e, 0x28, 0xde, 0x60, 0x5e, 0x1c, + 0xc0, 0x4a, 0xe1, 0x0a, 0x8d, 0xbe, 0xfc, 0xa9, 0x5f, 0x90, 0x14, 0x8e, 0xf5, 0x8f, 0x47, 0xe1, + 0x74, 0xff, 0xc9, 0x4c, 0x3e, 0x90, 0x3b, 0x0c, 0xdf, 0xc7, 0xcf, 0x1f, 0x3a, 0xfd, 0x2f, 0x1d, + 0xba, 0xef, 0x7c, 0x11, 0xe6, 0x56, 0x3a, 0x21, 0xf5, 0xbb, 0xbe, 0x2b, 0x5d, 0x5f, 0x57, 0xbd, + 0x40, 0x5a, 0xfb, 0xbc, 0xf8, 0xe8, 0x60, 0xe1, 0x2c, 0x55, 0xe5, 0x42, 0x35, 0x84, 0xb6, 0x47, + 0x1a, 0xab, 0x54, 0x0e, 0x64, 0x05, 0xa6, 0x35, 0x78, 0xab, 0xb7, 0x2b, 0xb6, 0x6f, 0x34, 0x25, + 0xd3, 0x79, 0xb6, 0x7a, 0xba, 0x94, 0x1b, 0x23, 0x3a, 0xfd, 0x0b, 0x39, 0x18, 0xc1, 0xd3, 0xe7, + 0x1c, 0xe4, 0x6a, 0xbd, 0x6d, 0x71, 0xec, 0x70, 0x39, 0xcd, 0x58, 0xd3, 0xac, 0x94, 0x7c, 0x1e, + 0xc0, 0xa6, 0x5d, 0x2f, 0x70, 0x43, 0xcf, 0xdf, 0xd7, 0xad, 0xb1, 0x7d, 0x05, 0x35, 0x4d, 0xe7, + 0x24, 0x94, 0xac, 0xc2, 0x4c, 0xf4, 0x6b, 0xe3, 0x41, 0x47, 0xe8, 0xb3, 0x26, 0xf8, 0x55, 0x32, + 0x22, 0xaf, 0x7b, 0xac, 0x4c, 0xdf, 0xa5, 0x62, 0x64, 0x64, 0x11, 0xf2, 0x5b, 0x9e, 0x7f, 0x6f, + 0x87, 0x0d, 0xd4, 0x48, 0xb4, 0x8f, 0x3e, 0x10, 0x30, 0x7d, 0xbf, 0x90, 0x78, 0xe4, 0x6d, 0x28, + 0xac, 0x74, 0xee, 0xbb, 0xbe, 0xd7, 0x69, 0xd3, 0x4e, 0xa8, 0xbf, 0x1e, 0xd1, 0x08, 0x6c, 0xf8, + 0xae, 0x44, 0x60, 0x76, 0x61, 0x2a, 0x35, 0x42, 0xcf, 0x17, 0x4f, 0x47, 0x7c, 0xb8, 0x19, 0xc0, + 0x18, 0x6e, 0x06, 0x60, 0x9d, 0x68, 0xd3, 0x1d, 0xa1, 0xf3, 0xc4, 0x4e, 0xf4, 0xe9, 0x8e, 0xe1, + 0x98, 0x43, 0x77, 0xd8, 0x39, 0x60, 0xd3, 0x1d, 0xbc, 0xe5, 0x19, 0x51, 0x2c, 0x76, 0x12, 0xfa, + 0x01, 0x81, 0x66, 0xfd, 0xde, 0x44, 0xdf, 0x79, 0xcb, 0x16, 0xde, 0xd1, 0xe6, 0xed, 0x9a, 0x33, + 0xc4, 0xbc, 0x7d, 0x4d, 0x19, 0xe4, 0xe9, 0xde, 0x68, 0x08, 0xd1, 0x57, 0x3e, 0xc7, 0x39, 0xfd, + 0x8b, 0xf9, 0xa3, 0x4c, 0x22, 0xd1, 0x49, 0xd9, 0x61, 0x3b, 0x29, 0x37, 0x54, 0x27, 0x91, 0x25, + 0x98, 0x52, 0xb1, 0x52, 0xaa, 0x8e, 0xb0, 0xdd, 0x17, 0x06, 0x6d, 0x2a, 0xf2, 0x4d, 0xbd, 0xeb, + 0x84, 0xfa, 0xed, 0xc3, 0x24, 0x21, 0xef, 0x40, 0x41, 0x58, 0xa5, 0x22, 0x87, 0xd1, 0xc8, 0xde, + 0x48, 0x9a, 0xb0, 0xc6, 0xe8, 0x75, 0x74, 0xb6, 0x24, 0xab, 0x6e, 0x97, 0xb6, 0xdc, 0x0e, 0xad, + 0xa1, 0xca, 0x54, 0xcc, 0x18, 0x5c, 0x92, 0x5d, 0x51, 0x52, 0xe7, 0xda, 0x54, 0x43, 0x59, 0x62, + 0x10, 0xc5, 0x27, 0xeb, 0xf8, 0x91, 0x26, 0x2b, 0x7f, 0xb3, 0xf7, 0xd7, 0xbc, 0x5d, 0x57, 0x1a, + 0x38, 0xc9, 0x37, 0x7b, 0xbf, 0xde, 0x62, 0xd0, 0xd8, 0x9b, 0x3d, 0x47, 0x65, 0x42, 0x1d, 0xfb, + 0x51, 0xe1, 0x8e, 0xa7, 0x42, 0xa8, 0x43, 0x22, 0xd3, 0xaa, 0x8c, 0x23, 0xc9, 0x6a, 0x56, 0xda, + 0x8e, 0xdb, 0x12, 0x4e, 0x47, 0x51, 0x35, 0x94, 0x41, 0xe3, 0xd5, 0x20, 0x2a, 0x69, 0xc0, 0xa4, + 0x4d, 0x77, 0xaa, 0xbe, 0x17, 0xd2, 0x46, 0x48, 0x9b, 0xe2, 0x20, 0x93, 0xb2, 0xdc, 0x92, 0xe7, + 0xf1, 0x43, 0x7a, 0xe9, 0xf5, 0xdf, 0x3b, 0x58, 0xc8, 0x7c, 0xe7, 0x60, 0x01, 0x18, 0x88, 0x9b, + 0x2c, 0x3e, 0x3a, 0x58, 0x38, 0xc9, 0xc6, 0xbf, 0x2b, 0x89, 0x75, 0xb3, 0x64, 0x9d, 0x29, 0xf9, + 0x7e, 0xb6, 0xe9, 0xaa, 0x2e, 0x89, 0x2a, 0x9b, 0xec, 0x53, 0xd9, 0x1b, 0xa9, 0x95, 0x2d, 0x68, + 0xbd, 0x9d, 0x5a, 0x69, 0x6a, 0x25, 0xe4, 0x5d, 0x28, 0x94, 0x2b, 0x65, 0xaf, 0xb3, 0xe3, 0xee, + 0xd6, 0x56, 0x4b, 0x78, 0x1a, 0x0a, 0xb3, 0xd2, 0x86, 0x5b, 0x6f, 0x20, 0xbc, 0x1e, 0xec, 0x39, + 0x86, 0x69, 0x7e, 0x84, 0x4f, 0x6e, 0xc0, 0xb4, 0xfc, 0x69, 0xd3, 0x9d, 0x3b, 0x76, 0x05, 0x0f, + 0x41, 0x69, 0xcb, 0xab, 0x38, 0xb0, 0x8e, 0xe8, 0xf9, 0xba, 0x70, 0x14, 0x23, 0x63, 0x93, 0x71, + 0x99, 0x76, 0x5b, 0xde, 0x3e, 0x6b, 0xde, 0xa6, 0x4b, 0xfd, 0xf9, 0x99, 0x68, 0x32, 0x36, 0x55, + 0x49, 0x3d, 0x74, 0x8d, 0xed, 0x36, 0x46, 0x44, 0xd6, 0x61, 0x56, 0x4c, 0xf1, 0xbb, 0x6e, 0xe0, + 0x6e, 0xbb, 0x2d, 0x37, 0xdc, 0x9f, 0x2f, 0x22, 0xa7, 0xb3, 0x8f, 0x0e, 0x16, 0x9e, 0x93, 0xeb, + 0xe2, 0xbe, 0x2a, 0xd5, 0x98, 0x25, 0x49, 0xad, 0x5f, 0xcb, 0xc2, 0x73, 0x83, 0x84, 0x3f, 0x52, + 0x33, 0x37, 0xb3, 0x0b, 0x43, 0x08, 0x8c, 0x87, 0x6f, 0x67, 0x2b, 0x30, 0xbd, 0xe1, 0xef, 0x3a, + 0x1d, 0xf7, 0xeb, 0x28, 0xd4, 0x2b, 0x63, 0x06, 0xec, 0x0c, 0x4f, 0x2b, 0x31, 0x67, 0x7b, 0x8c, + 0xe8, 0xf4, 0x7d, 0xb1, 0xcd, 0x7d, 0x52, 0x3b, 0xf7, 0x6b, 0x30, 0x51, 0xf6, 0x3a, 0x21, 0x7d, + 0x18, 0xc6, 0x7c, 0x99, 0x38, 0x30, 0xee, 0xcb, 0x24, 0x51, 0xad, 0xff, 0x2b, 0x0b, 0x67, 0x06, + 0x4a, 0x3f, 0x64, 0xd3, 0xec, 0xb5, 0x8b, 0xc3, 0x88, 0x4c, 0x87, 0x77, 0xdb, 0x62, 0xe2, 0xdd, + 0xfd, 0x50, 0xf3, 0xd4, 0xd3, 0xff, 0x49, 0x46, 0x74, 0xd2, 0x67, 0x60, 0x1c, 0xab, 0x52, 0x5d, + 0xc4, 0x15, 0x03, 0xb8, 0x0b, 0xbb, 0xa6, 0x62, 0x80, 0xa3, 0x91, 0xab, 0x90, 0x2f, 0x3b, 0xad, + 0x96, 0xe6, 0xe9, 0x85, 0x42, 0x5d, 0x03, 0x61, 0x31, 0x33, 0x0d, 0x89, 0xc8, 0xae, 0xbe, 0xfc, + 0x6f, 0xed, 0xac, 0xc0, 0xcd, 0x52, 0x90, 0xc5, 0x8e, 0x0b, 0x0d, 0x19, 0x63, 0x3a, 0x35, 0x3c, + 0xe5, 0x92, 0xc2, 0x63, 0x3a, 0x31, 0x80, 0x11, 0xd3, 0x89, 0x01, 0xac, 0x5f, 0xcf, 0xc1, 0xf3, + 0x83, 0x45, 0x78, 0x72, 0xc7, 0x1c, 0x82, 0x57, 0x86, 0x12, 0xfc, 0x0f, 0x1f, 0x03, 0x19, 0x2c, + 0x8d, 0x77, 0xc8, 0x85, 0xa4, 0x15, 0xe9, 0x77, 0x0f, 0x16, 0x34, 0xdb, 0x1f, 0x76, 0xdf, 0xd4, + 0x14, 0xc4, 0x5f, 0x03, 0xa8, 0x85, 0x4e, 0xe8, 0x36, 0x6e, 0x6e, 0xdd, 0x92, 0x0e, 0xc4, 0xd7, + 0x86, 0x6b, 0x59, 0x44, 0xc7, 0xf7, 0x15, 0xa1, 0x3b, 0x45, 0x68, 0xfd, 0xe3, 0x07, 0xf7, 0x8c, + 0x4b, 0x4a, 0x84, 0x7c, 0xfa, 0x2d, 0x28, 0xc6, 0x49, 0xc9, 0x79, 0x18, 0xc1, 0x06, 0x68, 0xa6, + 0xb0, 0x31, 0x0e, 0x58, 0x7e, 0xfa, 0xb6, 0x98, 0x3b, 0x2b, 0x30, 0x2d, 0xde, 0x24, 0x4d, 0x75, + 0x08, 0xae, 0x57, 0xf9, 0xa4, 0x99, 0x54, 0x89, 0xc4, 0x88, 0xac, 0x3f, 0xcf, 0xc0, 0xa9, 0xbe, + 0x97, 0x23, 0x52, 0x35, 0x07, 0xec, 0xa5, 0xc3, 0x6e, 0x53, 0x87, 0x8e, 0xd5, 0xe9, 0x9f, 0x90, + 0x73, 0xff, 0x3d, 0x98, 0xac, 0xf5, 0xb6, 0xa3, 0x58, 0x6d, 0x9a, 0x7f, 0x56, 0xa0, 0xc1, 0xf5, + 0x13, 0x4c, 0xc7, 0x67, 0xdf, 0x2f, 0x9f, 0x5d, 0xc5, 0xb3, 0x38, 0xd7, 0xe9, 0xe0, 0xf7, 0x2b, + 0x3f, 0x15, 0x74, 0x23, 0xd2, 0x3b, 0x31, 0x46, 0x64, 0xfd, 0x6a, 0x16, 0x4e, 0xf6, 0xb9, 0x80, + 0x91, 0x75, 0xf3, 0xeb, 0xcf, 0x0d, 0xbe, 0xaf, 0x1d, 0xfe, 0xed, 0xff, 0x81, 0xfc, 0x76, 0x7c, + 0x85, 0x12, 0x3b, 0x9e, 0xd4, 0xed, 0x88, 0x57, 0x28, 0xb9, 0x3b, 0x06, 0xe6, 0x2b, 0x94, 0x44, + 0x26, 0x6f, 0xc0, 0xc4, 0x9a, 0xc7, 0xdd, 0xfb, 0xe4, 0x17, 0x73, 0x47, 0x0e, 0x09, 0xd4, 0xb7, + 0x47, 0x85, 0xc9, 0xee, 0x16, 0xe6, 0xc0, 0x4b, 0x2b, 0x5e, 0xbc, 0x5b, 0xc4, 0xa6, 0x8b, 0xa9, + 0x01, 0x31, 0xc9, 0xac, 0x9f, 0xc8, 0xc2, 0x34, 0x9f, 0xbc, 0x5c, 0x43, 0xf7, 0xd4, 0x6a, 0x3f, + 0xdf, 0x36, 0xb4, 0x9f, 0xd2, 0xf3, 0x5c, 0xff, 0xb4, 0xa1, 0x74, 0x9f, 0x7b, 0x40, 0x92, 0x34, + 0xc4, 0x86, 0x49, 0x1d, 0x3a, 0x58, 0xed, 0x79, 0x25, 0x0a, 0x52, 0x20, 0xf6, 0x0e, 0xd4, 0x3d, + 0x07, 0xb6, 0xc1, 0xc3, 0xfa, 0xf1, 0x2c, 0x4c, 0x69, 0xaf, 0x54, 0x4f, 0x6d, 0xc7, 0xbf, 0x65, + 0x74, 0xfc, 0xbc, 0x32, 0x1f, 0x55, 0x5f, 0x36, 0x54, 0xbf, 0xf7, 0x60, 0x36, 0x41, 0x12, 0x7f, + 0xec, 0xcb, 0x0c, 0xf3, 0xd8, 0xf7, 0x5a, 0xd2, 0x7b, 0x9a, 0x07, 0x0e, 0x54, 0xde, 0xd3, 0xba, + 0xbb, 0xf6, 0x37, 0xb3, 0x30, 0x27, 0x7e, 0x61, 0x88, 0x10, 0xbe, 0x7b, 0x3f, 0xb5, 0x63, 0x51, + 0x32, 0xc6, 0x62, 0xc1, 0x1c, 0x0b, 0xed, 0x03, 0xfb, 0x0f, 0x89, 0xf5, 0xd7, 0x00, 0xe6, 0xfb, + 0x11, 0x0c, 0xed, 0xe0, 0x11, 0x59, 0xc5, 0x66, 0x87, 0xb0, 0x8a, 0x5d, 0x83, 0x22, 0x56, 0x25, + 0x02, 0x0a, 0x04, 0xec, 0x0e, 0x90, 0x8b, 0x04, 0x6e, 0x1e, 0xc7, 0x45, 0x04, 0x25, 0x08, 0x62, + 0x97, 0x80, 0x04, 0x25, 0xf9, 0x85, 0x0c, 0x4c, 0x23, 0x70, 0xe5, 0x3e, 0xed, 0x84, 0xc8, 0x6c, + 0x44, 0x18, 0x71, 0x2a, 0xe5, 0x68, 0x2d, 0xf4, 0xdd, 0xce, 0xae, 0xd0, 0x8e, 0x6e, 0x0b, 0xed, + 0xe8, 0x3b, 0x5c, 0xab, 0x7b, 0xa9, 0xe1, 0xb5, 0x2f, 0xef, 0xfa, 0xce, 0x7d, 0x97, 0x3f, 0xc0, + 0x3a, 0xad, 0xcb, 0x51, 0xa8, 0xdb, 0xae, 0x1b, 0x0b, 0x5e, 0x2b, 0x58, 0xa1, 0xe6, 0x99, 0x37, + 0x94, 0x62, 0xb5, 0xf1, 0xbb, 0x8a, 0xd9, 0x22, 0xf2, 0x7d, 0x70, 0x92, 0x7b, 0x0b, 0x33, 0x91, + 0xd7, 0xed, 0xf4, 0xbc, 0x5e, 0xb0, 0xe4, 0x34, 0xee, 0xb1, 0x73, 0x8f, 0x9b, 0x9d, 0xe3, 0x97, + 0x37, 0x54, 0x61, 0x7d, 0x9b, 0x97, 0x1a, 0x1e, 0x3a, 0xe9, 0x0c, 0xc8, 0x2a, 0xcc, 0xf2, 0xa2, + 0x52, 0x2f, 0xf4, 0x6a, 0x0d, 0xa7, 0xe5, 0x76, 0x76, 0xf1, 0x4e, 0x9d, 0xe7, 0xe7, 0xb1, 0xd3, + 0x0b, 0xbd, 0x7a, 0xc0, 0xe1, 0xfa, 0xd5, 0x25, 0x41, 0x44, 0x2a, 0x30, 0x63, 0x53, 0xa7, 0x79, + 0xdb, 0x79, 0x58, 0x76, 0xba, 0x4e, 0x83, 0x5d, 0x84, 0xf2, 0xf8, 0x92, 0x80, 0x77, 0x33, 0x9f, + 0x3a, 0xcd, 0x7a, 0xdb, 0x79, 0x58, 0x6f, 0x88, 0x42, 0x53, 0x87, 0x65, 0xd0, 0x29, 0x56, 0x6e, + 0x47, 0xb1, 0x9a, 0x88, 0xb3, 0x72, 0x3b, 0xfd, 0x59, 0x45, 0x74, 0x92, 0xd5, 0xa6, 0xe3, 0xef, + 0xd2, 0x90, 0xdb, 0x2f, 0xb1, 0xfb, 0x78, 0x46, 0x63, 0x15, 0x62, 0x59, 0x1d, 0x6d, 0x99, 0xe2, + 0xac, 0x34, 0x3a, 0x36, 0xf3, 0xb6, 0x7c, 0x37, 0xa4, 0xfa, 0x17, 0x16, 0xb0, 0x59, 0xd8, 0xff, + 0x68, 0xf9, 0xd5, 0xef, 0x13, 0x13, 0x94, 0x11, 0x37, 0xed, 0x23, 0x27, 0x13, 0xdc, 0xd2, 0xbf, + 0x32, 0x41, 0xa9, 0xb8, 0xe9, 0xdf, 0x39, 0x85, 0xdf, 0xa9, 0x71, 0xeb, 0xf3, 0xa1, 0x09, 0x4a, + 0xb2, 0xce, 0x3a, 0x2d, 0xa4, 0x1d, 0x36, 0xa3, 0x85, 0xfd, 0xd6, 0x34, 0x36, 0xed, 0x45, 0x61, + 0x84, 0x50, 0xf4, 0x65, 0x71, 0x3d, 0xc5, 0x9a, 0x2b, 0x4e, 0x4c, 0x7e, 0x00, 0x66, 0xee, 0x04, + 0xf4, 0x7a, 0xa5, 0x5a, 0x93, 0xfe, 0xd1, 0x78, 0xdb, 0x9e, 0x5e, 0xbc, 0x72, 0xc8, 0xa6, 0x73, + 0x49, 0xa7, 0xc1, 0xf0, 0xb1, 0x7c, 0xdc, 0x7a, 0x01, 0xad, 0xef, 0xb8, 0xdd, 0x40, 0x45, 0x6a, + 0xd0, 0xc7, 0x2d, 0x56, 0x95, 0xb5, 0x0a, 0xb3, 0x09, 0x36, 0x64, 0x1a, 0x80, 0x01, 0xeb, 0x77, + 0xd6, 0x6b, 0x2b, 0x9b, 0xc5, 0x67, 0x48, 0x11, 0x26, 0xf1, 0xf7, 0xca, 0x7a, 0x69, 0x69, 0x6d, + 0x65, 0xb9, 0x98, 0x21, 0xb3, 0x30, 0x85, 0x90, 0xe5, 0x4a, 0x8d, 0x83, 0xb2, 0x3c, 0x78, 0xa0, + 0x5d, 0xe4, 0x4b, 0x37, 0x64, 0x0b, 0x00, 0xcf, 0x14, 0xeb, 0xef, 0x64, 0xe1, 0x94, 0x3c, 0x56, + 0x68, 0xf8, 0xc0, 0xf3, 0xef, 0xb9, 0x9d, 0xdd, 0xa7, 0xfc, 0x74, 0xb8, 0x6e, 0x9c, 0x0e, 0x2f, + 0xc6, 0x4e, 0xea, 0xd8, 0x57, 0x0e, 0x38, 0x22, 0xfe, 0x87, 0x3c, 0x9c, 0x19, 0x48, 0x45, 0x3e, + 0x60, 0xa7, 0xb9, 0x4b, 0x3b, 0x61, 0xa5, 0xd9, 0xa2, 0x9b, 0x6e, 0x9b, 0x7a, 0xbd, 0x50, 0xd8, + 0x0b, 0x9e, 0xc3, 0x0b, 0x2e, 0x16, 0xd6, 0xdd, 0x66, 0x8b, 0xd6, 0x43, 0x5e, 0x6c, 0x4c, 0xb7, + 0x24, 0x35, 0x63, 0xa9, 0xa2, 0x5a, 0x57, 0x3a, 0x21, 0xf5, 0xef, 0xa3, 0x65, 0x82, 0x62, 0x79, + 0x8f, 0xd2, 0x6e, 0xdd, 0x61, 0xa5, 0x75, 0x57, 0x14, 0x9b, 0x2c, 0x13, 0xd4, 0xe4, 0xba, 0xc6, + 0xb2, 0xcc, 0xc4, 0xe1, 0xdb, 0xce, 0x43, 0xf1, 0x54, 0x2a, 0xa2, 0xcc, 0x28, 0x96, 0xdc, 0x57, + 0xa4, 0xed, 0x3c, 0xb4, 0x93, 0x24, 0xe4, 0xcb, 0x70, 0x5c, 0x1c, 0x40, 0xc2, 0x29, 0x50, 0x7e, + 0x31, 0x77, 0x39, 0x7c, 0xf9, 0xd1, 0xc1, 0xc2, 0x49, 0x19, 0x53, 0x47, 0xba, 0x81, 0xa6, 0x7d, + 0x75, 0x3a, 0x17, 0xb2, 0xc9, 0x0e, 0xe4, 0x58, 0x77, 0xdc, 0xa6, 0x41, 0xe0, 0xec, 0xca, 0x67, + 0x55, 0x6e, 0x1d, 0xad, 0x75, 0x66, 0xbd, 0xcd, 0xcb, 0xed, 0xbe, 0x94, 0x64, 0x15, 0xa6, 0xb7, + 0xe8, 0xb6, 0x3e, 0x3e, 0x63, 0x6a, 0xab, 0x2a, 0x3e, 0xa0, 0xdb, 0xfd, 0x07, 0x27, 0x46, 0x47, + 0x5c, 0x54, 0x98, 0x3d, 0xdc, 0x5f, 0x73, 0x83, 0x90, 0x76, 0xa8, 0x8f, 0x4e, 0xe1, 0xe3, 0xb8, + 0x19, 0xcc, 0x47, 0x12, 0xb2, 0x59, 0xbe, 0xf4, 0xc2, 0xa3, 0x83, 0x85, 0x33, 0xdc, 0x1b, 0xa0, + 0x25, 0xe0, 0xf5, 0x58, 0x20, 0xe8, 0x24, 0x57, 0xf2, 0x55, 0x98, 0xb1, 0xbd, 0x5e, 0xe8, 0x76, + 0x76, 0x6b, 0xa1, 0xef, 0x84, 0x74, 0x97, 0x1f, 0x48, 0x91, 0xf7, 0x79, 0xac, 0x54, 0xbc, 0xb5, + 0x70, 0x60, 0x3d, 0x10, 0x50, 0xe3, 0x44, 0x30, 0x09, 0xc8, 0x57, 0x60, 0x9a, 0xfb, 0x74, 0xa9, + 0x0a, 0x26, 0x8c, 0x20, 0x96, 0x66, 0xe1, 0xdd, 0x2b, 0xfc, 0x82, 0xca, 0x7d, 0xc3, 0xd2, 0x2a, + 0x88, 0x71, 0x23, 0x1f, 0x89, 0xce, 0xaa, 0xba, 0x9d, 0x5d, 0x35, 0x8d, 0x01, 0x7b, 0xfe, 0xf5, + 0xa8, 0x4b, 0xba, 0xac, 0xb9, 0x72, 0x1a, 0xf7, 0x79, 0xa6, 0x4f, 0xf2, 0x21, 0x21, 0x9c, 0x29, + 0x05, 0x81, 0x1b, 0x84, 0xc2, 0xaa, 0x76, 0xe5, 0x21, 0x6d, 0xf4, 0x18, 0xf2, 0x96, 0xe7, 0xdf, + 0xa3, 0x3e, 0xb7, 0xeb, 0x1a, 0x5d, 0xba, 0xf4, 0xe8, 0x60, 0xe1, 0x15, 0x07, 0x11, 0xeb, 0xc2, + 0x10, 0xb7, 0x4e, 0x25, 0x6a, 0xfd, 0x01, 0xc7, 0xd5, 0xbe, 0x61, 0x30, 0x53, 0xf2, 0x15, 0x38, + 0x51, 0x76, 0x02, 0x5a, 0xe9, 0x04, 0xb4, 0x13, 0xb8, 0xa1, 0x7b, 0x9f, 0x8a, 0x4e, 0xc5, 0xc3, + 0x2f, 0x8f, 0x21, 0xb3, 0xad, 0x06, 0x46, 0xd7, 0x8f, 0x50, 0xea, 0x62, 0x50, 0xb4, 0x6a, 0xfa, + 0x70, 0xb1, 0x0e, 0x32, 0x50, 0x8c, 0x77, 0x3b, 0xf9, 0x22, 0x4c, 0xf0, 0xf7, 0x68, 0x1a, 0xec, + 0x09, 0x07, 0x25, 0xf9, 0x00, 0xab, 0xe0, 0x26, 0x91, 0xb0, 0x47, 0xe7, 0xaf, 0xdd, 0x54, 0xb7, + 0xc8, 0x42, 0x7b, 0x74, 0x49, 0x44, 0x9a, 0x30, 0xc9, 0x7b, 0x96, 0x62, 0x98, 0x08, 0x61, 0x96, + 0xf4, 0x82, 0x3e, 0x93, 0x45, 0x51, 0x8c, 0x3f, 0xaa, 0xbc, 0xc5, 0xf8, 0x71, 0x04, 0xa3, 0x0a, + 0x83, 0xeb, 0x12, 0x40, 0x5e, 0x12, 0x5a, 0xa7, 0xe0, 0x64, 0x9f, 0x36, 0x5b, 0xf7, 0xf1, 0x19, + 0xac, 0x4f, 0x8d, 0xe4, 0x8b, 0x30, 0x87, 0x84, 0x65, 0xaf, 0xd3, 0xa1, 0x8d, 0x10, 0xb7, 0x0e, + 0xa9, 0x3a, 0xca, 0xf1, 0xb7, 0x56, 0xfe, 0xbd, 0x0d, 0x85, 0x50, 0x8f, 0x6b, 0x90, 0x52, 0x39, + 0x58, 0x3f, 0x9b, 0x85, 0x79, 0xb1, 0x1b, 0xd9, 0xb4, 0xe1, 0xf9, 0xcd, 0xa7, 0xff, 0xf4, 0x5b, + 0x31, 0x4e, 0xbf, 0x73, 0xca, 0xff, 0x34, 0xed, 0x23, 0x07, 0x1c, 0x7e, 0xbf, 0x9a, 0x81, 0xe7, + 0x06, 0x11, 0xb1, 0xde, 0x51, 0x61, 0x31, 0x26, 0x12, 0xe1, 0x2f, 0xba, 0x70, 0x0c, 0x07, 0xb4, + 0xbc, 0x47, 0x1b, 0xf7, 0x82, 0x55, 0x2f, 0x08, 0xd1, 0x2a, 0x32, 0xdb, 0xe7, 0xa1, 0xe6, 0xb5, + 0xd4, 0x87, 0x9a, 0x13, 0x7c, 0x96, 0x35, 0x90, 0x07, 0x0f, 0xdc, 0x71, 0x8f, 0xee, 0x07, 0x76, + 0x1a, 0x6b, 0xb4, 0x70, 0x2b, 0xf5, 0xc2, 0xbd, 0xaa, 0x4f, 0x77, 0xa8, 0x4f, 0x3b, 0x0d, 0xfa, + 0x3d, 0x66, 0xe1, 0x66, 0x7e, 0xdc, 0x50, 0xda, 0x86, 0x5f, 0x9d, 0x84, 0xb9, 0x34, 0x32, 0xd6, + 0x2f, 0xda, 0x05, 0x37, 0x9e, 0x88, 0xe3, 0xaf, 0x66, 0x60, 0xb2, 0x46, 0x1b, 0x5e, 0xa7, 0x79, + 0x1d, 0x9f, 0xc3, 0x45, 0xef, 0xd4, 0xf9, 0x01, 0xcf, 0xe0, 0xf5, 0x9d, 0xd8, 0x3b, 0xf9, 0x77, + 0x0f, 0x16, 0xbe, 0x30, 0xdc, 0xbd, 0xb2, 0xe1, 0xa1, 0x57, 0x69, 0x88, 0xd1, 0x21, 0x55, 0x15, + 0xa8, 0xd9, 0x36, 0x2a, 0x25, 0x4b, 0x30, 0x25, 0x96, 0xab, 0xa7, 0x47, 0x45, 0xe1, 0x2e, 0xba, + 0xb2, 0x20, 0x11, 0x06, 0xca, 0x20, 0x21, 0x57, 0x21, 0x77, 0x67, 0xf1, 0xba, 0x18, 0x03, 0x19, + 0x5f, 0xf3, 0xce, 0xe2, 0x75, 0x54, 0x5d, 0xb1, 0xeb, 0xc0, 0x54, 0x6f, 0xd1, 0x78, 0xa1, 0xbe, + 0xb3, 0x78, 0x9d, 0xfc, 0x20, 0x1c, 0x5f, 0x76, 0x03, 0x51, 0x05, 0xb7, 0xb5, 0x6c, 0xa2, 0x6f, + 0xc1, 0x58, 0x9f, 0xd9, 0xfb, 0xb9, 0xd4, 0xd9, 0xfb, 0x42, 0x53, 0x31, 0xa9, 0x73, 0x43, 0xce, + 0x66, 0x3c, 0xfa, 0x4b, 0x7a, 0x3d, 0xe4, 0x63, 0x98, 0x46, 0xd5, 0x2b, 0x9a, 0x9f, 0x62, 0xb4, + 0xba, 0xf1, 0x3e, 0x35, 0x7f, 0x26, 0xb5, 0xe6, 0xd3, 0xa8, 0xc9, 0xad, 0xa3, 0x11, 0x2b, 0x46, + 0xb6, 0x33, 0x6e, 0xe8, 0x06, 0x67, 0x72, 0x13, 0x66, 0x84, 0xa8, 0xb4, 0xb1, 0xb3, 0xb9, 0x47, + 0x97, 0x9d, 0x7d, 0xf1, 0xb8, 0x8c, 0xb7, 0x2f, 0x21, 0x5f, 0xd5, 0xbd, 0x9d, 0x7a, 0xb8, 0x47, + 0xeb, 0x4d, 0xc7, 0x10, 0x2a, 0x62, 0x84, 0xe4, 0xfb, 0xa1, 0xb0, 0xe6, 0x35, 0x98, 0x94, 0x8c, + 0x3b, 0x03, 0x7f, 0x6f, 0xfe, 0x10, 0xf3, 0x3b, 0x70, 0x70, 0x4c, 0xf4, 0xf9, 0xee, 0xc1, 0xc2, + 0xdb, 0x47, 0x9d, 0x34, 0x5a, 0x05, 0xb6, 0x5e, 0x1b, 0x29, 0x43, 0x7e, 0x8b, 0x6e, 0xb3, 0xaf, + 0x8d, 0xc7, 0x7e, 0x97, 0x60, 0x61, 0x4e, 0x22, 0x7e, 0x19, 0xe6, 0x24, 0x02, 0x46, 0x7c, 0x98, + 0xc5, 0xfe, 0xa9, 0x3a, 0x41, 0xf0, 0xc0, 0xf3, 0x9b, 0x18, 0xe4, 0xb3, 0xdf, 0x53, 0xf6, 0x62, + 0x6a, 0xe7, 0x3f, 0xc7, 0x3b, 0xbf, 0xab, 0x71, 0xd0, 0x85, 0xbd, 0x04, 0x7b, 0xf2, 0x55, 0x98, + 0xb6, 0xe9, 0xd7, 0x7a, 0xae, 0x4f, 0x6f, 0x5f, 0x2f, 0xe1, 0xaa, 0x9c, 0x34, 0x3c, 0x34, 0xcc, + 0x42, 0x2e, 0x51, 0xfa, 0x1c, 0x26, 0xb5, 0x45, 0xf5, 0xf6, 0x8e, 0x63, 0xbe, 0x16, 0xe8, 0x24, + 0xa4, 0x0a, 0x85, 0x65, 0x7a, 0xdf, 0x6d, 0x50, 0xb4, 0x23, 0x17, 0x76, 0x5c, 0x2a, 0x78, 0x75, + 0x54, 0xc2, 0xf5, 0x26, 0x4d, 0x04, 0x70, 0xab, 0x74, 0x33, 0xe9, 0x8c, 0x42, 0x24, 0xd7, 0x20, + 0x57, 0x59, 0xae, 0x0a, 0x33, 0x2e, 0x69, 0x9e, 0x5d, 0x69, 0x56, 0x65, 0xa8, 0x5f, 0x34, 0xfe, + 0x70, 0x9b, 0x86, 0x11, 0x58, 0x65, 0xb9, 0x4a, 0x76, 0x60, 0x0a, 0x3b, 0x60, 0x95, 0x3a, 0xbc, + 0x6f, 0x67, 0xfa, 0xf4, 0xed, 0xa5, 0xd4, 0xbe, 0x9d, 0xe7, 0x7d, 0xbb, 0x27, 0xa8, 0x8d, 0xd8, + 0xa5, 0x3a, 0x5b, 0x26, 0x7e, 0x8a, 0x78, 0xca, 0x32, 0x7a, 0xe7, 0xe6, 0x1a, 0x3e, 0x6e, 0x0b, + 0xf1, 0x53, 0x86, 0x5f, 0x56, 0x21, 0x40, 0xfb, 0x5a, 0x89, 0x26, 0xf9, 0x90, 0xb7, 0x60, 0x64, + 0xe3, 0x5e, 0xe8, 0xcc, 0xcf, 0x1a, 0xfd, 0xc8, 0x40, 0xf2, 0xf3, 0x51, 0x63, 0xe8, 0xdd, 0x33, + 0x82, 0x07, 0x20, 0x0d, 0x59, 0x84, 0xf1, 0x6a, 0xe5, 0x6e, 0xad, 0xe5, 0x85, 0xf3, 0x44, 0xdd, + 0x69, 0x48, 0xd7, 0xbd, 0x5f, 0x0f, 0x5a, 0x9e, 0x19, 0x93, 0x5d, 0x22, 0xb2, 0xe1, 0x5b, 0x75, + 0xfc, 0xe6, 0x03, 0xc7, 0x47, 0xf7, 0x9f, 0x63, 0x46, 0xb5, 0x5a, 0x09, 0x1f, 0xbe, 0x3d, 0x01, + 0x88, 0xf9, 0x04, 0xe9, 0x2c, 0x84, 0x36, 0x60, 0x56, 0x4c, 0x13, 0xf1, 0x69, 0xb7, 0xaf, 0x97, + 0xac, 0x7f, 0x27, 0x83, 0x1b, 0x26, 0x79, 0x05, 0x3d, 0x8e, 0xd5, 0x03, 0x2f, 0xea, 0x35, 0x9d, + 0x6e, 0x2c, 0xe2, 0x1d, 0x47, 0x21, 0xaf, 0xc1, 0xd8, 0x75, 0xa7, 0x41, 0x43, 0xf9, 0xb0, 0x83, + 0xc8, 0x3b, 0x08, 0xd1, 0x95, 0xa0, 0x1c, 0x87, 0xc9, 0x72, 0x7c, 0x22, 0x95, 0xa2, 0xfc, 0x59, + 0xe5, 0x92, 0x7c, 0xd7, 0x41, 0x59, 0x4e, 0x4c, 0x40, 0x2d, 0xc1, 0x56, 0xbd, 0x61, 0x84, 0x0e, + 0x4f, 0xe5, 0x60, 0xfd, 0x69, 0x26, 0xda, 0x01, 0xc8, 0xcb, 0x30, 0x62, 0x57, 0x55, 0xfb, 0xb9, + 0x2b, 0x4c, 0xac, 0xf9, 0x88, 0x40, 0x3e, 0x82, 0xe3, 0x1a, 0x1f, 0x9c, 0x45, 0xb4, 0xc9, 0x1a, + 0xc4, 0x3f, 0xe6, 0x25, 0xf4, 0xd5, 0xd0, 0x5a, 0xe2, 0x70, 0x8c, 0x58, 0x8b, 0xd2, 0x79, 0xa0, + 0xe0, 0x1a, 0x15, 0x2c, 0xd3, 0x8e, 0xcb, 0x79, 0x6b, 0x1f, 0xab, 0xf3, 0x6e, 0x22, 0x42, 0xfc, + 0x63, 0xd3, 0x38, 0x70, 0x77, 0x0d, 0xeb, 0xb7, 0x32, 0xc6, 0xca, 0x56, 0x59, 0x87, 0x32, 0x87, + 0x64, 0x1d, 0x7a, 0x13, 0xa0, 0xd4, 0x0b, 0xbd, 0x95, 0x8e, 0xef, 0xb5, 0xb8, 0x76, 0x41, 0x04, + 0x7d, 0x44, 0x9d, 0x29, 0x45, 0xb0, 0x61, 0x55, 0xae, 0x90, 0xc9, 0x1a, 0x14, 0x57, 0x6e, 0xa1, + 0x3f, 0x4e, 0xd4, 0x55, 0xfc, 0x73, 0xf0, 0xc0, 0xa0, 0xf7, 0xd8, 0x11, 0xd7, 0xa7, 0x97, 0x12, + 0x94, 0xd6, 0xef, 0x67, 0x8c, 0xb9, 0xcd, 0x24, 0x32, 0xb9, 0x3c, 0x34, 0xd3, 0x82, 0xe4, 0xf2, + 0x88, 0x16, 0xc7, 0xdf, 0xc8, 0xc0, 0x89, 0x1a, 0xf5, 0x5d, 0xa7, 0xb5, 0xde, 0x6b, 0x6f, 0x53, + 0xff, 0xae, 0xd3, 0x72, 0x9b, 0xdc, 0x1d, 0x89, 0x0b, 0x9b, 0x17, 0x92, 0x0b, 0x25, 0x1d, 0x9f, + 0x5f, 0xe0, 0x02, 0x2c, 0xab, 0x77, 0xb0, 0xb0, 0x7e, 0x5f, 0x95, 0xea, 0x17, 0xb8, 0x74, 0x7a, + 0xeb, 0xd7, 0x32, 0xf0, 0xc2, 0xa1, 0xb5, 0x90, 0xcb, 0x30, 0x2e, 0xa3, 0x6d, 0x66, 0xb0, 0xe3, + 0xd1, 0x20, 0x2b, 0x19, 0x69, 0x53, 0x62, 0x91, 0x2f, 0xc1, 0x71, 0x9d, 0xd5, 0xa6, 0xef, 0xb8, + 0x7a, 0x4c, 0xcb, 0x94, 0x56, 0x87, 0x0c, 0x25, 0x2e, 0x19, 0xa5, 0x33, 0xb1, 0xfe, 0xf7, 0x8c, + 0x96, 0xa1, 0xec, 0x29, 0x95, 0x97, 0xaf, 0x19, 0xf2, 0xb2, 0x8c, 0xec, 0xa2, 0xbe, 0x8a, 0x95, + 0xa5, 0xde, 0x71, 0x66, 0x34, 0xc3, 0x42, 0x04, 0x7c, 0x23, 0x0b, 0x85, 0x3b, 0x01, 0xf5, 0xf9, + 0x03, 0xe7, 0xf7, 0x56, 0x4c, 0x0f, 0xf5, 0x5d, 0x43, 0x45, 0x5d, 0xf8, 0xe3, 0x0c, 0x2a, 0xbe, + 0x75, 0x0a, 0xd6, 0x1b, 0x5a, 0xee, 0x01, 0xec, 0x0d, 0xcc, 0x3a, 0x80, 0x50, 0x1e, 0x99, 0x61, + 0xcd, 0x4c, 0x43, 0x82, 0xb9, 0x68, 0xd6, 0xc8, 0x17, 0x60, 0xf4, 0x0e, 0xaa, 0xf1, 0x4c, 0xd7, + 0x53, 0xc5, 0x1f, 0x0b, 0xf9, 0x26, 0xdd, 0x63, 0x7f, 0xea, 0x67, 0x0c, 0x96, 0x91, 0x1a, 0x8c, + 0x97, 0x7d, 0x8a, 0x59, 0xc5, 0x46, 0x86, 0x77, 0x9f, 0x6a, 0x70, 0x92, 0xb8, 0xfb, 0x94, 0xe0, + 0x64, 0xfd, 0x4c, 0x16, 0x48, 0xf4, 0x8d, 0x18, 0x8e, 0x3b, 0x78, 0x6a, 0x07, 0xfd, 0x7d, 0x63, + 0xd0, 0xcf, 0x24, 0x06, 0x9d, 0x7f, 0xde, 0x50, 0x63, 0xff, 0xdb, 0x19, 0x38, 0x91, 0x4e, 0x48, + 0xce, 0xc1, 0xd8, 0xc6, 0x66, 0x55, 0x7a, 0x2f, 0x8b, 0x4f, 0xf1, 0xba, 0x78, 0x2f, 0xb7, 0x45, + 0x11, 0x79, 0x1d, 0xc6, 0x3e, 0xb0, 0xcb, 0xec, 0x1c, 0xd2, 0x42, 0x5f, 0x7e, 0xcd, 0xaf, 0x37, + 0xcc, 0xa3, 0x48, 0x20, 0xe9, 0x63, 0x9b, 0x7b, 0x62, 0x63, 0xfb, 0xcd, 0x2c, 0xcc, 0x94, 0x1a, + 0x0d, 0x1a, 0x04, 0x4c, 0xc8, 0xa1, 0x41, 0xf8, 0xd4, 0x0e, 0x6c, 0xba, 0x5f, 0xb2, 0xf1, 0x6d, + 0x43, 0x8d, 0xea, 0xef, 0x66, 0xe0, 0xb8, 0xa4, 0xba, 0xef, 0xd2, 0x07, 0x9b, 0x7b, 0x3e, 0x0d, + 0xf6, 0xbc, 0x56, 0x73, 0xe8, 0xf8, 0xba, 0x4c, 0xd0, 0xc3, 0x60, 0x7c, 0xfa, 0x6b, 0xf7, 0x0e, + 0x42, 0x0c, 0x41, 0x8f, 0x07, 0xec, 0xbb, 0x0c, 0xe3, 0xa5, 0x6e, 0xd7, 0xf7, 0xee, 0xf3, 0x65, + 0x3f, 0x25, 0xbc, 0xc9, 0x38, 0xc8, 0xf0, 0x3e, 0xe3, 0x20, 0xd6, 0x8c, 0x65, 0xda, 0xe1, 0x91, + 0x50, 0xa6, 0x78, 0x33, 0x9a, 0xb4, 0xa3, 0xcb, 0xb0, 0x58, 0x6e, 0xd5, 0x80, 0x54, 0x7d, 0xaf, + 0xed, 0x85, 0xb4, 0xc9, 0xbf, 0x07, 0x9d, 0xf6, 0x0e, 0x8d, 0x00, 0xb1, 0xe9, 0x86, 0x2d, 0x23, + 0x02, 0x44, 0xc8, 0x00, 0x36, 0x87, 0x5b, 0xff, 0xf3, 0x28, 0x4c, 0xea, 0xbd, 0x43, 0x2c, 0x1e, + 0x8c, 0xd3, 0xf3, 0x75, 0xcf, 0x51, 0x07, 0x21, 0xb6, 0x28, 0x89, 0x1c, 0xae, 0xb3, 0x87, 0x3a, + 0x5c, 0x6f, 0xc1, 0x54, 0xd5, 0xf7, 0xba, 0x5e, 0x40, 0x9b, 0x3c, 0xdb, 0x24, 0xdf, 0x0a, 0x8f, + 0x69, 0x77, 0x3c, 0x36, 0x90, 0xf8, 0x4e, 0x88, 0x1a, 0x8e, 0xae, 0xc0, 0xae, 0xc7, 0x73, 0x51, + 0x9a, 0x7c, 0xb8, 0x09, 0x82, 0x13, 0x88, 0x80, 0x47, 0xca, 0x04, 0x81, 0x41, 0x4c, 0x13, 0x04, + 0x06, 0xd1, 0xd7, 0xda, 0xe8, 0x93, 0x5a, 0x6b, 0xe4, 0x67, 0x32, 0x50, 0x28, 0x75, 0x3a, 0xc2, + 0x91, 0xfb, 0x10, 0x4f, 0xb6, 0x2f, 0x09, 0x2b, 0x84, 0xb7, 0x3f, 0x91, 0x15, 0x02, 0xca, 0x2d, + 0x01, 0x4a, 0xaa, 0x51, 0x85, 0xfa, 0x2d, 0x47, 0x6b, 0x07, 0x79, 0x1b, 0x8a, 0x6a, 0x92, 0x57, + 0x3a, 0x4d, 0xfa, 0x90, 0x06, 0xf3, 0xe3, 0x67, 0x73, 0x17, 0xa6, 0x44, 0xa8, 0x33, 0x5d, 0x32, + 0x8d, 0x23, 0x92, 0x4d, 0x00, 0x47, 0xcd, 0xae, 0x58, 0x9e, 0x8f, 0xe4, 0xf4, 0x13, 0xd2, 0x33, + 0xfe, 0xc6, 0x87, 0x1e, 0x5d, 0x7a, 0x8e, 0xf8, 0x90, 0x36, 0xcc, 0xf0, 0x24, 0x1b, 0x98, 0x7c, + 0x13, 0x43, 0x7f, 0xc2, 0xa1, 0xe3, 0xf0, 0xb2, 0xd0, 0x55, 0x3d, 0x2b, 0x52, 0x77, 0x60, 0x3e, + 0xcf, 0x7a, 0x4a, 0x1c, 0xd0, 0x38, 0x6f, 0x1e, 0x4c, 0xce, 0x3e, 0x99, 0x6c, 0x2f, 0x9f, 0xf4, + 0xdf, 0xcc, 0xc0, 0x09, 0x7d, 0xd2, 0xd7, 0x7a, 0xdb, 0x6d, 0x17, 0xef, 0x82, 0xe4, 0x12, 0x4c, + 0x88, 0x39, 0xa9, 0x2e, 0x51, 0xc9, 0x08, 0xa6, 0x11, 0x0a, 0x59, 0x61, 0xd3, 0x90, 0xf1, 0x10, + 0x52, 0xf7, 0xb1, 0xd8, 0x3e, 0xc5, 0x8a, 0xa2, 0x04, 0x4e, 0x3e, 0xfe, 0x36, 0xe7, 0x27, 0x83, + 0x58, 0xef, 0xc1, 0xac, 0x39, 0x12, 0x35, 0x1a, 0x92, 0x8b, 0x30, 0x2e, 0x87, 0x2f, 0x93, 0x3e, + 0x7c, 0xb2, 0xdc, 0xda, 0x02, 0x92, 0xa0, 0x0f, 0xd0, 0x5c, 0x88, 0x86, 0xd2, 0x9c, 0x4d, 0x3e, + 0xd6, 0x25, 0x10, 0x55, 0x72, 0xe3, 0x82, 0x61, 0xbf, 0xca, 0x48, 0xad, 0x3f, 0x9d, 0x86, 0x63, + 0x29, 0x7b, 0xee, 0x21, 0x32, 0xd1, 0x82, 0xb9, 0x41, 0x4c, 0x28, 0x47, 0x58, 0xb9, 0x2d, 0xbc, + 0x27, 0x93, 0xcf, 0x0e, 0xd8, 0x0e, 0x06, 0x65, 0xa4, 0xfd, 0x34, 0xe4, 0x22, 0xdd, 0x57, 0x7d, + 0xf4, 0x89, 0xf9, 0xaa, 0x2f, 0xc1, 0x94, 0xf8, 0x2a, 0xb1, 0x5d, 0x8d, 0x45, 0xda, 0x5c, 0x9f, + 0x17, 0xd4, 0x13, 0xdb, 0x96, 0x49, 0xc2, 0x79, 0x04, 0x5e, 0xeb, 0x3e, 0x15, 0x3c, 0xc6, 0x75, + 0x1e, 0x58, 0x90, 0xca, 0x43, 0x23, 0x21, 0xff, 0x26, 0xe6, 0x1c, 0x40, 0x88, 0xbe, 0x67, 0xe5, + 0x07, 0xed, 0x59, 0xcd, 0x27, 0xb3, 0x67, 0x9d, 0x91, 0x6d, 0x4c, 0xdf, 0xbb, 0x52, 0x9a, 0x45, + 0x7e, 0x31, 0x03, 0xb3, 0xdc, 0x61, 0x5a, 0x6f, 0xec, 0x40, 0x27, 0xd8, 0xc6, 0x93, 0x69, 0xec, + 0x73, 0x01, 0x56, 0xdb, 0xa7, 0xad, 0xc9, 0x46, 0x91, 0xef, 0x03, 0x50, 0x2b, 0x2a, 0x98, 0x07, + 0x5c, 0x6a, 0xcf, 0xa5, 0xec, 0x02, 0x0a, 0x29, 0x8a, 0x7b, 0x1a, 0x2a, 0x3a, 0x23, 0xd3, 0x84, + 0x82, 0x92, 0x1f, 0x84, 0x39, 0xb6, 0x5e, 0x14, 0x44, 0x84, 0x77, 0x98, 0x2f, 0x60, 0x2d, 0x9f, + 0xed, 0x2f, 0x13, 0x5d, 0x4a, 0x23, 0xe3, 0x71, 0xdb, 0xa2, 0x0c, 0x5b, 0x61, 0x5b, 0x57, 0xb7, + 0xa4, 0x51, 0x60, 0xbc, 0x14, 0x6c, 0x3d, 0x8f, 0x4d, 0xda, 0x67, 0x7f, 0x3b, 0x25, 0xd7, 0x02, + 0xdf, 0xdf, 0x02, 0xd3, 0x99, 0x0d, 0x41, 0xe4, 0x03, 0x20, 0xca, 0xd3, 0x98, 0xc3, 0xa8, 0x8c, + 0x5b, 0xca, 0x55, 0xbb, 0x91, 0xc7, 0xb2, 0x2f, 0x8b, 0xf5, 0x49, 0x92, 0x24, 0x26, 0x14, 0xe6, + 0xc4, 0x47, 0x33, 0xa8, 0xcc, 0x69, 0x10, 0xcc, 0x4f, 0x1b, 0xc1, 0x33, 0xa2, 0x92, 0x28, 0x15, + 0x97, 0x96, 0x18, 0xc1, 0x50, 0x39, 0xa5, 0xb1, 0x23, 0xd7, 0x60, 0x02, 0x3d, 0xca, 0x56, 0xa5, + 0x11, 0x94, 0x30, 0xc8, 0x40, 0xdf, 0xb3, 0xfa, 0x9e, 0x69, 0xca, 0x14, 0xa1, 0xb2, 0xeb, 0xc0, + 0xb2, 0xbf, 0x6f, 0xf7, 0x3a, 0xa8, 0x80, 0x15, 0xfa, 0x8e, 0xa6, 0xbf, 0x5f, 0xf7, 0x7b, 0xa6, + 0xcb, 0x21, 0x22, 0x91, 0xaf, 0x42, 0xe1, 0xb6, 0xf3, 0x50, 0xea, 0x5f, 0x85, 0x92, 0x75, 0xa8, + 0x24, 0xd2, 0x6d, 0xe7, 0x61, 0xbd, 0xd9, 0x8b, 0x07, 0x0c, 0xe5, 0x49, 0xa4, 0x35, 0x96, 0xe4, + 0xcb, 0x00, 0x9a, 0x56, 0x98, 0x1c, 0x5a, 0xc1, 0x0b, 0x32, 0x1c, 0x4c, 0xaa, 0xb6, 0x18, 0xf9, + 0x6b, 0x0c, 0x63, 0x92, 0xc3, 0xdc, 0xa7, 0x27, 0x39, 0x1c, 0xff, 0xf4, 0x24, 0x87, 0xd3, 0xdb, + 0x70, 0xaa, 0xef, 0xd2, 0x49, 0x89, 0xd0, 0x77, 0xd9, 0x8c, 0xd0, 0x77, 0xaa, 0xdf, 0x11, 0x1b, + 0x98, 0xa1, 0x6e, 0x8f, 0x15, 0xe7, 0xfa, 0x4b, 0x27, 0x3f, 0x97, 0x89, 0x1d, 0xb9, 0xe2, 0x62, + 0xc1, 0xa3, 0xaa, 0xf7, 0x93, 0x49, 0xb2, 0x98, 0xe6, 0x89, 0x1f, 0xca, 0xd9, 0xe8, 0x42, 0x13, + 0xcb, 0x66, 0xc9, 0x8f, 0xe7, 0xc7, 0x3c, 0x7d, 0xad, 0x3f, 0xca, 0x01, 0xe1, 0x2d, 0x2c, 0x3b, + 0x5d, 0x07, 0xfd, 0xe0, 0x5c, 0x74, 0xe6, 0x2f, 0x0a, 0x16, 0xce, 0x76, 0x8b, 0xea, 0x91, 0x30, + 0x84, 0xe5, 0xa6, 0x2a, 0xab, 0xc7, 0x6f, 0x0b, 0x09, 0xc2, 0x3e, 0xfb, 0x45, 0xf6, 0x71, 0xf6, + 0x8b, 0xaf, 0xc2, 0xb3, 0xa5, 0x2e, 0xa6, 0x5b, 0x92, 0xb5, 0x5c, 0xf7, 0x7c, 0xb9, 0xd2, 0x0d, + 0x0f, 0x0b, 0x47, 0xa1, 0x25, 0x5a, 0x3a, 0x88, 0x85, 0x76, 0xd8, 0xb3, 0xc1, 0xed, 0x86, 0xba, + 0xc7, 0xae, 0x3c, 0xec, 0xbb, 0x58, 0x92, 0x72, 0xd8, 0x73, 0x12, 0xc9, 0xc3, 0xf5, 0xe5, 0x61, + 0x8f, 0x21, 0xd6, 0x23, 0x1e, 0xae, 0x4f, 0xfb, 0x08, 0x0c, 0x8a, 0x84, 0xbc, 0x03, 0x85, 0x52, + 0x2f, 0xf4, 0x04, 0x63, 0x61, 0x72, 0x1c, 0x19, 0x07, 0x8b, 0xa6, 0x18, 0xf7, 0x87, 0x08, 0xdd, + 0xfa, 0x8d, 0x2c, 0x9c, 0x4a, 0x0e, 0xaf, 0x28, 0x55, 0x93, 0x2c, 0x73, 0xc8, 0x24, 0x4b, 0x9b, + 0x0d, 0x5c, 0xe3, 0xfe, 0xc4, 0x66, 0x03, 0xcf, 0xda, 0xf4, 0x09, 0x67, 0x43, 0x0d, 0x0a, 0xfa, + 0xa1, 0x31, 0xf2, 0x49, 0x0f, 0x0d, 0x9d, 0x0b, 0xe6, 0x3f, 0xd2, 0xd2, 0xeb, 0xbc, 0x9e, 0xe6, + 0xe0, 0xc0, 0x03, 0x24, 0x72, 0xb0, 0xe9, 0xdb, 0x20, 0x15, 0x35, 0xd9, 0x54, 0x45, 0x8d, 0xbc, + 0xe9, 0xe7, 0x52, 0x6f, 0xfa, 0xcb, 0x30, 0x53, 0xeb, 0x6d, 0xcb, 0xba, 0x11, 0x71, 0xc4, 0xf0, + 0xd1, 0xaa, 0xcb, 0xf6, 0x9b, 0x01, 0x53, 0x0c, 0x12, 0xeb, 0xc7, 0xb2, 0x30, 0x59, 0x6d, 0xf5, + 0x76, 0xdd, 0xce, 0xb2, 0x13, 0x3a, 0x4f, 0xad, 0xee, 0xe8, 0x4d, 0x43, 0x77, 0xa4, 0xfc, 0x78, + 0xd4, 0x87, 0x0d, 0xa5, 0x38, 0xfa, 0x56, 0x06, 0x66, 0x22, 0x12, 0x7e, 0x02, 0xac, 0xc2, 0x08, + 0xfb, 0x21, 0x6e, 0x54, 0x67, 0x13, 0x8c, 0x79, 0xae, 0x08, 0xf5, 0x97, 0xd0, 0xe6, 0x98, 0xd1, + 0xd4, 0x91, 0xc3, 0xe9, 0xcf, 0xf1, 0xa4, 0xe3, 0x47, 0xcf, 0x11, 0xf1, 0xeb, 0x19, 0x28, 0xc6, + 0xbf, 0x84, 0xdc, 0x82, 0x71, 0xc6, 0xc9, 0x55, 0x09, 0xcc, 0x5f, 0xec, 0xf3, 0xcd, 0x97, 0x04, + 0x1a, 0x6f, 0x1e, 0x76, 0x3e, 0xe5, 0x10, 0x5b, 0x72, 0x38, 0x6d, 0xc3, 0xa4, 0x8e, 0x95, 0xd2, + 0xba, 0xd7, 0xcc, 0x63, 0xef, 0x44, 0x7a, 0x3f, 0x18, 0x99, 0x2d, 0x8c, 0x56, 0x8b, 0x13, 0xed, + 0xbc, 0x31, 0xb9, 0xb0, 0xaf, 0x62, 0xf3, 0x86, 0x4f, 0xb3, 0xc5, 0x28, 0x66, 0xab, 0x3e, 0xcf, + 0x52, 0x26, 0xb4, 0xc2, 0x23, 0xaf, 0xc1, 0x18, 0xaf, 0x4f, 0x0f, 0xdc, 0xde, 0x45, 0x88, 0x2e, + 0x7c, 0x71, 0x1c, 0xeb, 0xef, 0xe5, 0xe0, 0x44, 0xd4, 0xbc, 0x3b, 0xdd, 0xa6, 0x13, 0xd2, 0xaa, + 0xe3, 0x3b, 0xed, 0xe0, 0x90, 0x15, 0x70, 0x21, 0xd1, 0x34, 0x0c, 0xe4, 0x2d, 0x9b, 0xa6, 0x35, + 0xc8, 0x8a, 0x35, 0x08, 0x15, 0x6b, 0xbc, 0x41, 0xb2, 0x19, 0xe4, 0x16, 0xe4, 0x6a, 0x34, 0x14, + 0x7b, 0xd1, 0xf9, 0x44, 0xaf, 0xea, 0xed, 0xba, 0x54, 0xa3, 0x21, 0x1f, 0x44, 0x1e, 0x95, 0x82, + 0x1a, 0x21, 0xe1, 0x6a, 0x34, 0x24, 0x5b, 0x30, 0xb6, 0xf2, 0xb0, 0x4b, 0x1b, 0xa1, 0xc8, 0x70, + 0x72, 0x71, 0x30, 0x3f, 0x8e, 0xab, 0x25, 0x38, 0xa1, 0x08, 0xd0, 0x3b, 0x8b, 0xa3, 0x9c, 0xbe, + 0x06, 0x79, 0x59, 0xf9, 0x51, 0x66, 0xee, 0xe9, 0x37, 0xa1, 0xa0, 0x55, 0x72, 0xa4, 0x49, 0xff, + 0xe7, 0x19, 0x18, 0x63, 0x27, 0xc1, 0xdd, 0x6b, 0x4f, 0xe9, 0x8e, 0x74, 0xd5, 0xd8, 0x91, 0x66, + 0xb5, 0xa8, 0x93, 0xb8, 0x2e, 0xaf, 0x1d, 0xb2, 0x17, 0x1d, 0xb0, 0x73, 0x45, 0x21, 0x93, 0x1b, + 0x30, 0x2e, 0x4c, 0x2e, 0x84, 0x6d, 0xac, 0x1e, 0xc6, 0x52, 0x1a, 0x63, 0xa8, 0x5b, 0x99, 0xd7, + 0x8d, 0x5f, 0x63, 0x25, 0x35, 0x59, 0x8e, 0x42, 0x90, 0x19, 0x99, 0xaa, 0x3c, 0x74, 0x3c, 0xe2, + 0x61, 0x18, 0xb5, 0x1c, 0x70, 0x7d, 0x3c, 0xba, 0x4b, 0x42, 0x83, 0x9d, 0x1b, 0xc4, 0xe4, 0x84, + 0x4c, 0xe4, 0x93, 0xaa, 0xdc, 0xfe, 0x17, 0xc7, 0x78, 0x00, 0x43, 0xd9, 0xb0, 0x77, 0x61, 0xf2, + 0xba, 0xe7, 0x3f, 0x70, 0x7c, 0x1e, 0x96, 0x4a, 0x3c, 0x19, 0xb3, 0x3b, 0xc3, 0xd4, 0x0e, 0x87, + 0xf3, 0xc0, 0x56, 0xdf, 0x3d, 0x58, 0x18, 0x59, 0xf2, 0xbc, 0x96, 0x6d, 0xa0, 0x93, 0x0d, 0x98, + 0xba, 0xed, 0x3c, 0xd4, 0x6e, 0x3b, 0xdc, 0x93, 0xe0, 0xe2, 0xa3, 0x83, 0x85, 0x53, 0xec, 0xba, + 0x74, 0xb8, 0xfd, 0x8b, 0x49, 0x4f, 0x5c, 0x98, 0xae, 0x7a, 0x7e, 0x28, 0x2a, 0x61, 0x77, 0xf0, + 0x5c, 0x1f, 0x0b, 0x9e, 0xcb, 0xa9, 0x16, 0x3c, 0xa7, 0xba, 0x9e, 0x1f, 0xd6, 0x77, 0x14, 0xb9, + 0x11, 0x2d, 0xc5, 0x60, 0x4c, 0xde, 0x85, 0xd9, 0x32, 0xf5, 0x43, 0x77, 0xc7, 0x6d, 0x38, 0x21, + 0xbd, 0xee, 0xf9, 0x6d, 0x47, 0x0a, 0x92, 0xa8, 0x00, 0x44, 0x43, 0x83, 0x1d, 0x04, 0xdb, 0x49, + 0x4c, 0xf2, 0x51, 0x9a, 0x6f, 0xc6, 0x68, 0x64, 0x02, 0x94, 0xe2, 0x9b, 0xd1, 0xcf, 0x04, 0x28, + 0xe9, 0xa5, 0xb1, 0x3b, 0xc8, 0x44, 0x30, 0xbf, 0x74, 0x45, 0xdc, 0xbb, 0x0e, 0x37, 0x01, 0x54, + 0xe3, 0xd6, 0xc7, 0x14, 0x70, 0x11, 0x72, 0x4b, 0xd5, 0xeb, 0xa8, 0xb6, 0x96, 0x16, 0x16, 0x9d, + 0x3d, 0xa7, 0xd3, 0x40, 0x01, 0x4f, 0x98, 0xe5, 0xea, 0x1b, 0xde, 0x52, 0xf5, 0x3a, 0x71, 0xe0, + 0x58, 0x95, 0xfa, 0x6d, 0x37, 0xfc, 0xe2, 0x95, 0x2b, 0xda, 0x40, 0xe5, 0xb1, 0x69, 0x97, 0x45, + 0xd3, 0x16, 0xba, 0x88, 0x52, 0x7f, 0x78, 0xe5, 0x4a, 0xea, 0x70, 0xa8, 0x86, 0xa5, 0xf1, 0x22, + 0x2b, 0x30, 0x7d, 0xdb, 0x79, 0x18, 0x59, 0x53, 0x07, 0xc2, 0xcb, 0xed, 0x8c, 0x9c, 0x58, 0x91, + 0x25, 0xb6, 0xe1, 0xc6, 0x6e, 0x12, 0x31, 0xf9, 0x3c, 0x9a, 0x5e, 0x81, 0xf0, 0x0f, 0x38, 0x2d, + 0xef, 0xf2, 0xd2, 0x15, 0x52, 0x17, 0x32, 0x35, 0x74, 0x72, 0x47, 0xdd, 0x32, 0xb8, 0x94, 0x2e, + 0x72, 0xcd, 0x5c, 0xd6, 0x6f, 0x19, 0xfc, 0x06, 0x6d, 0x7c, 0xd6, 0x8c, 0xba, 0xdf, 0x71, 0xf3, + 0x72, 0xdb, 0xe4, 0x92, 0xbc, 0xbc, 0x4c, 0x1e, 0xfd, 0xf2, 0x42, 0x61, 0x64, 0xcd, 0x6b, 0xdc, + 0x13, 0x21, 0x5e, 0x3e, 0x60, 0xcb, 0xbd, 0xe5, 0x35, 0xee, 0x3d, 0x39, 0xd3, 0x47, 0x64, 0x4f, + 0xd6, 0x59, 0x53, 0xd9, 0x2c, 0x10, 0x7d, 0x22, 0xcc, 0xe9, 0xe6, 0x94, 0xf4, 0xae, 0x95, 0x71, + 0xb9, 0x82, 0x4f, 0x1a, 0xd9, 0xb5, 0xb6, 0x49, 0x4e, 0x28, 0x14, 0x97, 0x69, 0x70, 0x2f, 0xf4, + 0xba, 0xe5, 0x96, 0xdb, 0xdd, 0xf6, 0x1c, 0xbf, 0x89, 0x4a, 0x9b, 0xb4, 0xf5, 0xfd, 0x72, 0xea, + 0xfa, 0x9e, 0x6d, 0x72, 0xfa, 0x7a, 0x43, 0x32, 0xb0, 0x13, 0x2c, 0xc9, 0x47, 0x30, 0xcd, 0x26, + 0xf7, 0xca, 0xc3, 0x90, 0x76, 0xf8, 0xc8, 0xcf, 0xe2, 0xc9, 0x3c, 0xa7, 0x85, 0xfb, 0x55, 0x85, + 0x7c, 0x4e, 0xe1, 0x62, 0xa7, 0x8a, 0xc0, 0x08, 0x8f, 0x63, 0xb0, 0x22, 0x4d, 0x98, 0xbf, 0xed, + 0x3c, 0xd4, 0x72, 0xe6, 0x68, 0x93, 0x94, 0xe0, 0x04, 0xc3, 0xa4, 0xbf, 0x6c, 0x82, 0x45, 0x61, + 0xf9, 0xfa, 0xcc, 0xd7, 0xbe, 0x9c, 0xc8, 0xf7, 0xc3, 0x49, 0xf1, 0x59, 0xcb, 0x18, 0x03, 0xdf, + 0xf3, 0xf7, 0x6b, 0x7b, 0x0e, 0x3a, 0x52, 0x1c, 0x3b, 0xda, 0x86, 0x28, 0x3b, 0xac, 0x29, 0xf9, + 0xd4, 0x03, 0xce, 0xc8, 0xee, 0x57, 0x03, 0xf9, 0x18, 0xa6, 0xb9, 0xae, 0x7e, 0xd5, 0x0b, 0x42, + 0xbc, 0x84, 0xce, 0x1d, 0xcd, 0x3e, 0x98, 0x3f, 0x00, 0x70, 0x8b, 0xfa, 0xd8, 0xa5, 0x35, 0xc6, + 0x99, 0xbc, 0x0d, 0x85, 0xaa, 0xdb, 0xe1, 0x01, 0xac, 0x2a, 0x55, 0xd4, 0x39, 0x89, 0xf3, 0xa7, + 0xeb, 0x76, 0xea, 0xf2, 0x26, 0xd8, 0x55, 0xdb, 0x85, 0x8e, 0x4d, 0xb6, 0xa0, 0x50, 0xab, 0xad, + 0x5e, 0x77, 0xd9, 0x01, 0xd8, 0xdd, 0x9f, 0x3f, 0xd1, 0xa7, 0x95, 0xe7, 0x52, 0x5b, 0x39, 0x15, + 0x04, 0x7b, 0x98, 0x58, 0xb4, 0xde, 0xf0, 0xba, 0xfb, 0xb6, 0xce, 0x29, 0xc5, 0x66, 0xf6, 0xe4, + 0x13, 0xb6, 0x99, 0xad, 0xc0, 0x8c, 0x66, 0x59, 0x87, 0x56, 0x75, 0xf3, 0x51, 0xbc, 0x26, 0xdd, + 0x46, 0x36, 0xee, 0xcf, 0x15, 0xa7, 0x93, 0xc6, 0xb2, 0xa7, 0x8e, 0x6a, 0x2c, 0xeb, 0xc2, 0x2c, + 0x1f, 0x0c, 0x31, 0x0f, 0x70, 0xa4, 0x4f, 0xf7, 0xe9, 0xc3, 0x8b, 0xa9, 0x7d, 0x78, 0x4c, 0x8c, + 0xb4, 0x9c, 0x64, 0xf8, 0x36, 0x95, 0xe4, 0x4a, 0x76, 0x80, 0x08, 0xa0, 0x48, 0x6b, 0x8a, 0x75, + 0x3d, 0xdb, 0xa7, 0xae, 0x17, 0x53, 0xeb, 0x9a, 0x96, 0x75, 0x6d, 0xf3, 0x6a, 0x52, 0x38, 0x92, + 0x8e, 0xac, 0x47, 0xce, 0x2f, 0xec, 0xd8, 0xe7, 0x70, 0xec, 0xa4, 0xd2, 0x30, 0x89, 0x80, 0x9e, + 0x8f, 0x0b, 0xf1, 0x49, 0x1b, 0xef, 0xf7, 0x14, 0xce, 0xe4, 0x21, 0x9c, 0x48, 0xb6, 0x02, 0xeb, + 0x3c, 0x83, 0x75, 0x9e, 0x31, 0xea, 0x8c, 0x23, 0xf1, 0x79, 0x63, 0x7e, 0x56, 0xbc, 0xd6, 0x3e, + 0xfc, 0x45, 0xe2, 0xff, 0x14, 0x13, 0xdb, 0x7f, 0x96, 0x8d, 0x6d, 0xda, 0xa4, 0x02, 0xe3, 0x62, + 0x2c, 0x84, 0x14, 0x9b, 0xec, 0xf1, 0x33, 0xa9, 0x3d, 0x3e, 0x2e, 0x86, 0xd5, 0x96, 0xf4, 0xe4, + 0x01, 0x63, 0x85, 0xf6, 0xca, 0x42, 0xec, 0xff, 0x32, 0xdf, 0x93, 0x11, 0x64, 0x9c, 0x3e, 0xcb, + 0x47, 0xf7, 0xd6, 0x30, 0x9d, 0x81, 0xf0, 0x18, 0x92, 0xb5, 0x91, 0x7b, 0x3c, 0x3e, 0x78, 0x4e, + 0x99, 0xfc, 0x9b, 0xc1, 0xc0, 0x9f, 0x58, 0x85, 0xac, 0x16, 0xeb, 0xb7, 0x32, 0x30, 0x65, 0xec, + 0xfa, 0xe4, 0x9a, 0xe6, 0xcf, 0x12, 0xb9, 0x63, 0x1a, 0x38, 0xb8, 0x11, 0xc4, 0x3d, 0x5d, 0xae, + 0x09, 0x83, 0xd9, 0x6c, 0x7f, 0xba, 0xd4, 0xec, 0xbe, 0x83, 0x75, 0x50, 0x2a, 0xdf, 0xc8, 0x48, + 0x9f, 0x7c, 0x23, 0xbf, 0x74, 0x0a, 0xa6, 0xcd, 0x6b, 0x01, 0xbb, 0xa7, 0xe3, 0x93, 0x89, 0x54, + 0x15, 0xf3, 0xdc, 0x9a, 0x08, 0x31, 0x72, 0x6b, 0x22, 0x84, 0xbc, 0x04, 0xa0, 0x2c, 0x17, 0xa5, + 0x36, 0x78, 0xf4, 0xd1, 0xc1, 0x42, 0xe6, 0x75, 0x5b, 0x2b, 0x20, 0x5f, 0x01, 0x58, 0xf7, 0x9a, + 0x54, 0x25, 0x35, 0x1a, 0xf0, 0x6c, 0xf8, 0x72, 0x22, 0x76, 0xee, 0xf1, 0x8e, 0xd7, 0xa4, 0xc9, + 0x40, 0xb9, 0x1a, 0x47, 0xf2, 0x16, 0x8c, 0xda, 0xbd, 0x16, 0x95, 0x5a, 0xc3, 0x82, 0xdc, 0x7d, + 0x7b, 0x2d, 0xaa, 0x25, 0xcc, 0xee, 0xc5, 0x2d, 0x62, 0x18, 0x80, 0xbc, 0xcf, 0x63, 0xea, 0x8a, + 0x28, 0x48, 0xa3, 0x91, 0x7e, 0x5c, 0x3b, 0x95, 0x13, 0x71, 0x90, 0x34, 0x12, 0xb2, 0x01, 0xe3, + 0xba, 0x62, 0x57, 0x73, 0x8c, 0xd4, 0x1f, 0x0d, 0xb4, 0x9b, 0x97, 0xc8, 0x86, 0x14, 0xd7, 0xf9, + 0x4a, 0x2e, 0xe4, 0x1d, 0x98, 0x60, 0xec, 0xd9, 0x12, 0x0e, 0x84, 0xc4, 0x8d, 0x5a, 0x70, 0xad, + 0x41, 0x6c, 0x07, 0x30, 0x62, 0x15, 0x29, 0x02, 0xf2, 0x11, 0x66, 0x0b, 0x12, 0x5d, 0x3d, 0xf0, + 0x39, 0xf9, 0x7c, 0xa2, 0xab, 0x31, 0x7d, 0x50, 0x32, 0xf3, 0xa3, 0xe2, 0x47, 0x76, 0x55, 0x0c, + 0x9d, 0x61, 0xe2, 0x20, 0xbf, 0x92, 0xa8, 0x60, 0x5e, 0x86, 0x85, 0x49, 0x26, 0xa7, 0x32, 0xf8, + 0x92, 0x2e, 0x14, 0x23, 0x81, 0x47, 0xd4, 0x05, 0x83, 0xea, 0x7a, 0x3d, 0x51, 0x97, 0x3e, 0x80, + 0x89, 0xea, 0x12, 0xdc, 0x49, 0x13, 0xa6, 0xe5, 0xe6, 0x29, 0xea, 0x2b, 0x0c, 0xaa, 0xef, 0xa5, + 0x44, 0x7d, 0xc7, 0x9a, 0xdb, 0xc9, 0x7a, 0x62, 0x3c, 0xc9, 0x3b, 0x30, 0x25, 0x21, 0xb8, 0x3e, + 0x44, 0x8a, 0x49, 0xd4, 0x8a, 0x34, 0xb7, 0xd1, 0x56, 0xda, 0x4c, 0xd9, 0xa5, 0x23, 0xeb, 0xd4, + 0x7c, 0x76, 0x4c, 0x19, 0xd4, 0xf1, 0x59, 0x61, 0x22, 0x93, 0x0f, 0xa1, 0x50, 0x69, 0xb3, 0x0f, + 0xf1, 0x3a, 0x4e, 0x48, 0x85, 0xd3, 0x8c, 0x7c, 0x1a, 0xd7, 0x4a, 0xb4, 0xa9, 0xca, 0xf3, 0x1f, + 0x46, 0x45, 0x46, 0xfe, 0xc3, 0x08, 0xcc, 0x3a, 0x8f, 0x6b, 0xf2, 0xc5, 0x1c, 0x96, 0x0e, 0x35, + 0x67, 0x52, 0x9e, 0xa7, 0x35, 0xf6, 0x22, 0xda, 0x18, 0x83, 0xca, 0x47, 0x90, 0x58, 0xb4, 0x31, + 0x9d, 0x27, 0x79, 0x17, 0x0a, 0x22, 0x44, 0x7c, 0xc9, 0x5e, 0x0f, 0xe6, 0x8b, 0xf8, 0xf1, 0xe8, + 0x06, 0x2c, 0xa3, 0xc9, 0xd7, 0x1d, 0x3f, 0x66, 0x87, 0x15, 0xe1, 0x93, 0x2f, 0xc2, 0xdc, 0x96, + 0xdb, 0x69, 0x7a, 0x0f, 0x02, 0x71, 0x4c, 0x89, 0x8d, 0x6e, 0x36, 0xf2, 0x82, 0x78, 0xc0, 0xcb, + 0x95, 0x9c, 0x92, 0xd8, 0xf8, 0x52, 0x39, 0x90, 0xbf, 0x92, 0xe0, 0xcc, 0x67, 0x10, 0x19, 0x34, + 0x83, 0x16, 0x13, 0x33, 0x28, 0x59, 0x7d, 0x7c, 0x3a, 0xa5, 0x56, 0x43, 0x3c, 0x20, 0xe6, 0xf9, + 0x7e, 0xd3, 0x73, 0x3b, 0xf3, 0xc7, 0x70, 0x2f, 0x7c, 0x36, 0xee, 0x78, 0x8b, 0x78, 0x3c, 0x19, + 0x3f, 0xcf, 0x4c, 0x1d, 0x97, 0x47, 0x3f, 0xf6, 0x0c, 0x95, 0x6c, 0x0a, 0x6b, 0xf2, 0x21, 0x4c, + 0xb2, 0xff, 0xd5, 0x85, 0x79, 0xce, 0x30, 0x68, 0xd2, 0x30, 0x45, 0x3d, 0x38, 0x46, 0x18, 0xc3, + 0x3e, 0xe5, 0x2e, 0x6d, 0xb0, 0x22, 0x6f, 0x02, 0x30, 0xc9, 0x49, 0x6c, 0xc7, 0xc7, 0xa3, 0xe0, + 0x6e, 0x28, 0x6f, 0x25, 0x37, 0xe2, 0x08, 0x99, 0xdd, 0xe2, 0xd9, 0xaf, 0x5a, 0xaf, 0xe9, 0xb1, + 0xb5, 0x71, 0x02, 0x69, 0xb9, 0x2f, 0x12, 0xa3, 0x0d, 0x38, 0xdc, 0xf0, 0x45, 0x8a, 0xd0, 0xc9, + 0x2a, 0xcc, 0x60, 0x10, 0xbe, 0x4a, 0x93, 0x76, 0x42, 0x7c, 0x61, 0x9b, 0x3f, 0xa9, 0xbd, 0x40, + 0xb2, 0xa2, 0xba, 0xab, 0xca, 0x74, 0x39, 0x3b, 0x46, 0x46, 0x02, 0x38, 0x16, 0xed, 0x2e, 0xd1, + 0x7b, 0xe6, 0x3c, 0x76, 0x92, 0x94, 0x2e, 0x93, 0x18, 0x7c, 0x3f, 0x66, 0x23, 0xa2, 0x6d, 0x5c, + 0x52, 0x71, 0xad, 0x57, 0x98, 0xc6, 0x9d, 0xd8, 0x40, 0x6e, 0x94, 0xab, 0xf1, 0x28, 0x75, 0xa7, + 0xf0, 0x0b, 0x70, 0x98, 0x77, 0x1b, 0x51, 0xae, 0xb6, 0x94, 0x48, 0x75, 0x29, 0xd4, 0xe4, 0xeb, + 0x70, 0x5c, 0xee, 0x20, 0xa2, 0x48, 0xcc, 0xeb, 0xd3, 0x47, 0xdc, 0x89, 0x9b, 0xdb, 0xaa, 0xea, + 0xc4, 0x94, 0x4e, 0xaf, 0x82, 0x38, 0x50, 0xc0, 0x61, 0x15, 0x35, 0x3e, 0x3b, 0xa8, 0xc6, 0x0b, + 0x89, 0x1a, 0x4f, 0xe0, 0x44, 0x49, 0x56, 0xa6, 0xf3, 0x24, 0x4b, 0x30, 0x25, 0xd6, 0x91, 0x98, + 0x6d, 0xcf, 0x61, 0x6f, 0xa1, 0x82, 0x45, 0xae, 0xc0, 0xc4, 0x84, 0x33, 0x49, 0xf4, 0x1d, 0x99, + 0x3f, 0xa9, 0x9e, 0x31, 0x76, 0xe4, 0xf8, 0x4b, 0xaa, 0x89, 0xcc, 0x76, 0xa4, 0x48, 0x8a, 0x59, + 0x79, 0xd8, 0xf5, 0x85, 0xfa, 0xe4, 0xf9, 0x28, 0x78, 0xbb, 0x26, 0xfc, 0xd4, 0xa9, 0xc2, 0xd0, + 0xb7, 0x84, 0x34, 0x0e, 0xe4, 0x0e, 0x1c, 0x53, 0xa7, 0xb6, 0xc6, 0x78, 0x01, 0x19, 0xe3, 0x35, + 0x26, 0x3a, 0xea, 0xd3, 0xf9, 0xa6, 0xd1, 0x13, 0x07, 0x4e, 0x1a, 0xe7, 0xb4, 0xc6, 0xfa, 0x2c, + 0xb2, 0xc6, 0xdc, 0x80, 0xe6, 0x21, 0x9f, 0xce, 0xbe, 0x1f, 0x1f, 0xf2, 0x31, 0x9c, 0x8e, 0x9f, + 0xcd, 0x5a, 0x2d, 0x2f, 0x60, 0x2d, 0xaf, 0x3c, 0x3a, 0x58, 0x38, 0x9f, 0x38, 0xde, 0xd3, 0x2b, + 0x1a, 0xc0, 0x8d, 0x7c, 0x05, 0xe6, 0xcd, 0xf3, 0x59, 0xab, 0xc9, 0x8a, 0x72, 0xf7, 0xab, 0x83, + 0x3d, 0xbd, 0x86, 0xbe, 0x3c, 0x48, 0x08, 0x0b, 0xa9, 0xb3, 0x5b, 0xab, 0xe6, 0x5c, 0xf4, 0x41, + 0x89, 0x55, 0x92, 0x5e, 0xdd, 0x61, 0x2c, 0xc9, 0x03, 0x78, 0x3e, 0xed, 0x98, 0xd0, 0x2a, 0x7d, + 0x51, 0x29, 0x28, 0x5f, 0x4d, 0x3f, 0x72, 0xd2, 0x6b, 0x3e, 0x84, 0x2d, 0xf9, 0x08, 0x8e, 0x6b, + 0xeb, 0x4b, 0xab, 0xef, 0x25, 0xac, 0x0f, 0x7d, 0x18, 0xf5, 0x85, 0x99, 0x5e, 0x4b, 0x3a, 0x0f, + 0xeb, 0x77, 0x33, 0x40, 0x92, 0x1b, 0xdf, 0xd0, 0x6f, 0x96, 0x6f, 0x68, 0xee, 0x65, 0x7a, 0xec, + 0x5f, 0x15, 0xb8, 0x5d, 0x17, 0x78, 0x23, 0x47, 0xb4, 0xf3, 0xc6, 0x05, 0xab, 0xbf, 0x4f, 0xc2, + 0x45, 0x18, 0xbd, 0x4b, 0xfd, 0x6d, 0x7e, 0x03, 0x11, 0x26, 0xf8, 0xf7, 0x19, 0xc0, 0x48, 0x34, + 0xcd, 0x00, 0xd6, 0x9f, 0x64, 0x60, 0x2e, 0xed, 0x34, 0x3e, 0xc4, 0x75, 0xc0, 0x8a, 0x79, 0x3d, + 0xe0, 0x7b, 0x25, 0xf7, 0x7a, 0x50, 0xbe, 0x0e, 0x0b, 0x30, 0xca, 0x3e, 0x56, 0xda, 0xce, 0xe0, + 0x85, 0x8f, 0xf5, 0x46, 0x60, 0x73, 0x38, 0x43, 0xe0, 0x21, 0x4b, 0x46, 0x30, 0x32, 0x0d, 0x22, + 0xe0, 0x66, 0x6f, 0x73, 0x38, 0x43, 0x60, 0x17, 0x4b, 0x79, 0x11, 0x42, 0x04, 0x76, 0xdf, 0x0c, + 0x6c, 0x0e, 0x27, 0xe7, 0x61, 0x7c, 0xa3, 0xb3, 0x46, 0x9d, 0xfb, 0x32, 0xf6, 0x3c, 0xbe, 0xaf, + 0x7a, 0x9d, 0x7a, 0x8b, 0xc1, 0x6c, 0x59, 0x68, 0x7d, 0x2b, 0x03, 0xb3, 0x09, 0x41, 0xe0, 0x70, + 0xef, 0x88, 0xc1, 0x66, 0xca, 0xc3, 0x7c, 0x1f, 0x6f, 0xfe, 0x48, 0x7a, 0xf3, 0xad, 0xff, 0x6d, + 0x04, 0x4e, 0xf6, 0xb9, 0x97, 0x45, 0x6e, 0x14, 0x99, 0x43, 0xdd, 0x28, 0xbe, 0xc4, 0xee, 0x41, + 0x8e, 0xdb, 0x0e, 0x36, 0xbd, 0xa8, 0xc5, 0x91, 0x35, 0x26, 0x96, 0xc9, 0xf4, 0x75, 0xd2, 0x6c, + 0xef, 0x14, 0x4f, 0x21, 0x5a, 0x0f, 0xbd, 0xe4, 0xb1, 0x60, 0x30, 0x4b, 0x38, 0x32, 0xe4, 0xfe, + 0x92, 0x38, 0x32, 0x98, 0xa6, 0xb5, 0x23, 0x4f, 0xd4, 0xb4, 0x36, 0xdd, 0xa2, 0x68, 0xf4, 0x71, + 0xec, 0xcb, 0xca, 0x30, 0x55, 0xa3, 0x8e, 0xdf, 0xd8, 0x2b, 0x05, 0x7c, 0x90, 0xc6, 0xa2, 0x10, + 0xc7, 0x01, 0x16, 0xd4, 0x9d, 0x20, 0x39, 0x16, 0x06, 0x0d, 0x59, 0x35, 0xcd, 0x40, 0xc7, 0x51, + 0x73, 0x7f, 0xbe, 0xbf, 0x99, 0xa7, 0xf1, 0x62, 0xa7, 0x93, 0x5a, 0xdf, 0xca, 0x9a, 0x5e, 0x0e, + 0x7f, 0x19, 0x67, 0xde, 0x45, 0x18, 0xdd, 0xda, 0xa3, 0xbe, 0xdc, 0xef, 0xb0, 0x21, 0x0f, 0x18, + 0x40, 0x6f, 0x08, 0x62, 0x90, 0xeb, 0x30, 0x5d, 0xe5, 0x23, 0x21, 0xbb, 0x77, 0x24, 0x12, 0x97, + 0xbb, 0xe2, 0x52, 0x97, 0xd2, 0xbf, 0x31, 0x2a, 0xeb, 0x06, 0x9c, 0x31, 0x16, 0xa4, 0xf0, 0xca, + 0xe6, 0xd6, 0x98, 0xec, 0x54, 0x39, 0x0f, 0xd3, 0x91, 0xfd, 0x69, 0xb4, 0x7b, 0xd8, 0x31, 0xa8, + 0xb5, 0x03, 0xcf, 0x0f, 0x64, 0x14, 0x90, 0x65, 0x80, 0xae, 0xfa, 0x15, 0x33, 0xcc, 0x19, 0x48, + 0x6a, 0x6b, 0x74, 0xd6, 0xf7, 0xc3, 0xa4, 0xde, 0xcb, 0xb8, 0xa7, 0xb2, 0xdf, 0x62, 0x53, 0xe3, + 0x7b, 0x2a, 0x03, 0xd8, 0x1c, 0x7e, 0x68, 0xda, 0xdf, 0x68, 0xf8, 0x73, 0x87, 0x0d, 0x3f, 0xab, + 0x1c, 0x97, 0xac, 0x56, 0x39, 0xfe, 0xd6, 0x2b, 0x47, 0xb7, 0x6b, 0x9b, 0xc3, 0x9f, 0x68, 0xe5, + 0xbf, 0x23, 0x23, 0x70, 0xbf, 0x01, 0x13, 0xd1, 0xbd, 0x26, 0x4a, 0xae, 0x76, 0x2c, 0xed, 0xb6, + 0x12, 0x61, 0x46, 0x87, 0x64, 0xf6, 0xb0, 0x43, 0xf2, 0x28, 0x13, 0xf1, 0x32, 0x8c, 0x97, 0xc4, + 0xbb, 0x1a, 0x9f, 0x81, 0xdc, 0xc1, 0x2f, 0xf1, 0x88, 0x26, 0xb1, 0xac, 0x6f, 0x67, 0xe0, 0x78, + 0xaa, 0xba, 0x83, 0xd5, 0xca, 0xf5, 0x2a, 0xda, 0x3a, 0x8c, 0x2b, 0x55, 0x38, 0xc6, 0x51, 0x7c, + 0xee, 0x86, 0xff, 0x16, 0xeb, 0x05, 0x98, 0x50, 0xca, 0x76, 0x32, 0x27, 0x87, 0x0e, 0x8d, 0x2d, + 0xa4, 0xce, 0xf6, 0xcf, 0x33, 0x3c, 0x91, 0xca, 0x53, 0x1b, 0x55, 0x2a, 0xdd, 0xf4, 0x86, 0x7d, + 0xd2, 0x50, 0xb1, 0xa4, 0xfe, 0x74, 0x8c, 0x67, 0x73, 0x17, 0x11, 0xa4, 0xb6, 0x61, 0x7a, 0xa3, + 0xb2, 0x5c, 0xd6, 0x6e, 0xed, 0x66, 0xb0, 0x70, 0x95, 0x8a, 0x9a, 0x23, 0xec, 0x47, 0x9b, 0xa2, + 0xe7, 0x36, 0x1b, 0xe9, 0x37, 0xfa, 0x18, 0x47, 0x56, 0x07, 0xcf, 0x63, 0xae, 0xea, 0xc8, 0x0e, + 0x59, 0x87, 0xc8, 0x92, 0x9e, 0x56, 0x87, 0xc9, 0x91, 0xec, 0x41, 0xf1, 0x06, 0x1e, 0xe0, 0x5a, + 0x2d, 0xb9, 0xc1, 0xb5, 0x9c, 0x13, 0xb5, 0x3c, 0xcb, 0x4f, 0xfe, 0xf4, 0x7a, 0x12, 0x5c, 0xa3, + 0x99, 0x3b, 0x72, 0xe8, 0xcc, 0xfd, 0xeb, 0x19, 0x18, 0xe3, 0x12, 0x82, 0x18, 0xad, 0x3e, 0x32, + 0xc8, 0xd6, 0x93, 0x91, 0x41, 0x8a, 0xb8, 0x73, 0x19, 0xef, 0x0c, 0xbc, 0x8c, 0x2c, 0xc3, 0x58, + 0x2d, 0x74, 0xc2, 0x9e, 0x74, 0xea, 0x94, 0xf6, 0x55, 0xa8, 0x7f, 0xe3, 0x25, 0x91, 0x57, 0x5f, + 0x80, 0xbf, 0x75, 0x2e, 0x1c, 0x83, 0x54, 0x22, 0x87, 0xb2, 0xf1, 0x43, 0x7d, 0x16, 0xa4, 0x13, + 0xde, 0xb8, 0x70, 0x28, 0x33, 0xdd, 0xc8, 0xd6, 0x60, 0x42, 0xb8, 0xa9, 0x2d, 0xed, 0x0b, 0x2d, + 0x7b, 0xd1, 0x78, 0xc3, 0x6b, 0x2e, 0xed, 0x47, 0xd2, 0x8f, 0x70, 0x74, 0xab, 0x6f, 0x1b, 0x79, + 0xb5, 0x15, 0x22, 0xd9, 0xe0, 0x69, 0x09, 0x78, 0x8c, 0x2d, 0x33, 0x00, 0xa6, 0x82, 0x0b, 0x07, + 0x78, 0xe9, 0xeb, 0x92, 0x12, 0x52, 0x2b, 0xe2, 0x41, 0xd6, 0xa0, 0x28, 0x72, 0xf5, 0xf2, 0x47, + 0xe0, 0xca, 0x32, 0x77, 0x85, 0x12, 0xb6, 0x3b, 0x32, 0xd3, 0xaf, 0x78, 0x3e, 0x36, 0x0d, 0xa8, + 0x13, 0x94, 0xd6, 0x4f, 0x66, 0xa0, 0x18, 0x9f, 0x7d, 0xe4, 0x1d, 0x28, 0xa8, 0x18, 0x67, 0xca, + 0x0f, 0x02, 0xb5, 0x6d, 0x51, 0x50, 0x34, 0xc3, 0x23, 0x42, 0x47, 0x27, 0x8b, 0x90, 0x67, 0x8b, + 0x38, 0x9e, 0xf8, 0xa5, 0x27, 0x60, 0xba, 0x09, 0xa9, 0xc4, 0xd3, 0xf6, 0x80, 0x7f, 0x9e, 0x83, + 0x82, 0x36, 0xf4, 0xe4, 0x22, 0xe4, 0x2b, 0xc1, 0x9a, 0xd7, 0xb8, 0xa7, 0x82, 0x99, 0x4c, 0x3d, + 0x3a, 0x58, 0x98, 0x70, 0x83, 0x7a, 0x0b, 0x81, 0xb6, 0x2a, 0x26, 0x4b, 0x30, 0xc5, 0xff, 0x92, + 0x21, 0x5d, 0xb3, 0x91, 0x55, 0x0d, 0x47, 0x96, 0xc1, 0x5c, 0x75, 0x29, 0xc9, 0x20, 0x21, 0x5f, + 0x06, 0xe0, 0x00, 0x74, 0x7f, 0xc9, 0x0d, 0xef, 0xb8, 0x23, 0x2a, 0x48, 0x71, 0x7c, 0xd1, 0x18, + 0x92, 0xaf, 0xf2, 0xf0, 0x65, 0x72, 0xaa, 0x8e, 0x0c, 0xef, 0x79, 0xc4, 0xf8, 0xd7, 0xd3, 0x1d, + 0x20, 0x75, 0x96, 0xe4, 0x9b, 0x19, 0x38, 0x6d, 0xd3, 0x86, 0x77, 0x9f, 0xfa, 0xfb, 0xa5, 0x10, + 0xb1, 0xf4, 0x1a, 0x0f, 0xf7, 0xb6, 0xbc, 0x2a, 0x6a, 0x7c, 0xd9, 0x17, 0x5c, 0x30, 0x4a, 0x52, + 0xbb, 0x1b, 0xd6, 0x07, 0x34, 0x61, 0x40, 0x95, 0xd6, 0x7f, 0x91, 0xd1, 0x16, 0x14, 0x59, 0xc7, + 0x34, 0x46, 0x7c, 0xb2, 0x88, 0xb7, 0x68, 0x25, 0xe0, 0x4a, 0xb8, 0x4d, 0x77, 0x96, 0x9e, 0x15, + 0x46, 0x64, 0xc7, 0xd4, 0x94, 0x8b, 0xa5, 0x37, 0xe2, 0x40, 0xf2, 0x05, 0x18, 0xc1, 0xa1, 0x3a, + 0x3c, 0xe5, 0xb1, 0x3c, 0xb8, 0x46, 0xd8, 0x18, 0x61, 0xab, 0x91, 0x92, 0x7c, 0x46, 0x78, 0x59, + 0xf0, 0xc1, 0x9e, 0xd6, 0x0e, 0x2d, 0xd6, 0x0e, 0x75, 0x62, 0x45, 0x3e, 0xb7, 0xda, 0x6c, 0xfd, + 0xdb, 0x59, 0x28, 0xc6, 0x97, 0x31, 0x79, 0x1f, 0x26, 0x65, 0xf4, 0xb5, 0x55, 0x47, 0xc4, 0x54, + 0x9d, 0x14, 0x31, 0x4d, 0x05, 0xbc, 0xbe, 0xe7, 0x18, 0x89, 0xac, 0x0d, 0x02, 0x76, 0xbc, 0x6f, + 0x8a, 0x18, 0x18, 0xda, 0x02, 0x0a, 0xbd, 0xb0, 0x1b, 0x8b, 0xb8, 0x25, 0xd1, 0xc8, 0x1b, 0x90, + 0xbb, 0x7d, 0xbd, 0x24, 0xac, 0x8f, 0xe5, 0x6e, 0x75, 0xfb, 0x7a, 0x89, 0x2f, 0x74, 0x6e, 0xfe, + 0x61, 0x1a, 0xa3, 0x30, 0x7c, 0xb2, 0xa6, 0x05, 0xb4, 0x1b, 0x33, 0x92, 0x4e, 0x48, 0xb0, 0xfa, + 0xb8, 0xc3, 0x23, 0xdb, 0xe9, 0x59, 0xbe, 0xad, 0x5f, 0xca, 0xc1, 0x84, 0xaa, 0x9f, 0x10, 0x40, + 0xe9, 0x45, 0x48, 0xf7, 0xf8, 0x37, 0x39, 0x05, 0x79, 0x29, 0xb0, 0x08, 0x23, 0xe4, 0xf1, 0x40, + 0x08, 0x2b, 0xf3, 0x20, 0x25, 0x13, 0x2e, 0xac, 0xd8, 0xf2, 0x27, 0xb9, 0x02, 0x4a, 0xec, 0xe8, + 0x27, 0x9f, 0x8c, 0xb0, 0x01, 0xb3, 0x15, 0x1a, 0x99, 0x86, 0xac, 0xcb, 0x43, 0x11, 0x4c, 0xd8, + 0x59, 0xb7, 0x49, 0xde, 0x87, 0xbc, 0xd3, 0x6c, 0xd2, 0x66, 0xdd, 0x91, 0x8f, 0xba, 0x83, 0x26, + 0x4d, 0x9e, 0x71, 0xe3, 0xe7, 0x03, 0x52, 0x95, 0x42, 0x52, 0x82, 0x89, 0x96, 0xc3, 0x0d, 0x44, + 0x9a, 0x43, 0x1c, 0x36, 0x11, 0x87, 0x3c, 0x23, 0xbb, 0x13, 0xd0, 0x26, 0x79, 0x19, 0x46, 0xd8, + 0x68, 0x8a, 0xd3, 0x45, 0xe5, 0x2c, 0xdf, 0xd8, 0xac, 0xf2, 0x0e, 0x5b, 0x7d, 0xc6, 0x46, 0x04, + 0xf2, 0x22, 0xe4, 0x7a, 0x8b, 0x3b, 0xe2, 0xdc, 0x28, 0x46, 0xc1, 0x25, 0x15, 0x1a, 0x2b, 0x26, + 0x57, 0x21, 0xff, 0xc0, 0x8c, 0x4b, 0x78, 0x3c, 0x36, 0x8c, 0x0a, 0x5f, 0x21, 0x2e, 0xe5, 0x61, + 0x8c, 0x9f, 0x11, 0xd6, 0xf3, 0x00, 0x51, 0xd5, 0x49, 0x5b, 0x71, 0xeb, 0xcb, 0x30, 0xa1, 0xaa, + 0x24, 0x67, 0x00, 0xee, 0xd1, 0xfd, 0xfa, 0x9e, 0xd3, 0x69, 0xb6, 0xb8, 0xf8, 0x3a, 0x69, 0x4f, + 0xdc, 0xa3, 0xfb, 0xab, 0x08, 0x20, 0x27, 0x61, 0xbc, 0xcb, 0x46, 0x55, 0x4c, 0xdd, 0x49, 0x7b, + 0xac, 0xdb, 0xdb, 0x66, 0x33, 0x74, 0x1e, 0xc6, 0x51, 0x1b, 0x25, 0x16, 0xda, 0x94, 0x2d, 0x7f, + 0x5a, 0xff, 0x61, 0x16, 0xe3, 0x67, 0x6b, 0xed, 0x24, 0xe7, 0x60, 0xaa, 0xe1, 0x53, 0x3c, 0x8e, + 0x1c, 0x26, 0x64, 0x89, 0x7a, 0x26, 0x23, 0x60, 0xa5, 0x49, 0xce, 0xc3, 0x4c, 0xb7, 0xb7, 0xdd, + 0x72, 0x1b, 0xac, 0xb6, 0x7a, 0x63, 0x5b, 0x04, 0x11, 0x9d, 0xb4, 0xa7, 0x38, 0xf8, 0x16, 0xdd, + 0x2f, 0x6f, 0x63, 0x08, 0x8d, 0xa2, 0x1e, 0x01, 0x2d, 0x54, 0xa9, 0xbe, 0xec, 0x19, 0x0d, 0x8e, + 0xb6, 0x1a, 0x27, 0x60, 0xcc, 0x71, 0x76, 0x7b, 0x2e, 0x77, 0x75, 0x9f, 0xb4, 0xc5, 0x2f, 0xf2, + 0x2a, 0xcc, 0x06, 0xee, 0x6e, 0xc7, 0x09, 0x7b, 0xbe, 0x08, 0x60, 0x4e, 0x7d, 0x9c, 0x52, 0x53, + 0x76, 0x51, 0x15, 0x94, 0x39, 0x9c, 0xbc, 0x0e, 0x44, 0xaf, 0xcf, 0xdb, 0xfe, 0x98, 0x36, 0xf8, + 0x54, 0x9b, 0xb4, 0x67, 0xb5, 0x92, 0x0d, 0x2c, 0x20, 0x2f, 0xc0, 0xa4, 0x4f, 0x03, 0x14, 0xf0, + 0xb0, 0xdb, 0x30, 0xbd, 0x84, 0x5d, 0x90, 0x30, 0xd6, 0x77, 0x17, 0xa0, 0xa8, 0x75, 0x07, 0x06, + 0x99, 0xe3, 0x11, 0x34, 0xed, 0xe9, 0x08, 0x6e, 0x77, 0x2b, 0x4d, 0x6b, 0x09, 0x66, 0x13, 0x2b, + 0x57, 0x4b, 0xcf, 0xc8, 0x77, 0xa2, 0xc1, 0xe9, 0x19, 0xad, 0x0e, 0x4c, 0xea, 0x3b, 0xf1, 0x21, + 0x81, 0x5c, 0x4f, 0xa0, 0xab, 0x24, 0xdf, 0xa6, 0xc6, 0x1e, 0x1d, 0x2c, 0x64, 0xdd, 0x26, 0x3a, + 0x48, 0x5e, 0x80, 0xbc, 0x94, 0x27, 0xc4, 0x8d, 0x03, 0xb5, 0x89, 0x42, 0x90, 0xdd, 0xb7, 0x55, + 0xa9, 0xf5, 0x32, 0x8c, 0x8b, 0xcd, 0x76, 0xb0, 0x0e, 0xd1, 0xfa, 0xd1, 0x2c, 0xcc, 0xd8, 0x94, + 0x6d, 0x05, 0x94, 0x47, 0x6f, 0x7e, 0x6a, 0xef, 0x49, 0xe9, 0x01, 0x77, 0x8c, 0x6f, 0x1b, 0x10, + 0x37, 0xf9, 0x57, 0x32, 0x70, 0x2c, 0x05, 0xf7, 0x13, 0xe5, 0xf8, 0xb9, 0x06, 0x13, 0xcb, 0xae, + 0xd3, 0x2a, 0x35, 0x9b, 0xca, 0xe5, 0x13, 0xa5, 0xd0, 0x26, 0x9b, 0x69, 0x0e, 0x83, 0xea, 0xc7, + 0xae, 0x42, 0x25, 0xaf, 0x88, 0x49, 0x11, 0xe5, 0x57, 0xc5, 0x49, 0xf1, 0xdd, 0x83, 0x05, 0xe0, + 0x6d, 0x8a, 0xf2, 0xc8, 0x61, 0x10, 0x2c, 0x0e, 0x8c, 0xcc, 0x5b, 0x9f, 0xda, 0xa1, 0x4b, 0x0f, + 0x82, 0x15, 0xff, 0xbc, 0xa1, 0xae, 0xbb, 0x3f, 0x99, 0x85, 0x13, 0xe9, 0x84, 0x9f, 0x34, 0x5d, + 0x13, 0x06, 0xad, 0xd6, 0x02, 0xf7, 0x61, 0xba, 0x26, 0x1e, 0xe1, 0x1a, 0xf1, 0x23, 0x04, 0xb2, + 0x03, 0x53, 0x6b, 0x4e, 0x10, 0xae, 0x52, 0xc7, 0x0f, 0xb7, 0xa9, 0x13, 0x0e, 0x21, 0xeb, 0xbe, + 0x28, 0xbe, 0x66, 0x1e, 0x8f, 0xbf, 0x3d, 0x49, 0x19, 0x13, 0x05, 0x4d, 0xb6, 0x6a, 0xa2, 0x8c, + 0x0c, 0x31, 0x51, 0xbe, 0x06, 0x33, 0x35, 0xda, 0x76, 0xba, 0x7b, 0x9e, 0x4f, 0xc5, 0xb3, 0xc7, + 0x25, 0x98, 0x52, 0xa0, 0xd4, 0xd9, 0x62, 0x16, 0x1b, 0xf8, 0x5a, 0x47, 0x44, 0x5b, 0x89, 0x59, + 0x6c, 0xfd, 0x9d, 0x2c, 0x9c, 0x2c, 0x35, 0x84, 0x15, 0x84, 0x28, 0x90, 0xc6, 0x5a, 0x9f, 0x72, + 0xdd, 0xe4, 0x32, 0x4c, 0xdc, 0x76, 0x1e, 0xae, 0x51, 0x27, 0xa0, 0x81, 0x48, 0x96, 0xc1, 0x05, + 0x35, 0xe7, 0x61, 0x64, 0x1c, 0x60, 0x47, 0x38, 0xfa, 0x25, 0x77, 0xe4, 0x31, 0x2f, 0xb9, 0x16, + 0x8c, 0xad, 0x7a, 0xad, 0xa6, 0x38, 0xc6, 0xc4, 0x93, 0xd3, 0x1e, 0x42, 0x6c, 0x51, 0x62, 0xfd, + 0x49, 0x06, 0xa6, 0x55, 0x8b, 0xb1, 0x09, 0x9f, 0x7a, 0x97, 0x9c, 0x87, 0x71, 0xac, 0xa8, 0xb2, + 0xac, 0x1f, 0x1a, 0x2d, 0x8a, 0x29, 0x0f, 0x9a, 0xb6, 0x2c, 0xd4, 0x7b, 0x62, 0xf4, 0xf1, 0x7a, + 0xc2, 0xfa, 0x37, 0xf0, 0x35, 0x4b, 0xff, 0x4a, 0x76, 0x12, 0x69, 0x0d, 0xc9, 0x0c, 0xd9, 0x90, + 0xec, 0x13, 0x1b, 0x92, 0x5c, 0xdf, 0x21, 0xf9, 0x46, 0x16, 0x0a, 0xaa, 0xb1, 0xdf, 0x63, 0xd1, + 0x23, 0xd5, 0x77, 0x0d, 0xe5, 0x32, 0x5c, 0xd3, 0xf6, 0x0a, 0xe1, 0x99, 0xfb, 0x05, 0x18, 0x13, + 0x8b, 0x29, 0x13, 0x33, 0x5a, 0x8a, 0x8d, 0xee, 0xd2, 0xb4, 0x60, 0x3d, 0x86, 0x03, 0x1a, 0xd8, + 0x82, 0x0e, 0x7d, 0xb2, 0xb7, 0xe8, 0xb6, 0x78, 0xdc, 0x7c, 0x6a, 0xcf, 0xa8, 0x74, 0x9f, 0xec, + 0xe8, 0xc3, 0x86, 0x3a, 0x9d, 0x0e, 0x46, 0xa1, 0x18, 0x27, 0x39, 0x3c, 0x3e, 0x67, 0xb5, 0xb7, + 0xcd, 0xa5, 0x70, 0x1e, 0x9f, 0xb3, 0xdb, 0xdb, 0xb6, 0x19, 0x8c, 0x9c, 0x87, 0x91, 0xaa, 0xef, + 0xde, 0xc7, 0xaf, 0x9e, 0xe4, 0x8f, 0xed, 0x5d, 0xdf, 0xbd, 0xaf, 0x3f, 0xb6, 0xb3, 0x72, 0xbc, + 0xfa, 0xae, 0xd5, 0xd0, 0xcf, 0x0d, 0x45, 0x70, 0x71, 0xf5, 0x6d, 0x05, 0xf1, 0xb8, 0xf6, 0x12, + 0x8d, 0x1d, 0x95, 0x4b, 0xd4, 0xf1, 0x45, 0x2c, 0x49, 0xb1, 0x9d, 0xe1, 0x51, 0xb9, 0x8d, 0x60, + 0x9e, 0x32, 0xd2, 0xd6, 0x91, 0x48, 0x0b, 0x88, 0xf6, 0x53, 0x2e, 0xe0, 0xc3, 0x6f, 0x83, 0x67, + 0xa5, 0xd6, 0x4f, 0x67, 0x5d, 0xd7, 0x57, 0x73, 0x0a, 0xdf, 0x27, 0xa9, 0x9b, 0xac, 0x8a, 0x00, + 0x39, 0xa8, 0xf2, 0xc8, 0x1f, 0xca, 0x4c, 0x3a, 0x82, 0x02, 0x0f, 0xa0, 0xa3, 0x14, 0x1f, 0x11, + 0x13, 0xf2, 0x1e, 0x14, 0x74, 0xef, 0x45, 0xee, 0x63, 0xf7, 0x1c, 0x8f, 0x79, 0xd2, 0x27, 0x6b, + 0x91, 0x4e, 0x40, 0xb6, 0xe1, 0x64, 0xd9, 0xeb, 0x04, 0xbd, 0xb6, 0x8c, 0xae, 0x12, 0xc5, 0x74, + 0x03, 0x95, 0x75, 0xf8, 0xc5, 0x86, 0x40, 0x11, 0xce, 0x72, 0xd2, 0x22, 0xd4, 0xbc, 0x80, 0xf4, + 0x63, 0x44, 0x36, 0xa1, 0x50, 0x2b, 0xdd, 0x5e, 0x93, 0x1e, 0x68, 0x05, 0x73, 0xdb, 0x88, 0x4a, + 0x96, 0xd9, 0xc2, 0xe0, 0x41, 0x18, 0x9c, 0x76, 0x4b, 0x1a, 0x24, 0xea, 0x7a, 0x4a, 0x0d, 0xd9, + 0xfa, 0x8c, 0x3e, 0xbf, 0x85, 0xb8, 0x31, 0x70, 0x7e, 0x5b, 0xff, 0xd9, 0x18, 0xcc, 0xc4, 0xaa, + 0x13, 0xf7, 0x9f, 0x4c, 0xe2, 0xfe, 0x53, 0x03, 0xe0, 0x4a, 0xaf, 0x21, 0xb5, 0x53, 0xd2, 0x96, + 0xbd, 0x20, 0x7c, 0x41, 0xd4, 0x58, 0x69, 0x6c, 0x18, 0x53, 0x3e, 0x13, 0x86, 0xd4, 0x4e, 0x2a, + 0xa6, 0x7c, 0x32, 0x69, 0x4c, 0x23, 0x36, 0x64, 0x01, 0x46, 0x31, 0x76, 0x8e, 0xee, 0x4a, 0xe0, + 0x32, 0x80, 0xcd, 0xe1, 0xe4, 0x1c, 0x8c, 0xb1, 0xc3, 0xb9, 0xb2, 0x2c, 0x16, 0x17, 0xee, 0x59, + 0xec, 0xf4, 0x66, 0x27, 0xa1, 0x28, 0x22, 0xd7, 0x60, 0x92, 0xff, 0x25, 0xbc, 0x68, 0xc7, 0x4c, + 0xab, 0x9a, 0xba, 0xdb, 0x94, 0x8e, 0xb4, 0x06, 0x1e, 0x93, 0x5a, 0x6b, 0xbd, 0x6d, 0x91, 0x0e, + 0x7d, 0x3c, 0x92, 0x5a, 0x03, 0x0e, 0xc4, 0x24, 0xa3, 0x0a, 0x81, 0x9d, 0x91, 0xc2, 0xa0, 0x2f, + 0x8f, 0x77, 0x15, 0x3c, 0x23, 0xb9, 0x21, 0x9f, 0x2d, 0x4a, 0xc8, 0x45, 0xae, 0x7f, 0x46, 0x71, + 0x83, 0xe7, 0x87, 0x40, 0x8d, 0x31, 0x5e, 0x78, 0x51, 0xe6, 0x50, 0xc5, 0xac, 0x72, 0xf6, 0xf7, + 0x4a, 0xdb, 0x71, 0x5b, 0x62, 0xba, 0x62, 0xe5, 0x88, 0x4b, 0x19, 0xd4, 0x8e, 0x10, 0xc8, 0x3b, + 0x30, 0xcd, 0x7e, 0x94, 0xbd, 0x76, 0xdb, 0xeb, 0x20, 0xfb, 0x42, 0x14, 0xef, 0x00, 0x49, 0x1a, + 0x58, 0xc4, 0x6b, 0x89, 0xe1, 0xb2, 0x7d, 0x0a, 0xdf, 0xb6, 0x7a, 0x5c, 0x33, 0x3e, 0x19, 0xed, + 0x53, 0x48, 0x1a, 0x70, 0xb8, 0xad, 0x23, 0x91, 0x37, 0x61, 0x8a, 0xfd, 0xbc, 0xe1, 0xde, 0xa7, + 0xbc, 0xc2, 0xa9, 0xe8, 0x99, 0x11, 0xa9, 0x76, 0x59, 0x09, 0xaf, 0xcf, 0xc4, 0x24, 0x1f, 0xc0, + 0x71, 0xe4, 0xd4, 0xf0, 0xba, 0xb4, 0x59, 0xda, 0xd9, 0x71, 0x5b, 0x2e, 0x37, 0x73, 0xe0, 0xfe, + 0xa2, 0xa8, 0x8d, 0xe4, 0x15, 0x23, 0x46, 0xdd, 0x89, 0x50, 0xec, 0x74, 0x4a, 0xb2, 0x05, 0xc5, + 0x72, 0x2f, 0x08, 0xbd, 0x76, 0x29, 0x0c, 0x7d, 0x77, 0xbb, 0x17, 0xd2, 0x60, 0x7e, 0xc6, 0xf0, + 0xaa, 0x64, 0x8b, 0x43, 0x15, 0x72, 0x3d, 0x43, 0x03, 0x29, 0xea, 0x8e, 0x22, 0xb1, 0x13, 0x4c, + 0xac, 0xff, 0x34, 0x03, 0x53, 0x06, 0x29, 0x79, 0x03, 0x26, 0xaf, 0xfb, 0x2e, 0xed, 0x34, 0x5b, + 0xfb, 0xda, 0x05, 0x08, 0xa5, 0xe3, 0x1d, 0x01, 0xe7, 0x5f, 0x6d, 0xa0, 0x29, 0xfd, 0x41, 0x36, + 0xd5, 0x06, 0xe9, 0x32, 0xf7, 0x68, 0x11, 0x13, 0x34, 0x17, 0xb9, 0x79, 0xe3, 0x04, 0x15, 0xb3, + 0x53, 0x43, 0x21, 0xef, 0xc2, 0x18, 0x7f, 0x05, 0x13, 0x06, 0x31, 0xa7, 0xd2, 0x3e, 0x93, 0x7b, + 0x4f, 0xe1, 0x44, 0xc4, 0xc7, 0xf7, 0xc0, 0x16, 0x44, 0xd6, 0xcf, 0x64, 0x80, 0x24, 0x51, 0x0f, + 0xd1, 0xa7, 0x1c, 0xfa, 0xa8, 0xff, 0x05, 0xb5, 0x1a, 0x73, 0x86, 0xf6, 0x90, 0xd5, 0xc4, 0x0b, + 0x78, 0xc7, 0x8b, 0x55, 0xa7, 0x2b, 0x78, 0x78, 0xb1, 0xf5, 0xd7, 0xb2, 0x00, 0x11, 0x36, 0xf9, + 0x3c, 0x0f, 0x51, 0xfe, 0x41, 0xcf, 0x69, 0xb9, 0x3b, 0xae, 0x19, 0x6e, 0x08, 0x99, 0x7c, 0x4d, + 0x96, 0xd8, 0x26, 0x22, 0x79, 0x1f, 0x66, 0x6a, 0x55, 0x93, 0x56, 0x0b, 0xc7, 0x1c, 0x74, 0xeb, + 0x31, 0xf2, 0x38, 0x36, 0x1a, 0xbe, 0xe9, 0xa3, 0xc1, 0x0d, 0xdf, 0xf8, 0x40, 0x88, 0x12, 0xb6, + 0xb1, 0xd4, 0xaa, 0x98, 0x17, 0xba, 0x49, 0x9b, 0x95, 0x65, 0xb1, 0x4b, 0x61, 0xeb, 0x82, 0x6e, + 0xbd, 0xcb, 0x0b, 0x30, 0x19, 0xb1, 0x81, 0x17, 0x75, 0xe4, 0x68, 0x1f, 0x0f, 0xa9, 0x9f, 0x45, + 0x75, 0x52, 0xdb, 0x0b, 0xa9, 0xb8, 0x45, 0x3f, 0xb5, 0xf2, 0x74, 0xf4, 0x84, 0x3a, 0x6a, 0x38, + 0x7e, 0x18, 0x5f, 0xc7, 0x31, 0xee, 0x5e, 0x8d, 0x84, 0x5f, 0xfe, 0x98, 0x2a, 0x9f, 0x50, 0x35, + 0xd1, 0xef, 0x1f, 0x64, 0xe0, 0x78, 0x2a, 0x2d, 0xb9, 0x04, 0x10, 0xe9, 0x2a, 0x44, 0x2f, 0xf1, + 0x9c, 0xd0, 0x0a, 0x6a, 0x6b, 0x18, 0xe4, 0x4b, 0x71, 0x2d, 0xc3, 0xe1, 0x07, 0xe1, 0x69, 0x19, + 0xbc, 0xc2, 0xd4, 0x32, 0xa4, 0xe8, 0x16, 0xac, 0x5f, 0xc9, 0xc1, 0xac, 0xe6, 0x3b, 0xcd, 0xdb, + 0x7a, 0x88, 0x21, 0xe2, 0x3d, 0x99, 0x7f, 0x5c, 0x58, 0x9f, 0xf3, 0xe7, 0xfe, 0x57, 0x12, 0xa6, + 0xfb, 0x82, 0xdb, 0x25, 0x1d, 0x99, 0x47, 0x6c, 0xc1, 0xad, 0x53, 0xa4, 0x23, 0x4f, 0x58, 0xa1, + 0x1b, 0xcc, 0x49, 0x00, 0x53, 0xcb, 0xfb, 0x1d, 0xa7, 0xad, 0x6a, 0xe3, 0xcf, 0xfe, 0xaf, 0xf6, + 0xad, 0xcd, 0xc0, 0xe6, 0xd5, 0x49, 0x99, 0x73, 0xbe, 0xc9, 0xcb, 0x52, 0xfc, 0xab, 0x0c, 0xaa, + 0xd3, 0xef, 0xc3, 0x6c, 0xa2, 0xd1, 0x47, 0x0a, 0x1e, 0xb3, 0x05, 0x24, 0xd9, 0x8e, 0x14, 0x0e, + 0xaf, 0x9a, 0xa1, 0x89, 0x8e, 0xab, 0x67, 0x3c, 0x4c, 0x6e, 0xc8, 0x8d, 0x08, 0x16, 0xf5, 0xd0, + 0x32, 0x3f, 0x9b, 0xd5, 0xdd, 0x27, 0x9e, 0xf6, 0x55, 0xf7, 0x05, 0xe3, 0x96, 0xf5, 0x7c, 0xbf, + 0x31, 0x1d, 0xea, 0x36, 0xfb, 0x9d, 0x1c, 0x9c, 0xec, 0x43, 0x49, 0xf6, 0xe3, 0x93, 0x88, 0xdf, + 0x6e, 0xaf, 0x0c, 0xae, 0xf0, 0x49, 0x4c, 0x25, 0xf2, 0x79, 0xee, 0x40, 0xd9, 0xc0, 0xa4, 0x7c, + 0xe2, 0x5e, 0xc7, 0xf3, 0xb9, 0x2a, 0x68, 0xdc, 0x73, 0x92, 0x43, 0xc9, 0xfb, 0x30, 0x8a, 0xbe, + 0x33, 0xb1, 0xd8, 0x2d, 0x0c, 0x03, 0xe1, 0x5a, 0xa0, 0x1b, 0xf6, 0xd3, 0x08, 0x74, 0xc3, 0x00, + 0xe4, 0x73, 0x90, 0x2b, 0x6d, 0xd5, 0xc4, 0xb8, 0x4c, 0xeb, 0xe4, 0x5b, 0xb5, 0x28, 0xb0, 0xaa, + 0x63, 0x44, 0x40, 0x65, 0x14, 0x8c, 0xf0, 0x46, 0xb9, 0x2a, 0x46, 0x45, 0x27, 0xbc, 0x51, 0xae, + 0x46, 0x84, 0xbb, 0x0d, 0xc3, 0x17, 0xfe, 0x46, 0xb9, 0xfa, 0xe9, 0x4d, 0xfb, 0xbf, 0x99, 0xe5, + 0x5e, 0x9f, 0xfc, 0xc3, 0xde, 0x87, 0x49, 0x23, 0x74, 0x5c, 0x26, 0x92, 0xc7, 0x54, 0xd8, 0xbb, + 0x98, 0x9d, 0x84, 0x41, 0x20, 0x43, 0x14, 0xb3, 0xdf, 0x28, 0xf1, 0xea, 0x66, 0x0e, 0x8a, 0x03, + 0xca, 0xc4, 0xf1, 0x10, 0xc5, 0x8a, 0x84, 0x5c, 0x85, 0xfc, 0x26, 0xed, 0x38, 0x9d, 0x50, 0x29, + 0xda, 0xd0, 0xc8, 0x2f, 0x44, 0x98, 0x29, 0x35, 0x28, 0x44, 0xb2, 0x02, 0xd3, 0xb5, 0xde, 0x76, + 0xd0, 0xf0, 0x5d, 0xf4, 0x0e, 0x57, 0x67, 0x31, 0xb7, 0xba, 0xd5, 0x4a, 0x4c, 0x06, 0x31, 0x22, + 0xeb, 0x67, 0x33, 0x30, 0x2e, 0x06, 0x52, 0xcb, 0x6e, 0x9f, 0x19, 0x22, 0xbb, 0xfd, 0x35, 0x98, + 0x10, 0x0e, 0x4c, 0xea, 0xc9, 0x89, 0x67, 0x22, 0xe5, 0x40, 0xb3, 0xda, 0x08, 0x75, 0x58, 0x4b, + 0x7f, 0xeb, 0xef, 0x89, 0x96, 0xdd, 0x28, 0x57, 0xc9, 0x22, 0xe4, 0xd7, 0xbc, 0x86, 0xa3, 0x9d, + 0x73, 0xb8, 0xed, 0xb4, 0x04, 0x4c, 0xef, 0x20, 0x89, 0xc7, 0xda, 0x57, 0xf5, 0x3d, 0x71, 0x97, + 0xd1, 0xda, 0xd7, 0xe5, 0xc0, 0x58, 0xfb, 0x14, 0xea, 0xd0, 0xed, 0xa3, 0x29, 0x9b, 0xc4, 0xdd, + 0xab, 0x18, 0xbb, 0xf5, 0xa6, 0xee, 0x41, 0x21, 0x8a, 0xe4, 0x4e, 0x71, 0xba, 0xdf, 0x4e, 0x71, + 0xf7, 0xaa, 0x9d, 0x42, 0x85, 0xef, 0x35, 0x11, 0xb8, 0x46, 0xfd, 0xfb, 0x4f, 0xf1, 0x2e, 0x9d, + 0xfe, 0x5e, 0x13, 0xff, 0xbc, 0xa1, 0x36, 0xe9, 0x7f, 0x9e, 0x85, 0x13, 0xe9, 0x84, 0xfa, 0xb7, + 0x64, 0x06, 0x7c, 0xcb, 0x05, 0xc8, 0xaf, 0x7a, 0x41, 0xa8, 0x99, 0x46, 0xa1, 0x5a, 0x79, 0x4f, + 0xc0, 0x6c, 0x55, 0xca, 0xee, 0xdc, 0xec, 0x6f, 0xb5, 0x3c, 0x91, 0x1f, 0xfa, 0x3a, 0xb2, 0x3b, + 0x37, 0x2f, 0x22, 0x37, 0x20, 0x6f, 0x0b, 0x0b, 0xfe, 0x58, 0xd7, 0x48, 0xb0, 0x92, 0xa6, 0x88, + 0x2f, 0x20, 0x46, 0x04, 0x3f, 0x01, 0x23, 0x25, 0x18, 0x17, 0xa3, 0x1f, 0x7b, 0x92, 0x4c, 0x99, + 0x32, 0x66, 0x50, 0x4d, 0x49, 0xc7, 0x76, 0x14, 0x7c, 0x5c, 0xaa, 0x2c, 0x4b, 0x63, 0x7c, 0xdc, + 0x51, 0xf8, 0xe3, 0x93, 0x69, 0x85, 0xa6, 0x10, 0xad, 0x1f, 0xcd, 0x02, 0x6c, 0xd1, 0xed, 0xa7, + 0x3b, 0x17, 0xd2, 0xe7, 0x8c, 0x19, 0xa6, 0x59, 0x5e, 0x0c, 0x9f, 0x0a, 0x69, 0x03, 0x2d, 0x20, + 0x86, 0x4f, 0x84, 0xb4, 0x00, 0xa3, 0x5c, 0xdb, 0xa9, 0xe7, 0x1a, 0x41, 0x35, 0x27, 0x87, 0x5b, + 0xdb, 0x30, 0x77, 0x83, 0x86, 0x91, 0x7a, 0x4b, 0x3e, 0x69, 0x0d, 0x66, 0xfb, 0x1a, 0x4c, 0x08, + 0x7c, 0xb5, 0x7f, 0x71, 0x5d, 0x8c, 0x70, 0x1f, 0x46, 0x5d, 0x8c, 0x44, 0x60, 0xbb, 0xd1, 0x32, + 0x6d, 0xd1, 0x90, 0x7e, 0xba, 0xd5, 0xd4, 0x80, 0xf0, 0x4f, 0xc1, 0x2f, 0x1b, 0xae, 0x86, 0x43, + 0xfb, 0xe7, 0x2e, 0x1c, 0x57, 0x6d, 0x7f, 0x92, 0x7c, 0x2f, 0xb3, 0x2b, 0xa5, 0x88, 0x47, 0x19, + 0x71, 0x1c, 0x60, 0xd3, 0xf0, 0x10, 0x4e, 0x4b, 0x82, 0x2d, 0x57, 0x99, 0x90, 0x0d, 0x45, 0x4b, + 0xde, 0x81, 0x82, 0x46, 0x23, 0x22, 0xfe, 0xa2, 0xfa, 0xf3, 0x81, 0x1b, 0xee, 0xd5, 0x03, 0x0e, + 0xd7, 0xd5, 0x9f, 0x1a, 0xba, 0xf5, 0x11, 0x3c, 0xab, 0xcc, 0xf7, 0x53, 0xaa, 0x8e, 0x31, 0xcf, + 0x1c, 0x8d, 0xf9, 0x7a, 0xf4, 0x59, 0x95, 0x8e, 0x72, 0xb9, 0x93, 0xbc, 0x89, 0xfe, 0x59, 0xe2, + 0x63, 0x9e, 0x4b, 0x38, 0xf1, 0x69, 0xbe, 0x7a, 0xd6, 0xdb, 0x5a, 0x63, 0x53, 0x18, 0x1a, 0xc4, + 0x99, 0x38, 0xf1, 0x8f, 0x66, 0x61, 0x66, 0xa3, 0xb2, 0x5c, 0x56, 0x56, 0x2d, 0xdf, 0x63, 0x89, + 0x9a, 0x8c, 0x6f, 0xeb, 0xbf, 0xdf, 0x58, 0x77, 0xe0, 0x58, 0xac, 0x1b, 0x50, 0x74, 0x78, 0x8f, + 0x9b, 0xd9, 0x2b, 0xb0, 0x14, 0x1b, 0x4e, 0xa4, 0xb1, 0xbf, 0x7b, 0xd5, 0x8e, 0x61, 0x5b, 0x7f, + 0x9c, 0x8f, 0xf1, 0x15, 0x5b, 0xd8, 0x6b, 0x30, 0x51, 0x09, 0x82, 0x1e, 0xf5, 0xef, 0xd8, 0x6b, + 0xba, 0xaa, 0xc0, 0x45, 0x60, 0xbd, 0xe7, 0xb7, 0xec, 0x08, 0x81, 0x5c, 0x84, 0xbc, 0x88, 0x81, + 0x28, 0xf7, 0x04, 0xd4, 0xda, 0xaa, 0x10, 0x8a, 0xb6, 0x2a, 0x26, 0x6f, 0xc0, 0x24, 0xff, 0x9b, + 0xcf, 0x36, 0xd1, 0xe1, 0xa8, 0x1c, 0x14, 0xe8, 0x7c, 0x76, 0xda, 0x06, 0x1a, 0x79, 0x05, 0x72, + 0xa5, 0xb2, 0x2d, 0xd4, 0x41, 0x42, 0x6e, 0xc4, 0xf4, 0x8b, 0x3d, 0x6a, 0x5e, 0x22, 0xca, 0x36, + 0x93, 0xfe, 0x84, 0x2a, 0xc9, 0x17, 0x9a, 0x6c, 0x9e, 0x25, 0x52, 0xc0, 0x62, 0x87, 0x19, 0xc2, + 0xc8, 0x65, 0x18, 0x5f, 0x76, 0x83, 0x6e, 0xcb, 0xd9, 0x17, 0x7a, 0x6c, 0x9e, 0x85, 0x80, 0x83, + 0xf4, 0x39, 0x23, 0xb0, 0xc8, 0x45, 0x18, 0x45, 0x25, 0xab, 0xd0, 0x65, 0xf3, 0x30, 0xf0, 0x0c, + 0x60, 0x84, 0x81, 0x67, 0x00, 0x0c, 0xb1, 0xcb, 0x23, 0x05, 0x4e, 0x68, 0x21, 0x76, 0xe3, 0x11, + 0x02, 0x05, 0x4e, 0xd2, 0x91, 0x0c, 0x9e, 0xa4, 0x23, 0xd9, 0x36, 0x9c, 0xbc, 0x81, 0xda, 0x1b, + 0x33, 0xa6, 0xc0, 0x1d, 0xbb, 0x22, 0xf4, 0xe1, 0xf8, 0xe2, 0xc3, 0x15, 0x3c, 0xf1, 0xb0, 0x04, + 0xf5, 0x9e, 0xaf, 0x27, 0xd5, 0xe9, 0xc7, 0x88, 0x7c, 0x11, 0xe6, 0xd2, 0x8a, 0x84, 0xd6, 0x1c, + 0xbd, 0xe7, 0xd3, 0x2b, 0xd0, 0xbd, 0xe7, 0xd3, 0x38, 0x90, 0x35, 0x28, 0x72, 0x78, 0xa9, 0xd9, + 0x76, 0x3b, 0x5c, 0xf3, 0x3f, 0x15, 0x65, 0xa3, 0x16, 0x5c, 0x1d, 0x56, 0xc8, 0x5f, 0x00, 0x0c, + 0x87, 0x8b, 0x18, 0x25, 0xf9, 0xa9, 0x0c, 0xbb, 0xcd, 0xf1, 0xb8, 0x7a, 0x77, 0xec, 0xb5, 0x40, + 0x44, 0x5e, 0x39, 0x11, 0xf9, 0x52, 0xd4, 0x42, 0xdf, 0xed, 0xec, 0x0a, 0x67, 0x8a, 0x4d, 0xe1, + 0x4c, 0xf1, 0xce, 0x27, 0x72, 0xa6, 0xe0, 0xac, 0x82, 0x47, 0x07, 0x0b, 0x93, 0xbe, 0xa8, 0x13, + 0x57, 0x91, 0xd1, 0x02, 0x4c, 0x08, 0xdb, 0x6a, 0x79, 0x0f, 0xee, 0x74, 0xee, 0x53, 0xdf, 0xdd, + 0x71, 0x69, 0x93, 0x7f, 0xe4, 0x0c, 0xee, 0xe0, 0x3c, 0x21, 0x2c, 0xa6, 0x38, 0xee, 0x29, 0x84, + 0xc4, 0x87, 0xa6, 0x72, 0x60, 0x17, 0x4f, 0x69, 0xb0, 0xcf, 0xbd, 0xe2, 0x8a, 0xd1, 0xc5, 0x53, + 0x5a, 0xf7, 0xd7, 0x71, 0x1a, 0xe9, 0x93, 0xc7, 0x20, 0x21, 0x97, 0x61, 0xec, 0xb6, 0xf3, 0xb0, + 0xb4, 0x4b, 0x45, 0xd6, 0x8d, 0x29, 0xb9, 0xfd, 0x21, 0x70, 0x29, 0xff, 0x87, 0xdc, 0xea, 0xfb, + 0x19, 0x5b, 0xa0, 0x09, 0x73, 0xe2, 0xcf, 0x49, 0x32, 0xf2, 0xba, 0xee, 0x39, 0x95, 0x43, 0x21, + 0x73, 0xbc, 0xed, 0x3c, 0xac, 0x3b, 0xbb, 0xd4, 0x78, 0xa4, 0x14, 0x4a, 0xde, 0xbf, 0x3d, 0xc1, + 0xf7, 0xfe, 0x52, 0x2f, 0xdc, 0x93, 0xa7, 0xc5, 0x62, 0x9a, 0x7b, 0x03, 0x37, 0xae, 0xd2, 0xdc, + 0x1b, 0x4c, 0xa7, 0x06, 0xa9, 0xb4, 0xcf, 0xa6, 0x2a, 0xed, 0x5f, 0x83, 0x89, 0xf2, 0x1e, 0x6d, + 0xdc, 0x53, 0x76, 0xe4, 0x79, 0xa1, 0x15, 0x65, 0x40, 0x1e, 0xaa, 0x2e, 0x42, 0x20, 0x97, 0x01, + 0x30, 0xb9, 0x03, 0x17, 0x25, 0xb4, 0x70, 0xb3, 0x98, 0x03, 0x42, 0xbc, 0x57, 0x6b, 0x28, 0xc8, + 0xbe, 0x66, 0x5f, 0xd7, 0x1f, 0xb8, 0x39, 0xfb, 0xc0, 0xdf, 0x11, 0xe8, 0x11, 0x02, 0xfb, 0x3c, + 0x6d, 0x42, 0x88, 0xed, 0xab, 0x98, 0x98, 0x35, 0x3a, 0x12, 0xda, 0x8e, 0x49, 0xa3, 0x59, 0xdc, + 0xbd, 0x26, 0x85, 0xed, 0x98, 0x32, 0xb0, 0xb5, 0x23, 0x04, 0xf2, 0x39, 0x18, 0x2f, 0x53, 0x3f, + 0xdc, 0xdc, 0x5c, 0xc3, 0x37, 0x68, 0x1e, 0x93, 0x35, 0x8f, 0xf1, 0x33, 0xc3, 0xb0, 0xf5, 0xdd, + 0x83, 0x85, 0xa9, 0xd0, 0x6d, 0xd3, 0x4b, 0x6a, 0x2c, 0x24, 0x36, 0x59, 0x82, 0x22, 0x7f, 0xcd, + 0x8c, 0x44, 0x46, 0xdc, 0xd0, 0xf2, 0x7c, 0x7b, 0x15, 0x4f, 0x9f, 0x0f, 0xe8, 0xb6, 0x8a, 0x1e, + 0x9a, 0xc0, 0x27, 0x2b, 0x32, 0xe8, 0xae, 0xfe, 0x91, 0x10, 0xe9, 0x30, 0xc4, 0x11, 0x60, 0x7c, + 0x6b, 0x92, 0x82, 0x94, 0x60, 0xaa, 0xec, 0xb5, 0xbb, 0x4e, 0xe8, 0x62, 0xd6, 0x85, 0x7d, 0xb1, + 0x77, 0xa1, 0x1e, 0xa6, 0xa1, 0x17, 0x98, 0x99, 0xff, 0xb5, 0x02, 0x72, 0x1d, 0xa6, 0x6d, 0xaf, + 0xc7, 0x06, 0x49, 0x5e, 0x9e, 0xf8, 0xf6, 0x84, 0x6e, 0xb2, 0x3e, 0x2b, 0x61, 0xbb, 0xa9, 0xb8, + 0x29, 0x19, 0xb1, 0x8f, 0x0c, 0x2a, 0xb2, 0x9e, 0xa2, 0xc5, 0xd6, 0xf7, 0x24, 0x3d, 0x86, 0x68, + 0x82, 0x59, 0x8a, 0x02, 0xfc, 0x2a, 0x14, 0x6a, 0xb5, 0x8d, 0x4d, 0x1a, 0x84, 0xd7, 0x5b, 0xde, + 0x03, 0xdc, 0x92, 0xf2, 0x22, 0x74, 0x79, 0xe0, 0xd5, 0x43, 0x1a, 0x84, 0xf5, 0x9d, 0x96, 0xf7, + 0xc0, 0xd6, 0xb1, 0xc8, 0x57, 0x58, 0x7f, 0x68, 0x07, 0xb8, 0x88, 0xf2, 0x34, 0x48, 0xc6, 0xc0, + 0x85, 0x1f, 0x2d, 0x19, 0x26, 0x69, 0x98, 0x9d, 0xa5, 0xa1, 0xa3, 0x53, 0x04, 0xbb, 0xf6, 0x95, + 0x9a, 0x4d, 0x9f, 0x06, 0x81, 0xd8, 0x3b, 0xb8, 0x53, 0x04, 0xde, 0x11, 0x1d, 0x5e, 0x60, 0x38, + 0x45, 0x68, 0x04, 0xe4, 0x1b, 0x19, 0x38, 0xae, 0xdb, 0x55, 0xe3, 0x62, 0x69, 0xd3, 0x4e, 0x28, + 0x76, 0x92, 0xd7, 0x2f, 0xc9, 0xbd, 0xf3, 0x92, 0x86, 0x76, 0xe9, 0xfe, 0x95, 0x4b, 0x5a, 0x76, + 0xeb, 0x9a, 0x24, 0x12, 0x81, 0x52, 0xd2, 0xf8, 0xe9, 0xfb, 0xa0, 0x93, 0x42, 0x4a, 0xca, 0xec, + 0x78, 0x65, 0xf3, 0x09, 0xad, 0x28, 0x2a, 0x55, 0x91, 0x66, 0x9d, 0x07, 0x91, 0xe5, 0xb3, 0x8f, + 0xdb, 0x5b, 0xb8, 0x5d, 0xf3, 0x14, 0xd5, 0x68, 0x50, 0x28, 0xad, 0x95, 0x6e, 0xaf, 0x45, 0x92, + 0xd5, 0xf7, 0x96, 0x31, 0xb3, 0xf1, 0x6d, 0x03, 0x8c, 0x99, 0xef, 0xc0, 0xb1, 0x58, 0x37, 0x48, + 0xa1, 0xd4, 0x00, 0xc7, 0x85, 0xd2, 0x18, 0x8d, 0x1d, 0xc3, 0xb6, 0x7e, 0x79, 0x3c, 0xc6, 0x57, + 0x18, 0x30, 0x59, 0x30, 0xc6, 0x65, 0x4e, 0x3d, 0xe7, 0x26, 0x97, 0x48, 0x6d, 0x51, 0x42, 0x4e, + 0x41, 0xae, 0x56, 0xdb, 0xd0, 0xd3, 0x0c, 0x07, 0x81, 0x67, 0x33, 0x18, 0x1b, 0x21, 0xb4, 0x4d, + 0xd2, 0x82, 0x32, 0xb2, 0x6d, 0xcf, 0x46, 0x28, 0xeb, 0x6f, 0x29, 0x01, 0x8e, 0x44, 0xfd, 0x2d, + 0x24, 0xc0, 0x48, 0xee, 0x2b, 0xc3, 0x7c, 0x29, 0x08, 0xa8, 0x8f, 0x59, 0xe5, 0xb9, 0xc9, 0x8b, + 0x2f, 0xa4, 0x14, 0xb1, 0xbb, 0x63, 0xa5, 0x4e, 0x23, 0xb0, 0xfb, 0x22, 0x92, 0x0b, 0x90, 0x2f, + 0xf5, 0x9a, 0x2e, 0xed, 0x34, 0x8c, 0x68, 0x1d, 0x8e, 0x80, 0xd9, 0xaa, 0x94, 0x7c, 0x80, 0xc9, + 0xbd, 0x19, 0x91, 0x14, 0x55, 0x45, 0x0f, 0x8c, 0x47, 0x4b, 0x50, 0x4a, 0x51, 0xd1, 0x73, 0x2a, + 0xef, 0x92, 0x74, 0x4a, 0x52, 0x82, 0xe2, 0x0a, 0x1a, 0xef, 0x2f, 0x53, 0xae, 0xd9, 0xf5, 0x7c, + 0xee, 0x90, 0x20, 0x33, 0x8d, 0xb3, 0xb2, 0x7a, 0x53, 0x15, 0xda, 0x09, 0x74, 0x72, 0x0b, 0x8e, + 0xc5, 0x61, 0x6c, 0x23, 0xe7, 0xe2, 0x2d, 0x46, 0x05, 0x4b, 0x70, 0xc1, 0xad, 0x3c, 0x8d, 0x8a, + 0x6c, 0xc3, 0x6c, 0x64, 0x4e, 0x60, 0x0a, 0xbd, 0xd2, 0xfa, 0x4d, 0x95, 0x4b, 0xc1, 0xf7, 0x59, + 0x31, 0x19, 0x8f, 0x45, 0xa6, 0x09, 0x4a, 0xf8, 0xb5, 0x93, 0xec, 0x48, 0x13, 0xa6, 0x6b, 0xee, + 0x6e, 0xc7, 0xed, 0xec, 0xde, 0xa2, 0xfb, 0x55, 0xc7, 0xf5, 0x85, 0x1d, 0x92, 0xb4, 0x32, 0x2c, + 0x05, 0xfb, 0xed, 0x36, 0x0d, 0x7d, 0x3c, 0x22, 0x59, 0x39, 0xfa, 0xee, 0x31, 0x61, 0xe6, 0x74, + 0xc0, 0xe9, 0xd0, 0x4f, 0xa5, 0xeb, 0xb8, 0xc6, 0x59, 0x60, 0xf2, 0x34, 0x2e, 0x1e, 0x93, 0x43, + 0x5e, 0x3c, 0x5a, 0x30, 0xbb, 0xd2, 0x69, 0xf8, 0xfb, 0xa8, 0x60, 0x97, 0x8d, 0x9b, 0x3a, 0xa4, + 0x71, 0x2f, 0x8a, 0xc6, 0x3d, 0xe7, 0xc8, 0x19, 0x96, 0xd6, 0xbc, 0x24, 0x63, 0x52, 0x83, 0x59, + 0x94, 0x0e, 0x2b, 0xcb, 0xd5, 0x4a, 0xc7, 0x0d, 0x5d, 0xcc, 0x0c, 0xc9, 0xcf, 0x98, 0x97, 0x04, + 0xcf, 0x33, 0x5c, 0xc0, 0x74, 0x9b, 0xdd, 0xba, 0x2b, 0x51, 0x74, 0xa6, 0x09, 0x7a, 0xeb, 0xdf, + 0xcb, 0xf3, 0xdd, 0x50, 0x17, 0xd3, 0xfa, 0x59, 0x56, 0xc5, 0xc4, 0xb7, 0xec, 0x51, 0xc4, 0xb7, + 0xdc, 0xe1, 0xe2, 0xdb, 0xc8, 0x61, 0xe2, 0x5b, 0x4c, 0xbe, 0x1a, 0x3d, 0xb2, 0x7c, 0x35, 0x76, + 0x04, 0xf9, 0x6a, 0xfc, 0x48, 0xf2, 0x95, 0x21, 0x28, 0xe6, 0x0f, 0x13, 0x14, 0xff, 0x3f, 0x69, + 0xec, 0x69, 0x95, 0xc6, 0xd2, 0x0e, 0xd7, 0x23, 0x49, 0x63, 0xfd, 0x85, 0xa9, 0xe2, 0x5f, 0xb4, + 0x30, 0x35, 0xfb, 0x09, 0x84, 0xa9, 0x1f, 0x80, 0x62, 0x7c, 0x7f, 0x3f, 0x3c, 0x1e, 0xd5, 0x13, + 0x8b, 0x9d, 0xc2, 0x4e, 0x9f, 0xf8, 0xfe, 0xca, 0x2e, 0x79, 0x55, 0xdf, 0xbd, 0xef, 0x84, 0x34, + 0x4a, 0x65, 0x8f, 0x97, 0xbc, 0x2e, 0x87, 0xe2, 0x9a, 0xd7, 0x50, 0x94, 0x68, 0x91, 0x4d, 0x13, + 0x2d, 0xac, 0x1f, 0xcb, 0xc2, 0x2c, 0x0f, 0xf7, 0xf0, 0xf4, 0x6b, 0x31, 0xdf, 0x33, 0x04, 0x46, + 0x69, 0xac, 0x14, 0xfb, 0xba, 0x01, 0x7a, 0xcc, 0x2f, 0xc3, 0xf1, 0x44, 0x57, 0xa0, 0xd0, 0xb8, + 0x2c, 0x03, 0x6d, 0x24, 0xc4, 0xc6, 0xf9, 0xf4, 0x4a, 0xee, 0x5e, 0xb5, 0x13, 0x14, 0xd6, 0xff, + 0x98, 0x4b, 0xf0, 0x17, 0x1a, 0x4d, 0x5d, 0x47, 0x99, 0x39, 0x9a, 0x8e, 0x32, 0x3b, 0x9c, 0x8e, + 0x32, 0x76, 0xb6, 0xe4, 0x86, 0x39, 0x5b, 0x3e, 0x80, 0xa9, 0x4d, 0xea, 0xb4, 0x83, 0x4d, 0x4f, + 0x04, 0xbd, 0xe5, 0xc6, 0x8a, 0x32, 0x8e, 0x06, 0x2b, 0x93, 0x32, 0x8f, 0x32, 0xba, 0x08, 0x19, + 0x01, 0xdb, 0x0f, 0x79, 0x14, 0x5c, 0xdb, 0xe4, 0xa0, 0x0b, 0xb2, 0xa3, 0x03, 0x04, 0xd9, 0x1a, + 0x4c, 0x0a, 0xba, 0x28, 0x08, 0x57, 0x24, 0x71, 0xb1, 0x22, 0x84, 0xcb, 0xda, 0x55, 0x5a, 0x22, + 0x55, 0x3b, 0x17, 0xb6, 0x0c, 0x26, 0xac, 0x0b, 0x56, 0x3a, 0xcd, 0xae, 0xe7, 0x76, 0xb0, 0x0b, + 0xc6, 0xa3, 0x2e, 0xa0, 0x02, 0xcc, 0xbb, 0x40, 0x43, 0x22, 0xef, 0xc0, 0x74, 0xa9, 0x5a, 0xd1, + 0xc9, 0xf2, 0x91, 0x9a, 0xd4, 0xe9, 0xba, 0x75, 0x83, 0x34, 0x86, 0x6b, 0xfd, 0xd0, 0x84, 0x5c, + 0x5b, 0x9f, 0xae, 0x96, 0xc8, 0xd4, 0xfb, 0xe4, 0x8e, 0xa8, 0xf7, 0x19, 0x39, 0xec, 0x38, 0x37, + 0x64, 0x8c, 0xd1, 0x23, 0xc8, 0x18, 0x63, 0x8f, 0xad, 0xc3, 0x19, 0x3f, 0xa2, 0xd4, 0x10, 0x9b, + 0xe6, 0xf9, 0x61, 0xa6, 0x79, 0xaa, 0xa4, 0x31, 0xf1, 0xf8, 0x92, 0x06, 0x1c, 0x59, 0xd2, 0xd0, + 0x92, 0x97, 0x17, 0x86, 0x4a, 0x5e, 0x9e, 0x19, 0x22, 0x79, 0xf9, 0xf7, 0x94, 0xf8, 0xf2, 0xd5, + 0x74, 0xf1, 0x65, 0xf0, 0x56, 0xff, 0xff, 0x66, 0x01, 0xc6, 0xc7, 0x5e, 0xde, 0x72, 0x7c, 0x76, + 0x17, 0x0c, 0xc8, 0x65, 0x18, 0x97, 0x31, 0x6c, 0x32, 0xd1, 0xb5, 0x3a, 0x19, 0xbc, 0x46, 0x62, + 0xb1, 0x6b, 0xa3, 0x24, 0x16, 0x5e, 0xdc, 0x3c, 0x5c, 0x87, 0x80, 0x19, 0xe1, 0x3a, 0x04, 0xcc, + 0xfa, 0x87, 0x23, 0x72, 0x25, 0xb3, 0x6b, 0x8d, 0x48, 0xc1, 0xb8, 0xa4, 0x8d, 0x9c, 0x26, 0x3e, + 0xc5, 0xc6, 0x26, 0x66, 0x9d, 0x64, 0x92, 0x7c, 0x92, 0x00, 0x40, 0x5a, 0x6e, 0x8a, 0xdc, 0x10, + 0xb9, 0x29, 0xde, 0x34, 0x12, 0x3b, 0x8c, 0x44, 0x91, 0xc4, 0xd9, 0xec, 0x1e, 0x9c, 0xd2, 0xe1, + 0x9a, 0x9e, 0x81, 0x61, 0x34, 0x72, 0x78, 0x47, 0xca, 0x01, 0xb9, 0x17, 0x94, 0x3c, 0x38, 0x76, + 0x94, 0xd0, 0x5a, 0xe3, 0x7f, 0xa1, 0xa1, 0xb5, 0x56, 0x8c, 0x2c, 0xe4, 0x5c, 0x55, 0xff, 0x52, + 0xdf, 0x2c, 0xe3, 0xc6, 0xf3, 0x89, 0x46, 0x68, 0xfd, 0x3e, 0x81, 0xd9, 0x5a, 0x6d, 0x63, 0xd9, + 0x75, 0x76, 0x3b, 0x5e, 0x10, 0xba, 0x8d, 0x4a, 0x67, 0xc7, 0x63, 0xc2, 0x90, 0xda, 0x15, 0xb4, + 0xc0, 0x4c, 0xd1, 0x8e, 0xa0, 0x8a, 0x99, 0xb0, 0xbd, 0xe2, 0xfb, 0x9e, 0xaf, 0x0b, 0xdb, 0x94, + 0x01, 0x6c, 0x0e, 0x67, 0xf2, 0x46, 0xad, 0xc7, 0x13, 0xac, 0xf1, 0xd7, 0x13, 0x94, 0x37, 0x02, + 0x0e, 0xb2, 0x65, 0x19, 0xa1, 0xc9, 0x09, 0x2b, 0xe4, 0xcf, 0x93, 0x46, 0x80, 0xae, 0xa8, 0x98, + 0xef, 0x79, 0xe2, 0x4c, 0x42, 0x77, 0x97, 0x2e, 0xc2, 0xf5, 0x47, 0xbd, 0xc4, 0x1a, 0xd8, 0x87, + 0xe3, 0x86, 0xdb, 0xc6, 0xb0, 0x1a, 0xa5, 0x57, 0x84, 0x7c, 0x63, 0xa1, 0xf7, 0x59, 0x8a, 0x5a, + 0x49, 0x8f, 0x84, 0x9c, 0x5a, 0x03, 0xf9, 0xb1, 0x0c, 0x9c, 0x49, 0x2d, 0x51, 0xab, 0xbb, 0x60, + 0x04, 0x49, 0xd3, 0x36, 0x0d, 0x1e, 0xf3, 0xb9, 0x5f, 0xd5, 0xf5, 0x94, 0xad, 0x60, 0x70, 0x4d, + 0xe4, 0x37, 0x33, 0x70, 0xd2, 0xc0, 0x50, 0x7b, 0x5e, 0x80, 0x67, 0x53, 0xdf, 0x79, 0xfd, 0xf1, + 0x93, 0x99, 0xd7, 0xe7, 0xcc, 0x6f, 0x89, 0xb6, 0x64, 0xfd, 0x1b, 0xfa, 0xb5, 0x90, 0xdc, 0x87, + 0x59, 0x2c, 0x92, 0xda, 0x2d, 0x36, 0x67, 0x85, 0x52, 0x6c, 0x2e, 0x6a, 0x36, 0x77, 0x45, 0xc2, + 0xbc, 0x3d, 0x8b, 0xdf, 0x39, 0x58, 0x98, 0x32, 0xd0, 0x31, 0x34, 0x2d, 0xb6, 0x41, 0xa9, 0xc8, + 0xdc, 0xce, 0x8e, 0xa7, 0x9f, 0x97, 0x89, 0x2a, 0xc8, 0xbf, 0x9f, 0x81, 0x79, 0x06, 0xe5, 0x9f, + 0x71, 0xdd, 0xf7, 0xda, 0xaa, 0x5c, 0xbe, 0x0e, 0xf7, 0xe9, 0xb6, 0xd6, 0x93, 0xe9, 0xb6, 0x97, + 0xb0, 0xc9, 0x7c, 0x4f, 0xa8, 0xef, 0xf8, 0x5e, 0x3b, 0x6a, 0xbe, 0x91, 0x77, 0xae, 0x5f, 0x23, + 0xc9, 0x0f, 0x67, 0xe0, 0x94, 0xa1, 0x60, 0xd0, 0xa3, 0x92, 0x0a, 0x87, 0x2f, 0x69, 0x4a, 0xa0, + 0x17, 0x2d, 0x5d, 0x12, 0xf3, 0xff, 0x3c, 0xb6, 0x20, 0x3a, 0x2d, 0xb0, 0x2d, 0xf5, 0x36, 0xc7, + 0xd2, 0x9a, 0xd0, 0xbf, 0x16, 0xe2, 0xc2, 0x2c, 0xbe, 0x38, 0x19, 0x56, 0x0c, 0x73, 0xfd, 0xad, + 0x18, 0x54, 0x7e, 0x05, 0x8c, 0xfc, 0xd8, 0xdf, 0x94, 0x21, 0xc9, 0x95, 0xfc, 0x15, 0x38, 0x95, + 0x00, 0xaa, 0xd5, 0x76, 0xbc, 0xef, 0x6a, 0x7b, 0xf5, 0xd1, 0xc1, 0xc2, 0xcb, 0x69, 0xb5, 0xa5, + 0xad, 0xb4, 0xfe, 0x35, 0x10, 0x07, 0x20, 0x2a, 0x14, 0xe9, 0xeb, 0xd2, 0x27, 0xe8, 0xab, 0x62, + 0x7e, 0x68, 0xf8, 0x6c, 0x2f, 0xd7, 0xda, 0xa0, 0x1f, 0x79, 0x11, 0x12, 0xa1, 0x30, 0xa9, 0x45, + 0xbd, 0xdc, 0xc7, 0x3c, 0x76, 0x7d, 0x2b, 0xf9, 0xce, 0xc1, 0x82, 0x81, 0xcd, 0xe4, 0x62, 0x3d, + 0x9c, 0xa6, 0x2e, 0x17, 0x1b, 0x88, 0xe4, 0xd7, 0x33, 0x30, 0xc7, 0x00, 0xd1, 0xa4, 0x12, 0x1f, + 0x35, 0x3f, 0x68, 0xd6, 0xef, 0x3d, 0x99, 0x59, 0xff, 0x02, 0xb6, 0x51, 0x9f, 0xf5, 0x89, 0x2e, + 0x49, 0x6d, 0x1c, 0xce, 0x76, 0xe3, 0x71, 0xd3, 0x98, 0xed, 0xa7, 0x86, 0x98, 0xed, 0x7c, 0x00, + 0x0e, 0x9f, 0xed, 0x7d, 0x6b, 0x21, 0x9b, 0x30, 0x29, 0x44, 0x62, 0xde, 0x61, 0xcf, 0x1b, 0x61, + 0xf1, 0xf4, 0x22, 0x7e, 0x4f, 0x11, 0x41, 0x41, 0x13, 0x5f, 0x68, 0x70, 0x21, 0x1d, 0x38, 0xc6, + 0x7f, 0x9b, 0xda, 0x81, 0x85, 0xbe, 0xda, 0x81, 0x0b, 0xe2, 0x8b, 0xce, 0x0a, 0xfe, 0x31, 0x25, + 0x81, 0x9e, 0x40, 0x22, 0x85, 0x31, 0xe9, 0x02, 0x31, 0xc0, 0x7c, 0xd1, 0x9e, 0x1d, 0xac, 0x13, + 0x78, 0x59, 0xd4, 0xb9, 0x10, 0xaf, 0x33, 0xbe, 0x72, 0x53, 0x78, 0x13, 0x07, 0x66, 0x04, 0x94, + 0x5d, 0x80, 0x71, 0x87, 0x7f, 0xc1, 0xf0, 0x0d, 0x8f, 0x95, 0xf2, 0xe4, 0x5f, 0xb2, 0x26, 0xf4, + 0xdd, 0x8f, 0x6d, 0xe8, 0x71, 0x7e, 0x64, 0x03, 0x66, 0x4b, 0xdd, 0x6e, 0xcb, 0xa5, 0x4d, 0xfc, + 0x4a, 0x9e, 0x8a, 0xcc, 0x8a, 0x42, 0x97, 0x3b, 0xbc, 0x50, 0x88, 0xf8, 0xf1, 0x3c, 0x64, 0x49, + 0x5a, 0xeb, 0x1b, 0x99, 0x44, 0xa3, 0xd9, 0xcd, 0x1d, 0x7f, 0x68, 0x6e, 0xa1, 0x78, 0x73, 0xe7, + 0x4d, 0x44, 0x0d, 0x42, 0x84, 0xc0, 0x84, 0x25, 0x3d, 0xe4, 0x48, 0x4e, 0xa4, 0x96, 0xe7, 0xa0, + 0xe8, 0x42, 0xb9, 0x20, 0xad, 0xcb, 0x72, 0x91, 0xd0, 0x85, 0xd6, 0x65, 0xc2, 0xa6, 0xcc, 0xfa, + 0xe1, 0xac, 0x39, 0xed, 0xc8, 0x05, 0x4d, 0x6e, 0xd7, 0x82, 0x9e, 0x48, 0xb9, 0x5d, 0x93, 0xd6, + 0xff, 0x41, 0x06, 0x8e, 0x6d, 0xf8, 0xbb, 0x4e, 0xc7, 0xfd, 0x3a, 0x0f, 0x9e, 0xe6, 0xe1, 0xb8, + 0x28, 0x8f, 0x98, 0x4f, 0x35, 0x9a, 0xbd, 0xa7, 0x55, 0xcc, 0x66, 0x0a, 0x4e, 0x19, 0x3b, 0xad, + 0x3d, 0x68, 0xaf, 0x8b, 0x0d, 0xd3, 0x92, 0x0a, 0x70, 0x74, 0x0e, 0xb7, 0x7e, 0x32, 0x0b, 0x05, + 0x6d, 0x09, 0x90, 0xcf, 0xc2, 0xa4, 0xce, 0x47, 0xd7, 0xfa, 0xe8, 0xd5, 0xda, 0x06, 0x16, 0xaa, + 0x7d, 0xa8, 0xd3, 0x36, 0xd4, 0x3e, 0x6c, 0xa2, 0x23, 0xf4, 0x88, 0x57, 0x9b, 0xf7, 0x53, 0xae, + 0x36, 0x47, 0xca, 0x59, 0xf7, 0x4e, 0xf2, 0x82, 0x33, 0x7c, 0x8a, 0x39, 0xeb, 0xa7, 0x33, 0x50, + 0x8c, 0x2f, 0xd2, 0x4f, 0xa5, 0x57, 0x8e, 0xa0, 0x5f, 0xff, 0x89, 0xac, 0x0a, 0x79, 0x2b, 0xbd, + 0x10, 0x9e, 0x56, 0x5b, 0x89, 0x77, 0x0d, 0xd5, 0xf7, 0xb3, 0xea, 0x5c, 0xd1, 0x3f, 0x6e, 0x40, + 0x74, 0x96, 0x91, 0x6f, 0xff, 0xfc, 0xc2, 0x33, 0xd6, 0x87, 0x30, 0x17, 0xef, 0x0e, 0x54, 0x7f, + 0x97, 0x60, 0xc6, 0x84, 0xc7, 0x03, 0x66, 0xc7, 0xa9, 0xec, 0x38, 0xbe, 0xf5, 0x87, 0xd9, 0x38, + 0x6f, 0x61, 0x37, 0xc1, 0x36, 0x9d, 0x8e, 0xb3, 0xdd, 0x52, 0x51, 0x78, 0xf9, 0xa6, 0xc3, 0x41, + 0xb6, 0x2c, 0x3b, 0x4a, 0xe8, 0x74, 0x65, 0x4b, 0x9f, 0x4b, 0xb7, 0xa5, 0x27, 0xd7, 0x62, 0x16, + 0x43, 0x9a, 0xe3, 0xf7, 0x03, 0xba, 0x5d, 0x8f, 0xac, 0x86, 0x62, 0x86, 0x42, 0x65, 0x98, 0x33, + 0xa2, 0xe3, 0x49, 0xfa, 0xd1, 0x48, 0xe1, 0x1a, 0x62, 0x01, 0x27, 0x4e, 0x45, 0x26, 0xab, 0x30, + 0xce, 0x9a, 0x79, 0xdb, 0xe9, 0x0a, 0xad, 0xb6, 0x9e, 0xf6, 0x5f, 0x1e, 0x5e, 0x9a, 0x73, 0x4d, + 0x8b, 0xb2, 0x23, 0xdf, 0x48, 0xf9, 0xc8, 0x11, 0xad, 0x3f, 0xcb, 0xb0, 0xf5, 0xdf, 0xb8, 0xf7, + 0x3d, 0x16, 0xd4, 0x9d, 0x7d, 0xd2, 0x00, 0xb3, 0x9e, 0x3f, 0xce, 0xf2, 0x40, 0xca, 0x62, 0xfa, + 0xbc, 0x09, 0x63, 0x9b, 0x8e, 0xbf, 0x4b, 0x43, 0x11, 0xf2, 0x57, 0xe7, 0xc2, 0x0b, 0x22, 0xb7, + 0xf4, 0x10, 0x7f, 0xdb, 0x82, 0x40, 0xd7, 0x85, 0x65, 0x87, 0xd2, 0x85, 0x69, 0xea, 0xd9, 0xdc, + 0x13, 0x53, 0xcf, 0x7e, 0x9f, 0x8a, 0x61, 0x5c, 0x0a, 0x87, 0x08, 0xbe, 0x76, 0x36, 0x1e, 0x1e, + 0x3c, 0x11, 0x26, 0x2f, 0x62, 0x47, 0xae, 0xe9, 0x01, 0xc7, 0x35, 0xf3, 0xf4, 0x43, 0x42, 0x8b, + 0x5b, 0x7f, 0x9c, 0xe3, 0x7d, 0x2c, 0x3a, 0xea, 0xbc, 0xe1, 0xba, 0x82, 0xeb, 0x24, 0x96, 0x78, + 0x9b, 0x3b, 0xb1, 0x9c, 0x87, 0x11, 0x36, 0x37, 0x45, 0x6f, 0xf2, 0x94, 0xed, 0x5e, 0xcb, 0xf0, + 0x36, 0x64, 0xe5, 0x6c, 0x2d, 0xe3, 0x99, 0xa4, 0xe7, 0x36, 0xc0, 0x63, 0x4b, 0x5f, 0xcb, 0x88, + 0x41, 0x2e, 0xc0, 0xc8, 0xba, 0xd7, 0x94, 0x41, 0xfe, 0xe6, 0xd0, 0x81, 0xd1, 0xc8, 0x61, 0x3c, + 0x9f, 0xb1, 0x11, 0x83, 0x7d, 0xab, 0x0a, 0x0b, 0xac, 0x7f, 0x6b, 0x7b, 0xc7, 0x11, 0x21, 0xcb, + 0xf5, 0x6f, 0x8d, 0x22, 0x08, 0xaf, 0xc0, 0xb4, 0x99, 0xa1, 0x4a, 0x18, 0x3d, 0xa1, 0x9a, 0x35, + 0x96, 0xe8, 0x4a, 0xd7, 0x8e, 0x9b, 0x44, 0x64, 0x09, 0xa6, 0x8c, 0xe0, 0x42, 0xe2, 0x79, 0x09, + 0xd5, 0x9b, 0x66, 0x68, 0x22, 0x5d, 0xbd, 0x69, 0x90, 0xb0, 0xf3, 0x5c, 0xb4, 0x5f, 0x7b, 0x64, + 0x4a, 0xb4, 0x5d, 0xe0, 0x90, 0xab, 0x90, 0xe7, 0x9e, 0x82, 0x95, 0x65, 0xfd, 0xb5, 0x22, 0x40, + 0x58, 0xcc, 0xd3, 0x56, 0x22, 0x6a, 0x9e, 0x61, 0x9f, 0x81, 0xa2, 0xd8, 0x92, 0x54, 0x2e, 0x0b, + 0x7c, 0x29, 0xae, 0x2c, 0xdb, 0xfa, 0x36, 0xd2, 0x70, 0x9b, 0xbe, 0x8d, 0x50, 0xeb, 0x5b, 0x19, + 0x38, 0xb5, 0x4e, 0xc3, 0x07, 0x9e, 0x7f, 0xcf, 0xa6, 0x41, 0xe8, 0xbb, 0x3c, 0x35, 0x06, 0x2e, + 0xc4, 0xcf, 0x92, 0x77, 0x60, 0x14, 0xad, 0x6f, 0x62, 0x27, 0x43, 0xbc, 0x8e, 0xa5, 0x29, 0x31, + 0x81, 0x47, 0xd1, 0x94, 0xc7, 0xe6, 0x44, 0xe4, 0x4d, 0x18, 0x59, 0xa6, 0x9d, 0xfd, 0x58, 0x8e, + 0x84, 0x04, 0xb1, 0xda, 0x10, 0x9a, 0xb4, 0xb3, 0x6f, 0x23, 0x89, 0xf5, 0xd3, 0x59, 0x38, 0x9e, + 0xd2, 0xac, 0xbb, 0x9f, 0x7d, 0x4a, 0x77, 0xc5, 0x25, 0x63, 0x57, 0x3c, 0x2b, 0x48, 0xfb, 0x76, + 0x7c, 0xea, 0x26, 0xf9, 0x77, 0x33, 0x70, 0xd2, 0x9c, 0xa0, 0xc2, 0xdc, 0xee, 0xee, 0x55, 0xf2, + 0x36, 0x8c, 0xad, 0x52, 0xa7, 0x49, 0x65, 0x90, 0xf4, 0x28, 0xed, 0x3c, 0x77, 0x83, 0xe2, 0x85, + 0x9c, 0x6d, 0x64, 0x34, 0xcf, 0xa1, 0x64, 0x59, 0x34, 0x8e, 0xcb, 0xe3, 0x96, 0x74, 0x49, 0x4c, + 0xab, 0x6a, 0xc0, 0x3b, 0xfb, 0x77, 0x32, 0xf0, 0xec, 0x00, 0x1a, 0x36, 0x70, 0x6c, 0xe8, 0xf5, + 0x81, 0xc3, 0x13, 0x15, 0xa1, 0xe4, 0x3d, 0x98, 0xd9, 0x14, 0xf2, 0xbc, 0x1c, 0x8e, 0x6c, 0xb4, + 0x5e, 0xa4, 0xa8, 0x5f, 0x97, 0xe3, 0x12, 0x47, 0x36, 0x7c, 0x65, 0x73, 0x03, 0x7d, 0x65, 0x75, + 0xd7, 0xd3, 0x91, 0x61, 0x5d, 0x4f, 0x3f, 0x8c, 0xe7, 0x75, 0x15, 0x11, 0xc0, 0x22, 0xc7, 0xdb, + 0x4c, 0x7f, 0xc7, 0xdb, 0x81, 0x71, 0x86, 0x30, 0xa7, 0x82, 0xc9, 0xfb, 0x71, 0xc7, 0xf3, 0x5d, + 0x63, 0x3c, 0x9f, 0x4d, 0x1f, 0xcf, 0xfe, 0x03, 0xf9, 0x73, 0x99, 0xf8, 0xc7, 0x0e, 0x35, 0x82, + 0x16, 0x8c, 0x2d, 0x7b, 0x6d, 0xc7, 0xed, 0xe8, 0x69, 0xe9, 0x9a, 0x08, 0xb1, 0x45, 0xc9, 0x70, + 0x7e, 0xca, 0x67, 0x61, 0x74, 0xdd, 0xeb, 0x94, 0x96, 0x85, 0x6d, 0x1d, 0xf2, 0xe9, 0x78, 0x9d, + 0xba, 0xd3, 0xb4, 0x79, 0x81, 0xf5, 0x63, 0xa3, 0x70, 0xca, 0xa6, 0xbb, 0x2e, 0x93, 0x38, 0xef, + 0x04, 0x6e, 0x67, 0xd7, 0x70, 0xca, 0xb4, 0x62, 0x63, 0x22, 0x22, 0x63, 0x32, 0x88, 0xaa, 0xe3, + 0x22, 0xe4, 0xd9, 0x01, 0xa3, 0x0d, 0x0b, 0x3e, 0x47, 0x60, 0x8e, 0x4d, 0x3e, 0x5f, 0x64, 0x31, + 0x79, 0x45, 0x1c, 0x80, 0x5a, 0xec, 0x62, 0x76, 0x00, 0x7e, 0xf7, 0x60, 0x01, 0x6a, 0xfb, 0x41, + 0x48, 0xf1, 0xf2, 0x23, 0x0e, 0x41, 0x25, 0xa5, 0x8e, 0xf4, 0x91, 0x52, 0x6f, 0xc3, 0x5c, 0xa9, + 0xc9, 0xf7, 0x3d, 0xa7, 0x55, 0xf5, 0xdd, 0x4e, 0xc3, 0xed, 0x3a, 0x2d, 0x79, 0xf3, 0xc2, 0x47, + 0x29, 0x47, 0x95, 0xd7, 0xbb, 0x0a, 0xc1, 0x4e, 0x25, 0x63, 0x9f, 0xb1, 0xbc, 0x5e, 0xe3, 0xf9, + 0xa3, 0xf9, 0x4b, 0x13, 0x7e, 0x46, 0xb3, 0x13, 0xf0, 0x04, 0xd2, 0xb6, 0x2a, 0x46, 0xf9, 0x18, + 0x9f, 0xf3, 0x37, 0xd7, 0x6a, 0x91, 0xdb, 0x06, 0x0f, 0xad, 0xc8, 0x9f, 0xfc, 0xc3, 0x56, 0x80, + 0xcf, 0xfe, 0x06, 0x5e, 0x44, 0x57, 0xab, 0xad, 0x32, 0xba, 0x7c, 0x82, 0x2e, 0x08, 0xf6, 0x74, + 0x3a, 0x8e, 0x47, 0x2e, 0x03, 0xf0, 0xa0, 0x40, 0x38, 0x65, 0x26, 0x22, 0x69, 0xda, 0x47, 0x28, + 0x97, 0xa6, 0x35, 0x14, 0xf2, 0x0e, 0x1c, 0x5b, 0x29, 0x2f, 0x4a, 0xfd, 0xe0, 0xb2, 0xd7, 0xe8, + 0xe1, 0x03, 0x2d, 0x60, 0x7d, 0x38, 0x86, 0xb4, 0xb1, 0xc8, 0xe6, 0x49, 0x1a, 0x1a, 0x39, 0x0f, + 0xe3, 0x95, 0x65, 0xde, 0xf7, 0x05, 0x3d, 0x7e, 0xb8, 0x30, 0x7c, 0x90, 0x85, 0x64, 0x23, 0x12, + 0xf7, 0x26, 0x0f, 0x95, 0xcb, 0x4e, 0x1d, 0x2e, 0xea, 0x89, 0x30, 0xe3, 0x3c, 0x9d, 0x45, 0xd9, + 0x6b, 0xd2, 0xe0, 0xee, 0x95, 0xef, 0xb1, 0x30, 0xe3, 0xda, 0xb7, 0xe1, 0x46, 0x70, 0x25, 0x75, + 0xd7, 0xf8, 0x57, 0x30, 0xcc, 0x78, 0x02, 0x97, 0x7c, 0x1e, 0x46, 0xf1, 0xa7, 0x10, 0x21, 0x8e, + 0xa5, 0xb0, 0x8d, 0xc4, 0x87, 0x06, 0xcf, 0xd0, 0x88, 0x04, 0xa4, 0x02, 0xe3, 0x42, 0x7a, 0x3d, + 0x4a, 0xb0, 0x5c, 0x21, 0x06, 0xf3, 0x41, 0x12, 0xf4, 0x56, 0x13, 0x26, 0xf5, 0x0a, 0xd9, 0xe4, + 0x5c, 0x75, 0x82, 0x3d, 0xda, 0x64, 0xbf, 0x44, 0x9c, 0x7b, 0x9c, 0x9c, 0x7b, 0x08, 0xad, 0xb3, + 0x76, 0xd8, 0x1a, 0x0a, 0xdb, 0xb8, 0x2a, 0xc1, 0x9d, 0x40, 0x34, 0x45, 0xdc, 0x67, 0x5d, 0xd4, + 0x8d, 0x34, 0x6d, 0x51, 0x64, 0x7d, 0x1f, 0xcc, 0xad, 0xf7, 0x5a, 0x2d, 0x76, 0xb7, 0x95, 0x71, + 0x50, 0x43, 0x27, 0xa4, 0x64, 0x09, 0x46, 0xf1, 0x0f, 0xac, 0x68, 0x5a, 0x75, 0x81, 0x8e, 0x83, + 0xb6, 0x56, 0x19, 0x74, 0xe9, 0x0c, 0xcd, 0xec, 0xea, 0x9c, 0xd4, 0xfa, 0xbd, 0x28, 0x57, 0xe8, + 0xa6, 0xef, 0x34, 0xee, 0x51, 0x5f, 0x9c, 0x40, 0xc3, 0xa6, 0x3d, 0xbd, 0x29, 0x1b, 0x61, 0x9e, + 0x0a, 0x69, 0x0d, 0x3e, 0xac, 0x31, 0xe4, 0x1d, 0x28, 0x88, 0x93, 0x41, 0x0b, 0x44, 0x82, 0xde, + 0xde, 0x32, 0x79, 0x6c, 0xec, 0xe5, 0x5e, 0x47, 0xc7, 0x03, 0xcf, 0xfc, 0x94, 0xbb, 0x57, 0x3e, + 0x8d, 0x03, 0xcf, 0xac, 0x63, 0xc0, 0xd4, 0xfd, 0x67, 0x85, 0x78, 0xdf, 0x8a, 0xb9, 0x7b, 0x4d, + 0x0f, 0x3d, 0x90, 0x89, 0xae, 0x1f, 0x51, 0xe8, 0x01, 0xfd, 0xfa, 0xa1, 0x50, 0xd5, 0x98, 0x64, + 0x0f, 0x19, 0x93, 0xf7, 0xe4, 0x98, 0xe4, 0xfa, 0x4f, 0x8c, 0x63, 0x03, 0xc6, 0xa1, 0x16, 0xad, + 0x90, 0x91, 0xa1, 0xee, 0xae, 0xcf, 0x60, 0x8c, 0x45, 0x4e, 0x12, 0xdf, 0xd0, 0x04, 0x27, 0xfd, + 0x42, 0x3c, 0x3a, 0x3c, 0xd3, 0x43, 0x2e, 0xc4, 0x6f, 0xc1, 0x64, 0x29, 0x0c, 0x9d, 0xc6, 0x1e, + 0x6d, 0x2e, 0xb3, 0xed, 0x49, 0xf3, 0x92, 0x76, 0x04, 0x5c, 0x7f, 0x99, 0xd0, 0x71, 0x79, 0xd4, + 0x1f, 0x27, 0x10, 0x86, 0x63, 0x2a, 0xea, 0x0f, 0x83, 0x98, 0x51, 0x7f, 0x18, 0x84, 0x5c, 0x86, + 0xf1, 0x4a, 0xe7, 0xbe, 0xcb, 0xfa, 0x24, 0x1f, 0x25, 0x01, 0x74, 0x39, 0x48, 0xdf, 0x5c, 0x05, + 0x16, 0x79, 0x53, 0x93, 0x1c, 0x27, 0xa2, 0x5b, 0x22, 0xd7, 0x2b, 0xd4, 0xa5, 0x00, 0xa9, 0x4b, + 0x85, 0x4a, 0x94, 0xbc, 0x06, 0xe3, 0x52, 0x5d, 0x04, 0xd1, 0xcd, 0x50, 0x50, 0x26, 0x3d, 0xd4, + 0x24, 0x32, 0x66, 0xcc, 0xd2, 0xe2, 0xf5, 0x17, 0xb4, 0x8c, 0x59, 0x5a, 0xbc, 0x7e, 0x23, 0x63, + 0x96, 0x16, 0xb9, 0x5f, 0xdd, 0xb4, 0x27, 0x0f, 0xbd, 0x69, 0xdf, 0x85, 0xc9, 0xaa, 0xe3, 0x87, + 0x2e, 0x13, 0x17, 0x3a, 0x61, 0x30, 0x3f, 0x65, 0x28, 0xa7, 0xb4, 0xa2, 0xa5, 0xe7, 0x65, 0xe6, + 0xa8, 0xae, 0x86, 0x6f, 0xa6, 0x1c, 0x8a, 0xe0, 0xe9, 0x66, 0x63, 0xd3, 0x8f, 0x63, 0x36, 0x86, + 0x9d, 0x8a, 0x0a, 0x89, 0x99, 0xe8, 0xda, 0x8b, 0x92, 0x61, 0x4c, 0x2b, 0xa1, 0x10, 0xc9, 0x97, + 0x60, 0x92, 0xfd, 0x8d, 0x09, 0x85, 0x5d, 0x1a, 0xcc, 0x17, 0xf1, 0xe3, 0x9e, 0x4f, 0x5d, 0xfd, + 0x3c, 0xeb, 0x70, 0x8d, 0x86, 0x7c, 0x01, 0x23, 0xe3, 0xb8, 0xa6, 0xd1, 0xe0, 0x46, 0xde, 0x87, + 0x49, 0x99, 0x5e, 0x1b, 0x07, 0x69, 0x36, 0x32, 0xfc, 0x6b, 0x0a, 0x78, 0x22, 0xf0, 0x96, 0x4e, + 0xc0, 0x8e, 0xf9, 0x52, 0x97, 0x6f, 0x90, 0x44, 0x9b, 0xed, 0xdd, 0xc4, 0xe6, 0x28, 0xd1, 0xc8, + 0x17, 0x60, 0xb2, 0xd4, 0xed, 0x46, 0x3b, 0xce, 0x31, 0x4d, 0xdb, 0xd0, 0xed, 0xd6, 0x53, 0x77, + 0x1d, 0x83, 0x22, 0xbe, 0x31, 0xcf, 0x1d, 0x69, 0x63, 0x26, 0xaf, 0x2b, 0xc1, 0xf9, 0x78, 0xa4, + 0x3a, 0x13, 0xd2, 0xb9, 0xbe, 0xd2, 0x84, 0x0c, 0x5d, 0x86, 0x29, 0xae, 0x4b, 0x92, 0xd2, 0xcc, + 0x89, 0xc4, 0xea, 0x49, 0x11, 0x6a, 0x4c, 0x1a, 0xb2, 0x02, 0xd3, 0xdc, 0xaf, 0xa7, 0x25, 0x22, + 0xa2, 0xcd, 0x9f, 0x8c, 0x72, 0xf3, 0x72, 0x77, 0xa0, 0x16, 0x06, 0xca, 0x75, 0x0c, 0x2e, 0x31, + 0x22, 0xeb, 0x4f, 0x32, 0x70, 0xb2, 0xcf, 0x88, 0xab, 0x78, 0x59, 0x99, 0x43, 0x32, 0x77, 0x5f, + 0x8e, 0xa4, 0x2c, 0x4d, 0x75, 0x28, 0xa4, 0x2c, 0x7d, 0xbc, 0xa4, 0xbc, 0xe5, 0x01, 0x11, 0x79, + 0xbb, 0xb5, 0xfc, 0xd6, 0x22, 0x68, 0x63, 0xec, 0x10, 0x32, 0xf2, 0x7b, 0xf3, 0x5c, 0xf2, 0x3e, + 0x07, 0xa9, 0x61, 0xfd, 0xd8, 0x33, 0x56, 0x70, 0x0a, 0x6b, 0xeb, 0x20, 0x03, 0x05, 0x6d, 0x1d, + 0x92, 0xb3, 0x9a, 0xcf, 0x53, 0x91, 0x07, 0xe1, 0xd6, 0x38, 0x64, 0xf9, 0x49, 0x84, 0x8b, 0x2a, + 0x7b, 0xb8, 0x96, 0xef, 0x36, 0x13, 0x85, 0xb4, 0x98, 0x62, 0x6d, 0x43, 0x25, 0x67, 0x63, 0x39, + 0x26, 0xbc, 0x73, 0x82, 0xb0, 0xd4, 0x08, 0xdd, 0xfb, 0x74, 0x88, 0x43, 0x27, 0x4a, 0x78, 0xe7, + 0x04, 0x61, 0xdd, 0x41, 0xb2, 0x44, 0xc2, 0x3b, 0xc5, 0xd0, 0xfa, 0x91, 0x0c, 0xc0, 0x9d, 0x4a, + 0x19, 0x83, 0x02, 0x3e, 0xae, 0x50, 0x90, 0x1e, 0x68, 0x49, 0x72, 0x1f, 0x20, 0x0e, 0x54, 0x61, + 0xda, 0xc4, 0x22, 0xef, 0xc1, 0x4c, 0xad, 0xe1, 0x7b, 0xad, 0xd6, 0xb6, 0xd3, 0xb8, 0xb7, 0xe6, + 0x76, 0x28, 0x8f, 0x70, 0x33, 0xca, 0x8f, 0xa2, 0x40, 0x15, 0xd5, 0x5b, 0xac, 0xcc, 0x8e, 0x23, + 0x5b, 0x7f, 0x9e, 0x81, 0x42, 0xa5, 0x13, 0x84, 0x4e, 0xab, 0x85, 0xc2, 0xce, 0xf7, 0x52, 0x1e, + 0x06, 0xf5, 0x5d, 0x03, 0x7a, 0xf4, 0x0d, 0x98, 0x89, 0xa1, 0xb1, 0x4b, 0x7a, 0x0d, 0x5d, 0x32, + 0xf5, 0x4b, 0x3a, 0x77, 0xd2, 0xb4, 0x45, 0x89, 0xb5, 0xa2, 0x91, 0xdd, 0xbd, 0x82, 0x8f, 0x56, + 0x8b, 0x00, 0xae, 0x04, 0xc9, 0x2b, 0x05, 0x89, 0xb7, 0xe4, 0xee, 0x15, 0x5b, 0xc3, 0xb2, 0xd6, + 0x61, 0xac, 0xe6, 0xf9, 0xe1, 0xd2, 0x3e, 0x97, 0xe2, 0x97, 0x69, 0xd0, 0xd0, 0x5f, 0xa5, 0x5c, + 0xd4, 0x04, 0x37, 0x6c, 0x51, 0xc4, 0xee, 0xf0, 0xd7, 0x5d, 0xda, 0x6a, 0xea, 0xe6, 0x87, 0x3b, + 0x0c, 0x60, 0x73, 0x38, 0xbb, 0xe9, 0x9c, 0x88, 0x82, 0xd6, 0x46, 0x76, 0x8e, 0x8f, 0x3b, 0x61, + 0xcb, 0x46, 0xff, 0xbe, 0x60, 0xa6, 0x39, 0x34, 0x6a, 0x1a, 0xd0, 0xd5, 0xff, 0x56, 0x06, 0x4e, + 0xf7, 0x27, 0xd1, 0x4d, 0x27, 0x33, 0x03, 0x4c, 0x27, 0x5f, 0x8a, 0xbf, 0xa2, 0x20, 0x9a, 0x78, + 0x45, 0x89, 0xde, 0x4e, 0x96, 0xd1, 0x72, 0xb5, 0xa1, 0x12, 0xd4, 0x9e, 0x1d, 0xd0, 0x66, 0x44, + 0xe4, 0xc3, 0x1c, 0x22, 0x8d, 0x2d, 0x68, 0xad, 0xdf, 0x1a, 0x81, 0x53, 0x7d, 0x29, 0xc8, 0xaa, + 0x16, 0xff, 0x7a, 0x5a, 0x45, 0xde, 0xed, 0x8b, 0x7f, 0x09, 0xff, 0x45, 0xe3, 0xa4, 0xb8, 0x43, + 0xc5, 0x86, 0x8a, 0x7b, 0x9c, 0x45, 0x5e, 0xaf, 0x1e, 0xca, 0x8b, 0xa3, 0x23, 0x33, 0x48, 0x86, + 0x40, 0x46, 0xbf, 0x17, 0x1a, 0x3a, 0x6e, 0x2b, 0xd0, 0x97, 0x5d, 0x93, 0x83, 0x6c, 0x59, 0x16, + 0xd9, 0xb3, 0x8e, 0xa4, 0xdb, 0xb3, 0x5a, 0xff, 0x67, 0x06, 0x26, 0x54, 0xb3, 0xc9, 0x69, 0x38, + 0xb1, 0x69, 0x97, 0xca, 0x2b, 0xf5, 0xcd, 0x0f, 0xab, 0x2b, 0xf5, 0x3b, 0xeb, 0xb5, 0xea, 0x4a, + 0xb9, 0x72, 0xbd, 0xb2, 0xb2, 0x5c, 0x7c, 0x86, 0xcc, 0xc2, 0xd4, 0x9d, 0xf5, 0x5b, 0xeb, 0x1b, + 0x5b, 0xeb, 0xf5, 0x15, 0xdb, 0xde, 0xb0, 0x8b, 0x19, 0x32, 0x05, 0x13, 0xf6, 0x52, 0xa9, 0x5c, + 0x5f, 0xdf, 0x58, 0x5e, 0x29, 0x66, 0x49, 0x11, 0x26, 0xcb, 0x1b, 0xeb, 0xeb, 0x2b, 0xe5, 0xcd, + 0xca, 0xdd, 0xca, 0xe6, 0x87, 0xc5, 0x1c, 0x21, 0x30, 0x8d, 0x08, 0x55, 0xbb, 0xb2, 0x5e, 0xae, + 0x54, 0x4b, 0x6b, 0xc5, 0x11, 0x06, 0x63, 0xf8, 0x1a, 0x6c, 0x54, 0x31, 0xba, 0x75, 0x67, 0x69, + 0xa5, 0x38, 0xc6, 0x50, 0xd8, 0x5f, 0x1a, 0xca, 0x38, 0xab, 0x1e, 0x51, 0x96, 0x4b, 0x9b, 0xa5, + 0xa5, 0x52, 0x6d, 0xa5, 0x98, 0x27, 0x27, 0xe1, 0x98, 0x01, 0xaa, 0xaf, 0x6d, 0xdc, 0xa8, 0xac, + 0x17, 0x27, 0xc8, 0x1c, 0x14, 0x15, 0x6c, 0x79, 0xa9, 0x7e, 0xa7, 0xb6, 0x62, 0x17, 0x21, 0x0e, + 0x5d, 0x2f, 0xdd, 0x5e, 0x29, 0x16, 0xac, 0x77, 0xb9, 0xab, 0x0b, 0xef, 0x6a, 0x72, 0x02, 0x48, + 0x6d, 0xb3, 0xb4, 0x79, 0xa7, 0x16, 0xfb, 0xf8, 0x02, 0x8c, 0xd7, 0xee, 0x94, 0xcb, 0x2b, 0xb5, + 0x5a, 0x31, 0x43, 0x00, 0xc6, 0xae, 0x97, 0x2a, 0x6b, 0x2b, 0xcb, 0xc5, 0xac, 0xf5, 0x53, 0x19, + 0x98, 0x95, 0xa2, 0x97, 0x54, 0x89, 0x3f, 0xe6, 0x5a, 0x7c, 0xcf, 0xb8, 0x51, 0x4a, 0x4f, 0x84, + 0x58, 0x25, 0x03, 0x96, 0xa1, 0x0f, 0xc7, 0x53, 0x91, 0xc9, 0x87, 0x50, 0x94, 0x0d, 0xb8, 0xed, + 0x84, 0x8d, 0xbd, 0x68, 0x1b, 0x7b, 0x3e, 0x56, 0x49, 0x0c, 0x8d, 0x6b, 0xf6, 0xa2, 0x44, 0x4f, + 0x09, 0x36, 0xd6, 0xb7, 0x33, 0x70, 0xb2, 0x0f, 0x31, 0x29, 0xc3, 0x98, 0x0a, 0x07, 0x3c, 0xc0, + 0xe8, 0x66, 0xee, 0x3b, 0x07, 0x0b, 0x02, 0x11, 0xf3, 0xdd, 0xe0, 0x5f, 0xf6, 0x98, 0x8a, 0xef, + 0x8b, 0x41, 0x76, 0x79, 0x9f, 0x9c, 0x8a, 0x75, 0xa7, 0xa8, 0xa9, 0xb4, 0x55, 0x5b, 0x2a, 0x88, + 0x0e, 0xc9, 0x39, 0x0f, 0x02, 0x8c, 0xb2, 0x6b, 0x7d, 0x2b, 0xc3, 0x44, 0xa5, 0x38, 0x22, 0x93, + 0x20, 0x4b, 0x41, 0xd0, 0x6b, 0x53, 0xdb, 0x6b, 0xd1, 0x92, 0xbd, 0x2e, 0xce, 0x02, 0x94, 0xfd, + 0x1c, 0x2c, 0x40, 0x21, 0xbd, 0xee, 0xf8, 0x1d, 0xe3, 0x81, 0x4d, 0xa7, 0x21, 0x6f, 0x02, 0xa8, + 0x94, 0xc4, 0xd2, 0xbf, 0x9b, 0x47, 0x04, 0x10, 0x50, 0x53, 0x7a, 0xd5, 0x90, 0xad, 0xbf, 0x9e, + 0x81, 0x49, 0x71, 0x05, 0x29, 0xb5, 0xa8, 0x1f, 0x3e, 0xde, 0x9c, 0x79, 0xd3, 0x98, 0x33, 0xca, + 0xc6, 0x5c, 0xe3, 0xcf, 0x8a, 0x53, 0xa7, 0xcb, 0x7f, 0x9c, 0x81, 0x62, 0x1c, 0x91, 0xbc, 0x07, + 0xf9, 0x1a, 0xbd, 0x4f, 0x7d, 0x37, 0xdc, 0x17, 0xbb, 0x9f, 0x4c, 0x9c, 0xc0, 0x71, 0x44, 0x19, + 0xd7, 0x74, 0x06, 0xe2, 0x97, 0xad, 0x68, 0x86, 0xdd, 0xc4, 0x35, 0x25, 0x42, 0xee, 0x49, 0x29, + 0x11, 0xac, 0xff, 0x2a, 0x0b, 0x27, 0x6f, 0xd0, 0x50, 0xff, 0x26, 0xf5, 0x22, 0xfa, 0x99, 0xe1, + 0xbe, 0x4b, 0xfb, 0x92, 0x79, 0x18, 0xc7, 0x22, 0x39, 0xbe, 0xb6, 0xfc, 0x49, 0x96, 0xd4, 0xbc, + 0xce, 0x19, 0x91, 0xd9, 0xfb, 0xd4, 0x7d, 0x49, 0x8b, 0xd5, 0xac, 0xa6, 0xf5, 0x79, 0x98, 0xc6, + 0x60, 0x84, 0x3d, 0xb6, 0x1c, 0x68, 0x53, 0x28, 0x53, 0xf2, 0x76, 0x0c, 0x4a, 0x5e, 0x81, 0x22, + 0x83, 0x94, 0x1a, 0xf7, 0x3a, 0xde, 0x83, 0x16, 0x6d, 0xee, 0x52, 0x9e, 0x28, 0x36, 0x6f, 0x27, + 0xe0, 0x92, 0xe7, 0x9d, 0x0e, 0xbf, 0x08, 0xd1, 0x26, 0x6a, 0x3c, 0x04, 0xcf, 0x08, 0x7a, 0xfa, + 0x4d, 0x28, 0x7c, 0xc2, 0xb8, 0xeb, 0xd6, 0x7f, 0x99, 0x81, 0x39, 0xfc, 0x38, 0xad, 0x62, 0x54, + 0x85, 0x7f, 0x26, 0xea, 0x2d, 0x2d, 0x14, 0xb1, 0xc3, 0x40, 0xe6, 0x52, 0x50, 0xbd, 0x18, 0x69, + 0x58, 0xb2, 0x43, 0x68, 0x58, 0x6a, 0x47, 0xc9, 0x2b, 0x37, 0xa4, 0x82, 0x88, 0x67, 0x03, 0x8e, + 0x86, 0xdc, 0xfa, 0xab, 0x59, 0x18, 0xb7, 0x29, 0x26, 0xdc, 0x22, 0xe7, 0x61, 0x7c, 0xdd, 0x0b, + 0x69, 0x70, 0xdb, 0xc8, 0xae, 0xd6, 0x61, 0xa0, 0x7a, 0xbb, 0x69, 0xcb, 0x42, 0x36, 0xe1, 0xab, + 0xbe, 0xd7, 0xec, 0x35, 0x42, 0x7d, 0xc2, 0x77, 0x39, 0xc8, 0x96, 0x65, 0xe4, 0x35, 0x98, 0x10, + 0x9c, 0xd5, 0x3b, 0x14, 0xda, 0x4f, 0xfa, 0x54, 0x25, 0x6c, 0x8b, 0x10, 0x50, 0x50, 0xe5, 0x52, + 0xc3, 0x88, 0x26, 0xa8, 0x26, 0x04, 0x01, 0x29, 0x7f, 0x8f, 0x0e, 0x90, 0xbf, 0x3f, 0x03, 0x63, + 0xa5, 0x20, 0xa0, 0xa1, 0x74, 0x7d, 0x9d, 0x54, 0xe1, 0x36, 0x02, 0x1a, 0x72, 0xc6, 0x0e, 0x96, + 0xdb, 0x02, 0xcf, 0xfa, 0xb3, 0x2c, 0x8c, 0xe2, 0x9f, 0xf8, 0xf6, 0xe6, 0x37, 0xf6, 0x8c, 0xb7, + 0x37, 0xbf, 0xb1, 0x67, 0x23, 0x94, 0x5c, 0xc1, 0x7b, 0xbf, 0x8c, 0x9a, 0x2d, 0xbe, 0x1e, 0x15, + 0xda, 0xcd, 0x08, 0x6c, 0xeb, 0x38, 0xea, 0x51, 0x32, 0x97, 0xea, 0xf0, 0x7e, 0x02, 0xb2, 0x1b, + 0x35, 0xf1, 0xc5, 0x18, 0x4d, 0xc3, 0x0b, 0xec, 0xec, 0x46, 0x0d, 0x7b, 0x63, 0xb5, 0xb4, 0xf8, + 0xc6, 0x35, 0x3d, 0x11, 0x60, 0xb0, 0xe7, 0x2c, 0xbe, 0x71, 0xcd, 0x16, 0x25, 0xac, 0x7f, 0xb1, + 0xcd, 0x35, 0xf7, 0xeb, 0x54, 0x78, 0x8b, 0x62, 0xff, 0xe2, 0xb7, 0xd5, 0x03, 0xf7, 0xeb, 0xd4, + 0x8e, 0x10, 0xc8, 0x22, 0x14, 0x84, 0x83, 0x30, 0xe2, 0x6b, 0x0e, 0xbc, 0xc2, 0x81, 0x98, 0x53, + 0xe8, 0x48, 0xfc, 0x6d, 0x49, 0x0c, 0x90, 0xcc, 0xed, 0x23, 0xde, 0x96, 0xe4, 0x10, 0x06, 0xb6, + 0x86, 0x12, 0x39, 0xbb, 0x46, 0x5e, 0xa0, 0xba, 0xb3, 0x2b, 0x06, 0x97, 0x54, 0x08, 0xd6, 0x2f, + 0x66, 0x21, 0x5f, 0x6d, 0xf5, 0x76, 0xdd, 0xce, 0xdd, 0x2b, 0x7f, 0xa1, 0xc9, 0xa8, 0x5f, 0x07, + 0x3c, 0x24, 0xc4, 0x8d, 0x40, 0xaa, 0x87, 0x79, 0xd3, 0x84, 0xf0, 0xc1, 0x49, 0x10, 0x8d, 0x5c, + 0x05, 0x31, 0x31, 0x45, 0x6e, 0xb2, 0xe3, 0x26, 0x01, 0xcf, 0xca, 0x21, 0x49, 0x04, 0x2a, 0x79, + 0x07, 0x0a, 0x51, 0x56, 0xe0, 0x28, 0xe5, 0x98, 0x4e, 0x59, 0x8e, 0xca, 0xef, 0x5e, 0xb1, 0x75, + 0x74, 0xeb, 0x47, 0x46, 0x61, 0x52, 0x6f, 0x0f, 0xb1, 0xe1, 0x58, 0xd0, 0x62, 0x57, 0x61, 0x61, + 0x1f, 0xd3, 0xc5, 0x42, 0x71, 0x9c, 0x9e, 0x35, 0x1b, 0xc4, 0xf0, 0xb8, 0xb1, 0x4c, 0x8d, 0x86, + 0xa1, 0xdb, 0xd9, 0x0d, 0x56, 0x9f, 0xb1, 0x67, 0x83, 0x08, 0xcc, 0xf1, 0x48, 0x09, 0xf2, 0x5e, + 0x37, 0xd8, 0xa5, 0x1d, 0x57, 0xbe, 0x5e, 0x9c, 0x33, 0x18, 0x6d, 0x88, 0xc2, 0x04, 0x2f, 0x45, + 0x46, 0xde, 0x80, 0x31, 0xaf, 0x4b, 0x3b, 0x8e, 0x2b, 0xce, 0xb8, 0x67, 0x63, 0x0c, 0x68, 0xa7, + 0x54, 0xd1, 0x08, 0x05, 0x32, 0xb9, 0x0c, 0x23, 0xde, 0x3d, 0x35, 0x5e, 0xa7, 0x4c, 0xa2, 0x7b, + 0xa1, 0xa3, 0x91, 0x20, 0x22, 0x23, 0xf8, 0xd8, 0x69, 0xef, 0x88, 0x11, 0x33, 0x09, 0x6e, 0x3a, + 0xed, 0x1d, 0x9d, 0x80, 0x21, 0x92, 0xf7, 0x01, 0xba, 0xce, 0x2e, 0xf5, 0xeb, 0xcd, 0x5e, 0xb8, + 0x2f, 0xc6, 0xed, 0x79, 0x83, 0xac, 0xca, 0x8a, 0x97, 0x7b, 0xe1, 0xbe, 0x46, 0x3b, 0xd1, 0x95, + 0x40, 0x52, 0x02, 0x68, 0x3b, 0x61, 0x48, 0xfd, 0xb6, 0x27, 0x0c, 0x94, 0x0a, 0x8b, 0x0b, 0x06, + 0x83, 0xdb, 0xaa, 0x58, 0xe3, 0xa0, 0x11, 0x61, 0xa3, 0x5d, 0xdf, 0x11, 0x19, 0xe2, 0x62, 0x8d, + 0x76, 0x7d, 0xe3, 0x2b, 0x19, 0x22, 0xf9, 0x3c, 0x8c, 0x37, 0xdd, 0xa0, 0xe1, 0xf9, 0x4d, 0x91, + 0x6b, 0xfc, 0x39, 0x83, 0x66, 0x99, 0x97, 0x69, 0x64, 0x12, 0x9d, 0xb5, 0x56, 0x04, 0x8f, 0x5a, + 0xf7, 0x1e, 0x88, 0xec, 0xe3, 0x66, 0x6b, 0x6b, 0xaa, 0x58, 0x6f, 0x6d, 0x44, 0xf4, 0xd6, 0xc8, + 0x7f, 0xff, 0xf3, 0x0b, 0x99, 0x25, 0x80, 0x7c, 0x20, 0xca, 0xad, 0x35, 0x38, 0xd5, 0x77, 0x46, + 0x91, 0x8b, 0x50, 0xdc, 0x71, 0x84, 0x7a, 0xa6, 0xb1, 0xe7, 0x74, 0x3a, 0xb4, 0x25, 0xd6, 0xf2, + 0x8c, 0x84, 0x97, 0x39, 0x98, 0x73, 0xb6, 0x7e, 0x33, 0x03, 0xcf, 0x0d, 0x9a, 0x57, 0xe4, 0x34, + 0xe4, 0xbb, 0xbe, 0xeb, 0xa1, 0xfc, 0xc2, 0x57, 0xbf, 0xfa, 0x4d, 0xce, 0x00, 0xf0, 0x83, 0x36, + 0x74, 0x76, 0x85, 0xb1, 0xb2, 0x3d, 0x81, 0x90, 0x4d, 0x67, 0x37, 0x20, 0xaf, 0xc2, 0x6c, 0x93, + 0xee, 0x38, 0xbd, 0x56, 0x58, 0x0f, 0x1a, 0x7b, 0xb4, 0x89, 0xfe, 0x01, 0x68, 0x84, 0x62, 0x17, + 0x45, 0x41, 0x4d, 0xc2, 0xc9, 0x0b, 0x30, 0xa9, 0x07, 0x23, 0x10, 0x49, 0xe9, 0x0b, 0x4e, 0xd7, + 0x95, 0xe1, 0x08, 0x78, 0x8b, 0x6f, 0x8e, 0xe4, 0x33, 0xc5, 0xac, 0x8d, 0xb6, 0x18, 0xd6, 0x0f, + 0x65, 0x61, 0xbe, 0x5f, 0x47, 0x92, 0x77, 0x63, 0x1c, 0x33, 0x91, 0x7e, 0x58, 0x87, 0xeb, 0xfa, + 0x61, 0xad, 0x36, 0xb2, 0x08, 0xca, 0xba, 0xff, 0x30, 0x4f, 0x5d, 0x09, 0x63, 0x34, 0x5d, 0x27, + 0x08, 0x1e, 0xb0, 0xb9, 0x92, 0xd3, 0x22, 0x54, 0x09, 0x98, 0x4e, 0x23, 0x61, 0xe4, 0x73, 0x00, + 0x8d, 0x96, 0x17, 0x50, 0x7c, 0x86, 0x15, 0x87, 0x10, 0x37, 0x71, 0x54, 0x50, 0xfd, 0xdd, 0x0d, + 0xa1, 0x65, 0xaf, 0x49, 0xc5, 0x00, 0x3a, 0x70, 0xb2, 0xcf, 0xca, 0x61, 0xc3, 0x13, 0x25, 0x6b, + 0x93, 0xa1, 0x9f, 0x7b, 0x2a, 0x65, 0x5b, 0xbc, 0xc7, 0xb3, 0x7d, 0x7a, 0xdc, 0xda, 0x07, 0x92, + 0x5c, 0x1e, 0x8c, 0xbb, 0x30, 0xd4, 0xeb, 0xf9, 0x8a, 0x3b, 0x87, 0xdc, 0xf1, 0x5b, 0x64, 0x01, + 0x0a, 0x32, 0xb5, 0x83, 0x4c, 0x78, 0x3f, 0x61, 0x83, 0x00, 0xdd, 0xa2, 0x38, 0x79, 0x30, 0x90, + 0x9a, 0x9e, 0x74, 0x7e, 0x02, 0x21, 0xec, 0x5e, 0x2c, 0xaa, 0x7e, 0x0e, 0xe6, 0xd2, 0x36, 0x2d, + 0x51, 0xfa, 0x33, 0x19, 0x39, 0xfc, 0xc9, 0x55, 0x7f, 0x58, 0xfb, 0x08, 0xa0, 0xc5, 0xbd, 0x68, + 0x18, 0xfe, 0x8d, 0x79, 0xf8, 0xc5, 0xa2, 0x11, 0xc7, 0x99, 0xf8, 0x49, 0xce, 0xc3, 0x8c, 0xcf, + 0x6d, 0xb2, 0x42, 0x4f, 0xf4, 0x27, 0x8e, 0x94, 0x3d, 0xc5, 0xc1, 0x9b, 0x1e, 0xf6, 0xa9, 0x68, + 0xd7, 0x4d, 0xd5, 0x61, 0xda, 0x26, 0x48, 0x2e, 0xc1, 0x04, 0xdb, 0x04, 0xd1, 0x79, 0x3f, 0x66, + 0xea, 0x8b, 0x78, 0x78, 0xa4, 0xd8, 0xf9, 0x8f, 0xc5, 0xdf, 0x82, 0xd7, 0x1f, 0x64, 0x24, 0x33, + 0x7d, 0x0b, 0x26, 0x27, 0x61, 0xdc, 0xf3, 0x77, 0xb5, 0x4f, 0x1b, 0xf3, 0xfc, 0x5d, 0xf6, 0x5d, + 0x17, 0xa0, 0xc8, 0x2d, 0xcf, 0xb9, 0x4b, 0x6f, 0xb0, 0xdf, 0xe1, 0x77, 0xb4, 0xbc, 0x3d, 0xcd, + 0xe1, 0x98, 0xbf, 0x6e, 0xbf, 0xd3, 0x60, 0x98, 0x41, 0xe0, 0xd5, 0xf5, 0x88, 0x1d, 0xe2, 0xb3, + 0xa7, 0x83, 0xc0, 0x8b, 0x42, 0x77, 0x34, 0xc9, 0x12, 0x4c, 0x31, 0x3e, 0x75, 0xb9, 0x07, 0x89, + 0x13, 0xe2, 0x4c, 0xf2, 0x84, 0xd8, 0xef, 0x34, 0x64, 0x13, 0xed, 0xc9, 0x40, 0xfb, 0x25, 0xbe, + 0xe6, 0xdf, 0xcd, 0xc0, 0x89, 0x74, 0x74, 0x1c, 0x2f, 0x56, 0x09, 0x3a, 0x60, 0x70, 0x7d, 0x9d, + 0x3d, 0xc1, 0x20, 0xdc, 0xc7, 0x3c, 0xad, 0xb5, 0xd9, 0xd4, 0xd6, 0xbe, 0x02, 0xb3, 0xc8, 0x48, + 0x9c, 0xc9, 0x2d, 0x37, 0x08, 0x85, 0xeb, 0xb4, 0x3d, 0xc3, 0x0a, 0xf8, 0x06, 0xb7, 0xc6, 0xc0, + 0xe4, 0x25, 0x98, 0x96, 0x5b, 0x94, 0xf7, 0xa0, 0xc3, 0x2a, 0xe6, 0xfb, 0xd3, 0x94, 0x80, 0x6e, + 0x20, 0x50, 0x34, 0xfe, 0xf3, 0x30, 0x23, 0x36, 0x7b, 0xb1, 0x87, 0x06, 0x6c, 0x96, 0x8b, 0x29, + 0xc2, 0xa4, 0x30, 0xd4, 0x6d, 0x4c, 0xd8, 0x20, 0x40, 0x95, 0xa6, 0xa4, 0xfc, 0xa3, 0x0c, 0x1c, + 0x4f, 0x3d, 0x2d, 0xc8, 0x57, 0x81, 0x1b, 0xc8, 0x87, 0x5e, 0xdd, 0xa7, 0x0d, 0xb7, 0xeb, 0xa2, + 0x0b, 0x31, 0xd7, 0x91, 0x2c, 0x0e, 0x3a, 0x67, 0xd0, 0xd8, 0x7e, 0xd3, 0xb3, 0x15, 0x11, 0xbf, + 0xe6, 0x15, 0xfd, 0x18, 0xf8, 0xf4, 0x47, 0x70, 0x3c, 0x15, 0x35, 0xe5, 0xfa, 0xf5, 0x9a, 0x99, + 0xbd, 0x47, 0x2a, 0xbd, 0x63, 0x1f, 0xad, 0x5d, 0xcb, 0xc4, 0xe7, 0xfd, 0xc3, 0xac, 0x3c, 0x44, + 0x96, 0x3c, 0x2f, 0x0c, 0x42, 0xdf, 0xe9, 0x1a, 0x52, 0x14, 0x69, 0xc3, 0x29, 0xcf, 0xe9, 0x85, + 0x7b, 0x8b, 0x75, 0xf6, 0xaf, 0xe7, 0x4b, 0x0f, 0xa5, 0x86, 0x34, 0x48, 0x29, 0x2c, 0x5e, 0x36, + 0x27, 0x53, 0x89, 0x61, 0x97, 0x74, 0x64, 0xb6, 0xe7, 0x69, 0x5c, 0x57, 0x9f, 0xb1, 0x4f, 0x72, + 0x9e, 0x09, 0x2c, 0xb2, 0x0a, 0x46, 0x7e, 0xdb, 0x54, 0x31, 0x4a, 0xcb, 0x45, 0x6b, 0x72, 0x2d, + 0x6c, 0x6b, 0xc9, 0x70, 0xdf, 0x83, 0x09, 0xb7, 0x29, 0xc2, 0x11, 0x09, 0x61, 0xca, 0x3c, 0xc0, + 0x2b, 0x4d, 0x1e, 0x9d, 0x28, 0xe2, 0xc1, 0x24, 0x31, 0x57, 0x40, 0x97, 0xa6, 0x0c, 0x79, 0xd3, + 0x5a, 0x92, 0xfb, 0x55, 0x92, 0x8c, 0x4c, 0x43, 0xd6, 0x95, 0x82, 0x77, 0xd6, 0x6d, 0x92, 0x13, + 0x30, 0x16, 0x68, 0xf1, 0x91, 0x6c, 0xf1, 0xcb, 0xfa, 0x01, 0xb8, 0x30, 0x6c, 0x1f, 0x91, 0xd7, + 0x81, 0xf4, 0xe9, 0xf0, 0x09, 0x7b, 0xd6, 0x49, 0xf4, 0xdb, 0x0b, 0xa0, 0xc7, 0x98, 0x71, 0xe5, + 0x89, 0x20, 0x61, 0x77, 0x7c, 0xd7, 0x7a, 0x17, 0xa6, 0x4d, 0x01, 0x9b, 0xbc, 0x0a, 0x23, 0x8a, + 0xeb, 0xb4, 0x52, 0x04, 0xe9, 0x48, 0x8c, 0xb7, 0x8d, 0x48, 0xd6, 0x7f, 0x97, 0x85, 0x63, 0x29, + 0x62, 0x36, 0xf9, 0x08, 0x8e, 0xc9, 0x09, 0xc2, 0x57, 0x2d, 0x1f, 0x38, 0x3e, 0x35, 0x2e, 0xa6, + 0x4d, 0x0d, 0x44, 0x4b, 0x19, 0xbe, 0x59, 0x31, 0x29, 0xa2, 0xf2, 0xbf, 0x3c, 0xd3, 0x81, 0x7c, + 0x08, 0x27, 0x44, 0x72, 0x3c, 0x6d, 0x56, 0xd4, 0x7d, 0xba, 0x23, 0x76, 0xd4, 0x17, 0x12, 0xbd, + 0xe7, 0x36, 0xb4, 0xe6, 0xd8, 0x74, 0x67, 0xf5, 0x19, 0x7b, 0x2e, 0x48, 0x81, 0xc7, 0x67, 0xda, + 0x2f, 0x67, 0xc0, 0x3a, 0xbc, 0xbf, 0x50, 0x06, 0x88, 0x77, 0x38, 0x93, 0x01, 0xb4, 0xde, 0x3b, + 0x07, 0x53, 0x3e, 0xdd, 0xf1, 0x69, 0xb0, 0xa7, 0x75, 0xdf, 0x84, 0x3d, 0x29, 0x80, 0xb2, 0x63, + 0xa4, 0x93, 0xe5, 0x10, 0x6a, 0xb5, 0x3c, 0xbb, 0x92, 0x71, 0x85, 0x88, 0x20, 0xb2, 0xae, 0xab, + 0x0d, 0x24, 0x75, 0x1c, 0xc8, 0x1c, 0x8c, 0xea, 0x0d, 0xe4, 0x3f, 0x6e, 0x8e, 0xe4, 0xb3, 0xc5, + 0x9c, 0x2d, 0x5c, 0x41, 0x77, 0xdc, 0x16, 0xb5, 0xfe, 0x51, 0x06, 0x4e, 0xf7, 0xef, 0x3c, 0xf2, + 0x91, 0xa6, 0x18, 0xce, 0xf1, 0x48, 0x38, 0x87, 0xf4, 0xb7, 0xae, 0x43, 0x13, 0xde, 0x89, 0xf1, + 0xbc, 0x70, 0x82, 0xe5, 0xe3, 0x68, 0xb7, 0xde, 0x94, 0xf7, 0x4a, 0x76, 0x2a, 0xdd, 0xbd, 0x42, + 0x2e, 0xc2, 0x38, 0xbf, 0x4a, 0xca, 0x86, 0xce, 0x18, 0x0d, 0xbd, 0x7b, 0xc5, 0x96, 0xe5, 0xd6, + 0xb7, 0x33, 0xea, 0x3e, 0x10, 0x6f, 0xfe, 0xdd, 0x2b, 0xe4, 0x73, 0xc3, 0xa9, 0x78, 0xf3, 0x52, + 0xc5, 0xab, 0xd4, 0xbb, 0x9f, 0x37, 0xd4, 0xbb, 0x2f, 0x0e, 0xee, 0x27, 0x21, 0xba, 0xc4, 0x33, + 0xf7, 0xfc, 0xcb, 0x0c, 0x9c, 0x19, 0x48, 0x41, 0x9e, 0x83, 0x7c, 0xa9, 0x5a, 0xd9, 0x8c, 0x46, + 0x96, 0xad, 0x16, 0x09, 0x21, 0x37, 0x60, 0x62, 0xc9, 0x09, 0xdc, 0x06, 0x9b, 0xc0, 0xa2, 0x21, + 0x2f, 0x0f, 0x6e, 0x88, 0x42, 0x67, 0xb7, 0x46, 0xf5, 0x83, 0xd4, 0x61, 0x16, 0x57, 0x41, 0x22, + 0x33, 0x46, 0xfc, 0xd8, 0x49, 0x30, 0x4c, 0x90, 0xb1, 0x1d, 0x26, 0x01, 0x8c, 0x2f, 0xbe, 0xfb, + 0x70, 0xf6, 0xb0, 0x06, 0x1e, 0xc1, 0xa1, 0xf8, 0x02, 0xe4, 0xab, 0xf2, 0x52, 0xa1, 0x25, 0xc6, + 0x92, 0x17, 0x08, 0x5b, 0x95, 0x5a, 0x7f, 0x33, 0x23, 0xcf, 0x86, 0xc3, 0x3f, 0x44, 0x0b, 0xd8, + 0xd7, 0x1c, 0x1c, 0xb0, 0xaf, 0xf9, 0x09, 0x03, 0xf6, 0x59, 0xbf, 0x28, 0xc2, 0x7d, 0x54, 0x9a, + 0xd5, 0x58, 0xa8, 0xe4, 0xc7, 0x7d, 0xb0, 0x5a, 0x31, 0x66, 0xe7, 0x39, 0x2d, 0xf2, 0x67, 0xb2, + 0xae, 0xfe, 0xef, 0x56, 0xda, 0x54, 0xfd, 0xe9, 0x2c, 0x3c, 0x37, 0x88, 0x3c, 0x35, 0xaa, 0x73, + 0xe6, 0x68, 0x51, 0x9d, 0x2f, 0x42, 0x9e, 0xc3, 0xcc, 0x2c, 0x2e, 0x82, 0x94, 0x75, 0xb8, 0x2c, + 0x26, 0xe7, 0x60, 0xac, 0x54, 0xae, 0x45, 0x51, 0x0e, 0x51, 0xc3, 0xea, 0x34, 0x02, 0xd4, 0xdd, + 0x89, 0x22, 0xf2, 0x95, 0x64, 0x60, 0x4f, 0x11, 0xde, 0xf0, 0xd9, 0xb4, 0x5c, 0xcc, 0xd2, 0x31, + 0x13, 0xdb, 0x1b, 0x45, 0x8e, 0x11, 0xc1, 0x18, 0xec, 0x04, 0x2f, 0xeb, 0x1b, 0x19, 0x98, 0x4b, + 0xe3, 0x40, 0x9e, 0x83, 0x91, 0x4e, 0x6a, 0xf4, 0xd0, 0x0e, 0xb7, 0x04, 0xd3, 0x73, 0x46, 0xeb, + 0xda, 0x59, 0x23, 0x95, 0x74, 0x27, 0x4a, 0x25, 0xbd, 0x20, 0xf7, 0xc5, 0x5c, 0x22, 0xde, 0x28, + 0xfe, 0x67, 0x95, 0x00, 0x2a, 0xcd, 0xea, 0x46, 0x97, 0xc7, 0x60, 0xb9, 0x0a, 0x23, 0xac, 0x59, + 0xb1, 0x79, 0xc3, 0x46, 0xae, 0x74, 0x7b, 0x4d, 0x20, 0xf1, 0x56, 0x05, 0x4e, 0xbb, 0x65, 0x23, + 0xb2, 0xb5, 0x05, 0xd3, 0x26, 0x06, 0x59, 0x31, 0xbd, 0x76, 0xa3, 0x3c, 0x9c, 0x4b, 0x9e, 0xc7, + 0x5f, 0x08, 0x97, 0x4e, 0x7d, 0xe7, 0x60, 0x01, 0xd8, 0x4f, 0x4e, 0x93, 0xe6, 0xd5, 0x6b, 0x7d, + 0x33, 0x0b, 0x73, 0x91, 0x89, 0x9f, 0x9c, 0xbd, 0x4f, 0xad, 0xd9, 0x4b, 0xc9, 0x30, 0xcb, 0x58, + 0x48, 0xa4, 0xba, 0x93, 0x1f, 0x38, 0xe0, 0x35, 0xf8, 0x06, 0xcc, 0xf7, 0xc3, 0x27, 0xaf, 0x26, + 0x92, 0x51, 0x09, 0x57, 0x14, 0x95, 0xb5, 0x4a, 0xcb, 0x4d, 0xf5, 0x1f, 0x65, 0xe0, 0xb4, 0x78, + 0xd7, 0xba, 0xed, 0xb8, 0x1d, 0x4c, 0xc0, 0xd9, 0xa0, 0x4f, 0xc6, 0x5e, 0xea, 0x86, 0xb1, 0x83, + 0xbc, 0x64, 0x3e, 0x5f, 0x26, 0x6a, 0xeb, 0xff, 0xb5, 0xe4, 0x22, 0xfa, 0xef, 0x34, 0xf8, 0xe4, + 0x1d, 0xe1, 0xf6, 0xa9, 0x1d, 0x06, 0xd0, 0xed, 0x53, 0x11, 0xc3, 0xfa, 0x41, 0x78, 0x7e, 0x70, + 0x05, 0xe4, 0xcb, 0x30, 0x55, 0xda, 0xa5, 0x9d, 0xf0, 0x4e, 0x77, 0xd7, 0x77, 0x9a, 0x54, 0xbe, + 0x5f, 0x4b, 0x25, 0xa5, 0x5e, 0xc6, 0x7d, 0x96, 0x84, 0xbd, 0x24, 0x83, 0xd7, 0x7b, 0x82, 0xc8, + 0x78, 0x3c, 0xd6, 0xb9, 0x59, 0x3f, 0x94, 0x01, 0x92, 0xe4, 0x41, 0xae, 0xc1, 0xe4, 0x9d, 0xcd, + 0x72, 0x2d, 0x74, 0xfc, 0x70, 0xd5, 0xeb, 0xf1, 0xee, 0x9c, 0x12, 0xe6, 0x73, 0x61, 0xa3, 0x1e, + 0xb0, 0x82, 0xfa, 0x9e, 0xd7, 0xf3, 0x6d, 0x03, 0x0f, 0x03, 0xeb, 0x51, 0x7a, 0xaf, 0xe9, 0xec, + 0x9b, 0x81, 0xf5, 0x04, 0xcc, 0x08, 0xac, 0x27, 0x60, 0xd6, 0xdf, 0xcf, 0xc0, 0xb3, 0x52, 0xe9, + 0xd7, 0x4c, 0x69, 0x4b, 0x19, 0x8d, 0xc4, 0x7d, 0xe9, 0x0b, 0x3d, 0x48, 0x8c, 0x9c, 0x95, 0x7e, + 0x14, 0xd8, 0x40, 0x94, 0x27, 0x39, 0x2d, 0x66, 0x1f, 0x0e, 0xbd, 0xee, 0x10, 0x8e, 0x14, 0x45, + 0x35, 0xa2, 0xa1, 0xd7, 0x45, 0x16, 0x48, 0x69, 0x51, 0x98, 0xd3, 0x1b, 0x27, 0x5b, 0x4c, 0x6e, + 0xc3, 0xb8, 0x70, 0x16, 0x13, 0x82, 0x99, 0xf4, 0x1f, 0x1c, 0xf0, 0x4d, 0x4b, 0x33, 0xd2, 0x5b, + 0x43, 0xf8, 0xe2, 0xda, 0x92, 0x87, 0xf5, 0x93, 0x19, 0x28, 0xb0, 0x73, 0x1e, 0xc3, 0x53, 0x3c, + 0xee, 0x94, 0x36, 0x45, 0x36, 0x79, 0x79, 0x57, 0xec, 0x87, 0x3a, 0x07, 0xdf, 0x80, 0x99, 0x18, + 0x01, 0xb1, 0xd0, 0x4e, 0xb7, 0xe5, 0xf2, 0x3c, 0xae, 0x52, 0xc7, 0x61, 0xc0, 0xac, 0xff, 0x5f, + 0x06, 0xe6, 0x36, 0xee, 0x85, 0x4e, 0xa5, 0xdd, 0xf5, 0xfc, 0xd0, 0xee, 0xb5, 0xe4, 0x7a, 0x67, + 0xb2, 0x8b, 0xd4, 0x1e, 0x73, 0x23, 0x42, 0x2e, 0xbb, 0x08, 0x98, 0xad, 0x4a, 0xc9, 0x2a, 0xe4, + 0xc5, 0xf9, 0x22, 0xf3, 0x8e, 0xcb, 0x87, 0x01, 0x93, 0xb1, 0x40, 0x62, 0x5f, 0x82, 0x5b, 0x98, + 0xa0, 0xb1, 0x15, 0xb5, 0xf5, 0x67, 0x19, 0x38, 0xd9, 0x87, 0x86, 0xbc, 0x0b, 0xa3, 0x68, 0x91, + 0x21, 0x46, 0xef, 0xb9, 0x3e, 0x55, 0x84, 0x8d, 0xbd, 0xbb, 0x57, 0xf8, 0x41, 0xd4, 0x66, 0x3f, + 0x6c, 0x4e, 0x45, 0x3e, 0x82, 0x89, 0x52, 0xb3, 0x69, 0x64, 0x47, 0x7f, 0x7d, 0x70, 0x2b, 0x2f, + 0x29, 0x7c, 0x7e, 0x85, 0xe0, 0x6f, 0x83, 0xcd, 0xa6, 0x48, 0x2f, 0x6d, 0x47, 0xfc, 0x4e, 0xbf, + 0x03, 0xd3, 0x26, 0xf2, 0x91, 0xae, 0x10, 0xdf, 0xce, 0x40, 0xd1, 0x6c, 0xc3, 0xa7, 0xe3, 0x67, + 0x92, 0x36, 0xcc, 0x87, 0x0b, 0x57, 0xc7, 0x53, 0x7b, 0x98, 0xbc, 0x0e, 0x63, 0xa5, 0x6e, 0xb7, + 0xb2, 0x2c, 0x66, 0x95, 0x90, 0x4d, 0xba, 0xdd, 0x98, 0x67, 0xaa, 0x40, 0x22, 0x57, 0x21, 0x8f, + 0x33, 0x93, 0x11, 0x64, 0x23, 0x67, 0x56, 0x0c, 0xf9, 0x12, 0x77, 0x66, 0x95, 0x88, 0xe4, 0x3a, + 0x4c, 0x0b, 0x93, 0x73, 0x9b, 0xee, 0xd2, 0x87, 0x2a, 0xaa, 0x0a, 0x06, 0x7e, 0x91, 0x06, 0xea, + 0x75, 0x9f, 0x97, 0xe9, 0x46, 0xd7, 0x26, 0x15, 0x26, 0x47, 0x63, 0x3c, 0x75, 0x4e, 0xdc, 0xa3, + 0x96, 0x27, 0x47, 0xc3, 0x46, 0xf4, 0xe1, 0x95, 0xa0, 0x54, 0xc3, 0x55, 0x0a, 0x02, 0x77, 0xb7, + 0xd3, 0xa6, 0x9d, 0xf0, 0xd3, 0x1b, 0xae, 0xa8, 0x8e, 0xa1, 0x86, 0xeb, 0x5b, 0x23, 0x7c, 0x31, + 0xc7, 0xc9, 0x0e, 0xc9, 0xff, 0xb9, 0x0c, 0xe3, 0xdc, 0xd8, 0x5d, 0xae, 0x8c, 0x33, 0xa9, 0x4d, + 0xe0, 0x38, 0x77, 0xaf, 0x70, 0xf1, 0x85, 0x9b, 0x86, 0x04, 0xb6, 0x24, 0x25, 0x77, 0xa1, 0x50, + 0x6e, 0x51, 0xa7, 0xd3, 0xeb, 0xb2, 0x4d, 0x7a, 0x08, 0x65, 0xc2, 0xbc, 0xf8, 0x96, 0xc9, 0x06, + 0x27, 0xab, 0x87, 0x6e, 0x9b, 0xe2, 0x4e, 0xae, 0x33, 0x22, 0x9b, 0xea, 0xb5, 0x78, 0x04, 0xf5, + 0x54, 0x9f, 0x19, 0xd0, 0x3f, 0x71, 0x20, 0xd2, 0x99, 0xa6, 0x10, 0xe2, 0x39, 0xb9, 0x0e, 0xd3, + 0x6b, 0x4e, 0x10, 0x6e, 0xfa, 0x4e, 0x27, 0x40, 0x7f, 0xd5, 0x21, 0x9c, 0x88, 0x64, 0x6e, 0x95, + 0x19, 0x34, 0x12, 0x0f, 0x15, 0x29, 0xb6, 0x39, 0xc6, 0x8e, 0xc9, 0x4b, 0xd7, 0xdd, 0x8e, 0xd3, + 0x72, 0xbf, 0x2e, 0x8d, 0x6a, 0xb8, 0xbc, 0xb4, 0x23, 0x81, 0x76, 0x54, 0x6e, 0x7d, 0x29, 0x31, + 0x6e, 0xbc, 0x95, 0x05, 0x18, 0x17, 0x76, 0x94, 0xdc, 0xae, 0xb0, 0xba, 0xb2, 0xbe, 0x5c, 0x59, + 0xbf, 0x51, 0xcc, 0x90, 0x69, 0x80, 0xaa, 0xbd, 0x51, 0x5e, 0xa9, 0xd5, 0xd8, 0xef, 0x2c, 0xfb, + 0x2d, 0x8c, 0x0e, 0xaf, 0xdf, 0x59, 0x2b, 0xe6, 0x34, 0xbb, 0xc3, 0x11, 0xeb, 0x0f, 0x32, 0x70, + 0x22, 0x7d, 0x28, 0xc9, 0x26, 0xa0, 0xe5, 0xa9, 0x50, 0x01, 0x5e, 0x1b, 0x38, 0xee, 0xa9, 0xe0, + 0xb8, 0x05, 0x6b, 0xc8, 0x2d, 0x23, 0xb3, 0x52, 0xc7, 0x1f, 0xe5, 0x38, 0x71, 0x9b, 0x56, 0x19, + 0xe6, 0xfb, 0xf1, 0x30, 0x3f, 0x75, 0x06, 0x0a, 0xa5, 0x6a, 0x75, 0xad, 0x52, 0x2e, 0x6d, 0x56, + 0x36, 0xd6, 0x8b, 0x19, 0x32, 0x01, 0xa3, 0x37, 0xec, 0x8d, 0x3b, 0xd5, 0x62, 0xd6, 0xfa, 0x5b, + 0x19, 0x98, 0xaa, 0x74, 0x42, 0xba, 0xcb, 0x63, 0xba, 0x3e, 0xee, 0xe2, 0x7b, 0xcb, 0x58, 0x7c, + 0xf3, 0xca, 0x46, 0x5b, 0x55, 0x30, 0xd4, 0xca, 0x7b, 0x00, 0xb3, 0x09, 0x12, 0x52, 0x83, 0xf1, + 0xd2, 0x56, 0x6d, 0xa3, 0xb2, 0x5c, 0x16, 0x0d, 0x93, 0x42, 0xb9, 0x80, 0x26, 0x2b, 0xe1, 0x16, + 0x50, 0x0f, 0x82, 0xba, 0xe7, 0x36, 0xb5, 0x30, 0xd1, 0xab, 0xcf, 0xd8, 0x92, 0xd3, 0xd2, 0x14, + 0x14, 0xc4, 0xbd, 0x02, 0x45, 0xf6, 0x1f, 0xcf, 0xc0, 0x7c, 0x3f, 0x76, 0xec, 0xaa, 0x62, 0x5a, + 0x2c, 0x9e, 0x50, 0x61, 0x7d, 0x4c, 0x53, 0x45, 0x89, 0x46, 0xde, 0x85, 0x02, 0x4f, 0x86, 0x54, + 0xbb, 0x7a, 0xc7, 0xae, 0x88, 0x21, 0x44, 0x67, 0x22, 0x91, 0xdf, 0x34, 0xb8, 0x1a, 0x4b, 0x76, + 0xa9, 0xe3, 0x5b, 0xff, 0x6a, 0x16, 0x4e, 0xb0, 0x7e, 0x6d, 0xd1, 0x20, 0x28, 0xf5, 0xc2, 0x3d, + 0x76, 0x43, 0x16, 0x59, 0xe4, 0x3f, 0x07, 0x63, 0x7b, 0x47, 0xd3, 0x67, 0x71, 0x74, 0x42, 0x00, + 0xf7, 0x2a, 0xf9, 0xdc, 0xc7, 0xfe, 0x26, 0x67, 0x40, 0x8b, 0xff, 0x8e, 0x5b, 0xcd, 0xa4, 0x3d, + 0xd1, 0x55, 0x51, 0xe0, 0x3f, 0x0f, 0xa3, 0xe8, 0x89, 0x28, 0x76, 0x0c, 0x29, 0xe9, 0xa5, 0xb7, + 0x0c, 0x5d, 0x14, 0x6d, 0x4e, 0x40, 0x2e, 0x03, 0x44, 0x31, 0x5b, 0xc4, 0x96, 0x20, 0x6f, 0x97, + 0x2a, 0x6c, 0x8b, 0x3d, 0xd1, 0xde, 0x71, 0x44, 0x20, 0x94, 0x57, 0x60, 0x56, 0xea, 0x5d, 0xba, + 0xd2, 0x95, 0x8e, 0x7b, 0x0d, 0xda, 0x33, 0xbc, 0xa0, 0xd2, 0x15, 0xee, 0x74, 0xd6, 0x7f, 0x9b, + 0x85, 0x89, 0x2d, 0x76, 0x7e, 0xe2, 0xad, 0x70, 0xf0, 0x2d, 0x73, 0x11, 0x0a, 0x6b, 0x9e, 0xd3, + 0x34, 0xb3, 0x20, 0xa3, 0xb9, 0x51, 0xcb, 0x73, 0xa4, 0x22, 0x3b, 0xb0, 0x75, 0xa4, 0x43, 0x4c, + 0xa5, 0x6e, 0xc2, 0x18, 0x77, 0xc5, 0x15, 0xaa, 0x06, 0x29, 0x41, 0xa9, 0x16, 0x5d, 0xe2, 0xc5, + 0x9a, 0xc2, 0x74, 0x07, 0x01, 0xfa, 0x71, 0x2e, 0x9c, 0x79, 0xb5, 0x3b, 0xf0, 0xe8, 0x70, 0x77, + 0x60, 0xcd, 0x69, 0x69, 0x6c, 0x18, 0xa7, 0xa5, 0xd3, 0x6f, 0x42, 0x41, 0x6b, 0xcf, 0x91, 0x04, + 0xaa, 0x1f, 0xce, 0xc2, 0x14, 0x7e, 0x95, 0x7a, 0xe9, 0x78, 0x3a, 0x6f, 0xf4, 0x6f, 0x19, 0x37, + 0xfa, 0x79, 0x7d, 0xbc, 0xf8, 0x97, 0x0d, 0xb8, 0xca, 0xdf, 0x84, 0xd9, 0x04, 0x22, 0x79, 0x03, + 0x46, 0x59, 0xf3, 0xe5, 0x0d, 0xa8, 0x18, 0x9f, 0x01, 0x91, 0x83, 0x3b, 0xfb, 0xf0, 0xc0, 0xe6, + 0xd8, 0xd6, 0xff, 0x9a, 0x81, 0x49, 0x11, 0xc4, 0xa7, 0xb3, 0xe3, 0x1d, 0xda, 0x9d, 0xe7, 0xe3, + 0xdd, 0xc9, 0x0d, 0x7f, 0x45, 0x77, 0xfe, 0x3f, 0xdd, 0x89, 0x6f, 0x1a, 0x9d, 0x78, 0x52, 0xb9, + 0xbb, 0xc9, 0xcf, 0x19, 0xd0, 0x87, 0xbf, 0x89, 0x0e, 0xe0, 0x26, 0x22, 0xf9, 0x0a, 0x4c, 0xac, + 0xd3, 0x07, 0xc6, 0x45, 0xe2, 0x7c, 0x1f, 0xa6, 0x97, 0x14, 0x22, 0x5f, 0x53, 0x68, 0x1b, 0xd2, + 0xa1, 0x0f, 0xea, 0x89, 0x87, 0x88, 0x88, 0x25, 0xbb, 0x4b, 0x98, 0x64, 0x47, 0x99, 0xfa, 0xc2, + 0xc4, 0x06, 0x6d, 0xd9, 0x7f, 0x29, 0x07, 0x10, 0x59, 0x27, 0xb0, 0x05, 0x48, 0x8d, 0x50, 0x77, + 0x42, 0xfb, 0x89, 0x20, 0x7d, 0x8e, 0x0b, 0x10, 0x39, 0x2f, 0x74, 0x85, 0xd9, 0xfe, 0xee, 0x88, + 0xa8, 0x35, 0x2c, 0x8b, 0xd7, 0xff, 0x26, 0x6d, 0x39, 0x7c, 0x2f, 0xce, 0x61, 0x3e, 0xde, 0xb9, + 0x08, 0xda, 0x27, 0x1a, 0x3b, 0xda, 0x08, 0x2c, 0x33, 0x84, 0x84, 0xc5, 0xcf, 0xc8, 0x27, 0xb7, + 0xf8, 0x19, 0xfd, 0x04, 0x16, 0x3f, 0x63, 0x43, 0x5a, 0xfc, 0x54, 0x61, 0xc2, 0xed, 0xdc, 0xa7, + 0x9d, 0xd0, 0xf3, 0xf7, 0xe7, 0xc7, 0x71, 0xf0, 0x4f, 0x69, 0x86, 0x20, 0x15, 0x59, 0xc6, 0xc7, + 0x1b, 0xaf, 0x38, 0x0a, 0x5f, 0x1f, 0x6e, 0x05, 0x14, 0xcf, 0xf0, 0xbf, 0x93, 0x05, 0x92, 0x64, + 0x40, 0xde, 0x82, 0x02, 0xdf, 0x82, 0xeb, 0x7e, 0xf0, 0x35, 0x61, 0x2e, 0xc2, 0x7d, 0x06, 0x34, + 0xb0, 0xee, 0x33, 0xc0, 0xc1, 0x76, 0xf0, 0xb5, 0x16, 0xf9, 0x32, 0x1c, 0xc3, 0x01, 0xe8, 0x52, + 0xdf, 0xf5, 0x9a, 0x75, 0x74, 0x97, 0x76, 0x5a, 0x22, 0xb6, 0xea, 0xeb, 0x18, 0x04, 0x3c, 0x59, + 0xdc, 0x67, 0xa0, 0xd0, 0x2a, 0xa3, 0x8a, 0x98, 0x55, 0x8e, 0x48, 0x36, 0xa1, 0xa8, 0xd3, 0xef, + 0xf4, 0x5a, 0x2d, 0x31, 0xf6, 0xaf, 0x60, 0x6e, 0xc0, 0x58, 0x59, 0x1f, 0xc6, 0xd3, 0x11, 0xe3, + 0xeb, 0xbd, 0x56, 0x8b, 0x7c, 0x0e, 0xc0, 0xeb, 0xd4, 0xdb, 0x6e, 0x10, 0x70, 0x95, 0xb8, 0xb2, + 0xa8, 0x8a, 0xa0, 0x7a, 0x37, 0x7a, 0x9d, 0xdb, 0x1c, 0x28, 0xba, 0xf1, 0xfb, 0x60, 0x56, 0x78, + 0x0b, 0x6c, 0xb9, 0xe1, 0x9e, 0x10, 0xf0, 0x1e, 0x47, 0x3a, 0xd4, 0x24, 0xbc, 0xdf, 0xcc, 0x01, + 0x94, 0xb6, 0x6a, 0xd2, 0x51, 0xe5, 0x22, 0x8c, 0x32, 0xb1, 0x55, 0x5e, 0x7f, 0x51, 0x79, 0x88, + 0x7c, 0x75, 0xe5, 0x21, 0x62, 0xb0, 0x95, 0x67, 0xd3, 0x5d, 0xd4, 0xc0, 0x64, 0xa3, 0xbb, 0xb2, + 0xcf, 0x41, 0x86, 0x10, 0xc6, 0x41, 0x64, 0x0d, 0x20, 0x72, 0x1d, 0x11, 0x17, 0xa9, 0xd9, 0xc8, + 0x06, 0x5b, 0x14, 0x88, 0x28, 0x3c, 0x91, 0xfb, 0x89, 0x3e, 0x11, 0x22, 0x34, 0x72, 0x0b, 0x46, + 0x36, 0x1d, 0x65, 0xf9, 0xd3, 0xc7, 0xa1, 0xe6, 0xac, 0x88, 0x62, 0x1b, 0x39, 0xd5, 0x4c, 0x87, + 0x8e, 0x11, 0xec, 0x1b, 0x99, 0x90, 0x15, 0x18, 0x13, 0x19, 0x0a, 0xfa, 0x78, 0x57, 0x8a, 0x04, + 0x05, 0x22, 0x98, 0x01, 0x02, 0x8d, 0x54, 0xee, 0x3c, 0x17, 0xc1, 0x22, 0xe4, 0x6a, 0xb5, 0xdb, + 0xc2, 0x8c, 0x74, 0x2a, 0x92, 0x8a, 0x6b, 0xb5, 0xdb, 0x32, 0x0b, 0x8b, 0x9e, 0x6d, 0x9b, 0x21, + 0x93, 0xb7, 0xa1, 0xa0, 0x49, 0xb8, 0xc2, 0x00, 0x1b, 0xfb, 0xc0, 0x8d, 0xc0, 0x86, 0x60, 0x1a, + 0x81, 0x2d, 0xaa, 0x77, 0x29, 0x3b, 0xa1, 0x4c, 0xb9, 0x18, 0x4f, 0x28, 0x29, 0x17, 0x47, 0xd2, + 0xf0, 0xe5, 0x14, 0x97, 0x1d, 0x7c, 0x0f, 0xd1, 0x5c, 0x76, 0x0c, 0x47, 0x9d, 0xdf, 0xcf, 0x69, + 0xae, 0xa0, 0xe2, 0x5b, 0xdf, 0x05, 0xb8, 0xe9, 0xb9, 0x9d, 0xdb, 0x34, 0xdc, 0xf3, 0x9a, 0x9a, + 0xe7, 0x50, 0xe1, 0x63, 0xcf, 0xed, 0xd4, 0xdb, 0x08, 0xfe, 0xee, 0xc1, 0x82, 0x86, 0x64, 0x6b, + 0x7f, 0x93, 0xd7, 0x60, 0x82, 0xfd, 0xda, 0x8c, 0x1e, 0xf0, 0xb9, 0x26, 0x0a, 0xa9, 0x45, 0xb6, + 0x24, 0x85, 0x40, 0xde, 0x04, 0xe0, 0x4e, 0xa9, 0x9a, 0x20, 0x88, 0x7d, 0xc4, 0xdf, 0xb2, 0xe2, + 0x6e, 0xf5, 0x1a, 0x32, 0x59, 0x55, 0x4d, 0x97, 0x31, 0xcb, 0x44, 0x60, 0x2b, 0x54, 0xb7, 0x88, + 0xb1, 0xac, 0xcb, 0x08, 0x67, 0x7a, 0x74, 0xe9, 0x18, 0x19, 0x36, 0xa2, 0xb6, 0xba, 0xcc, 0xf5, + 0xe3, 0x62, 0x3f, 0xe6, 0x8d, 0x08, 0xf6, 0x9a, 0xf5, 0x06, 0x82, 0x8d, 0x46, 0x28, 0x64, 0xb2, + 0x04, 0x33, 0xdc, 0xbe, 0x5d, 0xc5, 0x3e, 0x15, 0x7b, 0x33, 0xee, 0x02, 0x51, 0x70, 0x54, 0xbd, + 0xfa, 0x18, 0x01, 0xb9, 0x0e, 0xa3, 0xa5, 0xaf, 0xf7, 0x7c, 0x2a, 0x8c, 0x8c, 0xa5, 0x3e, 0x05, + 0x61, 0xf1, 0x79, 0x8a, 0xeb, 0xd6, 0x61, 0x25, 0xfa, 0xba, 0x45, 0x54, 0xab, 0x02, 0x63, 0x7c, + 0x4a, 0x62, 0x8c, 0x05, 0x11, 0xc0, 0x49, 0xf3, 0xd0, 0xe7, 0x31, 0x16, 0x04, 0x3c, 0x19, 0x63, + 0x41, 0x23, 0xb0, 0x6e, 0xc1, 0x5c, 0x5a, 0xf5, 0xe4, 0x6a, 0x22, 0xf5, 0x9a, 0x9e, 0xf4, 0xc9, + 0x0c, 0xa3, 0x28, 0x11, 0xad, 0x9f, 0xcb, 0xc1, 0x24, 0x72, 0x93, 0x7b, 0x51, 0x09, 0xa6, 0x6a, + 0xbd, 0x6d, 0xe5, 0x32, 0x21, 0xf7, 0x24, 0x9e, 0x02, 0x57, 0x2f, 0xd0, 0xdf, 0x17, 0x0c, 0x0a, + 0xb2, 0x02, 0xd3, 0x72, 0x3f, 0x14, 0x31, 0x9a, 0xb3, 0x51, 0x78, 0x03, 0xe9, 0xcc, 0x97, 0x8c, + 0xd0, 0x1c, 0x23, 0x8a, 0x76, 0xc5, 0xdc, 0x51, 0x76, 0xc5, 0x91, 0xa1, 0x76, 0xc5, 0x8f, 0x60, + 0x52, 0xd6, 0x86, 0xfb, 0xd9, 0xe8, 0xe3, 0xed, 0x67, 0x06, 0x33, 0xb2, 0xa6, 0xf6, 0xb5, 0xb1, + 0x81, 0xfb, 0x1a, 0x3e, 0xda, 0xc8, 0xb5, 0x90, 0x48, 0xba, 0x22, 0x78, 0x60, 0x08, 0xd3, 0x1b, + 0xe5, 0xea, 0x27, 0x38, 0x2b, 0xde, 0x80, 0x89, 0x35, 0x4f, 0xea, 0xeb, 0x35, 0x45, 0x69, 0x4b, + 0x02, 0xf5, 0xe3, 0x4f, 0x61, 0xaa, 0x3d, 0x3e, 0xf7, 0x24, 0xf6, 0xf8, 0x37, 0x01, 0xaa, 0xdc, + 0xd8, 0x37, 0x0a, 0x3d, 0x88, 0xcb, 0x57, 0x5a, 0x05, 0x9b, 0xfa, 0x5a, 0x0d, 0x99, 0xed, 0x21, + 0xe2, 0x11, 0xbe, 0xd4, 0x68, 0x78, 0xbd, 0x4e, 0x68, 0xc4, 0xea, 0x96, 0xe9, 0x98, 0x1d, 0x51, + 0xa6, 0x2f, 0xe2, 0x18, 0xd9, 0x93, 0x1d, 0x10, 0xf2, 0x81, 0xb2, 0x1e, 0x1a, 0x98, 0xba, 0xc8, + 0x4a, 0xf4, 0x50, 0x5f, 0x9b, 0x21, 0xeb, 0x0f, 0x32, 0x7a, 0x6c, 0x99, 0x4f, 0x30, 0xd4, 0x9f, + 0x07, 0x50, 0x0f, 0xa6, 0x72, 0xac, 0xf9, 0x0d, 0x41, 0x41, 0xf5, 0x5e, 0x8e, 0x70, 0xb5, 0xaf, + 0xc9, 0x3d, 0xa9, 0xaf, 0xd9, 0x84, 0xc2, 0xc6, 0xbd, 0xd0, 0x89, 0x5e, 0xd8, 0xa1, 0xa6, 0x24, + 0x33, 0xdc, 0x99, 0x64, 0x8a, 0xa5, 0x48, 0xae, 0xeb, 0x9b, 0x62, 0x49, 0x11, 0x5a, 0x1f, 0xc0, + 0x0c, 0xb7, 0x5e, 0xbb, 0xe1, 0x3b, 0xdd, 0x3d, 0x34, 0x5d, 0x7e, 0x8f, 0xfb, 0xe6, 0x66, 0x0c, + 0xd9, 0x59, 0x43, 0x62, 0x3b, 0xee, 0x7e, 0xa7, 0xc1, 0xa5, 0x00, 0xe7, 0x81, 0xde, 0x56, 0xbc, + 0xd5, 0xfc, 0x61, 0x06, 0xfe, 0x6f, 0xe2, 0xae, 0xaf, 0x37, 0x6e, 0x22, 0x88, 0xdf, 0xda, 0xd7, + 0x34, 0x9d, 0x24, 0xbd, 0x8d, 0xdb, 0xa6, 0xa1, 0xbd, 0x1e, 0x7f, 0x04, 0x88, 0x2e, 0x02, 0x51, + 0x78, 0xe2, 0x01, 0xa1, 0x8d, 0xbd, 0x8e, 0xad, 0xb3, 0x77, 0xad, 0xdd, 0x75, 0x42, 0x2a, 0xa4, + 0x15, 0xa8, 0x56, 0x74, 0x52, 0x71, 0x51, 0x72, 0x91, 0xe0, 0x0b, 0xf0, 0xc2, 0x0b, 0xe2, 0x13, + 0xf0, 0x71, 0xfa, 0x82, 0xc4, 0x47, 0x80, 0x7c, 0x12, 0xb4, 0x6b, 0xbb, 0xb9, 0xf3, 0x9d, 0x22, + 0xe5, 0xa9, 0x8f, 0x9e, 0xdf, 0xd8, 0x3b, 0x37, 0x37, 0x63, 0x8f, 0x66, 0x3d, 0x3f, 0x07, 0xab, + 0xea, 0x8b, 0x77, 0x13, 0xf4, 0x16, 0x6a, 0xac, 0x5e, 0x6d, 0x32, 0xbc, 0x49, 0x6d, 0x42, 0xfe, + 0x40, 0x30, 0x4a, 0x69, 0xde, 0x12, 0xc1, 0x34, 0x8d, 0xdf, 0xf7, 0xe1, 0x49, 0x4a, 0x73, 0x53, + 0x88, 0x2c, 0x0d, 0x4f, 0xcc, 0xda, 0x31, 0xf3, 0x27, 0xf0, 0xce, 0xaa, 0xca, 0x55, 0x83, 0x78, + 0x0c, 0xfb, 0xab, 0x70, 0x37, 0x8a, 0xbe, 0xfe, 0xe4, 0x6e, 0x6a, 0xdd, 0x27, 0xdf, 0xc2, 0xa8, + 0x9b, 0xd0, 0xd6, 0x99, 0x72, 0x8c, 0x2a, 0x23, 0xd8, 0x3a, 0x62, 0x32, 0x8d, 0x4f, 0x4c, 0x5c, + 0x66, 0x19, 0x1e, 0x04, 0x3b, 0x70, 0xa7, 0x15, 0x84, 0x14, 0xa3, 0x60, 0x1b, 0x36, 0x53, 0xae, + 0x58, 0x58, 0x4a, 0x86, 0x3d, 0xf2, 0x25, 0xdc, 0xbd, 0xfa, 0x08, 0xac, 0xeb, 0xef, 0xde, 0x06, + 0x5f, 0xd2, 0x63, 0x3c, 0x08, 0x00, 0x36, 0x8a, 0x69, 0xa8, 0x9e, 0x3d, 0xc3, 0x28, 0xd8, 0x82, + 0xdb, 0x87, 0x61, 0x61, 0xa6, 0xb9, 0xc2, 0x1e, 0xf9, 0x02, 0x76, 0xdd, 0x43, 0x3c, 0x9b, 0x9d, + 0xcf, 0xab, 0xba, 0x3a, 0x73, 0xcb, 0x6e, 0xc3, 0xa6, 0xaa, 0x6c, 0x5e, 0xcf, 0xab, 0x66, 0xcd, + 0xfc, 0xe2, 0xe5, 0x7c, 0xf6, 0xf3, 0xcb, 0xea, 0x17, 0x8c, 0xc8, 0xd7, 0x30, 0x92, 0xaf, 0x2e, + 0xe6, 0xb3, 0xfa, 0x54, 0xcd, 0xad, 0xc6, 0xe9, 0xaf, 0xc1, 0x03, 0xd8, 0x2d, 0x39, 0xcd, 0x0f, + 0xd2, 0xc3, 0x52, 0x94, 0xca, 0xe4, 0x54, 0x87, 0x49, 0xd3, 0x50, 0xce, 0x85, 0xd2, 0x46, 0xb2, + 0x90, 0x71, 0x8d, 0x11, 0xf9, 0x1d, 0xc1, 0xdd, 0xf2, 0xbc, 0x7d, 0x5f, 0xb1, 0x74, 0x03, 0xc6, + 0xef, 0xc1, 0xb8, 0x54, 0x4c, 0x1a, 0x2d, 0xa6, 0x8c, 0x9b, 0x52, 0xd1, 0xc3, 0x3e, 0xad, 0xc1, + 0xbb, 0xf0, 0x78, 0x41, 0x43, 0xb2, 0x50, 0x1c, 0x31, 0x69, 0x0a, 0xaa, 0xd4, 0xb1, 0x90, 0x11, + 0x46, 0xc1, 0x23, 0xd8, 0x5b, 0xa3, 0x90, 0xc7, 0x14, 0x7b, 0x2b, 0x18, 0x67, 0xc7, 0x34, 0x33, + 0x07, 0x42, 0x63, 0x9f, 0xe4, 0xf6, 0xd9, 0xe6, 0x26, 0x7f, 0x1b, 0xc2, 0xb4, 0x4d, 0x18, 0x72, + 0xc1, 0x59, 0xbf, 0xe9, 0xbf, 0x0d, 0x9b, 0xb4, 0x28, 0xa4, 0x38, 0x72, 0xff, 0x21, 0xc0, 0x46, + 0xc4, 0xb8, 0xb5, 0xcc, 0xb7, 0x48, 0x21, 0x45, 0x2e, 0x34, 0x8b, 0xf0, 0x90, 0xfc, 0x85, 0x20, + 0x68, 0x26, 0x9c, 0x3b, 0x12, 0x2a, 0xe7, 0xcb, 0x09, 0x3c, 0x4a, 0xac, 0x13, 0x9c, 0x19, 0xb9, + 0x88, 0xfa, 0x3f, 0x6f, 0x0f, 0x82, 0x1e, 0x2e, 0xe2, 0x18, 0xa3, 0xe0, 0x21, 0xdc, 0xeb, 0xc9, + 0x23, 0x29, 0x0a, 0xec, 0xad, 0x01, 0xa6, 0x8c, 0x15, 0xd8, 0xb7, 0xae, 0xec, 0x01, 0x5d, 0x6c, + 0x34, 0xa7, 0x0e, 0xc9, 0x6f, 0x08, 0xf6, 0x1a, 0x13, 0xbb, 0x40, 0x7b, 0x63, 0xe6, 0x18, 0xf6, + 0x5b, 0x22, 0x86, 0x75, 0x46, 0xde, 0x07, 0xbc, 0x84, 0x36, 0x26, 0x3e, 0x80, 0xdd, 0x25, 0xa9, + 0xb3, 0xc3, 0xb3, 0x69, 0xb4, 0x24, 0x3e, 0x60, 0x4a, 0x1b, 0x16, 0xc7, 0x42, 0xea, 0xc6, 0x10, + 0x9f, 0x7c, 0x00, 0xbb, 0x61, 0x75, 0x36, 0xb7, 0x45, 0x7c, 0x7d, 0x3e, 0x7b, 0x55, 0x3b, 0x13, + 0x76, 0xe0, 0x0e, 0xfb, 0x4e, 0x33, 0xae, 0x52, 0xc1, 0xf1, 0x80, 0x8c, 0x7b, 0x3a, 0x5d, 0x40, + 0x2b, 0x95, 0xe0, 0x01, 0xf9, 0x1e, 0xb6, 0x97, 0x68, 0x14, 0x1f, 0xc2, 0xbd, 0xc5, 0xe3, 0xa2, + 0xaa, 0x5f, 0xcc, 0xea, 0x53, 0x3c, 0xe8, 0x03, 0xf2, 0xa2, 0xae, 0x2d, 0xe0, 0xc2, 0x66, 0x11, + 0xd0, 0xd5, 0xd9, 0x4f, 0xb3, 0xfa, 0x87, 0x79, 0xf5, 0x02, 0x7b, 0xe4, 0x73, 0xd8, 0x59, 0x1a, + 0x37, 0xb7, 0xeb, 0x66, 0xa2, 0x4d, 0xa4, 0x9c, 0x45, 0x69, 0x99, 0xe3, 0x5b, 0x36, 0x60, 0x92, + 0xf4, 0x30, 0xc1, 0x40, 0xfe, 0x44, 0xb6, 0x94, 0x73, 0x94, 0x4c, 0x79, 0x4c, 0x3b, 0x4b, 0xad, + 0x97, 0x1a, 0x66, 0x0a, 0xa6, 0x54, 0xb3, 0xa5, 0x32, 0x86, 0xfd, 0xf6, 0xc0, 0x50, 0x1e, 0x99, + 0x84, 0xca, 0xe8, 0x98, 0x4a, 0xeb, 0xba, 0x13, 0xec, 0xb9, 0x58, 0x58, 0x90, 0x18, 0x2d, 0xca, + 0x30, 0xc1, 0xbe, 0x75, 0xff, 0x92, 0xbc, 0x48, 0x39, 0x1e, 0xba, 0xc8, 0x5a, 0xd1, 0x76, 0x97, + 0xb5, 0xf8, 0x2d, 0x32, 0x03, 0xdc, 0x7f, 0xad, 0x7c, 0x65, 0x6f, 0x4b, 0x96, 0x9c, 0x37, 0x61, + 0x3e, 0x82, 0x2d, 0xa1, 0x13, 0x26, 0x5b, 0xee, 0x10, 0x47, 0x16, 0x52, 0x72, 0x5a, 0xea, 0x44, + 0xc8, 0xf4, 0xb9, 0x8b, 0xf7, 0x7d, 0xb8, 0xaf, 0x32, 0x1a, 0x4e, 0x0d, 0x17, 0xda, 0xa4, 0xdc, + 0x84, 0x09, 0xe5, 0x9c, 0x65, 0x18, 0xc8, 0xdf, 0x08, 0x1e, 0x5f, 0xd3, 0xe8, 0x0f, 0x3e, 0x83, + 0xa7, 0x09, 0xa3, 0x51, 0xc6, 0x94, 0x32, 0xf6, 0x92, 0x8c, 0xeb, 0x76, 0x9b, 0xc9, 0xdd, 0x06, + 0xfb, 0xe1, 0xf6, 0x14, 0x3e, 0xba, 0x5e, 0xfd, 0x2a, 0x3b, 0x3f, 0x81, 0x0f, 0xaf, 0x57, 0x6d, + 0xb3, 0xd5, 0x0b, 0x08, 0x7c, 0x7c, 0xbd, 0xe6, 0x9b, 0x2c, 0xf7, 0x0f, 0xbe, 0x79, 0xfd, 0xdf, + 0x64, 0xf0, 0xfa, 0x72, 0x82, 0xfe, 0xb9, 0x9c, 0xa0, 0x7f, 0x2f, 0x27, 0xe8, 0xf9, 0xa7, 0x37, + 0xf8, 0xd2, 0xcc, 0x8f, 0x1b, 0x6e, 0x1f, 0xf3, 0xab, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0xd2, + 0x59, 0xc1, 0xf4, 0xef, 0x6d, 0x01, 0x00, } func (this *PluginSpecV1) Equal(that interface{}) bool { @@ -39897,6 +39906,13 @@ func (m *AWSOIDCIntegrationSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.IssuerS3URI) > 0 { + i -= len(m.IssuerS3URI) + copy(dAtA[i:], m.IssuerS3URI) + i = encodeVarintTypes(dAtA, i, uint64(len(m.IssuerS3URI))) + i-- + dAtA[i] = 0x12 + } if len(m.RoleARN) > 0 { i -= len(m.RoleARN) copy(dAtA[i:], m.RoleARN) @@ -49996,6 +50012,10 @@ func (m *AWSOIDCIntegrationSpecV1) Size() (n int) { if l > 0 { n += 1 + l + sovTypes(uint64(l)) } + l = len(m.IssuerS3URI) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -107948,6 +107968,38 @@ func (m *AWSOIDCIntegrationSpecV1) Unmarshal(dAtA []byte) error { } m.RoleARN = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IssuerS3URI", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IssuerS3URI = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) diff --git a/go.mod b/go.mod index 245b6cdb09e72..c1dd8daad1cdf 100644 --- a/go.mod +++ b/go.mod @@ -38,26 +38,26 @@ require ( github.com/aquasecurity/libbpfgo v0.5.1-libbpf-1.2 github.com/armon/go-radix v1.0.0 github.com/aws/aws-sdk-go v1.50.36 - github.com/aws/aws-sdk-go-v2 v1.22.2 - github.com/aws/aws-sdk-go-v2/config v1.19.1 - github.com/aws/aws-sdk-go-v2/credentials v1.13.43 - github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.10.39 - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13 - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.81 - github.com/aws/aws-sdk-go-v2/service/athena v1.31.6 - github.com/aws/aws-sdk-go-v2/service/dynamodb v1.25.1 - github.com/aws/aws-sdk-go-v2/service/ec2 v1.115.0 - github.com/aws/aws-sdk-go-v2/service/ec2instanceconnect v1.16.5 - github.com/aws/aws-sdk-go-v2/service/ecs v1.29.6 - github.com/aws/aws-sdk-go-v2/service/glue v1.62.0 - github.com/aws/aws-sdk-go-v2/service/iam v1.22.5 - github.com/aws/aws-sdk-go-v2/service/rds v1.53.0 - github.com/aws/aws-sdk-go-v2/service/s3 v1.40.0 - github.com/aws/aws-sdk-go-v2/service/sns v1.21.5 - github.com/aws/aws-sdk-go-v2/service/sqs v1.28.0 - github.com/aws/aws-sdk-go-v2/service/sts v1.23.2 + github.com/aws/aws-sdk-go-v2 v1.25.2 + github.com/aws/aws-sdk-go-v2/config v1.27.5 + github.com/aws/aws-sdk-go-v2/credentials v1.17.5 + github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.7 + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.2 + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.16.7 + github.com/aws/aws-sdk-go-v2/service/athena v1.40.1 + github.com/aws/aws-sdk-go-v2/service/dynamodb v1.30.2 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.149.3 + github.com/aws/aws-sdk-go-v2/service/ec2instanceconnect v1.22.1 + github.com/aws/aws-sdk-go-v2/service/ecs v1.41.1 + github.com/aws/aws-sdk-go-v2/service/glue v1.77.2 + github.com/aws/aws-sdk-go-v2/service/iam v1.31.1 + github.com/aws/aws-sdk-go-v2/service/rds v1.74.1 + github.com/aws/aws-sdk-go-v2/service/s3 v1.51.2 + github.com/aws/aws-sdk-go-v2/service/sns v1.29.1 + github.com/aws/aws-sdk-go-v2/service/sqs v1.31.1 + github.com/aws/aws-sdk-go-v2/service/sts v1.28.2 github.com/aws/aws-sigv4-auth-cassandra-gocql-driver-plugin v0.0.0-20220331165046-e4d000c0d6a6 - github.com/aws/smithy-go v1.16.0 + github.com/aws/smithy-go v1.20.1 github.com/beevik/etree v1.2.0 github.com/buildkite/bintest/v3 v3.1.1 github.com/charmbracelet/bubbles v0.17.1 @@ -150,7 +150,7 @@ require ( github.com/sethvargo/go-diceware v0.3.0 github.com/sijms/go-ora/v2 v2.7.9 github.com/sirupsen/logrus v1.9.3 - github.com/snowflakedb/gosnowflake v1.6.24 + github.com/snowflakedb/gosnowflake v1.7.1 github.com/spf13/cobra v1.8.0 github.com/stretchr/testify v1.8.4 github.com/tiktoken-go/tokenizer v0.1.0 @@ -240,19 +240,19 @@ require ( github.com/apache/arrow/go/v12 v12.0.1 // indirect github.com/apache/thrift v0.16.0 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.4 // indirect - github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.15.5 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.0 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.36 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.8.2 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.4 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.15.2 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.1 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.2 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.2 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.2 // indirect + github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.20.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.2 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.20.1 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.1 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/blang/semver v3.5.1+incompatible // indirect diff --git a/go.sum b/go.sum index 431c0c074c5b1..30b0051b4fce9 100644 --- a/go.sum +++ b/go.sum @@ -201,105 +201,85 @@ github.com/aws/aws-sdk-go v1.50.36 h1:PjWXHwZPuTLMR1NIb8nEjLucZBMzmf84TLoLbD8BZq github.com/aws/aws-sdk-go v1.50.36/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/aws/aws-sdk-go-v2 v1.18.0/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= -github.com/aws/aws-sdk-go-v2 v1.21.0/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M= -github.com/aws/aws-sdk-go-v2 v1.21.2/go.mod h1:ErQhvNuEMhJjweavOYhxVkn2RUx7kQXVATHrjKtxIpM= -github.com/aws/aws-sdk-go-v2 v1.22.2 h1:lV0U8fnhAnPz8YcdmZVV60+tr6CakHzqA6P8T46ExJI= -github.com/aws/aws-sdk-go-v2 v1.22.2/go.mod h1:Kd0OJtkW3Q0M0lUWGszapWjEvrXDzRW+D21JNsroB+c= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13 h1:OPLEkmhXf6xFPiz0bLeDArZIDx1NNS4oJyG4nv3Gct0= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13/go.mod h1:gpAbvyDGQFozTEmlTFO8XcQKHzubdq0LzRyJpG6MiXM= +github.com/aws/aws-sdk-go-v2 v1.25.2 h1:/uiG1avJRgLGiQM9X3qJM8+Qa6KRGK5rRPuXE0HUM+w= +github.com/aws/aws-sdk-go-v2 v1.25.2/go.mod h1:Evoc5AsmtveRt1komDwIsjHFyrP5tDuF1D1U+6z6pNo= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.1 h1:gTK2uhtAPtFcdRRJilZPx8uJLL2J85xK11nKtWL0wfU= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.1/go.mod h1:sxpLb+nZk7tIfCWChfd+h4QwHNUR57d8hA1cleTkjJo= github.com/aws/aws-sdk-go-v2/config v1.18.25/go.mod h1:dZnYpD5wTW/dQF0rRNLVypB396zWCcPiBIvdvSWHEg4= -github.com/aws/aws-sdk-go-v2/config v1.18.37/go.mod h1:8AnEFxW9/XGKCbjYDCJy7iltVNyEI9Iu9qC21UzhhgQ= -github.com/aws/aws-sdk-go-v2/config v1.19.1 h1:oe3vqcGftyk40icfLymhhhNysAwk0NfiwkDi2GTPMXs= -github.com/aws/aws-sdk-go-v2/config v1.19.1/go.mod h1:ZwDUgFnQgsazQTnWfeLWk5GjeqTQTL8lMkoE1UXzxdE= +github.com/aws/aws-sdk-go-v2/config v1.27.5 h1:brBPsyRFQn97M1ZhQ9tLXkO7Zytiar0NS06FGmEJBdg= +github.com/aws/aws-sdk-go-v2/config v1.27.5/go.mod h1:I53uvsfddRRTG5YcC4n5Z3aOD1BU8hYCoIG7iEJG4wM= github.com/aws/aws-sdk-go-v2/credentials v1.13.24/go.mod h1:jYPYi99wUOPIFi0rhiOvXeSEReVOzBqFNOX5bXYoG2o= -github.com/aws/aws-sdk-go-v2/credentials v1.13.35/go.mod h1:o7rCaLtvK0hUggAGclf76mNGGkaG5a9KWlp+d9IpcV8= -github.com/aws/aws-sdk-go-v2/credentials v1.13.43 h1:LU8vo40zBlo3R7bAvBVy/ku4nxGEyZe9N8MqAeFTzF8= -github.com/aws/aws-sdk-go-v2/credentials v1.13.43/go.mod h1:zWJBz1Yf1ZtX5NGax9ZdNjhhI4rgjfgsyk6vTY1yfVg= -github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.10.39 h1:DX/r3aNL7pIVn0K5a+ESL0Fw9ti7Rj05pblEiIJtPmQ= -github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.10.39/go.mod h1:oTk09orqXlwSKnKf+UQhy+4Ci7aCo9x8hn0ZvPCLrns= +github.com/aws/aws-sdk-go-v2/credentials v1.17.5 h1:yn3zSvIKC2NZIs40cY3kckcy9Zma96PrRR07N54PCvY= +github.com/aws/aws-sdk-go-v2/credentials v1.17.5/go.mod h1:8JcKPAGZVnDWuR5lusAwmrSDtZnDIAnpQWaDC9RFt2g= +github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.7 h1:FZB15YK2h/l2wO9YXvXr7/mZ5uOJIsLNZIePlHarAwg= +github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.7/go.mod h1:xTMr0gSUW6H6nJJVV257wWlk9257DwZ7EFhPFn3itgo= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.3/go.mod h1:4Q0UFP0YJf0NrsEuEYHpM9fTSEVnD16Z3uyEF7J9JGM= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11/go.mod h1:TEPP4tENqBGO99KwVpV9MlOX4NSrSLP8u3KRy2CDwA8= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13 h1:PIktER+hwIG286DqXyvVENjgLTAwGgoeriLDD5C+YlQ= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13/go.mod h1:f/Ib/qYjhV2/qdsf79H3QP/eRE4AkVyEf6sk7XfZ1tg= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.81 h1:PQ9zoe2GEoTVSVPuNtjNrKeVPvyVPWesETMPb7KB3Fk= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.81/go.mod h1:EztVLIU9xGitjdZ1TyHWL9IcNx4952FlqKJe6GLG2z4= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.2 h1:AK0J8iYBFeUk2Ax7O8YpLtFsfhdOByh2QIkHmigpRYk= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.2/go.mod h1:iRlGzMix0SExQEviAyptRWRGdYNo3+ufW/lCzvKVTUc= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.16.7 h1:/r2O0R/JAD1Y1iCxxz7nClKntXqB9CLTrxu7csrAsSA= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.16.7/go.mod h1:TbQoOduGh1PZbTNRqaEemgj/e+mmFC3hScHEQDTcUoQ= github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.33/go.mod h1:7i0PF1ME/2eUPFcjkVIwq+DOygHEoK92t5cDqNgYbIw= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41/go.mod h1:CrObHAuPneJBlfEJ5T3szXOUkLEThaGfvnhTf33buas= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43/go.mod h1:auo+PiyLl0n1l8A0e8RIeR8tOzYPfZZH/JNlrJ8igTQ= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2 h1:AaQsr5vvGR7rmeSWBtTCcw16tT9r51mWijuCQhzLnq8= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2/go.mod h1:o1IiRn7CWocIFTXJjGKJDOwxv1ibL53NpcvcqGWyRBA= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.2 h1:bNo4LagzUKbjdxE0tIcR9pMzLR2U/Tgie1Hq1HQ3iH8= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.2/go.mod h1:wRQv0nN6v9wDXuWThpovGQjqF1HFdcgWjporw14lS8k= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.27/go.mod h1:UrHnn3QV/d0pBZ6QBAEQcqFLf8FAzLmoUfPVIueOvoM= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35/go.mod h1:SJC1nEVVva1g3pHAIdCp7QsRIkMmLAgoDquQ9Rr8kYw= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37/go.mod h1:Qe+2KtKml+FEsQF/DHmDV+xjtche/hwoF75EG4UlHW8= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2 h1:UZx8SXZ0YtzRiALzYAWcjb9Y9hZUR7MBKaBQ5ouOjPs= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2/go.mod h1:ipuRpcSaklmxR6C39G187TpBAO132gUfleTGccUPs8c= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.2 h1:EtOU5jsPdIQNP+6Q2C5e3d65NKT1PeCiQk+9OdzO12Q= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.2/go.mod h1:tyF5sKccmDz0Bv4NrstEr+/9YkSPJHrcO7UsUKf7pWM= github.com/aws/aws-sdk-go-v2/internal/ini v1.3.34/go.mod h1:Etz2dj6UHYuw+Xw830KfzCfWGMzqvUTCjUj5b76GVDc= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.42/go.mod h1:rzfdUlfA+jdgLDmPKjd3Chq9V7LVLYo1Nz++Wb91aRo= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45 h1:hze8YsjSh8Wl1rYa1CJpRmXP21BvOBuc76YhW0HsuQ4= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45/go.mod h1:lD5M20o09/LCuQ2mE62Mb/iSdSlCNuj6H5ci7tW7OsE= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.4 h1:6lJvvkQ9HmbHZ4h/IEwclwv2mrTW8Uq1SOB/kXy0mfw= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.4/go.mod h1:1PrKYwxTM+zjpw9Y41KFtoJCQrJ34Z47Y4VgVbfndjo= -github.com/aws/aws-sdk-go-v2/service/athena v1.31.6 h1:EFaTu1rBt+KQglDeYRpP1PHot/6xlYzvouxm2aRmrG8= -github.com/aws/aws-sdk-go-v2/service/athena v1.31.6/go.mod h1:DHafyhR8x70ANJZ2RkJx8oeJsfEBqaGwZ591vlihVFQ= -github.com/aws/aws-sdk-go-v2/service/dynamodb v1.21.5/go.mod h1:X3ThW5RPV19hi7bnQ0RMAiBjZbzxj4rZlj+qdctbMWY= -github.com/aws/aws-sdk-go-v2/service/dynamodb v1.25.1 h1:bqSGIS7Nk5EfMKTNDgtaukJQzjOE3LV5Bdz6lRrTsXA= -github.com/aws/aws-sdk-go-v2/service/dynamodb v1.25.1/go.mod h1:Fe7bvO6LxNp6WA6y5VmbgW9RRu+g0RlCXpFAmtcHfQs= -github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.15.5 h1:xoalM/e1YsT6jkLKl6KA9HUiJANwn2ypJsM9lhW2WP0= -github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.15.5/go.mod h1:7QtKdGj66zM4g5hPgxHRQgFGLGal4EgwggTw5OZH56c= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.115.0 h1:/OcX8Q9qehNdPQInuYifmcsTir62q6ulmZByy/VkoeE= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.115.0/go.mod h1:0FhI2Rzcv5BNM3dNnbcCx2qa2naFZoAidJi11cQgzL0= -github.com/aws/aws-sdk-go-v2/service/ec2instanceconnect v1.16.5 h1:CXMRg2qgPKAvmp6lwIxG7gkAfuDBissGqjQjNmUzw28= -github.com/aws/aws-sdk-go-v2/service/ec2instanceconnect v1.16.5/go.mod h1:EUoK01sA2bRkRT5LdQANbz04O81e7tDi+D/3aq4Z7Jo= -github.com/aws/aws-sdk-go-v2/service/ecs v1.29.6 h1:D8aVp/27erJY/c+BeCM2RD6/KTshRAIr5z41nncMfxU= -github.com/aws/aws-sdk-go-v2/service/ecs v1.29.6/go.mod h1:cxbA26Kf4UlTb40f5FON22ZPNMyEVmMS82KUJZC1E1w= -github.com/aws/aws-sdk-go-v2/service/glue v1.62.0 h1:sQfm/ssTWaYTBHcYIcCl3pnc2Gnr4X5e1EY/mpfHlgA= -github.com/aws/aws-sdk-go-v2/service/glue v1.62.0/go.mod h1:4k3UwWbrSTi9RSwMFRpvqKD+ULldghB+PUKieYyucOA= -github.com/aws/aws-sdk-go-v2/service/iam v1.22.5 h1:qGv+oW4uV1T3kbE9uSYEfdZbo38OqxgRxxfStfDr4BU= -github.com/aws/aws-sdk-go-v2/service/iam v1.22.5/go.mod h1:8lyPrjQczmx72ac9s82zTjf9xLqs7uuFMG9TVEZ07XU= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.14/go.mod h1:dDilntgHy9WnHXsh7dDtUPgHKEfTJIBUTHM8OWm0f/0= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.0 h1:CJxo7ZBbaIzmXfV3hjcx36n9V87gJsIUPJflwqEHl3Q= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.0/go.mod h1:yjVfjuY4nD1EW9i387Kau+I6V5cBA5YnC/mWNopjZrI= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.36 h1:eev2yZX7esGRjqRbnVk1UxMLw4CyVZDpZXRCcy75oQk= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.36/go.mod h1:lGnOkH9NJATw0XEPcAknFBj3zzNTEGRHtSw+CwC1YTg= -github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.7.35/go.mod h1:B3dUg0V6eJesUTi+m27NUkj7n8hdDKYUpxj8f4+TqaQ= -github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.8.2 h1:M2oj5PSph40+tqQ25MTZKfCveRWWXSskKFt3BMoJOao= -github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.8.2/go.mod h1:fcLhoxFM7KEONrUI5zY12MncXr53tHHwQOckCOrX8A4= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.2 h1:en92G0Z7xlksoOylkUhuBSfJgijC7rHVLRdnIlHEs0E= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.2/go.mod h1:HgtQ/wN5G+8QSlK62lbOtNwQ3wTSByJ4wH2rCkPt+AE= +github.com/aws/aws-sdk-go-v2/service/athena v1.40.1 h1:37OheEgmT4XlI1BG+8WtQTm8DLOLlIKDNrpLYjmQTDw= +github.com/aws/aws-sdk-go-v2/service/athena v1.40.1/go.mod h1:UdpGMNN5MoJMdbLzb0YNVUzuPxj6hB/rn59cqeQV5ks= +github.com/aws/aws-sdk-go-v2/service/dynamodb v1.30.2 h1:n+nT52A+Ik+ut1D8IV4EP1qfyUdP9Jq60uYfnlJwSWc= +github.com/aws/aws-sdk-go-v2/service/dynamodb v1.30.2/go.mod h1:BzzW6QegtSMnC1BhD+lagiUDSRYjRTOhXAb1mLfEaMg= +github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.20.1 h1:kZR1TZ0VYcRK2LFiFt61EReplssCq9SZO4gVSYV1Aww= +github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.20.1/go.mod h1:ifHRXsCyLVIdvDaAScQnM7jtsXtoBZFmyZiLMex8FTA= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.149.3 h1:lnqML59lzhYHco9bzij13a5Vum9V6x8N28cTdfmRKd4= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.149.3/go.mod h1:BJ7bj2w9jaJZ8XGyPB3o5D1H/3J7c3Ck5GphtSlVHE4= +github.com/aws/aws-sdk-go-v2/service/ec2instanceconnect v1.22.1 h1:xc9zzVmvPUvrfp+Tfz31bckqNW6NwyQXWPBkc+DFgXI= +github.com/aws/aws-sdk-go-v2/service/ec2instanceconnect v1.22.1/go.mod h1:pdfDEukS58xKxLhxmb3IqInaf6XqCb0MRJHHqZAwxzk= +github.com/aws/aws-sdk-go-v2/service/ecs v1.41.1 h1:h1oi77d7nGeM7DvResjebSnhdBVJZefd/eCT+DGjhY4= +github.com/aws/aws-sdk-go-v2/service/ecs v1.41.1/go.mod h1:1yaOxYWYHZtn7CLrHCJWjzHcazl/EVsRIcNfIsBLg3I= +github.com/aws/aws-sdk-go-v2/service/glue v1.77.2 h1:PtbqVk21DQutGqn819k2tHQTTdSgLlBNLZdKL9DGd1Q= +github.com/aws/aws-sdk-go-v2/service/glue v1.77.2/go.mod h1:PSYOX0GZ1ybUnyfbQwb08MiKZdexrI1OYy3zb0pBvUM= +github.com/aws/aws-sdk-go-v2/service/iam v1.31.1 h1:3l4/wmvUjTbGfk/YJBkKub4cVbDdvJ9YMOQmopXc2T8= +github.com/aws/aws-sdk-go-v2/service/iam v1.31.1/go.mod h1:EeqEwkHICgkdmzBAJ46zbS4lhvFy563MOuNlEHU59T4= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1 h1:EyBZibRTVAs6ECHZOw5/wlylS9OcTzwyjeQMudmREjE= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1/go.mod h1:JKpmtYhhPs7D97NL/ltqz7yCkERFW5dOlHyVl66ZYF8= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.3 h1:fpFzBoro/MetYBk+8kxoQGMeKSkXbymnbUh2gy6nVgk= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.3/go.mod h1:qmQPbMe5NQk/nEmpkl8iHyCSREJjEbRUrnqHpHabLlM= +github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.3 h1:/MpYoYvgshlGMFmSyfzGWf6HKoEo/DrKBoHxXR3vh+U= +github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.3/go.mod h1:1Pf5vPqk8t9pdYB3dmUMRE/0m8u0IHHg8ESSiutJd0I= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.27/go.mod h1:EOwBD4J4S5qYszS5/3DpkejfuK+Z5/1uzICfPaZLtqw= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35/go.mod h1:QGF2Rs33W5MaN9gYdEQOBBFPLwTZkEhRwI33f7KIG0o= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37 h1:WWZA/I2K4ptBS1kg0kV1JbBtG/umed0vwHRrmcr9z7k= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37/go.mod h1:vBmDnwWXWxNPFRMmG2m/3MKOe+xEcMDo1tanpaWCcck= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.4 h1:v0jkRigbSD6uOdwcaUQmgEwG1BkPfAPDqaeNt/29ghg= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.4/go.mod h1:LhTyt8J04LL+9cIt7pYJ5lbS/U98ZmXovLOR/4LUsk8= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.3 h1:x0N5ftQzgcfRpCpTiyZC40pvNUJYhzf4UgCsAyO6/P8= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.3/go.mod h1:Ru7vg1iQ7cR4i7SZ/JTLYN9kaXtbL69UdgG0OQWQxW0= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.2 h1:1oY1AVEisRI4HNuFoLdRUB0hC63ylDAN6Me3MrfclEg= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.2/go.mod h1:KZ03VgvZwSjkT7fOetQ/wF3MZUvYFirlI1H5NklUNsY= github.com/aws/aws-sdk-go-v2/service/kms v1.24.7 h1:uRGw0UKo5hc7M2T7uGsK/Yg2qwecq/dnVjQbbq9RCzY= github.com/aws/aws-sdk-go-v2/service/kms v1.24.7/go.mod h1:z3O9CXfVrKAV3c9fMWOUUv2C6N2ggXCDHeXpOB6lAEk= -github.com/aws/aws-sdk-go-v2/service/rds v1.53.0 h1:+PNNWmjp8VeoU6mtRkzPerlhI818uuI4hf/Td8GEjp8= -github.com/aws/aws-sdk-go-v2/service/rds v1.53.0/go.mod h1:UNv1vk1fU1NJefzteykVpVLA88w4WxB05g3vp2kQhYM= -github.com/aws/aws-sdk-go-v2/service/s3 v1.38.5/go.mod h1:rDGMZA7f4pbmTtPOk5v5UM2lmX6UAbRnMDJeDvnH7AM= -github.com/aws/aws-sdk-go-v2/service/s3 v1.40.0 h1:wl5dxN1NONhTDQD9uaEvNsDRX29cBmGED/nl0jkWlt4= -github.com/aws/aws-sdk-go-v2/service/s3 v1.40.0/go.mod h1:rDGMZA7f4pbmTtPOk5v5UM2lmX6UAbRnMDJeDvnH7AM= -github.com/aws/aws-sdk-go-v2/service/sns v1.21.5 h1:KI6xffjUcP3KgpJEtKefQL8B7AXFqyAXkVw8SyvT/o8= -github.com/aws/aws-sdk-go-v2/service/sns v1.21.5/go.mod h1:eEjNDG7Y1BH7Ci9qKVH2L02se84z5GPCqXKcqEUpnXg= -github.com/aws/aws-sdk-go-v2/service/sqs v1.28.0 h1:+JVIntWBGQJ8M3rNEFNHiIzF4CMpfrRe+Xt39mS+6VA= -github.com/aws/aws-sdk-go-v2/service/sqs v1.28.0/go.mod h1:lf0CvAYZ5VaBd0mTUcuVRqQYm3Mk+L7xKvRPudRzhik= +github.com/aws/aws-sdk-go-v2/service/rds v1.74.1 h1:Wz6MYYVpwFVr3haDwDjZS515M2er4dGPGPn4kTNFHBg= +github.com/aws/aws-sdk-go-v2/service/rds v1.74.1/go.mod h1:E7m8yXIFjpIz5IJmxjoNX2c4B4BSw6ycT8zwtnGUmv4= +github.com/aws/aws-sdk-go-v2/service/s3 v1.51.2 h1:ukAaTX8n/pX0Essg9CxW8VCjACv75vnNo2GRONR1w1Q= +github.com/aws/aws-sdk-go-v2/service/s3 v1.51.2/go.mod h1:wt4wZz/CBlJJwY0L7X6vPQ9njh2aHi59knqpJ6B/2cM= +github.com/aws/aws-sdk-go-v2/service/sns v1.29.1 h1:K2FiR/547lI9vGuDL0Ghin4QPSEvOKxbHY9aXFq8wfU= +github.com/aws/aws-sdk-go-v2/service/sns v1.29.1/go.mod h1:PBmfgVv83oBgZVFhs/+oWsL6r0hLyB6qHRFEWwHyHn4= +github.com/aws/aws-sdk-go-v2/service/sqs v1.31.1 h1:124rVNP6NbCfBZwiX1kfjMQrnsJtnpKeB0GalkuqSXo= +github.com/aws/aws-sdk-go-v2/service/sqs v1.31.1/go.mod h1:YijRvM1SAmuiIQ9pjfwahIEE3HMHUkx9P5oplL/Jnj4= github.com/aws/aws-sdk-go-v2/service/sso v1.12.10/go.mod h1:ouy2P4z6sJN70fR3ka3wD3Ro3KezSxU6eKGQI2+2fjI= -github.com/aws/aws-sdk-go-v2/service/sso v1.13.5/go.mod h1:fIAwKQKBFu90pBxx07BFOMJLpRUGu8VOzLJakeY+0K4= -github.com/aws/aws-sdk-go-v2/service/sso v1.15.2 h1:JuPGc7IkOP4AaqcZSIcyqLpFSqBWK32rM9+a1g6u73k= -github.com/aws/aws-sdk-go-v2/service/sso v1.15.2/go.mod h1:gsL4keucRCgW+xA85ALBpRFfdSLH4kHOVSnLMSuBECo= +github.com/aws/aws-sdk-go-v2/service/sso v1.20.1 h1:utEGkfdQ4L6YW/ietH7111ZYglLJvS+sLriHJ1NBJEQ= +github.com/aws/aws-sdk-go-v2/service/sso v1.20.1/go.mod h1:RsYqzYr2F2oPDdpy+PdhephuZxTfjHQe7SOBcZGoAU8= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.10/go.mod h1:AFvkxc8xfBe8XA+5St5XIHHrQQtkxqrRincx4hmMHOk= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5/go.mod h1:yygr8ACQRY2PrEcy3xsUI357stq2AxnFM6DIsR9lij4= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3 h1:HFiiRkf1SdaAmV3/BHOFZ9DjFynPHj8G/UIO1lQS+fk= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3/go.mod h1:a7bHA82fyUXOm+ZSWKU6PIoBxrjSprdLoM8xPYvzYVg= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.1 h1:9/GylMS45hGGFCcMrUZDVayQE1jYSIN6da9jo7RAYIw= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.1/go.mod h1:YjAPFn4kGFqKC54VsHs5fn5B6d+PCY2tziEa3U/GB5Y= github.com/aws/aws-sdk-go-v2/service/sts v1.19.0/go.mod h1:BgQOMsg8av8jset59jelyPW7NoZcZXLVpDsXunGDrk8= -github.com/aws/aws-sdk-go-v2/service/sts v1.21.5/go.mod h1:VC7JDqsqiwXukYEDjoHh9U0fOJtNWh04FPQz4ct4GGU= -github.com/aws/aws-sdk-go-v2/service/sts v1.23.2 h1:0BkLfgeDjfZnZ+MhB3ONb01u9pwFYTCZVhlsSSBvlbU= -github.com/aws/aws-sdk-go-v2/service/sts v1.23.2/go.mod h1:Eows6e1uQEsc4ZaHANmsPRzAKcVDrcmjjWiih2+HUUQ= +github.com/aws/aws-sdk-go-v2/service/sts v1.28.2 h1:0YjXuWdYHvsm0HnT4vO8XpwG1D+i2roxSCBoN6deJ7M= +github.com/aws/aws-sdk-go-v2/service/sts v1.28.2/go.mod h1:jI+FWmYkSMn+4APWmZiZTgt0oM0TrvymD51FMqCnWgA= github.com/aws/aws-sigv4-auth-cassandra-gocql-driver-plugin v0.0.0-20220331165046-e4d000c0d6a6 h1:+AQtpMAj/wOpgdmXSGKSBVozGsYbvaf73gTz4aSK9vM= github.com/aws/aws-sigv4-auth-cassandra-gocql-driver-plugin v0.0.0-20220331165046-e4d000c0d6a6/go.mod h1:Y5LTHeZGpeKFaXYfPYNfVqdpAjejlvXLhGqFqSJRQYc= github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= -github.com/aws/smithy-go v1.14.2/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= -github.com/aws/smithy-go v1.15.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= -github.com/aws/smithy-go v1.16.0 h1:gJZEH/Fqh+RsvlJ1Zt4tVAtV6bKkp3cC+R6FCZMNzik= -github.com/aws/smithy-go v1.16.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE= +github.com/aws/smithy-go v1.20.1 h1:4SZlSlMr36UEqC7XOyRVb27XMeZubNcBNN+9IgEPIQw= +github.com/aws/smithy-go v1.20.1/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A= @@ -1503,8 +1483,8 @@ github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/snowflakedb/gosnowflake v1.6.24 h1:NiBh1WSstNtr12qywmdFMS1XHaYdF5iWWGnjIQb1cEY= -github.com/snowflakedb/gosnowflake v1.6.24/go.mod h1:KfO4F7bk+aXPUIvBqYxvPhxLlu2/w4TtSC8Rw/yr5Mg= +github.com/snowflakedb/gosnowflake v1.7.1 h1:c9JjyjjDlvxex9ud71TwKL+Wu54Vfx+39h4DAwbIdqU= +github.com/snowflakedb/gosnowflake v1.7.1/go.mod h1:JI3eRZL8CpimPek6CJO0aTbDQjDGOt7Rxv9A/ti4f5c= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= diff --git a/integration/integrations/integration_test.go b/integration/integrations/integration_test.go index 30780367a179c..5e0efec477128 100644 --- a/integration/integrations/integration_test.go +++ b/integration/integrations/integration_test.go @@ -86,7 +86,9 @@ func TestIntegrationCRUD(t *testing.T) { Name: "MyAWSAccount", SubKind: types.IntegrationSubKindAWSOIDC, AWSOIDC: &ui.IntegrationAWSOIDCSpec{ - RoleARN: "arn:aws:iam::123456789012:role/DevTeam", + RoleARN: "arn:aws:iam::123456789012:role/DevTeam", + IssuerS3Bucket: "my-bucket", + IssuerS3Prefix: "prefix", }, } @@ -104,14 +106,18 @@ func TestIntegrationCRUD(t *testing.T) { Name: "MyAWSAccount", SubKind: types.IntegrationSubKindAWSOIDC, AWSOIDC: &ui.IntegrationAWSOIDCSpec{ - RoleARN: "arn:aws:iam::123456789012:role/DevTeam", + RoleARN: "arn:aws:iam::123456789012:role/DevTeam", + IssuerS3Bucket: "my-bucket", + IssuerS3Prefix: "prefix", }, }, integrationResp, string(respBody)) // Update the integration to another RoleARN respStatusCode, respBody = webPack.DoRequest(t, http.MethodPut, integrationsEndpoint+"/MyAWSAccount", ui.UpdateIntegrationRequest{ AWSOIDC: &ui.IntegrationAWSOIDCSpec{ - RoleARN: "arn:aws:iam::123456789012:role/OpsTeam", + RoleARN: "arn:aws:iam::123456789012:role/OpsTeam", + IssuerS3Bucket: "my-bucket", + IssuerS3Prefix: "my-prefix", }, }) require.Equal(t, http.StatusOK, respStatusCode, string(respBody)) @@ -123,7 +129,9 @@ func TestIntegrationCRUD(t *testing.T) { Name: "MyAWSAccount", SubKind: types.IntegrationSubKindAWSOIDC, AWSOIDC: &ui.IntegrationAWSOIDCSpec{ - RoleARN: "arn:aws:iam::123456789012:role/OpsTeam", + RoleARN: "arn:aws:iam::123456789012:role/OpsTeam", + IssuerS3Bucket: "my-bucket", + IssuerS3Prefix: "my-prefix", }, }, integrationResp, string(respBody)) @@ -140,7 +148,9 @@ func TestIntegrationCRUD(t *testing.T) { Name: fmt.Sprintf("AWSIntegration%d", i), SubKind: types.IntegrationSubKindAWSOIDC, AWSOIDC: &ui.IntegrationAWSOIDCSpec{ - RoleARN: "arn:aws:iam::123456789012:role/DevTeam", + RoleARN: "arn:aws:iam::123456789012:role/DevTeam", + IssuerS3Bucket: "my-bucket", + IssuerS3Prefix: "my-prefix", }, } diff --git a/lib/auth/api.go b/lib/auth/api.go index 1b5a25db9b523..58b34aecd9cba 100644 --- a/lib/auth/api.go +++ b/lib/auth/api.go @@ -750,7 +750,7 @@ type DiscoveryAccessPoint interface { SubmitUsageEvent(ctx context.Context, req *proto.SubmitUsageEventRequest) error // GenerateAWSOIDCToken generates a token to be used to execute an AWS OIDC Integration action. - GenerateAWSOIDCToken(ctx context.Context) (string, error) + GenerateAWSOIDCToken(ctx context.Context, integration string) (string, error) } // ReadOktaAccessPoint is a read only API interface to be @@ -1316,8 +1316,8 @@ func (w *DiscoveryWrapper) SubmitUsageEvent(ctx context.Context, req *proto.Subm } // GenerateAWSOIDCToken generates a token to be used to execute an AWS OIDC Integration action. -func (w *DiscoveryWrapper) GenerateAWSOIDCToken(ctx context.Context) (string, error) { - return w.NoCache.GenerateAWSOIDCToken(ctx) +func (w *DiscoveryWrapper) GenerateAWSOIDCToken(ctx context.Context, integration string) (string, error) { + return w.NoCache.GenerateAWSOIDCToken(ctx, integration) } // Close closes all associated resources diff --git a/lib/auth/auth.go b/lib/auth/auth.go index 61b7a006366c2..e8fc39d45141a 100644 --- a/lib/auth/auth.go +++ b/lib/auth/auth.go @@ -529,8 +529,8 @@ func (r *Services) GetWebToken(ctx context.Context, req types.GetWebTokenRequest } // GenerateAWSOIDCToken generates a token to be used to execute an AWS OIDC Integration action. -func (r *Services) GenerateAWSOIDCToken(ctx context.Context) (string, error) { - return r.IntegrationsTokenGenerator.GenerateAWSOIDCToken(ctx) +func (r *Services) GenerateAWSOIDCToken(ctx context.Context, integration string) (string, error) { + return r.IntegrationsTokenGenerator.GenerateAWSOIDCToken(ctx, integration) } // OktaClient returns the okta client. diff --git a/lib/auth/auth_with_roles.go b/lib/auth/auth_with_roles.go index 6d4e76ff455e8..317b124dd6b7f 100644 --- a/lib/auth/auth_with_roles.go +++ b/lib/auth/auth_with_roles.go @@ -384,13 +384,15 @@ func (a *ServerWithRoles) DeleteIntegration(ctx context.Context, name string) er } // GenerateAWSOIDCToken generates a token to be used when executing an AWS OIDC Integration action. -func (a *ServerWithRoles) GenerateAWSOIDCToken(ctx context.Context) (string, error) { +func (a *ServerWithRoles) GenerateAWSOIDCToken(ctx context.Context, integration string) (string, error) { igSvc, err := a.integrationsService() if err != nil { return "", trace.Wrap(err) } - resp, err := igSvc.GenerateAWSOIDCToken(ctx, &integrationpb.GenerateAWSOIDCTokenRequest{}) + resp, err := igSvc.GenerateAWSOIDCToken(ctx, &integrationpb.GenerateAWSOIDCTokenRequest{ + Integration: integration, + }) if err != nil { return "", trace.Wrap(err) } diff --git a/lib/auth/clt.go b/lib/auth/clt.go index 373cce1c6436d..e8b092fb4b8b4 100644 --- a/lib/auth/clt.go +++ b/lib/auth/clt.go @@ -818,7 +818,7 @@ type ClientI interface { GetWebToken(ctx context.Context, req types.GetWebTokenRequest) (types.WebToken, error) // GenerateAWSOIDCToken generates a token to be used to execute an AWS OIDC Integration action. - GenerateAWSOIDCToken(ctx context.Context) (string, error) + GenerateAWSOIDCToken(ctx context.Context, integration string) (string, error) // ResetAuthPreference resets cluster auth preference to defaults. ResetAuthPreference(ctx context.Context) error diff --git a/lib/auth/integration/integrationv1/awsoidc.go b/lib/auth/integration/integrationv1/awsoidc.go index c07b34f807046..cc122a2f8f876 100644 --- a/lib/auth/integration/integrationv1/awsoidc.go +++ b/lib/auth/integration/integrationv1/awsoidc.go @@ -18,6 +18,9 @@ package integrationv1 import ( "context" + "fmt" + "net/url" + "strings" "time" "github.com/gravitational/trace" @@ -33,7 +36,7 @@ import ( ) // GenerateAWSOIDCToken generates a token to be used when executing an AWS OIDC Integration action. -func (s *Service) GenerateAWSOIDCToken(ctx context.Context, _ *integrationpb.GenerateAWSOIDCTokenRequest) (*integrationpb.GenerateAWSOIDCTokenResponse, error) { +func (s *Service) GenerateAWSOIDCToken(ctx context.Context, req *integrationpb.GenerateAWSOIDCTokenRequest) (*integrationpb.GenerateAWSOIDCTokenResponse, error) { authCtx, err := s.authorizer.Authorize(ctx) if err != nil { return nil, trace.Wrap(err) @@ -42,12 +45,24 @@ func (s *Service) GenerateAWSOIDCToken(ctx context.Context, _ *integrationpb.Gen if err := authCtx.CheckAccessToKind(types.KindIntegration, types.VerbUse); err != nil { return nil, trace.Wrap(err) } - return s.generateAWSOIDCTokenWithoutAuthZ(ctx) + + var integration types.Integration + // Clients in v15 or lower might not send the Integration + // All v16+ clients will send the Integration + // TODO(marco) DELETE IN v17.0 + if req.Integration != "" { + integration, err = s.cache.GetIntegration(ctx, req.Integration) + if err != nil { + return nil, trace.Wrap(err) + } + } + + return s.generateAWSOIDCTokenWithoutAuthZ(ctx, integration) } // generateAWSOIDCTokenWithoutAuthZ generates a token to be used when executing an AWS OIDC Integration action. // Bypasses authz and should only be used by other methods that validate AuthZ. -func (s *Service) generateAWSOIDCTokenWithoutAuthZ(ctx context.Context) (*integrationpb.GenerateAWSOIDCTokenResponse, error) { +func (s *Service) generateAWSOIDCTokenWithoutAuthZ(ctx context.Context, integration types.Integration) (*integrationpb.GenerateAWSOIDCTokenResponse, error) { username, err := authz.GetClientUsername(ctx) if err != nil { return nil, trace.Wrap(err) @@ -77,9 +92,27 @@ func (s *Service) generateAWSOIDCTokenWithoutAuthZ(ctx context.Context) (*integr return nil, trace.Wrap(err) } - issuer, err := oidc.IssuerForCluster(ctx, s.cache) - if err != nil { - return nil, trace.Wrap(err) + // Clients in v15 or lower might not send the Integration + // All v16+ clients will send the Integration + // TODO(marco) DELETE IN v17.0 + // Checking for an empty issuer must be kept. + var issuer string + if integration != nil { + issuerS3URI := integration.GetAWSOIDCIntegrationSpec().IssuerS3URI + if issuerS3URI != "" { + issuerS3URL, err := url.Parse(issuerS3URI) + if err != nil { + return nil, trace.Wrap(err) + } + prefix := strings.TrimLeft(issuerS3URL.Path, "/") + issuer = fmt.Sprintf("https://%s.s3.amazonaws.com/%s", issuerS3URL.Host, prefix) + } + } + if issuer == "" { + issuer, err = oidc.IssuerForCluster(ctx, s.cache) + if err != nil { + return nil, trace.Wrap(err) + } } token, err := privateKey.SignAWSOIDC(jwt.SignParams{ @@ -185,7 +218,7 @@ func (s *AWSOIDCService) awsClientReq(ctx context.Context, integrationName, regi return nil, trace.BadParameter("missing spec fields for %q (%q) integration", integration.GetName(), integration.GetSubKind()) } - token, err := s.integrationService.generateAWSOIDCTokenWithoutAuthZ(ctx) + token, err := s.integrationService.generateAWSOIDCTokenWithoutAuthZ(ctx, integration) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/auth/integration/integrationv1/awsoidc_test.go b/lib/auth/integration/integrationv1/awsoidc_test.go index 07859c65fa73c..f2d4e14b880fb 100644 --- a/lib/auth/integration/integrationv1/awsoidc_test.go +++ b/lib/auth/integration/integrationv1/awsoidc_test.go @@ -33,21 +33,43 @@ import ( func TestGenerateAWSOIDCToken(t *testing.T) { t.Parallel() clusterName := "test-cluster" + integrationNameWithoutIssuer := "my-integration-without-issuer" + integrationNameWithIssuer := "my-integration-with-issuer" publicURL := "https://example.com" + s3BucketURI := "s3://mybucket/my-idp" + s3IssuerURL := "https://mybucket.s3.amazonaws.com/my-idp" ca := newCertAuthority(t, types.HostCA, clusterName) ctx, localClient, resourceSvc := initSvc(t, ca, clusterName, publicURL) + ig, err := types.NewIntegrationAWSOIDC( + types.Metadata{Name: integrationNameWithoutIssuer}, + &types.AWSOIDCIntegrationSpecV1{ + RoleARN: "arn:aws:iam::123456789012:role/OpsTeam", + }, + ) + require.NoError(t, err) + _, err = localClient.CreateIntegration(ctx, ig) + require.NoError(t, err) + + ig, err = types.NewIntegrationAWSOIDC( + types.Metadata{Name: integrationNameWithIssuer}, + &types.AWSOIDCIntegrationSpecV1{ + RoleARN: "arn:aws:iam::123456789012:role/OpsTeam", + IssuerS3URI: s3BucketURI, + }, + ) + require.NoError(t, err) + _, err = localClient.CreateIntegration(ctx, ig) + require.NoError(t, err) + ctx = authorizerForDummyUser(t, ctx, types.RoleSpecV6{ Allow: types.RoleConditions{Rules: []types.Rule{ {Resources: []string{types.KindIntegration}, Verbs: []string{types.VerbUse}}, }}, }, localClient) - resp, err := resourceSvc.GenerateAWSOIDCToken(ctx, &integrationv1.GenerateAWSOIDCTokenRequest{}) - require.NoError(t, err) - // Get Public Key require.NotEmpty(t, ca.GetActiveKeys().JWT) jwtPubKey := ca.GetActiveKeys().JWT[0].PublicKey @@ -64,18 +86,58 @@ func TestGenerateAWSOIDCToken(t *testing.T) { }) require.NoError(t, err) - _, err = key.VerifyAWSOIDC(jwt.AWSOIDCVerifyParams{ - RawToken: resp.GetToken(), - Issuer: publicURL, + t.Run("without integration (old clients)", func(t *testing.T) { + resp, err := resourceSvc.GenerateAWSOIDCToken(ctx, &integrationv1.GenerateAWSOIDCTokenRequest{}) + require.NoError(t, err) + + _, err = key.VerifyAWSOIDC(jwt.AWSOIDCVerifyParams{ + RawToken: resp.GetToken(), + Issuer: publicURL, + }) + require.NoError(t, err) + // Fails if the issuer is different + _, err = key.VerifyAWSOIDC(jwt.AWSOIDCVerifyParams{ + RawToken: resp.GetToken(), + Issuer: publicURL + "3", + }) + require.Error(t, err) }) - require.NoError(t, err) + t.Run("with integration in rpc call but no issuer defined", func(t *testing.T) { + resp, err := resourceSvc.GenerateAWSOIDCToken(ctx, &integrationv1.GenerateAWSOIDCTokenRequest{ + Integration: integrationNameWithoutIssuer, + }) + require.NoError(t, err) - // Fails if the issuer is different - _, err = key.VerifyAWSOIDC(jwt.AWSOIDCVerifyParams{ - RawToken: resp.GetToken(), - Issuer: publicURL + "3", + _, err = key.VerifyAWSOIDC(jwt.AWSOIDCVerifyParams{ + RawToken: resp.GetToken(), + Issuer: publicURL, + }) + require.NoError(t, err) + // Fails if the issuer is different + _, err = key.VerifyAWSOIDC(jwt.AWSOIDCVerifyParams{ + RawToken: resp.GetToken(), + Issuer: publicURL + "3", + }) + require.Error(t, err) + }) + t.Run("with integration in rpc call and issuer defined", func(t *testing.T) { + resp, err := resourceSvc.GenerateAWSOIDCToken(ctx, &integrationv1.GenerateAWSOIDCTokenRequest{ + Integration: integrationNameWithIssuer, + }) + require.NoError(t, err) + + _, err = key.VerifyAWSOIDC(jwt.AWSOIDCVerifyParams{ + RawToken: resp.GetToken(), + Issuer: s3IssuerURL, + }) + require.NoError(t, err) + // Fails if the issuer is different + _, err = key.VerifyAWSOIDC(jwt.AWSOIDCVerifyParams{ + RawToken: resp.GetToken(), + Issuer: publicURL, + }) + require.Error(t, err) }) - require.Error(t, err) } func TestConvertSecurityGroupRulesToProto(t *testing.T) { diff --git a/lib/auth/tls_test.go b/lib/auth/tls_test.go index 9ec72f44d2ae3..123aaf7b3f263 100644 --- a/lib/auth/tls_test.go +++ b/lib/auth/tls_test.go @@ -780,7 +780,7 @@ func TestAppTokenRotation(t *testing.T) { "trait2": {"value3", "value4"}, "trait3": nil, }, - URI: "http://localhost:8080", + URI: "https://localhost:8080", Expires: clock.Now().Add(1 * time.Minute), }) require.NoError(t, err) @@ -841,7 +841,7 @@ func TestAppTokenRotation(t *testing.T) { "trait2": {"value3", "value4"}, "trait3": nil, }, - URI: "http://localhost:8080", + URI: "https://localhost:8080", Expires: clock.Now().Add(1 * time.Minute), }) require.NoError(t, err) @@ -922,14 +922,31 @@ func TestOIDCIdPTokenRotation(t *testing.T) { clt, err := testSrv.NewClient(TestAdmin()) require.NoError(t, err) + publicAddress := "https://localhost:8080" + + issuer := "https://my-bucket.s3.amazonaws.com/prefix" + proxyServer, err := types.NewServer("proxy-hostname", types.KindProxy, types.ServerSpecV2{ - PublicAddrs: []string{"http://localhost:8080"}, + PublicAddrs: []string{publicAddress}, }) require.NoError(t, err) err = clt.UpsertProxy(ctx, proxyServer) require.NoError(t, err) + integrationName := "my-integration" + + ig, err := types.NewIntegrationAWSOIDC( + types.Metadata{Name: integrationName}, + &types.AWSOIDCIntegrationSpecV1{ + RoleARN: "arn:aws:iam::123456789012:role/OpsTeam", + IssuerS3URI: "s3://my-bucket/prefix", + }, + ) + require.NoError(t, err) + _, err = clt.CreateIntegration(ctx, ig) + require.NoError(t, err) + user1, _, err := CreateUserAndRole(clt, "user1", nil, []types.Rule{ types.NewRule(types.KindIntegration, []string{types.VerbUse}), }) @@ -940,7 +957,7 @@ func TestOIDCIdPTokenRotation(t *testing.T) { // Create a JWT using the current CA, this will become the "old" CA during // rotation. - oldJWT, err := client.GenerateAWSOIDCToken(ctx) + oldJWT, err := client.GenerateAWSOIDCToken(ctx, integrationName) require.NoError(t, err) // Check that the "old" CA can be used to verify tokens. @@ -952,7 +969,7 @@ func TestOIDCIdPTokenRotation(t *testing.T) { require.Len(t, oldCA.GetTrustedJWTKeyPairs(), 1) // Verify that the JWT token validates with the JWT authority. - _, err = verifyJWTAWSOIDC(clock, testSrv.ClusterName(), oldCA.GetTrustedJWTKeyPairs(), oldJWT) + _, err = verifyJWTAWSOIDC(clock, testSrv.ClusterName(), oldCA.GetTrustedJWTKeyPairs(), oldJWT, issuer) require.NoError(t, err, clock.Now()) // Start rotation and move to initial phase. A new CA will be added (for @@ -976,7 +993,7 @@ func TestOIDCIdPTokenRotation(t *testing.T) { require.Len(t, oldCA.GetTrustedJWTKeyPairs(), 2) // Verify that the JWT token validates with the JWT authority. - _, err = verifyJWTAWSOIDC(clock, testSrv.ClusterName(), oldCA.GetTrustedJWTKeyPairs(), oldJWT) + _, err = verifyJWTAWSOIDC(clock, testSrv.ClusterName(), oldCA.GetTrustedJWTKeyPairs(), oldJWT, issuer) require.NoError(t, err) // Move rotation into the update client phase. In this phase, requests will @@ -990,7 +1007,7 @@ func TestOIDCIdPTokenRotation(t *testing.T) { require.NoError(t, err) // New tokens should now fail to validate with the old key. - newJWT, err := client.GenerateAWSOIDCToken(ctx) + newJWT, err := client.GenerateAWSOIDCToken(ctx, integrationName) require.NoError(t, err) // New tokens will validate with the new key. @@ -1003,9 +1020,9 @@ func TestOIDCIdPTokenRotation(t *testing.T) { require.Len(t, newCA.GetTrustedJWTKeyPairs(), 2) // Both JWT should now validate. - _, err = verifyJWTAWSOIDC(clock, testSrv.ClusterName(), newCA.GetTrustedJWTKeyPairs(), oldJWT) + _, err = verifyJWTAWSOIDC(clock, testSrv.ClusterName(), newCA.GetTrustedJWTKeyPairs(), oldJWT, issuer) require.NoError(t, err) - _, err = verifyJWTAWSOIDC(clock, testSrv.ClusterName(), newCA.GetTrustedJWTKeyPairs(), newJWT) + _, err = verifyJWTAWSOIDC(clock, testSrv.ClusterName(), newCA.GetTrustedJWTKeyPairs(), newJWT, issuer) require.NoError(t, err) // Move rotation into update servers phase. @@ -1027,9 +1044,9 @@ func TestOIDCIdPTokenRotation(t *testing.T) { require.Len(t, newCA.GetTrustedJWTKeyPairs(), 2) // Both JWT should continue to validate. - _, err = verifyJWTAWSOIDC(clock, testSrv.ClusterName(), newCA.GetTrustedJWTKeyPairs(), oldJWT) + _, err = verifyJWTAWSOIDC(clock, testSrv.ClusterName(), newCA.GetTrustedJWTKeyPairs(), oldJWT, issuer) require.NoError(t, err) - _, err = verifyJWTAWSOIDC(clock, testSrv.ClusterName(), newCA.GetTrustedJWTKeyPairs(), newJWT) + _, err = verifyJWTAWSOIDC(clock, testSrv.ClusterName(), newCA.GetTrustedJWTKeyPairs(), newJWT, issuer) require.NoError(t, err) // Complete rotation. The old CA will be removed. @@ -1051,9 +1068,9 @@ func TestOIDCIdPTokenRotation(t *testing.T) { require.Len(t, newCA.GetTrustedJWTKeyPairs(), 1) // Old token should no longer validate. - _, err = verifyJWTAWSOIDC(clock, testSrv.ClusterName(), newCA.GetTrustedJWTKeyPairs(), oldJWT) + _, err = verifyJWTAWSOIDC(clock, testSrv.ClusterName(), newCA.GetTrustedJWTKeyPairs(), oldJWT, issuer) require.Error(t, err) - _, err = verifyJWTAWSOIDC(clock, testSrv.ClusterName(), newCA.GetTrustedJWTKeyPairs(), newJWT) + _, err = verifyJWTAWSOIDC(clock, testSrv.ClusterName(), newCA.GetTrustedJWTKeyPairs(), newJWT, issuer) require.NoError(t, err) } @@ -2629,7 +2646,7 @@ func TestGenerateAppToken(t *testing.T) { "trait2": {"value3", "value4"}, "trait3": nil, }, - URI: "http://localhost:8080", + URI: "https://localhost:8080", Expires: clock.Now().Add(1 * time.Minute), }) require.Equal(t, err != nil, ts.outError, ts.inComment) @@ -2637,7 +2654,7 @@ func TestGenerateAppToken(t *testing.T) { claims, err := key.Verify(jwt.VerifyParams{ Username: "foo@example.com", RawToken: token, - URI: "http://localhost:8080", + URI: "https://localhost:8080", }) require.NoError(t, err, ts.inComment) require.Equal(t, claims.Username, "foo@example.com", ts.inComment) @@ -4654,7 +4671,7 @@ func verifyJWT(clock clockwork.Clock, clusterName string, pairs []*types.JWTKeyP claims, err := key.Verify(jwt.VerifyParams{ RawToken: token, Username: "foo", - URI: "http://localhost:8080", + URI: "https://localhost:8080", }) if err != nil { errs = append(errs, trace.Wrap(err)) @@ -4666,7 +4683,7 @@ func verifyJWT(clock clockwork.Clock, clusterName string, pairs []*types.JWTKeyP } // verifyJWTAWSOIDC verifies that the token was signed by one the passed in key pair. -func verifyJWTAWSOIDC(clock clockwork.Clock, clusterName string, pairs []*types.JWTKeyPair, token string) (*jwt.Claims, error) { +func verifyJWTAWSOIDC(clock clockwork.Clock, clusterName string, pairs []*types.JWTKeyPair, token, issuer string) (*jwt.Claims, error) { errs := []error{} for _, pair := range pairs { publicKey, err := utils.ParsePublicKey(pair.PublicKey) @@ -4687,7 +4704,7 @@ func verifyJWTAWSOIDC(clock clockwork.Clock, clusterName string, pairs []*types. } claims, err := key.VerifyAWSOIDC(jwt.AWSOIDCVerifyParams{ RawToken: token, - Issuer: "http://localhost:8080", + Issuer: issuer, }) if err != nil { errs = append(errs, trace.Wrap(err)) diff --git a/lib/cloud/aws/policy.go b/lib/cloud/aws/policy.go index ee318b8bf2512..d8a26a3645316 100644 --- a/lib/cloud/aws/policy.go +++ b/lib/cloud/aws/policy.go @@ -75,7 +75,8 @@ type Statement struct { // Resources is a list of resources. Resources SliceOrString `json:"Resource,omitempty"` // Principals is a list of principals. - Principals map[string]SliceOrString `json:"Principal,omitempty"` + // It can be a single string (eg "*") or a map. + Principals StringOrMap `json:"Principal,omitempty"` // Conditions is a list of conditions that must be satisfied for the action to be allowed. // Example: // Condition: @@ -102,6 +103,52 @@ func (s *Statement) ensureResources(resources []string) { } } +// EqualStatement returns whether the receive statement is the same. +func (s *Statement) EqualStatement(other *Statement) bool { + if s.Effect != other.Effect { + return false + } + + if !slices.Equal(s.Actions, other.Actions) { + return false + } + + if len(s.Principals) != len(other.Principals) { + return false + } + + for principalKind, principalList := range s.Principals { + expectedPrincipalList := other.Principals[principalKind] + if !slices.Equal(principalList, expectedPrincipalList) { + return false + } + } + + if !slices.Equal(s.Resources, other.Resources) { + return false + } + + if len(s.Conditions) != len(other.Conditions) { + return false + } + for conditionKind, conditionOp := range s.Conditions { + expectedConditionOp := other.Conditions[conditionKind] + + if len(conditionOp) != len(expectedConditionOp) { + return false + } + + for conditionOpKind, conditionOpList := range conditionOp { + expectedConditionOpList := expectedConditionOp[conditionOpKind] + if !slices.Equal(conditionOpList, expectedConditionOpList) { + return false + } + } + } + + return true +} + // ParsePolicyDocument returns parsed AWS IAM policy document. func ParsePolicyDocument(document string) (*PolicyDocument, error) { // Policy document returned from AWS API can be URL-encoded: @@ -279,6 +326,62 @@ func (s SliceOrString) MarshalJSON() ([]byte, error) { } } +// StringOrMap defines a type that can be either a single string or a map. +// +// For almost every use case a map is used. Example: +// "Principal": { "Service": ["ecs.amazonaws.com", "elasticloadbalancing.amazonaws.com"]} +// +// For special use cases, like public/anonynous access, a "*" can be used: +// https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-anonymous +type StringOrMap map[string]SliceOrString + +// UnmarshalJSON implements json.Unmarshaller. +// If it contains a string and not a map, it will create a map with a single entry: +// { "str": [] } +// The only known example is for allowing anything, by using the "*" +// (See examples here // https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-anonymous) +func (s *StringOrMap) UnmarshalJSON(bytes []byte) error { + // Check if input is a map. + var mapInput map[string]SliceOrString + mapErr := json.Unmarshal(bytes, &mapInput) + if mapErr == nil { + *s = mapInput + return nil + } + + // Check if input is a single string. + var str string + strErr := json.Unmarshal(bytes, &str) + if strErr == nil { + *s = StringOrMap{ + str: SliceOrString{}, + } + return nil + } + + // Failed both format. + return trace.NewAggregate(mapErr, strErr) +} + +// MarshalJSON implements json.Marshaler. +// It returns "*" if the map has a single key and that key has 0 items. +// The only known example is for allowing anything, by using the "*" +// (See examples here // https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-anonymous) +// The regular Marshal method is used otherwise. +func (s StringOrMap) MarshalJSON() ([]byte, error) { + switch len(s) { + case 0: + return json.Marshal(map[string]SliceOrString{}) + case 1: + if values, isWildcard := s[wildcard]; isWildcard && len(values) == 0 { + return json.Marshal(wildcard) + } + fallthrough + default: + return json.Marshal(map[string]SliceOrString(s)) + } +} + // Policies set of IAM Policy helper functions defined as an interface to make // easier for other packages to mock and test with it. type Policies interface { diff --git a/lib/cloud/aws/policy_statements.go b/lib/cloud/aws/policy_statements.go index 5a5255825ab67..99a5c2db13cad 100644 --- a/lib/cloud/aws/policy_statements.go +++ b/lib/cloud/aws/policy_statements.go @@ -23,7 +23,8 @@ import ( "github.com/gravitational/trace" ) -var allResources = []string{"*"} +var wildcard = "*" +var allResources = []string{wildcard} // StatementForIAMEditRolePolicy returns a IAM Policy Statement which allows editting Role Policy // of the resources. @@ -167,6 +168,23 @@ func StatementForListRDSDatabases() *Statement { } } +// StatementForS3BucketPublicRead returns the statement that +// allows public/anonynous access to s3 bucket/prefix objects. +func StatementForS3BucketPublicRead(s3bucketName, objectPrefix string) *Statement { + return &Statement{ + Effect: EffectAllow, + Principals: StringOrMap{ + wildcard: SliceOrString{}, + }, + Actions: []string{ + "s3:GetObject", + }, + Resources: []string{ + fmt.Sprintf("arn:aws:s3:::%s/%s/*", s3bucketName, objectPrefix), + }, + } +} + // ExternalAuditStoragePolicyConfig holds options for the External Audit Storage // IAM policy. type ExternalAuditStoragePolicyConfig struct { diff --git a/lib/cloud/aws/policy_test.go b/lib/cloud/aws/policy_test.go index 86153b5c3ee74..a2dfef9c83fc1 100644 --- a/lib/cloud/aws/policy_test.go +++ b/lib/cloud/aws/policy_test.go @@ -86,6 +86,123 @@ func TestSliceOrString(t *testing.T) { }) } +func TestStringOrMap(t *testing.T) { + t.Run("marshal", func(t *testing.T) { + t.Run("nil input", func(t *testing.T) { + var empty StringOrMap + bytes, err := json.Marshal(empty) + require.NoError(t, err) + require.Equal(t, "{}", string(bytes)) + }) + + t.Run("single entity with single entry", func(t *testing.T) { + in := StringOrMap{"AWS": SliceOrString{"x"}} + bytes, err := json.Marshal(in) + require.NoError(t, err) + require.Equal(t, `{"AWS":"x"}`, string(bytes)) + }) + t.Run("single entity with multiple entries", func(t *testing.T) { + in := StringOrMap{"AWS": SliceOrString{"x", "y"}} + bytes, err := json.Marshal(in) + require.NoError(t, err) + require.Equal(t, `{"AWS":["x","y"]}`, string(bytes)) + }) + t.Run("multiple entities with multiple entries", func(t *testing.T) { + in := StringOrMap{ + "AWS": SliceOrString{"x", "y"}, + "Principal": SliceOrString{"x", "y"}, + } + bytes, err := json.Marshal(in) + require.NoError(t, err) + require.Equal(t, `{"AWS":["x","y"],"Principal":["x","y"]}`, string(bytes)) + }) + t.Run("single entity without entries", func(t *testing.T) { + in := StringOrMap{"AWS": SliceOrString{}} + bytes, err := json.Marshal(in) + require.NoError(t, err) + require.Equal(t, `{"AWS":[]}`, string(bytes)) + }) + t.Run("single entity without entries but is wildcard", func(t *testing.T) { + in := StringOrMap{"*": SliceOrString{}} + bytes, err := json.Marshal(in) + require.NoError(t, err) + require.Equal(t, `"*"`, string(bytes)) + }) + t.Run("wildcard but at least one entry", func(t *testing.T) { + in := StringOrMap{"*": SliceOrString{"x"}} + bytes, err := json.Marshal(in) + require.NoError(t, err) + require.Equal(t, `{"*":"x"}`, string(bytes)) + }) + t.Run("multiple entities but only one of them is wildcard", func(t *testing.T) { + in := StringOrMap{ + "*": SliceOrString{"x"}, + "Principal": SliceOrString{"x"}, + } + bytes, err := json.Marshal(in) + require.NoError(t, err) + require.Equal(t, `{"*":"x","Principal":"x"}`, string(bytes)) + }) + }) + + t.Run("unmarshal", func(t *testing.T) { + t.Run("empty map", func(t *testing.T) { + var single StringOrMap + err := json.Unmarshal([]byte(`{}`), &single) + require.NoError(t, err) + require.Equal(t, StringOrMap{}, single) + }) + t.Run("single entity with single entry", func(t *testing.T) { + var single StringOrMap + err := json.Unmarshal([]byte(`{"AWS":"x"}`), &single) + require.NoError(t, err) + require.Equal(t, StringOrMap{"AWS": SliceOrString{"x"}}, single) + }) + t.Run("single entity with multiple entries", func(t *testing.T) { + var single StringOrMap + err := json.Unmarshal([]byte(`{"AWS":["x","y"]}`), &single) + require.NoError(t, err) + require.Equal(t, StringOrMap{"AWS": SliceOrString{"x", "y"}}, single) + }) + t.Run("multiple entities with multiple entries", func(t *testing.T) { + var single StringOrMap + err := json.Unmarshal([]byte(`{"AWS":["x","y"],"Principal":["x","y"]}`), &single) + require.NoError(t, err) + require.Equal(t, StringOrMap{ + "AWS": SliceOrString{"x", "y"}, + "Principal": SliceOrString{"x", "y"}, + }, single) + }) + t.Run("single entity without entries", func(t *testing.T) { + var single StringOrMap + err := json.Unmarshal([]byte(`{"AWS":[]}`), &single) + require.NoError(t, err) + require.Equal(t, StringOrMap{"AWS": SliceOrString{}}, single) + }) + t.Run("single entity without entries but is wildcard", func(t *testing.T) { + var single StringOrMap + err := json.Unmarshal([]byte(`"*"`), &single) + require.NoError(t, err) + require.Equal(t, StringOrMap{"*": SliceOrString{}}, single) + }) + t.Run("wildcard but at least one entry", func(t *testing.T) { + var single StringOrMap + err := json.Unmarshal([]byte(`{"*":"x"}`), &single) + require.NoError(t, err) + require.Equal(t, StringOrMap{"*": SliceOrString{"x"}}, single) + }) + t.Run("multiple entities but only one of them is wildcard", func(t *testing.T) { + var single StringOrMap + err := json.Unmarshal([]byte(`{"*":"x","Principal":"x"}`), &single) + require.NoError(t, err) + require.Equal(t, StringOrMap{ + "*": SliceOrString{"x"}, + "Principal": SliceOrString{"x"}, + }, single) + }) + }) +} + func TestParsePolicyDocument(t *testing.T) { t.Run("parse without principals", func(t *testing.T) { policyDoc, err := ParsePolicyDocument(`{ @@ -809,3 +926,155 @@ func (m *iamMock) PutRolePermissionsBoundaryWithContext(context.Context, *iam.Pu return &iam.PutRolePermissionsBoundaryOutput{}, nil } + +func TestEqualStatement(t *testing.T) { + for _, tt := range []struct { + name string + statementA *Statement + statementB *Statement + expected bool + }{ + { + name: "empty statement", + statementA: &Statement{}, + statementB: &Statement{}, + expected: true, + }, + { + name: "statement id is ignored", + statementA: &Statement{ + StatementID: "x", + }, + statementB: &Statement{ + StatementID: "y", + }, + expected: true, + }, + { + name: "different number of actions", + statementA: &Statement{ + Actions: SliceOrString{"x", "y"}, + }, + statementB: &Statement{ + Actions: SliceOrString{"y"}, + }, + expected: false, + }, + { + name: "different actions", + statementA: &Statement{ + Actions: SliceOrString{"x"}, + }, + statementB: &Statement{ + Actions: SliceOrString{"y"}, + }, + expected: false, + }, + { + name: "different number of principals", + statementA: &Statement{ + Principals: StringOrMap{"AWS": []string{"123456789012", "123456789013"}}, + }, + statementB: &Statement{ + Principals: StringOrMap{ + "AWS": []string{"123456789012", "123456789014"}, + "OtherPrincipal": []string{"x"}, + }, + }, + expected: false, + }, + { + name: "different principals", + statementA: &Statement{ + Principals: StringOrMap{"AWS": []string{"*"}}, + }, + statementB: &Statement{ + Principals: StringOrMap{"*": []string{}}, + }, + expected: false, + }, + { + name: "different number of conditions", + statementA: &Statement{ + Conditions: map[string]map[string]SliceOrString{ + "NumericLessThanEquals": {"aws:MultiFactorAuthAge": []string{"3600"}}, + "StringLike": {"s3:prefix": []string{"janedoe/*"}}, + }, + }, + statementB: &Statement{ + Conditions: map[string]map[string]SliceOrString{ + "NumericLessThanEquals": {"aws:MultiFactorAuthAge": []string{"3601"}}, + }, + }, + expected: false, + }, + { + name: "different conditions", + statementA: &Statement{ + Conditions: map[string]map[string]SliceOrString{ + "NumericLessThanEquals": {"aws:MultiFactorAuthAge": []string{"3600"}}, + }, + }, + statementB: &Statement{ + Conditions: map[string]map[string]SliceOrString{ + "NumericLessThanEquals": {"aws:MultiFactorAuthAge": []string{"3601"}}, + }, + }, + expected: false, + }, + { + name: "different condition values", + statementA: &Statement{ + Conditions: map[string]map[string]SliceOrString{ + "NumericLessThanEquals": {"aws:MultiFactorAuthAge": []string{"3600", "3601"}}, + }, + }, + statementB: &Statement{ + Conditions: map[string]map[string]SliceOrString{ + "NumericLessThanEquals": {"aws:MultiFactorAuthAge": []string{"3600"}}, + }, + }, + expected: false, + }, + { + name: "different resource values", + statementA: &Statement{ + Resources: SliceOrString{"arn:aws:s3:::bucket-2/prefix-2/*"}, + }, + statementB: &Statement{ + Resources: SliceOrString{"arn:aws:s3:::bucket-1/*"}, + }, + expected: false, + }, + { + name: "equal statements", + statementA: &Statement{ + Effect: EffectAllow, + Principals: StringOrMap{ + wildcard: []string{}, + }, + Actions: []string{"s3:GetObject"}, + Resources: []string{"arn:aws:s3:::my-bucket/my-prefix/*"}, + Conditions: map[string]map[string]SliceOrString{ + "StringLike": {"s3:prefix": []string{"my-prefix/*"}}, + }, + }, + statementB: &Statement{ + Effect: EffectAllow, + Principals: StringOrMap{ + wildcard: []string{}, + }, + Actions: []string{"s3:GetObject"}, + Resources: []string{"arn:aws:s3:::my-bucket/my-prefix/*"}, + Conditions: map[string]map[string]SliceOrString{ + "StringLike": {"s3:prefix": []string{"my-prefix/*"}}, + }, + }, + expected: true, + }, + } { + t.Run(tt.name, func(t *testing.T) { + require.Equal(t, tt.expected, tt.statementA.EqualStatement(tt.statementB)) + }) + } +} diff --git a/lib/config/configuration.go b/lib/config/configuration.go index b224ffbbb37d6..5c5c244b1de59 100644 --- a/lib/config/configuration.go +++ b/lib/config/configuration.go @@ -269,6 +269,22 @@ type IntegrationConfAWSOIDCIdP struct { // ProxyPublicURL is the IdP Issuer URL (Teleport Proxy Public Address). // Eg, https://.teleport.sh ProxyPublicURL string + + // S3BucketURI is the S3 URI which contains the bucket name and prefix for the issuer. + // Format: s3:/// + // Eg, s3://my-bucket/idp-teleport + // This is used in two places: + // - create openid configuration and jwks objects + // - set up the issuer + // The bucket must be public and will be created if it doesn't exist. + // + // If empty, the ProxyPublicAddress is used as issuer and no s3 objects are created. + S3BucketURI string + + // S3JWKSContentsB64 must contain the public keys for the Issuer. + // The contents must be Base64 encoded. + // Eg. base64(`{"keys":[{"kty":"RSA","alg":"RS256","n":"","e":"","use":"sig","kid":""}]}`) + S3JWKSContentsB64 string } // IntegrationConfListDatabasesIAM contains the arguments of diff --git a/lib/events/athena/test.go b/lib/events/athena/test.go index 3425dd9069fcd..b18d5171b53fd 100644 --- a/lib/events/athena/test.go +++ b/lib/events/athena/test.go @@ -326,7 +326,7 @@ func (ac *AthenaContext) setupInfraWithCleanup(t *testing.T, ctx context.Context if errors.As(err, ¬Found) { _, err = s3Client.CreateBucket(ctx, &s3.CreateBucketInput{ Bucket: aws.String(ac.bucketForEvents), - ObjectLockEnabledForBucket: true, + ObjectLockEnabledForBucket: aws.Bool(true), CreateBucketConfiguration: &s3Types.CreateBucketConfiguration{ LocationConstraint: s3Types.BucketLocationConstraint(awsCfg.Region), }, @@ -338,7 +338,7 @@ func (ac *AthenaContext) setupInfraWithCleanup(t *testing.T, ctx context.Context ObjectLockEnabled: s3Types.ObjectLockEnabledEnabled, Rule: &s3Types.ObjectLockRule{ DefaultRetention: &s3Types.DefaultRetention{ - Days: 1, + Days: aws.Int32(1), Mode: s3Types.ObjectLockRetentionModeGovernance, }, }, @@ -376,7 +376,7 @@ func (ac *AthenaContext) setupInfraWithCleanup(t *testing.T, ctx context.Context { Status: s3Types.ExpirationStatusEnabled, Expiration: &s3Types.LifecycleExpiration{ - Days: 1, + Days: aws.Int32(1), }, // Prefix is required field, empty means set to whole bucket. Prefix: aws.String(""), diff --git a/lib/integrations/awsoidc/clientsv1.go b/lib/integrations/awsoidc/clientsv1.go index 36adea8711705..aeb1bae73e26c 100644 --- a/lib/integrations/awsoidc/clientsv1.go +++ b/lib/integrations/awsoidc/clientsv1.go @@ -43,7 +43,7 @@ type IntegrationTokenGenerator interface { GetProxies() ([]types.Server, error) // GenerateAWSOIDCToken generates a token to be used to execute an AWS OIDC Integration action. - GenerateAWSOIDCToken(ctx context.Context) (string, error) + GenerateAWSOIDCToken(ctx context.Context, integration string) (string, error) } // NewSessionV1 creates a new AWS Session for the region using the integration as source of credentials. @@ -70,7 +70,7 @@ func NewSessionV1(ctx context.Context, client IntegrationTokenGenerator, region // Generating a token here and using it as a Static would make this token valid for the Max Duration Session for the current AWS Role (usually, 1 hour). // Instead, it generates a token everytime the Session's client requests a new token, ensuring it always receives a fresh one. var integrationTokenFetcher IntegrationTokenFetcher = func(ctx context.Context) ([]byte, error) { - token, err := client.GenerateAWSOIDCToken(ctx) + token, err := client.GenerateAWSOIDCToken(ctx, integrationName) return []byte(token), trace.Wrap(err) } diff --git a/lib/integrations/awsoidc/clientsv1_test.go b/lib/integrations/awsoidc/clientsv1_test.go index d6a8732a8d299..b84acba1b11cc 100644 --- a/lib/integrations/awsoidc/clientsv1_test.go +++ b/lib/integrations/awsoidc/clientsv1_test.go @@ -50,7 +50,7 @@ func (m *mockIntegrationsTokenGenerator) GetProxies() ([]types.Server, error) { } // GenerateAWSOIDCToken generates a token to be used to execute an AWS OIDC Integration action. -func (m *mockIntegrationsTokenGenerator) GenerateAWSOIDCToken(ctx context.Context) (string, error) { +func (m *mockIntegrationsTokenGenerator) GenerateAWSOIDCToken(ctx context.Context, integration string) (string, error) { m.tokenCallsCount++ return uuid.NewString(), nil } diff --git a/lib/integrations/awsoidc/idp_iam_config.go b/lib/integrations/awsoidc/idp_iam_config.go index 9bd10e877afb5..1a6344a771781 100644 --- a/lib/integrations/awsoidc/idp_iam_config.go +++ b/lib/integrations/awsoidc/idp_iam_config.go @@ -17,18 +17,29 @@ limitations under the License. package awsoidc import ( + "bytes" "context" + "encoding/base64" + "encoding/json" + "fmt" + "net/http" "net/url" + "path" + "strings" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/iam" + "github.com/aws/aws-sdk-go-v2/service/s3" "github.com/aws/aws-sdk-go-v2/service/sts" "github.com/gravitational/trace" "github.com/sirupsen/logrus" "github.com/gravitational/teleport/api/types" awslib "github.com/gravitational/teleport/lib/cloud/aws" + "github.com/gravitational/teleport/lib/defaults" + awsutil "github.com/gravitational/teleport/lib/utils/aws" + "github.com/gravitational/teleport/lib/utils/oidc" ) const ( @@ -52,14 +63,39 @@ type IdPIAMConfigureRequest struct { // ProxyPublicAddress is the URL to use as provider URL. // This must be a valid URL (ie, url.Parse'able) // Eg, https://.teleport.sh, https://proxy.example.org:443, https://teleport.ec2.aws:3080 + // Only one of ProxyPublicAddress or S3BucketLocation can be used. ProxyPublicAddress string + // S3BucketLocation is the S3 URI which contains the bucket name and prefix for the issuer. + // Format: s3:/// + // Eg, s3://my-bucket/idp-teleport + // This is used in two places: + // - create openid configuration and jwks objects + // - set up the issuer + // The bucket must be public and will be created if it doesn't exist. + // + // If empty, the ProxyPublicAddress is used as issuer and no s3 objects are created. + S3BucketLocation string + + // S3JWKSContentsB64 must contain the public keys for the Issuer. + // The contents must be Base64 encoded. + // Eg. base64(`{"keys":[{"kty":"RSA","alg":"RS256","n":"","e":"","use":"sig","kid":""}]}`) + S3JWKSContentsB64 string + s3Bucket string + s3BucketPrefix string + jwksFileContents []byte + // issuer is the above value but only contains the host. - // Eg, .teleport.sh, proxy.example.org, teleport.ec2.aws:3080 + // Eg, .teleport.sh, proxy.example.org, my-bucket.s3.amazonaws.com/my-prefix issuer string + // issuerURL is the full url for the issuer + // Eg, https://.teleport.sh, https://proxy.example.org, https://my-bucket.s3.amazonaws.com/my-prefix + issuerURL string // IntegrationRole is the Integration's AWS Role used to set up Teleport as an OIDC IdP. IntegrationRole string + + ownershipTags AWSTags } // CheckAndSetDefaults ensures the required fields are present. @@ -76,24 +112,61 @@ func (r *IdPIAMConfigureRequest) CheckAndSetDefaults() error { return trace.BadParameter("integration role is required") } - if r.ProxyPublicAddress == "" { - return trace.BadParameter("proxy public address is required") + if (r.ProxyPublicAddress == "" && r.S3BucketLocation == "") || (r.ProxyPublicAddress != "" && r.S3BucketLocation != "") { + return trace.BadParameter("provide only one of --proxy-public-url or --s3-bucket-uri") } - issuerURL, err := url.Parse(r.ProxyPublicAddress) - if err != nil { - return trace.BadParameter("proxy public address is not a valid url: %v", err) + if r.ProxyPublicAddress != "" { + issuerURL, err := url.Parse(r.ProxyPublicAddress) + if err != nil { + return trace.BadParameter("--proxy-public-url is not a valid url: %v", err) + } + r.issuer = issuerURL.Host + if issuerURL.Port() == "443" { + r.issuer = issuerURL.Hostname() + } + r.issuerURL = issuerURL.String() } - r.issuer = issuerURL.Host - if issuerURL.Port() == "443" { - r.issuer = issuerURL.Hostname() + + if r.S3BucketLocation != "" { + s3BucketURL, err := url.Parse(r.S3BucketLocation) + if err != nil || s3BucketURL.Scheme != "s3" { + return trace.BadParameter("--s3-bucket-uri must be valid s3 uri (eg s3://bucket/prefix)") + } + r.s3Bucket = s3BucketURL.Host + r.s3BucketPrefix = strings.TrimPrefix(s3BucketURL.Path, "/") + + r.issuer = fmt.Sprintf("%s.s3.amazonaws.com/%s", r.s3Bucket, r.s3BucketPrefix) + r.issuerURL = "https://" + r.issuer + + if len(r.S3JWKSContentsB64) == 0 { + return trace.BadParameter("--s3-jwks-base64 is required.") + } + r.jwksFileContents, err = base64.StdEncoding.DecodeString(r.S3JWKSContentsB64) + if err != nil { + return trace.BadParameter("--s3-jwks-base64 is invalid: %v", err) + } } + r.ownershipTags = defaultResourceCreationTags(r.Cluster, r.IntegrationName) + return nil } // IdPIAMConfigureClient describes the required methods to create the AWS OIDC IdP and a Role that trusts that identity provider. +// There is no guarantee that the client is thread safe. type IdPIAMConfigureClient interface { + // SetAWSRegion sets the aws region that must be used. + // This is particularly relevant for API calls that must target a specific region's endpoint. + // Eg calling S3 APIs for buckets that are in another region. + SetAWSRegion(string) + + // RegionForCreateBucket is the AWS Region that should be used to create buckets. + RegionForCreateBucket() string + + // HTTPHead performs an HTTP request for the URL using the HEAD verb. + HTTPHead(ctx context.Context, url string) (resp *http.Response, err error) + // GetCallerIdentity returns information about the caller identity. GetCallerIdentity(ctx context.Context, params *sts.GetCallerIdentityInput, optFns ...func(*sts.Options)) (*sts.GetCallerIdentityOutput, error) @@ -102,19 +175,108 @@ type IdPIAMConfigureClient interface { // CreateRole creates a new IAM Role. CreateRole(ctx context.Context, params *iam.CreateRoleInput, optFns ...func(*iam.Options)) (*iam.CreateRoleOutput, error) + + // GetRole retrieves information about the specified role, including the role's path, + // GUID, ARN, and the role's trust policy that grants permission to assume the + // role. + GetRole(ctx context.Context, params *iam.GetRoleInput, optFns ...func(*iam.Options)) (*iam.GetRoleOutput, error) + + // UpdateAssumeRolePolicy updates the policy that grants an IAM entity permission to assume a role. + // This is typically referred to as the "role trust policy". + UpdateAssumeRolePolicy(ctx context.Context, params *iam.UpdateAssumeRolePolicyInput, optFns ...func(*iam.Options)) (*iam.UpdateAssumeRolePolicyOutput, error) + + // CreateBucket creates an Amazon S3 bucket. + CreateBucket(ctx context.Context, params *s3.CreateBucketInput, optFns ...func(*s3.Options)) (*s3.CreateBucketOutput, error) + + // PutObject adds an object to a bucket. + PutObject(ctx context.Context, params *s3.PutObjectInput, optFns ...func(*s3.Options)) (*s3.PutObjectOutput, error) + + // HeadBucket checks if a bucket exists and if you have permission to access it. + HeadBucket(ctx context.Context, params *s3.HeadBucketInput, optFns ...func(*s3.Options)) (*s3.HeadBucketOutput, error) + + // GetBucketPolicy returns the policy of a specified bucket + GetBucketPolicy(ctx context.Context, params *s3.GetBucketPolicyInput, optFns ...func(*s3.Options)) (*s3.GetBucketPolicyOutput, error) + + // PutBucketPolicy applies an Amazon S3 bucket policy to an Amazon S3 bucket. + PutBucketPolicy(ctx context.Context, params *s3.PutBucketPolicyInput, optFns ...func(*s3.Options)) (*s3.PutBucketPolicyOutput, error) + + // DeletePublicAccessBlock removes the PublicAccessBlock configuration for an Amazon S3 bucket. + DeletePublicAccessBlock(ctx context.Context, params *s3.DeletePublicAccessBlockInput, optFns ...func(*s3.Options)) (*s3.DeletePublicAccessBlockOutput, error) } type defaultIdPIAMConfigureClient struct { + httpClient *http.Client + *iam.Client + awsConfig aws.Config stsClient *sts.Client + s3Client *s3.Client } // GetCallerIdentity returns details about the IAM user or role whose credentials are used to call the operation. -func (d defaultIdPIAMConfigureClient) GetCallerIdentity(ctx context.Context, params *sts.GetCallerIdentityInput, optFns ...func(*sts.Options)) (*sts.GetCallerIdentityOutput, error) { +func (d *defaultIdPIAMConfigureClient) GetCallerIdentity(ctx context.Context, params *sts.GetCallerIdentityInput, optFns ...func(*sts.Options)) (*sts.GetCallerIdentityOutput, error) { return d.stsClient.GetCallerIdentity(ctx, params, optFns...) } +// CreateBucket creates an Amazon S3 bucket. +func (d *defaultIdPIAMConfigureClient) CreateBucket(ctx context.Context, params *s3.CreateBucketInput, optFns ...func(*s3.Options)) (*s3.CreateBucketOutput, error) { + return d.s3Client.CreateBucket(ctx, params, optFns...) +} + +// PutObject adds an object to a bucket. +func (d *defaultIdPIAMConfigureClient) PutObject(ctx context.Context, params *s3.PutObjectInput, optFns ...func(*s3.Options)) (*s3.PutObjectOutput, error) { + return d.s3Client.PutObject(ctx, params, optFns...) +} + +// HeadBucket adds an object to a bucket. +func (d *defaultIdPIAMConfigureClient) HeadBucket(ctx context.Context, params *s3.HeadBucketInput, optFns ...func(*s3.Options)) (*s3.HeadBucketOutput, error) { + return d.s3Client.HeadBucket(ctx, params, optFns...) +} + +// PutBucketPolicy applies an Amazon S3 bucket policy to an Amazon S3 bucket. +func (d *defaultIdPIAMConfigureClient) PutBucketPolicy(ctx context.Context, params *s3.PutBucketPolicyInput, optFns ...func(*s3.Options)) (*s3.PutBucketPolicyOutput, error) { + return d.s3Client.PutBucketPolicy(ctx, params, optFns...) +} + +// DeletePublicAccessBlock removes the PublicAccessBlock configuration for an Amazon S3 bucket. +func (d *defaultIdPIAMConfigureClient) DeletePublicAccessBlock(ctx context.Context, params *s3.DeletePublicAccessBlockInput, optFns ...func(*s3.Options)) (*s3.DeletePublicAccessBlockOutput, error) { + return d.s3Client.DeletePublicAccessBlock(ctx, params, optFns...) +} + +// GetBucketPolicy returns the policy of a specified bucket +func (d *defaultIdPIAMConfigureClient) GetBucketPolicy(ctx context.Context, params *s3.GetBucketPolicyInput, optFns ...func(*s3.Options)) (*s3.GetBucketPolicyOutput, error) { + return d.s3Client.GetBucketPolicy(ctx, params, optFns...) +} + +// RegionForCreateBucket returns the region where the bucket should be created. +func (d *defaultIdPIAMConfigureClient) RegionForCreateBucket() string { + return d.awsConfig.Region +} + +// SetAWSRegion sets the aws region for next api calls. +func (d *defaultIdPIAMConfigureClient) SetAWSRegion(awsRegion string) { + if d.awsConfig.Region == awsRegion { + return + } + + d.awsConfig.Region = awsRegion + + // S3 Client is the only client that depends on the region. + d.s3Client = s3.NewFromConfig(d.awsConfig) +} + +// HTTPHead performs an HTTP request for the URL using the HEAD verb. +func (d *defaultIdPIAMConfigureClient) HTTPHead(ctx context.Context, url string) (*http.Response, error) { + req, err := http.NewRequest(http.MethodHead, url, nil) + if err != nil { + return nil, trace.Wrap(err) + } + + return d.httpClient.Do(req) +} + // NewIdPIAMConfigureClient creates a new IdPIAMConfigureClient. +// The client is not thread safe. func NewIdPIAMConfigureClient(ctx context.Context) (IdPIAMConfigureClient, error) { cfg, err := config.LoadDefaultConfig(ctx) if err != nil { @@ -125,20 +287,38 @@ func NewIdPIAMConfigureClient(ctx context.Context) (IdPIAMConfigureClient, error return nil, trace.BadParameter("failed to resolve local AWS region from environment, please set the AWS_REGION environment variable") } + httpClient, err := defaults.HTTPClient() + if err != nil { + return nil, trace.Wrap(err) + } + return &defaultIdPIAMConfigureClient{ - Client: iam.NewFromConfig(cfg), - stsClient: sts.NewFromConfig(cfg), + httpClient: httpClient, + awsConfig: cfg, + Client: iam.NewFromConfig(cfg), + stsClient: sts.NewFromConfig(cfg), + s3Client: s3.NewFromConfig(cfg), }, nil } // ConfigureIdPIAM creates a new IAM OIDC IdP in AWS. // -// The Provider URL is Teleport's Public Address. +// The Provider URL is Teleport's Public Address or the S3 bucket. // It also creates a new Role configured to trust the recently created IdP. +// If the role already exists, it will create another trust relationship for the IdP (if it doesn't exist). // // The following actions must be allowed by the IAM Role assigned in the Client. // - iam:CreateOpenIDConnectProvider // - iam:CreateRole +// - iam:GetRole +// - iam:UpdateAssumeRolePolicy +// +// If it's using the S3 bucket flow, the following are required as well: +// - s3:CreateBucket +// - s3:GetBucketPolicy +// - s3:PutBucketPolicy +// - s3:DeletePublicAccessBlock +// - s3:PutObject func ConfigureIdPIAM(ctx context.Context, clt IdPIAMConfigureClient, req IdPIAMConfigureRequest) error { if err := req.CheckAndSetDefaults(); err != nil { return trace.Wrap(err) @@ -152,56 +332,253 @@ func ConfigureIdPIAM(ctx context.Context, clt IdPIAMConfigureClient, req IdPIAMC req.AccountID = aws.ToString(callerIdentity.Account) } - thumbprint, err := ThumbprintIdP(ctx, req.ProxyPublicAddress) - if err != nil { + logrus.Infof("Creating IAM OpenID Connect Provider: url=%q.", req.issuerURL) + if err := ensureOIDCIdPIAM(ctx, clt, req); err != nil { return trace.Wrap(err) } - logrus.Infof("Using the following thumbprint: %s", thumbprint) - createOIDCResp, err := clt.CreateOpenIDConnectProvider(ctx, &iam.CreateOpenIDConnectProviderInput{ + logrus.Infof("Creating IAM Role %q.", req.IntegrationRole) + if err := upsertIdPIAMRole(ctx, clt, req); err != nil { + return trace.Wrap(err) + } + + // Configuration stops here if there's no S3 bucket. + // It will use the teleport's public address as IdP issuer. + if req.s3Bucket == "" { + return nil + } + log := logrus.WithFields(logrus.Fields{ + "bucket": req.s3Bucket, + "bucket-prefix": req.s3BucketPrefix, + }) + + log.Infof("Creating bucket in region %q", clt.RegionForCreateBucket()) + if err := ensureBucketIdPIAM(ctx, clt, req, log); err != nil { + return trace.Wrap(err) + } + + log.Info("Setting public access.") + if err := ensureBucketPoliciesIdPIAM(ctx, clt, req); err != nil { + return trace.Wrap(err) + } + + log.Info("Uploading 'openid-configuration' and 'jwks' files.") + if err := uploadOpenIDPublicFiles(ctx, clt, req); err != nil { + return trace.Wrap(err) + } + + return nil +} + +func ensureOIDCIdPIAM(ctx context.Context, clt IdPIAMConfigureClient, req IdPIAMConfigureRequest) error { + var err error + // For S3 bucket setups the thumbprint is ignored, but the API still requires a parseable one. + // https://github.com/aws-actions/configure-aws-credentials/issues/357#issuecomment-1626357333 + // We pass this dummy one for those scenarios. + thumbprint := "afafafafafafafafafafafafafafafafafafafaf" + + // For set ups that use the ProxyPublicAddress, we still calculate the thumbprint. + if req.ProxyPublicAddress != "" { + thumbprint, err = ThumbprintIdP(ctx, req.ProxyPublicAddress) + if err != nil { + return trace.Wrap(err) + } + } + + _, err = clt.CreateOpenIDConnectProvider(ctx, &iam.CreateOpenIDConnectProviderInput{ ThumbprintList: []string{thumbprint}, - Url: &req.ProxyPublicAddress, + Url: &req.issuerURL, ClientIDList: []string{types.IntegrationAWSOIDCAudience}, - Tags: defaultResourceCreationTags(req.Cluster, req.IntegrationName).ToIAMTags(), + Tags: req.ownershipTags.ToIAMTags(), }) if err != nil { - if trace.IsAlreadyExists(awslib.ConvertIAMv2Error(err)) { - return trace.AlreadyExists("identity provider for the same URL (%s) already exists, please remove it and try again", req.ProxyPublicAddress) + awsErr := awslib.ConvertIAMv2Error(err) + if trace.IsAlreadyExists(awsErr) { + return nil } + return trace.Wrap(err) } - logrus.Infof("IAM OpenID Connect Provider created: url=%q arn=%q.", req.ProxyPublicAddress, aws.ToString(createOIDCResp.OpenIDConnectProviderArn)) - createdIdpIAMRoleArn, err := createIdPIAMRole(ctx, clt, req) + return nil +} + +func ensureBucketIdPIAM(ctx context.Context, clt IdPIAMConfigureClient, req IdPIAMConfigureRequest, log *logrus.Entry) error { + // According to https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLocation.html + // s3:GetBucketLocation is not recommended, and should be replaced by s3:HeadBucket according to AWS docs. + // The issue with using s3:HeadBucket is that it returns an error if the SDK client's region is not the same as the bucket. + // Doing a HEAD HTTP request seems to be the best option + resp, err := clt.HTTPHead(ctx, fmt.Sprintf("https://s3.amazonaws.com/%s", req.s3Bucket)) if err != nil { return trace.Wrap(err) } - logrus.Infof("IAM Role created: name=%q arn=%q", req.IntegrationRole, aws.ToString(createdIdpIAMRoleArn)) + defer resp.Body.Close() - return nil + // Even if the bucket is private, the "x-amz-bucket-region" Header will be there. + bucketRegion := resp.Header.Get("x-amz-bucket-region") + if bucketRegion != "" { + if bucketRegion == "EU" { + bucketRegion = "eu-west-1" + } + + clt.SetAWSRegion(bucketRegion) + } + + headBucketResp, err := clt.HeadBucket(ctx, &s3.HeadBucketInput{ + Bucket: &req.s3Bucket, + ExpectedBucketOwner: &req.AccountID, + }) + if err == nil { + log.Infof("Bucket already exists in %q", aws.ToString(headBucketResp.BucketRegion)) + return nil + } + awsErr := awslib.ConvertIAMv2Error(err) + if trace.IsNotFound(awsErr) { + _, err := clt.CreateBucket(ctx, &s3.CreateBucketInput{ + Bucket: &req.s3Bucket, + CreateBucketConfiguration: awsutil.CreateBucketConfiguration(clt.RegionForCreateBucket()), + }) + return trace.Wrap(err) + } + + return trace.Wrap(awsErr) } -func createIdPIAMRole(ctx context.Context, clt IdPIAMConfigureClient, req IdPIAMConfigureRequest) (*string, error) { +func ensureBucketPoliciesIdPIAM(ctx context.Context, clt IdPIAMConfigureClient, req IdPIAMConfigureRequest) error { + _, err := clt.DeletePublicAccessBlock(ctx, &s3.DeletePublicAccessBlockInput{ + Bucket: &req.s3Bucket, + ExpectedBucketOwner: &req.AccountID, + }) + if err != nil { + return trace.Wrap(err) + } + + bucketPolicyDoc := awslib.NewPolicyDocument() + bucketPolicyResp, err := clt.GetBucketPolicy(ctx, &s3.GetBucketPolicyInput{ + Bucket: &req.s3Bucket, + ExpectedBucketOwner: &req.AccountID, + }) + if err != nil { + // TODO(marco): this is an S3 error, not an IAM Error + awsErr := awslib.ConvertIAMv2Error(err) + // If no policy is defined yet, it will return a NotFound. + // Any other error, should be returned. + if !trace.IsNotFound(awsErr) { + return trace.Wrap(err) + } + } else { + bucketPolicyDoc, err = awslib.ParsePolicyDocument(aws.ToString(bucketPolicyResp.Policy)) + if err != nil { + return trace.Wrap(err) + } + } + + policyS3PublicRead := awslib.StatementForS3BucketPublicRead(req.s3Bucket, req.s3BucketPrefix) + for _, existingStatement := range bucketPolicyDoc.Statements { + if existingStatement.EqualStatement(policyS3PublicRead) { + return nil + } + } + + bucketPolicyDoc.Statements = append(bucketPolicyDoc.Statements, policyS3PublicRead) + newPolicyDocPublicRead, err := bucketPolicyDoc.Marshal() + if err != nil { + return trace.Wrap(err) + } + + _, err = clt.PutBucketPolicy(ctx, &s3.PutBucketPolicyInput{ + Bucket: &req.s3Bucket, + Policy: &newPolicyDocPublicRead, + }) + + return trace.Wrap(err) +} + +func uploadOpenIDPublicFiles(ctx context.Context, clt IdPIAMConfigureClient, req IdPIAMConfigureRequest) error { + openidConfigPath := path.Join(req.s3BucketPrefix, ".well-known/openid-configuration") + jwksBucketPath := path.Join(req.s3BucketPrefix, ".well-known/jwks") + jwksPublicURI, err := url.JoinPath(req.issuerURL, ".well-known/jwks") + if err != nil { + return trace.Wrap(err) + } + + openIDConfigJSON, err := json.Marshal(oidc.OpenIDConfigurationForIssuer(req.issuer, jwksPublicURI)) + if err != nil { + return trace.Wrap(err) + } + _, err = clt.PutObject(ctx, &s3.PutObjectInput{ + Bucket: &req.s3Bucket, + Key: &openidConfigPath, + Body: bytes.NewReader(openIDConfigJSON), + }) + if err != nil { + return trace.Wrap(err) + } + + _, err = clt.PutObject(ctx, &s3.PutObjectInput{ + Bucket: &req.s3Bucket, + Key: &jwksBucketPath, + Body: bytes.NewReader(req.jwksFileContents), + }) + return trace.Wrap(err) +} + +func createIdPIAMRole(ctx context.Context, clt IdPIAMConfigureClient, req IdPIAMConfigureRequest) error { integrationRoleAssumeRoleDocument, err := awslib.NewPolicyDocument( awslib.StatementForAWSOIDCRoleTrustRelationship(req.AccountID, req.issuer, []string{types.IntegrationAWSOIDCAudience}), ).Marshal() if err != nil { - return nil, trace.Wrap(err) + return trace.Wrap(err) } - createRoleOutput, err := clt.CreateRole(ctx, &iam.CreateRoleInput{ + _, err = clt.CreateRole(ctx, &iam.CreateRoleInput{ RoleName: &req.IntegrationRole, Description: aws.String(descriptionOIDCIdPRole), AssumeRolePolicyDocument: &integrationRoleAssumeRoleDocument, - Tags: defaultResourceCreationTags(req.Cluster, req.IntegrationName).ToIAMTags(), + Tags: req.ownershipTags.ToIAMTags(), + }) + return trace.Wrap(err) +} + +func upsertIdPIAMRole(ctx context.Context, clt IdPIAMConfigureClient, req IdPIAMConfigureRequest) error { + getRoleOut, err := clt.GetRole(ctx, &iam.GetRoleInput{ + RoleName: &req.IntegrationRole, }) if err != nil { convertedErr := awslib.ConvertIAMv2Error(err) - if trace.IsAlreadyExists(convertedErr) { - return nil, trace.AlreadyExists("Role %q already exists, please remove it and try again.", req.IntegrationRole) + if !trace.IsNotFound(convertedErr) { + return trace.Wrap(convertedErr) } - return nil, trace.Wrap(convertedErr) + + return trace.Wrap(createIdPIAMRole(ctx, clt, req)) } - return createRoleOutput.Role.Arn, nil + if !req.ownershipTags.MatchesIAMTags(getRoleOut.Role.Tags) { + return trace.BadParameter("IAM Role %q already exists but is not managed by Teleport. "+ + "Add the following tags to allow Teleport to manage this Role: %s", req.IntegrationRole, req.ownershipTags) + } + + trustRelationshipDoc, err := awslib.ParsePolicyDocument(aws.ToString(getRoleOut.Role.AssumeRolePolicyDocument)) + if err != nil { + return trace.Wrap(err) + } + + trustRelationshipForIdP := awslib.StatementForAWSOIDCRoleTrustRelationship(req.AccountID, req.issuer, []string{types.IntegrationAWSOIDCAudience}) + for _, existingStatement := range trustRelationshipDoc.Statements { + if existingStatement.EqualStatement(trustRelationshipForIdP) { + return nil + } + } + + trustRelationshipDoc.Statements = append(trustRelationshipDoc.Statements, trustRelationshipForIdP) + trustRelationshipDocString, err := trustRelationshipDoc.Marshal() + if err != nil { + return trace.Wrap(err) + } + + _, err = clt.UpdateAssumeRolePolicy(ctx, &iam.UpdateAssumeRolePolicyInput{ + RoleName: &req.IntegrationRole, + PolicyDocument: &trustRelationshipDocString, + }) + return trace.Wrap(err) } diff --git a/lib/integrations/awsoidc/idp_iam_config_test.go b/lib/integrations/awsoidc/idp_iam_config_test.go index 991a9d1f52766..01445ea2b783b 100644 --- a/lib/integrations/awsoidc/idp_iam_config_test.go +++ b/lib/integrations/awsoidc/idp_iam_config_test.go @@ -18,30 +18,48 @@ package awsoidc import ( "context" + "encoding/base64" "fmt" + "net/http" "net/http/httptest" + "net/url" "slices" + "strings" "testing" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/iam" iamTypes "github.com/aws/aws-sdk-go-v2/service/iam/types" + "github.com/aws/aws-sdk-go-v2/service/s3" "github.com/aws/aws-sdk-go-v2/service/sts" + "github.com/gravitational/trace" "github.com/stretchr/testify/require" "github.com/gravitational/teleport/lib" ) -var baseIdPIAMConfigReq = func() IdPIAMConfigureRequest { - return IdPIAMConfigureRequest{ - Cluster: "mycluster", - IntegrationName: "myintegration", - IntegrationRole: "integrationrole", - ProxyPublicAddress: "https://proxy.example.com", +func TestIdPIAMConfigReqDefaults(t *testing.T) { + base64EncodedString := base64.StdEncoding.EncodeToString([]byte(`jwks`)) + + baseIdPIAMConfigReqWithS3Bucket := func() IdPIAMConfigureRequest { + return IdPIAMConfigureRequest{ + Cluster: "mycluster", + IntegrationName: "myintegration", + IntegrationRole: "integrationrole", + S3BucketLocation: "s3://bucket-1/prefix-2", + S3JWKSContentsB64: base64EncodedString, + } + } + + baseIdPIAMConfigReqWithProxy := func() IdPIAMConfigureRequest { + return IdPIAMConfigureRequest{ + Cluster: "mycluster", + IntegrationName: "myintegration", + IntegrationRole: "integrationrole", + ProxyPublicAddress: "https://proxy.example.com", + } } -} -func TestIdPIAMConfigReqDefaults(t *testing.T) { for _, tt := range []struct { name string req func() IdPIAMConfigureRequest @@ -49,8 +67,8 @@ func TestIdPIAMConfigReqDefaults(t *testing.T) { expected IdPIAMConfigureRequest }{ { - name: "set defaults", - req: baseIdPIAMConfigReq, + name: "proxy mode: set defaults", + req: baseIdPIAMConfigReqWithProxy, errCheck: require.NoError, expected: IdPIAMConfigureRequest{ Cluster: "mycluster", @@ -58,40 +76,113 @@ func TestIdPIAMConfigReqDefaults(t *testing.T) { IntegrationRole: "integrationrole", ProxyPublicAddress: "https://proxy.example.com", issuer: "proxy.example.com", + issuerURL: "https://proxy.example.com", + ownershipTags: AWSTags{ + "teleport.dev/cluster": "mycluster", + "teleport.dev/integration": "myintegration", + "teleport.dev/origin": "integration_awsoidc", + }, }, }, { - name: "missing cluster", + name: "proxy mode: missing proxy public address", req: func() IdPIAMConfigureRequest { - req := baseIdPIAMConfigReq() - req.Cluster = "" + req := baseIdPIAMConfigReqWithProxy() + req.ProxyPublicAddress = "" return req }, errCheck: badParameterCheck, }, { - name: "missing integration name", + name: "s3 bucket mode: set defaults", + req: baseIdPIAMConfigReqWithS3Bucket, + errCheck: require.NoError, + expected: IdPIAMConfigureRequest{ + Cluster: "mycluster", + IntegrationName: "myintegration", + IntegrationRole: "integrationrole", + S3BucketLocation: "s3://bucket-1/prefix-2", + s3Bucket: "bucket-1", + s3BucketPrefix: "prefix-2", + jwksFileContents: []byte(`jwks`), + S3JWKSContentsB64: base64EncodedString, + issuer: "bucket-1.s3.amazonaws.com/prefix-2", + issuerURL: "https://bucket-1.s3.amazonaws.com/prefix-2", + ownershipTags: AWSTags{ + "teleport.dev/cluster": "mycluster", + "teleport.dev/integration": "myintegration", + "teleport.dev/origin": "integration_awsoidc", + }, + }, + }, + { + name: "s3 bucket mode: missing jwks content", req: func() IdPIAMConfigureRequest { - req := baseIdPIAMConfigReq() - req.IntegrationName = "" + req := baseIdPIAMConfigReqWithS3Bucket() + req.S3JWKSContentsB64 = "" return req }, errCheck: badParameterCheck, }, { - name: "missing integration role", + name: "s3 bucket mode: invalid jwks content", req: func() IdPIAMConfigureRequest { - req := baseIdPIAMConfigReq() - req.IntegrationRole = "" + req := baseIdPIAMConfigReqWithS3Bucket() + req.S3JWKSContentsB64 = "x" return req }, errCheck: badParameterCheck, }, { - name: "missing proxy public address", + name: "s3 bucket mode: invalid url for s3 location", req: func() IdPIAMConfigureRequest { - req := baseIdPIAMConfigReq() - req.ProxyPublicAddress = "" + req := baseIdPIAMConfigReqWithS3Bucket() + req.S3BucketLocation = "invalid-url" + return req + }, + errCheck: badParameterCheck, + }, + { + name: "s3 bucket mode: invalid schema for s3 location", + req: func() IdPIAMConfigureRequest { + req := baseIdPIAMConfigReqWithS3Bucket() + req.S3BucketLocation = "https://proxy.example.com" + return req + }, + errCheck: badParameterCheck, + }, + { + name: "proxy and s3 bucket defined", + req: func() IdPIAMConfigureRequest { + req := baseIdPIAMConfigReqWithProxy() + req.S3BucketLocation = "s3://bucket/prefix" + return req + }, + errCheck: badParameterCheck, + }, + { + name: "missing cluster", + req: func() IdPIAMConfigureRequest { + req := baseIdPIAMConfigReqWithProxy() + req.Cluster = "" + return req + }, + errCheck: badParameterCheck, + }, + { + name: "missing integration name", + req: func() IdPIAMConfigureRequest { + req := baseIdPIAMConfigReqWithProxy() + req.IntegrationName = "" + return req + }, + errCheck: badParameterCheck, + }, + { + name: "missing integration role", + req: func() IdPIAMConfigureRequest { + req := baseIdPIAMConfigReqWithProxy() + req.IntegrationRole = "" return req }, errCheck: badParameterCheck, @@ -110,66 +201,451 @@ func TestIdPIAMConfigReqDefaults(t *testing.T) { } } -func TestConfigureIdPIAM(t *testing.T) { +func policyDocWithStatementsJSON(statement ...string) *string { + statements := strings.Join(statement, ",") + ret := fmt.Sprintf(`{ + "Version": "2012-10-17", + "Statement": [ + %s + ] + }`, statements) + return &ret +} + +func assumeRoleStatementJSON(issuer string) string { + return fmt.Sprintf(`{ + "Effect": "Allow", + "Action": "sts:AssumeRoleWithWebIdentity", + "Principal": { + "Federated": "arn:aws:iam::123456789012:oidc-provider/%s" + }, + "Condition": { + "StringEquals": { + "%s:aud": "discover.teleport" + } + } +}`, issuer, issuer) +} + +func policyStatementS3PublicAccessJSON(bucket, prefix string) string { + return fmt.Sprintf(`{ + "Effect": "Allow", + "Principal": "*", + "Action": "s3:GetObject", + "Resource": "arn:aws:s3:::%s/%s/*" +}`, bucket, prefix) +} + +func TestConfigureIdPIAMUsingProxyURL(t *testing.T) { ctx := context.Background() - tlsServer := httptest.NewTLSServer(nil) - // TLS Server starts with self-signed certificates. - lib.SetInsecureDevMode(true) - defer lib.SetInsecureDevMode(false) + t.Run("using proxy url", func(t *testing.T) { + tlsServer := httptest.NewTLSServer(nil) + tlsServerURL, err := url.Parse(tlsServer.URL) + require.NoError(t, err) - baseIdPIAMConfigReqWithTLServer := func() IdPIAMConfigureRequest { - base := baseIdPIAMConfigReq() - base.ProxyPublicAddress = tlsServer.URL - return base - } + tlsServerIssuer := tlsServerURL.Host + // TLS Server starts with self-signed certificates. - for _, tt := range []struct { - name string - mockAccountID string - mockExistingRoles []string - mockExistingIdPUrl []string - req func() IdPIAMConfigureRequest - errCheck require.ErrorAssertionFunc - }{ - { - name: "valid", - mockAccountID: "123456789012", - req: baseIdPIAMConfigReqWithTLServer, - errCheck: require.NoError, - }, - { - name: "idp url already exists", - mockAccountID: "123456789012", - mockExistingIdPUrl: []string{tlsServer.URL}, - req: baseIdPIAMConfigReqWithTLServer, - errCheck: alreadyExistsCheck, - }, - { - name: "integration role already exists", - mockAccountID: "123456789012", - mockExistingRoles: []string{"integrationrole"}, - req: baseIdPIAMConfigReqWithTLServer, - errCheck: alreadyExistsCheck, - }, - } { - t.Run(tt.name, func(t *testing.T) { - clt := mockIdPIAMConfigClient{ - accountID: tt.mockAccountID, - existingRoles: tt.mockExistingRoles, - existingIDPUrl: tt.mockExistingIdPUrl, + lib.SetInsecureDevMode(true) + defer lib.SetInsecureDevMode(false) + + baseIdPIAMConfigReqWithTLServer := func() IdPIAMConfigureRequest { + return IdPIAMConfigureRequest{ + Cluster: "mycluster", + IntegrationName: "myintegration", + IntegrationRole: "integrationrole", + ProxyPublicAddress: tlsServer.URL, } + } - err := ConfigureIdPIAM(ctx, &clt, tt.req()) - tt.errCheck(t, err) - }) - } + for _, tt := range []struct { + name string + mockAccountID string + mockExistingRoles map[string]mockRole + mockExistingIdPUrl []string + req func() IdPIAMConfigureRequest + errCheck require.ErrorAssertionFunc + externalStateCheck func(*testing.T, mockIdPIAMConfigClient) + }{ + { + name: "valid", + mockAccountID: "123456789012", + req: baseIdPIAMConfigReqWithTLServer, + mockExistingIdPUrl: []string{}, + mockExistingRoles: map[string]mockRole{}, + errCheck: require.NoError, + }, + { + name: "idp url already exists", + mockAccountID: "123456789012", + mockExistingIdPUrl: []string{tlsServer.URL}, + mockExistingRoles: map[string]mockRole{}, + req: baseIdPIAMConfigReqWithTLServer, + errCheck: require.NoError, + }, + { + name: "role exists, no ownership tags", + mockAccountID: "123456789012", + mockExistingIdPUrl: []string{}, + mockExistingRoles: map[string]mockRole{"integrationrole": {}}, + req: baseIdPIAMConfigReqWithTLServer, + errCheck: badParameterCheck, + }, + { + name: "role exists, ownership tags, no assume role", + mockAccountID: "123456789012", + mockExistingIdPUrl: []string{}, + mockExistingRoles: map[string]mockRole{"integrationrole": { + tags: []iamTypes.Tag{ + {Key: aws.String("teleport.dev/origin"), Value: aws.String("integration_awsoidc")}, + {Key: aws.String("teleport.dev/cluster"), Value: aws.String("mycluster")}, + {Key: aws.String("teleport.dev/integration"), Value: aws.String("myintegration")}, + }, + assumeRolePolicyDoc: aws.String(`{"Version":"2012-10-17", "Statements":[]}`), + }}, + req: baseIdPIAMConfigReqWithTLServer, + errCheck: require.NoError, + externalStateCheck: func(t *testing.T, mipc mockIdPIAMConfigClient) { + role := mipc.existingRoles["integrationrole"] + expectedAssumeRolePolicyDoc := policyDocWithStatementsJSON( + assumeRoleStatementJSON(tlsServerIssuer), + ) + require.JSONEq(t, *expectedAssumeRolePolicyDoc, aws.ToString(role.assumeRolePolicyDoc)) + }, + }, + { + name: "role exists, ownership tags, with existing assume role", + mockAccountID: "123456789012", + mockExistingIdPUrl: []string{}, + mockExistingRoles: map[string]mockRole{"integrationrole": { + tags: []iamTypes.Tag{ + {Key: aws.String("teleport.dev/origin"), Value: aws.String("integration_awsoidc")}, + {Key: aws.String("teleport.dev/cluster"), Value: aws.String("mycluster")}, + {Key: aws.String("teleport.dev/integration"), Value: aws.String("myintegration")}, + }, + assumeRolePolicyDoc: policyDocWithStatementsJSON( + assumeRoleStatementJSON("some-other-issuer"), + ), + }}, + req: baseIdPIAMConfigReqWithTLServer, + errCheck: require.NoError, + externalStateCheck: func(t *testing.T, mipc mockIdPIAMConfigClient) { + role := mipc.existingRoles["integrationrole"] + expectedAssumeRolePolicyDoc := policyDocWithStatementsJSON( + assumeRoleStatementJSON("some-other-issuer"), + assumeRoleStatementJSON(tlsServerIssuer), + ) + require.JSONEq(t, *expectedAssumeRolePolicyDoc, aws.ToString(role.assumeRolePolicyDoc)) + }, + }, + { + name: "role exists, ownership tags, assume role already exists", + mockAccountID: "123456789012", + mockExistingIdPUrl: []string{}, + mockExistingRoles: map[string]mockRole{"integrationrole": { + tags: []iamTypes.Tag{ + {Key: aws.String("teleport.dev/origin"), Value: aws.String("integration_awsoidc")}, + {Key: aws.String("teleport.dev/cluster"), Value: aws.String("mycluster")}, + {Key: aws.String("teleport.dev/integration"), Value: aws.String("myintegration")}, + }, + assumeRolePolicyDoc: policyDocWithStatementsJSON( + assumeRoleStatementJSON(tlsServerIssuer), + ), + }}, + req: baseIdPIAMConfigReqWithTLServer, + errCheck: require.NoError, + externalStateCheck: func(t *testing.T, mipc mockIdPIAMConfigClient) { + role := mipc.existingRoles["integrationrole"] + expectedAssumeRolePolicyDoc := policyDocWithStatementsJSON( + assumeRoleStatementJSON(tlsServerIssuer), + ) + require.JSONEq(t, *expectedAssumeRolePolicyDoc, aws.ToString(role.assumeRolePolicyDoc)) + }, + }, + } { + t.Run(tt.name, func(t *testing.T) { + clt := mockIdPIAMConfigClient{ + accountID: tt.mockAccountID, + existingRoles: tt.mockExistingRoles, + existingIDPUrl: tt.mockExistingIdPUrl, + } + + err := ConfigureIdPIAM(ctx, &clt, tt.req()) + tt.errCheck(t, err) + + if tt.externalStateCheck != nil { + tt.externalStateCheck(t, clt) + } + }) + } + }) + + t.Run("using s3 bucket", func(t *testing.T) { + base64EncodedString := base64.StdEncoding.EncodeToString([]byte(`jwks`)) + + baseIdPIAMConfigReqWithS3Bucket := func() IdPIAMConfigureRequest { + return IdPIAMConfigureRequest{ + Cluster: "mycluster", + IntegrationName: "myintegration", + IntegrationRole: "integrationrole", + S3BucketLocation: "s3://bucket-1/prefix-2", + S3JWKSContentsB64: base64EncodedString, + } + } + expectedIssuer := "bucket-1.s3.amazonaws.com/prefix-2" + expectedIssuerURL := "https://" + expectedIssuer + + for _, tt := range []struct { + name string + mockAccountID string + mockExistingIdPUrl []string + mockExistingRoles map[string]mockRole + mockClientRegion string + mockExistingBuckets map[string]mockBucket + req func() IdPIAMConfigureRequest + errCheck require.ErrorAssertionFunc + externalStateCheck func(*testing.T, mockIdPIAMConfigClient) + }{ + { + name: "valid without any existing resources", + mockAccountID: "123456789012", + req: baseIdPIAMConfigReqWithS3Bucket, + mockExistingIdPUrl: []string{}, + mockExistingRoles: map[string]mockRole{}, + mockExistingBuckets: map[string]mockBucket{}, + mockClientRegion: "my-region", + errCheck: require.NoError, + externalStateCheck: func(t *testing.T, mipc mockIdPIAMConfigClient) { + // Check IdP creation + require.Contains(t, mipc.existingIDPUrl, expectedIssuerURL) + + // Check Role creation + role := mipc.existingRoles["integrationrole"] + expectedAssumeRolePolicyDoc := policyDocWithStatementsJSON( + assumeRoleStatementJSON(expectedIssuer), + ) + require.JSONEq(t, *expectedAssumeRolePolicyDoc, aws.ToString(role.assumeRolePolicyDoc)) + + // Check Bucket creation + require.Contains(t, mipc.existingBuckets, "bucket-1") + bucket := mipc.existingBuckets["bucket-1"] + require.Equal(t, "my-region", bucket.region) + require.False(t, bucket.publicAccessIsBlocked) + expectedBucketPolicyDoc := policyDocWithStatementsJSON( + policyStatementS3PublicAccessJSON("bucket-1", "prefix-2"), + ) + require.JSONEq(t, *expectedBucketPolicyDoc, *bucket.policyDoc) + + }, + }, + { + name: "valid with an existing IdP set up using Proxy URL", + mockAccountID: "123456789012", + req: baseIdPIAMConfigReqWithS3Bucket, + mockExistingIdPUrl: []string{"https://proxy.example.com"}, + mockExistingRoles: map[string]mockRole{ + "integrationrole": { + tags: []iamTypes.Tag{ + {Key: aws.String("teleport.dev/origin"), Value: aws.String("integration_awsoidc")}, + {Key: aws.String("teleport.dev/cluster"), Value: aws.String("mycluster")}, + {Key: aws.String("teleport.dev/integration"), Value: aws.String("myintegration")}, + }, + assumeRolePolicyDoc: policyDocWithStatementsJSON( + assumeRoleStatementJSON("proxy.example.com"), + ), + }, + }, + mockExistingBuckets: map[string]mockBucket{}, + mockClientRegion: "my-region", + errCheck: require.NoError, + externalStateCheck: func(t *testing.T, mipc mockIdPIAMConfigClient) { + // IdP should be created and the existing one must not be deleted. + require.Contains(t, mipc.existingIDPUrl, expectedIssuerURL) + require.Contains(t, mipc.existingIDPUrl, "https://proxy.example.com") + + // The role must include the new statement and must not delete the previous one + role := mipc.existingRoles["integrationrole"] + expectedAssumeRolePolicyDoc := policyDocWithStatementsJSON( + assumeRoleStatementJSON("proxy.example.com"), + assumeRoleStatementJSON(expectedIssuer), + ) + require.JSONEq(t, *expectedAssumeRolePolicyDoc, aws.ToString(role.assumeRolePolicyDoc)) + + // Check Bucket creation + require.Contains(t, mipc.existingBuckets, "bucket-1") + bucket := mipc.existingBuckets["bucket-1"] + require.Equal(t, "my-region", bucket.region) + require.False(t, bucket.publicAccessIsBlocked) + expectedBucketPolicyDoc := policyDocWithStatementsJSON( + policyStatementS3PublicAccessJSON("bucket-1", "prefix-2"), + ) + require.JSONEq(t, *expectedBucketPolicyDoc, *bucket.policyDoc) + }, + }, + { + name: "bucket already exists but is on another region", + mockAccountID: "123456789012", + req: baseIdPIAMConfigReqWithS3Bucket, + mockExistingIdPUrl: []string{}, + mockExistingRoles: map[string]mockRole{}, + mockExistingBuckets: map[string]mockBucket{ + "bucket-1": { + region: "another-region", + publicAccessIsBlocked: true, + }, + }, + mockClientRegion: "my-region", + errCheck: require.NoError, + externalStateCheck: func(t *testing.T, mipc mockIdPIAMConfigClient) { + // Check IdP creation + require.Contains(t, mipc.existingIDPUrl, expectedIssuerURL) + + // Check Role creation + role := mipc.existingRoles["integrationrole"] + expectedAssumeRolePolicyDoc := policyDocWithStatementsJSON( + assumeRoleStatementJSON(expectedIssuer), + ) + require.JSONEq(t, *expectedAssumeRolePolicyDoc, aws.ToString(role.assumeRolePolicyDoc)) + + // Check Bucket creation + require.Contains(t, mipc.existingBuckets, "bucket-1") + bucket := mipc.existingBuckets["bucket-1"] + require.False(t, bucket.publicAccessIsBlocked) + expectedBucketPolicyDoc := policyDocWithStatementsJSON( + policyStatementS3PublicAccessJSON("bucket-1", "prefix-2"), + ) + require.JSONEq(t, *expectedBucketPolicyDoc, *bucket.policyDoc) + + // The last configured region must be the existing bucket's region. + require.Equal(t, "another-region", mipc.clientRegion) + }, + }, + { + name: "bucket already exists and already has a policy", + mockAccountID: "123456789012", + req: baseIdPIAMConfigReqWithS3Bucket, + mockExistingIdPUrl: []string{}, + mockExistingRoles: map[string]mockRole{}, + mockExistingBuckets: map[string]mockBucket{ + "bucket-1": { + region: "my-region", + publicAccessIsBlocked: true, + policyDoc: policyDocWithStatementsJSON( + policyStatementS3PublicAccessJSON("bucket-2", "prefix-2"), + ), + }, + }, + mockClientRegion: "my-region", + errCheck: require.NoError, + externalStateCheck: func(t *testing.T, mipc mockIdPIAMConfigClient) { + // Check IdP creation + require.Contains(t, mipc.existingIDPUrl, expectedIssuerURL) + + // Check Role creation + role := mipc.existingRoles["integrationrole"] + expectedAssumeRolePolicyDoc := policyDocWithStatementsJSON( + assumeRoleStatementJSON(expectedIssuer), + ) + require.JSONEq(t, *expectedAssumeRolePolicyDoc, aws.ToString(role.assumeRolePolicyDoc)) + + // Check Bucket creation + require.Contains(t, mipc.existingBuckets, "bucket-1") + bucket := mipc.existingBuckets["bucket-1"] + require.False(t, bucket.publicAccessIsBlocked) + expectedBucketPolicyDoc := policyDocWithStatementsJSON( + policyStatementS3PublicAccessJSON("bucket-2", "prefix-2"), + policyStatementS3PublicAccessJSON("bucket-1", "prefix-2"), + ) + require.JSONEq(t, *expectedBucketPolicyDoc, *bucket.policyDoc) + }, + }, + { + name: "everything already exists", + mockAccountID: "123456789012", + req: baseIdPIAMConfigReqWithS3Bucket, + mockExistingIdPUrl: []string{"https://bucket-1.s3.amazonaws.com/prefix-2"}, + mockExistingRoles: map[string]mockRole{ + "integrationrole": { + tags: []iamTypes.Tag{ + {Key: aws.String("teleport.dev/origin"), Value: aws.String("integration_awsoidc")}, + {Key: aws.String("teleport.dev/cluster"), Value: aws.String("mycluster")}, + {Key: aws.String("teleport.dev/integration"), Value: aws.String("myintegration")}, + }, + assumeRolePolicyDoc: policyDocWithStatementsJSON( + assumeRoleStatementJSON("bucket-1.s3.amazonaws.com/prefix-2"), + ), + }, + }, + mockExistingBuckets: map[string]mockBucket{ + "bucket-1": { + region: "my-region", + publicAccessIsBlocked: true, + policyDoc: policyDocWithStatementsJSON( + policyStatementS3PublicAccessJSON("bucket-1", "prefix-2"), + ), + }, + }, + mockClientRegion: "my-region", + errCheck: require.NoError, + externalStateCheck: func(t *testing.T, mipc mockIdPIAMConfigClient) { + // Check IdP exists + require.Contains(t, mipc.existingIDPUrl, expectedIssuerURL) + + // Check Role exists + role := mipc.existingRoles["integrationrole"] + expectedAssumeRolePolicyDoc := policyDocWithStatementsJSON( + assumeRoleStatementJSON(expectedIssuer), + ) + require.JSONEq(t, *expectedAssumeRolePolicyDoc, aws.ToString(role.assumeRolePolicyDoc)) + + // Check Bucket exists + require.Contains(t, mipc.existingBuckets, "bucket-1") + bucket := mipc.existingBuckets["bucket-1"] + require.False(t, bucket.publicAccessIsBlocked) + expectedBucketPolicyDoc := policyDocWithStatementsJSON( + policyStatementS3PublicAccessJSON("bucket-1", "prefix-2"), + ) + require.JSONEq(t, *expectedBucketPolicyDoc, *bucket.policyDoc) + }, + }, + } { + t.Run(tt.name, func(t *testing.T) { + clt := mockIdPIAMConfigClient{ + accountID: tt.mockAccountID, + existingRoles: tt.mockExistingRoles, + existingIDPUrl: tt.mockExistingIdPUrl, + existingBuckets: tt.mockExistingBuckets, + clientRegion: tt.mockClientRegion, + } + + err := ConfigureIdPIAM(ctx, &clt, tt.req()) + tt.errCheck(t, err) + + if tt.externalStateCheck != nil { + tt.externalStateCheck(t, clt) + } + }) + } + }) +} + +type mockBucket struct { + region string + publicAccessIsBlocked bool + policyDoc *string } +type mockRole struct { + assumeRolePolicyDoc *string + tags []iamTypes.Tag +} type mockIdPIAMConfigClient struct { - accountID string - existingRoles []string - existingIDPUrl []string + clientRegion string + accountID string + existingIDPUrl []string + existingRoles map[string]mockRole + existingBuckets map[string]mockBucket } // GetCallerIdentity returns information about the caller identity. @@ -182,12 +658,16 @@ func (m *mockIdPIAMConfigClient) GetCallerIdentity(ctx context.Context, params * // CreateRole creates a new IAM Role. func (m *mockIdPIAMConfigClient) CreateRole(ctx context.Context, params *iam.CreateRoleInput, optFns ...func(*iam.Options)) (*iam.CreateRoleOutput, error) { alreadyExistsMessage := fmt.Sprintf("Role %q already exists.", *params.RoleName) - if slices.Contains(m.existingRoles, *params.RoleName) { + _, found := m.existingRoles[aws.ToString(params.RoleName)] + if found { return nil, &iamTypes.EntityAlreadyExistsException{ Message: &alreadyExistsMessage, } } - m.existingRoles = append(m.existingRoles, *params.RoleName) + m.existingRoles[*params.RoleName] = mockRole{ + tags: params.Tags, + assumeRolePolicyDoc: params.AssumeRolePolicyDocument, + } return &iam.CreateRoleOutput{ Role: &iamTypes.Role{ @@ -204,10 +684,146 @@ func (m *mockIdPIAMConfigClient) CreateOpenIDConnectProvider(ctx context.Context Message: &alreadyExistsMessage, } } - m.existingIDPUrl = append(m.existingRoles, *params.Url) + m.existingIDPUrl = append(m.existingIDPUrl, *params.Url) + + return &iam.CreateOpenIDConnectProviderOutput{}, nil +} + +// GetRole retrieves information about the specified role, including the role's path, +// GUID, ARN, and the role's trust policy that grants permission to assume the +// role. +func (m *mockIdPIAMConfigClient) GetRole(ctx context.Context, params *iam.GetRoleInput, optFns ...func(*iam.Options)) (*iam.GetRoleOutput, error) { + role, found := m.existingRoles[aws.ToString(params.RoleName)] + if !found { + return nil, trace.NotFound("role not found") + } + return &iam.GetRoleOutput{ + Role: &iamTypes.Role{ + Tags: role.tags, + AssumeRolePolicyDocument: role.assumeRolePolicyDoc, + }, + }, nil +} - return &iam.CreateOpenIDConnectProviderOutput{ - OpenIDConnectProviderArn: aws.String("arn:something"), +// UpdateAssumeRolePolicy updates the policy that grants an IAM entity permission to assume a role. +// This is typically referred to as the "role trust policy". +func (m *mockIdPIAMConfigClient) UpdateAssumeRolePolicy(ctx context.Context, params *iam.UpdateAssumeRolePolicyInput, optFns ...func(*iam.Options)) (*iam.UpdateAssumeRolePolicyOutput, error) { + role, found := m.existingRoles[aws.ToString(params.RoleName)] + if !found { + return nil, trace.NotFound("role not found") + } + + role.assumeRolePolicyDoc = params.PolicyDocument + m.existingRoles[aws.ToString(params.RoleName)] = role + + return &iam.UpdateAssumeRolePolicyOutput{}, nil +} + +// CreateBucket creates an Amazon S3 bucket. +func (m *mockIdPIAMConfigClient) CreateBucket(ctx context.Context, params *s3.CreateBucketInput, optFns ...func(*s3.Options)) (*s3.CreateBucketOutput, error) { + m.existingBuckets[*params.Bucket] = mockBucket{ + publicAccessIsBlocked: true, + region: m.clientRegion, + } + return nil, nil +} + +// PutObject adds an object to a bucket. +func (m *mockIdPIAMConfigClient) PutObject(ctx context.Context, params *s3.PutObjectInput, optFns ...func(*s3.Options)) (*s3.PutObjectOutput, error) { + return nil, nil +} + +// HeadBucket adds an object to a bucket. +func (m *mockIdPIAMConfigClient) HeadBucket(ctx context.Context, params *s3.HeadBucketInput, optFns ...func(*s3.Options)) (*s3.HeadBucketOutput, error) { + bucket, found := m.existingBuckets[*params.Bucket] + if !found { + return nil, trace.NotFound("bucket does not exist") + } + + return &s3.HeadBucketOutput{ + BucketRegion: &bucket.region, + }, nil +} + +// RegionForCreateBucket returns the default aws region to use when creating a bucket. +func (m *mockIdPIAMConfigClient) RegionForCreateBucket() string { + return m.clientRegion +} + +// SetAWSRegion sets the default aws region to use. +func (m *mockIdPIAMConfigClient) SetAWSRegion(awsRegion string) { + m.clientRegion = awsRegion +} + +// PutBucketPolicy applies an Amazon S3 bucket policy to an Amazon S3 bucket. +func (m *mockIdPIAMConfigClient) PutBucketPolicy(ctx context.Context, params *s3.PutBucketPolicyInput, optFns ...func(*s3.Options)) (*s3.PutBucketPolicyOutput, error) { + bucket, found := m.existingBuckets[*params.Bucket] + if !found { + return nil, trace.NotFound("bucket does not exist") + } + + bucket.policyDoc = params.Policy + m.existingBuckets[*params.Bucket] = bucket + + return &s3.PutBucketPolicyOutput{}, nil +} + +// DeletePublicAccessBlock removes the PublicAccessBlock configuration for an Amazon S3 bucket. +func (m *mockIdPIAMConfigClient) DeletePublicAccessBlock(ctx context.Context, params *s3.DeletePublicAccessBlockInput, optFns ...func(*s3.Options)) (*s3.DeletePublicAccessBlockOutput, error) { + bucket, found := m.existingBuckets[*params.Bucket] + if !found { + return nil, trace.NotFound("bucket does not exist") + } + + bucket.publicAccessIsBlocked = false + m.existingBuckets[*params.Bucket] = bucket + + return &s3.DeletePublicAccessBlockOutput{}, nil +} + +// GetBucketPolicy returns the policy of a specified bucket +func (m *mockIdPIAMConfigClient) GetBucketPolicy(ctx context.Context, params *s3.GetBucketPolicyInput, optFns ...func(*s3.Options)) (*s3.GetBucketPolicyOutput, error) { + bucket, found := m.existingBuckets[*params.Bucket] + if !found { + return nil, trace.NotFound("bucket does not exist") + } + + if bucket.policyDoc == nil { + return nil, trace.NotFound("policy not set yet") + } + + return &s3.GetBucketPolicyOutput{ + Policy: bucket.policyDoc, + }, nil +} + +// HTTPHead does an HEAD HTTP Request to the target URL. +func (m *mockIdPIAMConfigClient) HTTPHead(ctx context.Context, endpoint string) (*http.Response, error) { + endpointURL, err := url.Parse(endpoint) + if err != nil { + return nil, trace.Wrap(err) + } + + // check if bucket exists + // expected URL is: https://s3.amazonaws.com// + endpointURLPath := strings.TrimLeft(endpointURL.Path, "/") + bucketName := strings.Split(endpointURLPath, "/")[0] + + bucket, found := m.existingBuckets[bucketName] + if !found { + return &http.Response{ + StatusCode: http.StatusNotFound, + Body: http.NoBody, + }, nil + } + + m.clientRegion = bucket.region + + return &http.Response{ + Header: http.Header{ + "x-amz-bucket-region": []string{bucket.region}, + }, + Body: http.NoBody, }, nil } diff --git a/lib/integrations/awsoidc/listdatabases_test.go b/lib/integrations/awsoidc/listdatabases_test.go index 8a34249c17430..5627a617111fd 100644 --- a/lib/integrations/awsoidc/listdatabases_test.go +++ b/lib/integrations/awsoidc/listdatabases_test.go @@ -106,7 +106,7 @@ func TestListDatabases(t *testing.T) { Engine: stringPointer("postgres"), Endpoint: &rdsTypes.Endpoint{ Address: stringPointer("endpoint.amazonaws.com"), - Port: 5432, + Port: aws.Int32(5432), }, }) } @@ -176,7 +176,7 @@ func TestListDatabases(t *testing.T) { DBInstanceArn: stringPointer("arn:aws:iam::123456789012:role/MyARN"), Endpoint: &rdsTypes.Endpoint{ Address: stringPointer("endpoint.amazonaws.com"), - Port: 5432, + Port: aws.Int32(5432), }, }, }, @@ -232,7 +232,7 @@ func TestListDatabases(t *testing.T) { DBInstanceArn: stringPointer("arn:aws:iam::123456789012:role/MyARN"), Endpoint: &rdsTypes.Endpoint{ Address: stringPointer("endpoint.amazonaws.com"), - Port: 5432, + Port: aws.Int32(5432), }, }, { diff --git a/lib/integrations/awsoidc/tags.go b/lib/integrations/awsoidc/tags.go index a192c130d9dc4..b821e5c9e45d6 100644 --- a/lib/integrations/awsoidc/tags.go +++ b/lib/integrations/awsoidc/tags.go @@ -95,6 +95,23 @@ func (d AWSTags) MatchesECSTags(resourceTags []ecsTypes.Tag) bool { return true } +// MatchesIAMTags checks if the AWSTags are present and have the same value in resourceTags. +func (d AWSTags) MatchesIAMTags(resourceTags []iamTypes.Tag) bool { + resourceTagsMap := make(map[string]string, len(resourceTags)) + for _, tag := range resourceTags { + resourceTagsMap[*tag.Key] = *tag.Value + } + + for awsTagKey, awsTagValue := range d { + resourceTagValue, found := resourceTagsMap[awsTagKey] + if !found || resourceTagValue != awsTagValue { + return false + } + } + + return true +} + // ToIAMTags returns the default tags using the expected type for IAM resources: [iamTypes.Tag] func (d AWSTags) ToIAMTags() []iamTypes.Tag { iamTags := make([]iamTypes.Tag, 0, len(d)) diff --git a/lib/integrations/awsoidc/tags_test.go b/lib/integrations/awsoidc/tags_test.go index cbff96eabfc4b..9a5a1bb0031ba 100644 --- a/lib/integrations/awsoidc/tags_test.go +++ b/lib/integrations/awsoidc/tags_test.go @@ -20,9 +20,9 @@ import ( "testing" "github.com/aws/aws-sdk-go-v2/aws" - ec2Types "github.com/aws/aws-sdk-go-v2/service/ec2/types" - ecsTypes "github.com/aws/aws-sdk-go-v2/service/ecs/types" - iamTypes "github.com/aws/aws-sdk-go-v2/service/iam/types" + ec2types "github.com/aws/aws-sdk-go-v2/service/ec2/types" + ecstypes "github.com/aws/aws-sdk-go-v2/service/ecs/types" + iamtypes "github.com/aws/aws-sdk-go-v2/service/iam/types" "github.com/stretchr/testify/require" ) @@ -39,7 +39,7 @@ func TestDefaultTags(t *testing.T) { require.Equal(t, expectedTags, d) t.Run("iam tags", func(t *testing.T) { - expectedIAMTags := []iamTypes.Tag{ + expectedIAMTags := []iamtypes.Tag{ {Key: aws.String("teleport.dev/cluster"), Value: aws.String("mycluster")}, {Key: aws.String("teleport.dev/integration"), Value: aws.String("myawsaccount")}, {Key: aws.String("teleport.dev/origin"), Value: aws.String("integration_awsoidc")}, @@ -48,7 +48,7 @@ func TestDefaultTags(t *testing.T) { }) t.Run("ecs tags", func(t *testing.T) { - expectedECSTags := []ecsTypes.Tag{ + expectedECSTags := []ecstypes.Tag{ {Key: aws.String("teleport.dev/cluster"), Value: aws.String("mycluster")}, {Key: aws.String("teleport.dev/integration"), Value: aws.String("myawsaccount")}, {Key: aws.String("teleport.dev/origin"), Value: aws.String("integration_awsoidc")}, @@ -57,7 +57,7 @@ func TestDefaultTags(t *testing.T) { }) t.Run("ec2 tags", func(t *testing.T) { - expectedEC2Tags := []ec2Types.Tag{ + expectedEC2Tags := []ec2types.Tag{ {Key: aws.String("teleport.dev/cluster"), Value: aws.String("mycluster")}, {Key: aws.String("teleport.dev/integration"), Value: aws.String("myawsaccount")}, {Key: aws.String("teleport.dev/origin"), Value: aws.String("integration_awsoidc")}, @@ -66,37 +66,73 @@ func TestDefaultTags(t *testing.T) { }) t.Run("resource is teleport managed", func(t *testing.T) { - t.Run("all tags match", func(t *testing.T) { - awsResourceTags := []ecsTypes.Tag{ - {Key: aws.String("teleport.dev/cluster"), Value: aws.String("mycluster")}, - {Key: aws.String("teleport.dev/integration"), Value: aws.String("myawsaccount")}, - {Key: aws.String("teleport.dev/origin"), Value: aws.String("integration_awsoidc")}, - } - require.True(t, d.MatchesECSTags(awsResourceTags), "resource was wrongly detected as not Teleport managed") + t.Run("ECS Tags", func(t *testing.T) { + t.Run("all tags match", func(t *testing.T) { + awsResourceTags := []ecstypes.Tag{ + {Key: aws.String("teleport.dev/cluster"), Value: aws.String("mycluster")}, + {Key: aws.String("teleport.dev/integration"), Value: aws.String("myawsaccount")}, + {Key: aws.String("teleport.dev/origin"), Value: aws.String("integration_awsoidc")}, + } + require.True(t, d.MatchesECSTags(awsResourceTags), "resource was wrongly detected as not Teleport managed") + }) + t.Run("extra tags in aws resource", func(t *testing.T) { + awsResourceTags := []ecstypes.Tag{ + {Key: aws.String("teleport.dev/cluster"), Value: aws.String("mycluster")}, + {Key: aws.String("teleport.dev/integration"), Value: aws.String("myawsaccount")}, + {Key: aws.String("teleport.dev/origin"), Value: aws.String("integration_awsoidc")}, + {Key: aws.String("unrelated"), Value: aws.String("true")}, + } + require.True(t, d.MatchesECSTags(awsResourceTags), "resource was wrongly detected as not Teleport managed") + }) + t.Run("missing one of the labels should return false", func(t *testing.T) { + awsResourceTags := []ecstypes.Tag{ + {Key: aws.String("teleport.dev/cluster"), Value: aws.String("mycluster")}, + {Key: aws.String("teleport.dev/integration"), Value: aws.String("myawsaccount")}, + } + require.False(t, d.MatchesECSTags(awsResourceTags), "resource was wrongly detected as Teleport managed") + }) + t.Run("one of the labels has a different value, should return false", func(t *testing.T) { + awsResourceTags := []ecstypes.Tag{ + {Key: aws.String("teleport.dev/cluster"), Value: aws.String("another-cluster")}, + {Key: aws.String("teleport.dev/integration"), Value: aws.String("myawsaccount")}, + {Key: aws.String("teleport.dev/origin"), Value: aws.String("integration_awsoidc")}, + } + require.False(t, d.MatchesECSTags(awsResourceTags), "resource was wrongly detected as Teleport managed") + }) }) - t.Run("extra tags in aws resource", func(t *testing.T) { - awsResourceTags := []ecsTypes.Tag{ - {Key: aws.String("teleport.dev/cluster"), Value: aws.String("mycluster")}, - {Key: aws.String("teleport.dev/integration"), Value: aws.String("myawsaccount")}, - {Key: aws.String("teleport.dev/origin"), Value: aws.String("integration_awsoidc")}, - {Key: aws.String("unrelated"), Value: aws.String("true")}, - } - require.True(t, d.MatchesECSTags(awsResourceTags), "resource was wrongly detected as not Teleport managed") - }) - t.Run("missing one of the labels should return false", func(t *testing.T) { - awsResourceTags := []ecsTypes.Tag{ - {Key: aws.String("teleport.dev/cluster"), Value: aws.String("mycluster")}, - {Key: aws.String("teleport.dev/integration"), Value: aws.String("myawsaccount")}, - } - require.False(t, d.MatchesECSTags(awsResourceTags), "resource was wrongly detected as Teleport managed") - }) - t.Run("one of the labels has a different value, should return false", func(t *testing.T) { - awsResourceTags := []ecsTypes.Tag{ - {Key: aws.String("teleport.dev/cluster"), Value: aws.String("another-cluster")}, - {Key: aws.String("teleport.dev/integration"), Value: aws.String("myawsaccount")}, - {Key: aws.String("teleport.dev/origin"), Value: aws.String("integration_awsoidc")}, - } - require.False(t, d.MatchesECSTags(awsResourceTags), "resource was wrongly detected as Teleport managed") + t.Run("IAM Tags", func(t *testing.T) { + t.Run("all tags match", func(t *testing.T) { + awsResourceTags := []iamtypes.Tag{ + {Key: aws.String("teleport.dev/cluster"), Value: aws.String("mycluster")}, + {Key: aws.String("teleport.dev/integration"), Value: aws.String("myawsaccount")}, + {Key: aws.String("teleport.dev/origin"), Value: aws.String("integration_awsoidc")}, + } + require.True(t, d.MatchesIAMTags(awsResourceTags), "resource was wrongly detected as not Teleport managed") + }) + t.Run("extra tags in aws resource", func(t *testing.T) { + awsResourceTags := []iamtypes.Tag{ + {Key: aws.String("teleport.dev/cluster"), Value: aws.String("mycluster")}, + {Key: aws.String("teleport.dev/integration"), Value: aws.String("myawsaccount")}, + {Key: aws.String("teleport.dev/origin"), Value: aws.String("integration_awsoidc")}, + {Key: aws.String("unrelated"), Value: aws.String("true")}, + } + require.True(t, d.MatchesIAMTags(awsResourceTags), "resource was wrongly detected as not Teleport managed") + }) + t.Run("missing one of the labels should return false", func(t *testing.T) { + awsResourceTags := []iamtypes.Tag{ + {Key: aws.String("teleport.dev/cluster"), Value: aws.String("mycluster")}, + {Key: aws.String("teleport.dev/integration"), Value: aws.String("myawsaccount")}, + } + require.False(t, d.MatchesIAMTags(awsResourceTags), "resource was wrongly detected as Teleport managed") + }) + t.Run("one of the labels has a different value, should return false", func(t *testing.T) { + awsResourceTags := []iamtypes.Tag{ + {Key: aws.String("teleport.dev/cluster"), Value: aws.String("another-cluster")}, + {Key: aws.String("teleport.dev/integration"), Value: aws.String("myawsaccount")}, + {Key: aws.String("teleport.dev/origin"), Value: aws.String("integration_awsoidc")}, + } + require.False(t, d.MatchesIAMTags(awsResourceTags), "resource was wrongly detected as Teleport managed") + }) }) }) } diff --git a/lib/integrations/externalauditstorage/bootstrap.go b/lib/integrations/externalauditstorage/bootstrap.go index 8dd5d96456dfd..b32dad2eebae5 100644 --- a/lib/integrations/externalauditstorage/bootstrap.go +++ b/lib/integrations/externalauditstorage/bootstrap.go @@ -144,7 +144,7 @@ func createLTSBucket(ctx context.Context, clt BootstrapS3Client, bucketName stri ObjectLockEnabled: s3types.ObjectLockEnabledEnabled, Rule: &s3types.ObjectLockRule{ DefaultRetention: &s3types.DefaultRetention{ - Years: defaultObjectLockRetentionYears, + Years: aws.Int32(defaultObjectLockRetentionYears), // Modification is prohibited without IAM S3:BypassGovernancePermission Mode: s3types.ObjectLockRetentionModeGovernance, }, @@ -174,7 +174,7 @@ func createTransientBucket(ctx context.Context, clt BootstrapS3Client, bucketNam Status: s3types.ExpirationStatusEnabled, ID: aws.String("ExpireQueryResults"), Expiration: &s3types.LifecycleExpiration{ - Days: 1, + Days: aws.Int32(1), }, Filter: &s3types.LifecycleRuleFilterMemberPrefix{ Value: "/query_results", @@ -184,14 +184,14 @@ func createTransientBucket(ctx context.Context, clt BootstrapS3Client, bucketNam Status: s3types.ExpirationStatusEnabled, ID: aws.String("ExpireNonCurrentVersionsAndDeleteMarkers"), NoncurrentVersionExpiration: &s3types.NoncurrentVersionExpiration{ - NewerNoncurrentVersions: 0, - NoncurrentDays: 1, + NewerNoncurrentVersions: aws.Int32(0), + NoncurrentDays: aws.Int32(1), }, AbortIncompleteMultipartUpload: &s3types.AbortIncompleteMultipartUpload{ - DaysAfterInitiation: 7, + DaysAfterInitiation: aws.Int32(7), }, Expiration: &s3types.LifecycleExpiration{ - ExpiredObjectDeleteMarker: true, + ExpiredObjectDeleteMarker: aws.Bool(true), }, Filter: &s3types.LifecycleRuleFilterMemberPrefix{}, }, @@ -204,8 +204,8 @@ func createTransientBucket(ctx context.Context, clt BootstrapS3Client, bucketNam func createBucket(ctx context.Context, clt BootstrapS3Client, bucketName string, region string, objectLock bool) error { _, err := clt.CreateBucket(ctx, &s3.CreateBucketInput{ Bucket: &bucketName, - CreateBucketConfiguration: createBucketConfiguration(region), - ObjectLockEnabledForBucket: objectLock, + CreateBucketConfiguration: awsutil.CreateBucketConfiguration(region), + ObjectLockEnabledForBucket: &objectLock, ACL: s3types.BucketCannedACLPrivate, ObjectOwnership: s3types.ObjectOwnershipBucketOwnerEnforced, }) @@ -222,18 +222,6 @@ func createBucket(ctx context.Context, clt BootstrapS3Client, bucketName string, return trace.Wrap(awsutil.ConvertS3Error(err), "setting versioning configuration on S3 bucket") } -func createBucketConfiguration(region string) *s3types.CreateBucketConfiguration { - // No location constraint wanted for us-east-1 because it is the default and - // AWS has decided, in all their infinite wisdom, that the CreateBucket API - // should fail if you explicitly pass the default location constraint. - if region == "us-east-1" { - return nil - } - return &s3types.CreateBucketConfiguration{ - LocationConstraint: s3types.BucketLocationConstraint(region), - } -} - // createAthenaWorkgroup creates an athena workgroup in which to run athena sql queries. func createAthenaWorkgroup(ctx context.Context, clt BootstrapAthenaClient, workgroup string) error { fmt.Printf("Creating Athena workgroup %s\n", workgroup) diff --git a/lib/reversetunnel/localsite.go b/lib/reversetunnel/localsite.go index b00df01d14503..0f554fb2d5ed3 100644 --- a/lib/reversetunnel/localsite.go +++ b/lib/reversetunnel/localsite.go @@ -506,7 +506,7 @@ func (s *localSite) setupTunnelForOpenSSHEICENode(ctx context.Context, targetSer return nil, trace.BadParameter("missing aws cloud metadata") } - token, err := s.client.GenerateAWSOIDCToken(ctx) + token, err := s.client.GenerateAWSOIDCToken(ctx, awsInfo.Integration) if err != nil { return nil, trace.BadParameter("failed to generate aws token: %v", err) } diff --git a/lib/service/awsoidc.go b/lib/service/awsoidc.go index a8629df2e4fe4..e0be700e30e55 100644 --- a/lib/service/awsoidc.go +++ b/lib/service/awsoidc.go @@ -257,7 +257,7 @@ func (updater *AWSOIDCDeployServiceUpdater) updateAWSOIDCDeployService(ctx conte return nil } - token, err := updater.AuthClient.GenerateAWSOIDCToken(ctx) + token, err := updater.AuthClient.GenerateAWSOIDCToken(ctx, integration.GetName()) if err != nil { return trace.Wrap(err) } diff --git a/lib/services/database.go b/lib/services/database.go index 9a5b9700b5468..850b73373fd29 100644 --- a/lib/services/database.go +++ b/lib/services/database.go @@ -651,7 +651,7 @@ func NewDatabaseFromRDSV2Instance(instance *rdsTypesV2.DBInstance) (types.Databa uri := "" if instance.Endpoint != nil && instance.Endpoint.Address != nil { - uri = fmt.Sprintf("%s:%d", aws.StringValue(instance.Endpoint.Address), instance.Endpoint.Port) + uri = fmt.Sprintf("%s:%d", aws.StringValue(instance.Endpoint.Address), aws.Int32Value(instance.Endpoint.Port)) } return types.NewDatabaseV3( @@ -683,7 +683,7 @@ func MetadataFromRDSV2Instance(rdsInstance *rdsTypesV2.DBInstance) (*types.AWS, InstanceID: aws.StringValue(rdsInstance.DBInstanceIdentifier), ClusterID: aws.StringValue(rdsInstance.DBClusterIdentifier), ResourceID: aws.StringValue(rdsInstance.DbiResourceId), - IAMAuth: rdsInstance.IAMDatabaseAuthenticationEnabled, + IAMAuth: aws.BoolValue(rdsInstance.IAMDatabaseAuthenticationEnabled), Subnets: subnets, VPCID: vpcID, }, diff --git a/lib/services/database_test.go b/lib/services/database_test.go index 06735e9cf1eff..3632a7a702225 100644 --- a/lib/services/database_test.go +++ b/lib/services/database_test.go @@ -757,12 +757,12 @@ func TestDatabaseFromRDSV2Instance(t *testing.T) { DBClusterIdentifier: aws.String("cluster-1"), DBInstanceStatus: aws.String("available"), DbiResourceId: aws.String("resource-1"), - IAMDatabaseAuthenticationEnabled: true, + IAMDatabaseAuthenticationEnabled: aws.Bool(true), Engine: aws.String(RDSEnginePostgres), EngineVersion: aws.String("13.0"), Endpoint: &rdsTypesV2.Endpoint{ Address: aws.String("localhost"), - Port: 5432, + Port: aws.Int32(5432), }, TagList: []rdsTypesV2.Tag{{ Key: aws.String("key"), diff --git a/lib/services/integration.go b/lib/services/integration.go index 0e2001f97aef2..649e51df4fde6 100644 --- a/lib/services/integration.go +++ b/lib/services/integration.go @@ -49,7 +49,7 @@ type IntegrationsGetter interface { // IntegrationsTokenGenerator defines methods to generate tokens for Integrations. type IntegrationsTokenGenerator interface { // GenerateAWSOIDCToken generates a token to be used to execute an AWS OIDC Integration action. - GenerateAWSOIDCToken(ctx context.Context) (string, error) + GenerateAWSOIDCToken(ctx context.Context, integration string) (string, error) } // MarshalIntegration marshals the Integration resource to JSON. diff --git a/lib/srv/forward/sshserver.go b/lib/srv/forward/sshserver.go index 93dd46f14d22c..a63d05275a263 100644 --- a/lib/srv/forward/sshserver.go +++ b/lib/srv/forward/sshserver.go @@ -675,7 +675,7 @@ func (s *Server) sendSSHPublicKeyToTarget(ctx context.Context) (ssh.Signer, erro return nil, trace.BadParameter("missing aws cloud metadata") } - token, err := s.authClient.GenerateAWSOIDCToken(ctx) + token, err := s.authClient.GenerateAWSOIDCToken(ctx, awsInfo.Integration) if err != nil { return nil, trace.BadParameter("failed to generate aws token: %v", err) } diff --git a/lib/utils/aws/s3.go b/lib/utils/aws/s3.go index 0afd08c4a95f7..8b5525a7fd882 100644 --- a/lib/utils/aws/s3.go +++ b/lib/utils/aws/s3.go @@ -23,7 +23,7 @@ import ( awsV2 "github.com/aws/aws-sdk-go-v2/aws" managerV2 "github.com/aws/aws-sdk-go-v2/feature/s3/manager" s3v2 "github.com/aws/aws-sdk-go-v2/service/s3" - s3Types "github.com/aws/aws-sdk-go-v2/service/s3/types" + s3types "github.com/aws/aws-sdk-go-v2/service/s3/types" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/service/s3" "github.com/gravitational/trace" @@ -53,27 +53,27 @@ func ConvertS3Error(err error, args ...interface{}) error { } // SDK v2 errors: - var noSuchKey *s3Types.NoSuchKey + var noSuchKey *s3types.NoSuchKey if errors.As(err, &noSuchKey) { return trace.NotFound(noSuchKey.Error(), args...) } - var noSuchBucket *s3Types.NoSuchBucket + var noSuchBucket *s3types.NoSuchBucket if errors.As(err, &noSuchBucket) { return trace.NotFound(noSuchBucket.Error(), args...) } - var noSuchUpload *s3Types.NoSuchUpload + var noSuchUpload *s3types.NoSuchUpload if errors.As(err, &noSuchUpload) { return trace.NotFound(noSuchUpload.Error(), args...) } - var bucketAlreadyExists *s3Types.BucketAlreadyExists + var bucketAlreadyExists *s3types.BucketAlreadyExists if errors.As(err, &bucketAlreadyExists) { return trace.AlreadyExists(bucketAlreadyExists.Error(), args...) } - var bucketAlreadyOwned *s3Types.BucketAlreadyOwnedByYou + var bucketAlreadyOwned *s3types.BucketAlreadyOwnedByYou if errors.As(err, &bucketAlreadyOwned) { return trace.AlreadyExists(bucketAlreadyOwned.Error(), args...) } - var notFound *s3Types.NotFound + var notFound *s3types.NotFound if errors.As(err, ¬Found) { return trace.NotFound(notFound.Error(), args...) } @@ -141,3 +141,16 @@ func (s *s3V2FileWriter) Close() error { rCloseErr := s.pipeReader.Close() return trace.Wrap(trace.NewAggregate(wCloseErr, readerErr, rCloseErr)) } + +// CreateBucketConfiguration creates the default CreateBucketConfiguration. +func CreateBucketConfiguration(region string) *s3types.CreateBucketConfiguration { + // No location constraint wanted for us-east-1 because it is the default and + // AWS has decided, in all their infinite wisdom, that the CreateBucket API + // should fail if you explicitly pass the default location constraint. + if region == "us-east-1" { + return nil + } + return &s3types.CreateBucketConfiguration{ + LocationConstraint: s3types.BucketLocationConstraint(region), + } +} diff --git a/lib/utils/aws/s3_test.go b/lib/utils/aws/s3_test.go index 8d557d394ed24..2cbae9c08aeb2 100644 --- a/lib/utils/aws/s3_test.go +++ b/lib/utils/aws/s3_test.go @@ -25,6 +25,7 @@ import ( "github.com/aws/aws-sdk-go-v2/feature/s3/manager" "github.com/aws/aws-sdk-go-v2/service/s3" + s3types "github.com/aws/aws-sdk-go-v2/service/s3/types" "github.com/stretchr/testify/require" ) @@ -108,3 +109,36 @@ func (s *s3ClientMock) PutObject(ctx context.Context, in *s3.PutObjectInput, opt return &s3.PutObjectOutput{}, nil } } + +func TestCreateBucketConfiguration(t *testing.T) { + for _, tt := range []struct { + name string + regionIn string + expected *s3types.CreateBucketConfiguration + }{ + { + name: "special region", + regionIn: "us-east-1", + expected: nil, + }, + { + name: "regular region", + regionIn: "us-east-2", + expected: &s3types.CreateBucketConfiguration{ + LocationConstraint: s3types.BucketLocationConstraintUsEast2, + }, + }, + { + name: "unknown region", + regionIn: "unknown", + expected: &s3types.CreateBucketConfiguration{ + LocationConstraint: "unknown", + }, + }, + } { + t.Run(tt.name, func(t *testing.T) { + got := CreateBucketConfiguration(tt.regionIn) + require.Equal(t, tt.expected, got) + }) + } +} diff --git a/lib/utils/oidc/openidconfig.go b/lib/utils/oidc/openidconfig.go new file mode 100644 index 0000000000000..e4ec68ac15828 --- /dev/null +++ b/lib/utils/oidc/openidconfig.go @@ -0,0 +1,44 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package oidc + +// OpenIDConfiguration is the default OpenID Configuration used by Teleport. +type OpenIDConfiguration struct { + Issuer string `json:"issuer"` + JWKSURI string `json:"jwks_uri"` + Claims []string `json:"claims"` + IdTokenSigningAlgValuesSupported []string `json:"id_token_signing_alg_values_supported"` + ResponseTypesSupported []string `json:"response_types_supported"` + ScopesSupported []string `json:"scopes_supported"` + SubjectTypesSupported []string `json:"subject_types_supported"` +} + +// OpenIDConfigurationForIssuer returns the OpenID Configuration for +// the given issuer and JWKS URI. +func OpenIDConfigurationForIssuer(issuer, jwksURI string) OpenIDConfiguration { + return OpenIDConfiguration{ + Issuer: issuer, + JWKSURI: jwksURI, + Claims: []string{"iss", "sub", "obo", "aud", "jti", "iat", "exp", "nbf"}, + IdTokenSigningAlgValuesSupported: []string{"RS256"}, + ResponseTypesSupported: []string{"id_token"}, + ScopesSupported: []string{"openid"}, + SubjectTypesSupported: []string{"public", "pair-wise"}, + } +} diff --git a/lib/utils/oidc/openidconfig_test.go b/lib/utils/oidc/openidconfig_test.go new file mode 100644 index 0000000000000..8796a978d0e1e --- /dev/null +++ b/lib/utils/oidc/openidconfig_test.go @@ -0,0 +1,41 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package oidc + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestOpenIDConfigurationForIssuer(t *testing.T) { + expected := OpenIDConfiguration{ + Issuer: "https://localhost:8080", + JWKSURI: "https://localhost:8080/.well-known/jwks", + Claims: []string{"iss", "sub", "obo", "aud", "jti", "iat", "exp", "nbf"}, + IdTokenSigningAlgValuesSupported: []string{"RS256"}, + ResponseTypesSupported: []string{"id_token"}, + ScopesSupported: []string{"openid"}, + SubjectTypesSupported: []string{"public", "pair-wise"}, + } + + got := OpenIDConfigurationForIssuer("https://localhost:8080", "https://localhost:8080/.well-known/jwks") + require.Equal(t, expected, got) + +} diff --git a/lib/web/apiserver.go b/lib/web/apiserver.go index 692b5a914fa13..ac0174de38891 100644 --- a/lib/web/apiserver.go +++ b/lib/web/apiserver.go @@ -636,7 +636,7 @@ func (h *Handler) bindDefaultEndpoints() { h.GET("/webapi/ping/:connector", h.WithUnauthenticatedHighLimiter(h.pingWithConnector)) // Unauthenticated access to JWT public keys. - h.GET("/.well-known/jwks.json", h.WithUnauthenticatedHighLimiter(h.jwks)) + h.GET("/.well-known/jwks.json", h.WithUnauthenticatedHighLimiter(h.wellKnownJWKS)) // Unauthenticated access to the message of the day h.GET("/webapi/motd", h.WithHighLimiter(h.motd)) @@ -1669,35 +1669,8 @@ func (h *Handler) getUIConfig(ctx context.Context) webclient.UIConfig { } // jwks returns all public keys used to sign JWT tokens for this cluster. -func (h *Handler) jwks(w http.ResponseWriter, r *http.Request, p httprouter.Params) (interface{}, error) { - clusterName, err := h.cfg.ProxyClient.GetDomainName(r.Context()) - if err != nil { - return nil, trace.Wrap(err) - } - - // Fetch the JWT public keys only. - ca, err := h.cfg.ProxyClient.GetCertAuthority(r.Context(), types.CertAuthID{ - Type: types.JWTSigner, - DomainName: clusterName, - }, false) - if err != nil { - return nil, trace.Wrap(err) - } - pairs := ca.GetTrustedJWTKeyPairs() - - // Create response and allocate space for the keys. - var resp JWKSResponse - resp.Keys = make([]jwt.JWK, 0, len(pairs)) - - // Loop over and all add public keys in JWK format. - for _, pair := range pairs { - jwk, err := jwt.MarshalJWK(pair.PublicKey) - if err != nil { - return nil, trace.Wrap(err) - } - resp.Keys = append(resp.Keys, jwk) - } - return &resp, nil +func (h *Handler) wellKnownJWKS(w http.ResponseWriter, r *http.Request, p httprouter.Params) (interface{}, error) { + return h.jwks(r.Context(), types.JWTSigner) } func (h *Handler) motd(w http.ResponseWriter, r *http.Request, p httprouter.Params) (interface{}, error) { diff --git a/lib/web/integrations.go b/lib/web/integrations.go index 9fdf5135c1934..784e7d70ee99b 100644 --- a/lib/web/integrations.go +++ b/lib/web/integrations.go @@ -18,6 +18,7 @@ package web import ( "net/http" + "net/url" "github.com/gravitational/trace" "github.com/julienschmidt/httprouter" @@ -45,10 +46,16 @@ func (h *Handler) integrationsCreate(w http.ResponseWriter, r *http.Request, p h switch req.SubKind { case types.IntegrationSubKindAWSOIDC: + issuerS3URI := url.URL{ + Scheme: "s3", + Host: req.AWSOIDC.IssuerS3Bucket, + Path: req.AWSOIDC.IssuerS3Prefix, + } ig, err = types.NewIntegrationAWSOIDC( types.Metadata{Name: req.Name}, &types.AWSOIDCIntegrationSpecV1{ - RoleARN: req.AWSOIDC.RoleARN, + RoleARN: req.AWSOIDC.RoleARN, + IssuerS3URI: issuerS3URI.String(), }, ) @@ -73,7 +80,12 @@ func (h *Handler) integrationsCreate(w http.ResponseWriter, r *http.Request, p h return nil, trace.Wrap(err) } - return ui.MakeIntegration(storedIntegration), nil + uiIg, err := ui.MakeIntegration(storedIntegration) + if err != nil { + return nil, trace.Wrap(err) + } + + return uiIg, nil } // integrationsUpdate updates the Integration based on its name @@ -107,14 +119,25 @@ func (h *Handler) integrationsUpdate(w http.ResponseWriter, r *http.Request, p h return nil, trace.BadParameter("cannot update %q fields for a %q integration", types.IntegrationSubKindAWSOIDC, integration.GetSubKind()) } + issuerS3URI := url.URL{ + Scheme: "s3", + Host: req.AWSOIDC.IssuerS3Bucket, + Path: req.AWSOIDC.IssuerS3Prefix, + } integration.SetAWSOIDCRoleARN(req.AWSOIDC.RoleARN) + integration.SetAWSOIDCIssuerS3URI(issuerS3URI.String()) } if _, err := clt.UpdateIntegration(r.Context(), integration); err != nil { return nil, trace.Wrap(err) } - return ui.MakeIntegration(integration), nil + uiIg, err := ui.MakeIntegration(integration) + if err != nil { + return nil, err + } + + return uiIg, nil } // integrationsDelete removes an Integration based on its name @@ -153,7 +176,12 @@ func (h *Handler) integrationsGet(w http.ResponseWriter, r *http.Request, p http return nil, trace.Wrap(err) } - return ui.MakeIntegration(ig), nil + uiIg, err := ui.MakeIntegration(ig) + if err != nil { + return nil, err + } + + return uiIg, nil } // integrationsList returns a page of Integrations @@ -176,8 +204,13 @@ func (h *Handler) integrationsList(w http.ResponseWriter, r *http.Request, p htt return nil, trace.Wrap(err) } + items, err := ui.MakeIntegrations(igs) + if err != nil { + return nil, trace.Wrap(err) + } + return ui.IntegrationsListResponse{ - Items: ui.MakeIntegrations(igs), + Items: items, NextKey: nextKey, }, nil } diff --git a/lib/web/integrations_awsoidc.go b/lib/web/integrations_awsoidc.go index 4b7f4da21bc9f..e650f7a703102 100644 --- a/lib/web/integrations_awsoidc.go +++ b/lib/web/integrations_awsoidc.go @@ -15,8 +15,11 @@ package web import ( "context" + "encoding/base64" + "encoding/json" "fmt" "net/http" + "net/url" "slices" "strings" @@ -37,7 +40,6 @@ import ( "github.com/gravitational/teleport/lib/integrations/awsoidc/deployserviceconfig" "github.com/gravitational/teleport/lib/reversetunnelclient" "github.com/gravitational/teleport/lib/services" - "github.com/gravitational/teleport/lib/utils/oidc" "github.com/gravitational/teleport/lib/web/scripts/oneoff" "github.com/gravitational/teleport/lib/web/ui" ) @@ -727,7 +729,18 @@ func (h *Handler) awsOIDCConfigureIdP(w http.ResponseWriter, r *http.Request, p return nil, trace.BadParameter("invalid role %q", role) } - proxyAddr, err := oidc.IssuerFromPublicAddress(h.cfg.PublicProxyAddr) + s3Bucket := queryParams.Get("s3Bucket") + s3Prefix := queryParams.Get("s3Prefix") + if s3Bucket == "" || s3Prefix == "" { + return nil, trace.BadParameter("s3Bucket and s3Prefix query params are required") + } + s3URI := url.URL{Scheme: "s3", Host: s3Bucket, Path: s3Prefix} + + jwksContents, err := h.jwks(r.Context(), types.OIDCIdPCA) + if err != nil { + return nil, trace.Wrap(err) + } + jwksJSON, err := json.Marshal(jwksContents) if err != nil { return nil, trace.Wrap(err) } @@ -739,7 +752,8 @@ func (h *Handler) awsOIDCConfigureIdP(w http.ResponseWriter, r *http.Request, p fmt.Sprintf("--cluster=%s", clusterName), fmt.Sprintf("--name=%s", integrationName), fmt.Sprintf("--role=%s", role), - fmt.Sprintf("--proxy-public-url=%s", proxyAddr), + fmt.Sprintf("--s3-bucket-uri=%s", s3URI.String()), + fmt.Sprintf("--s3-jwks-base64=%s", base64.StdEncoding.EncodeToString(jwksJSON)), } script, err := oneoff.BuildScript(oneoff.OneOffScriptParams{ TeleportArgs: strings.Join(argsList, " "), diff --git a/lib/web/integrations_awsoidc_test.go b/lib/web/integrations_awsoidc_test.go index d7319374a4a7c..890db07fa9ebc 100644 --- a/lib/web/integrations_awsoidc_test.go +++ b/lib/web/integrations_awsoidc_test.go @@ -15,6 +15,7 @@ package web import ( "context" + "encoding/base64" "fmt" "net/url" "testing" @@ -257,9 +258,12 @@ func TestBuildAWSOIDCIdPConfigureScript(t *testing.T) { "configure", "awsoidc-idp.sh", } - endpoint := publicClt.Endpoint(pathVars...) + scriptEndpoint := publicClt.Endpoint(pathVars...) - proxyPublicURL := env.proxies[0].webURL + jwksEndpoint := publicClt.Endpoint(".well-known", "jwks-oidc") + resp, err := publicClt.Get(ctx, jwksEndpoint, nil) + require.NoError(t, err) + jwksBase64 := base64.StdEncoding.EncodeToString(resp.Bytes()) tests := []struct { name string @@ -274,13 +278,16 @@ func TestBuildAWSOIDCIdPConfigureScript(t *testing.T) { "awsRegion": []string{"us-east-1"}, "role": []string{"myRole"}, "integrationName": []string{"myintegration"}, + "s3Bucket": []string{"my-bucket"}, + "s3Prefix": []string{"prefix"}, }, errCheck: require.NoError, expectedTeleportArgs: "integration configure awsoidc-idp " + "--cluster=localhost " + "--name=myintegration " + "--role=myRole " + - "--proxy-public-url=" + proxyPublicURL.String(), + `--s3-bucket-uri=s3://my-bucket/prefix ` + + "--s3-jwks-base64=" + jwksBase64, }, { name: "valid with symbols in role", @@ -288,25 +295,50 @@ func TestBuildAWSOIDCIdPConfigureScript(t *testing.T) { "awsRegion": []string{"us-east-1"}, "role": []string{"Test+1=2,3.4@5-6_7"}, "integrationName": []string{"myintegration"}, + "s3Bucket": []string{"my-bucket"}, + "s3Prefix": []string{"prefix"}, }, errCheck: require.NoError, expectedTeleportArgs: "integration configure awsoidc-idp " + "--cluster=localhost " + "--name=myintegration " + "--role=Test+1=2,3.4@5-6_7 " + - "--proxy-public-url=" + proxyPublicURL.String(), + `--s3-bucket-uri=s3://my-bucket/prefix ` + + "--s3-jwks-base64=" + jwksBase64, }, { name: "missing role", reqQuery: url.Values{ "integrationName": []string{"myintegration"}, + "s3Bucket": []string{"my-bucket"}, + "s3Prefix": []string{"prefix"}, }, errCheck: isBadParamErrFn, }, { name: "missing integration name", reqQuery: url.Values{ - "role": []string{"role"}, + "role": []string{"role"}, + "s3Bucket": []string{"my-bucket"}, + "s3Prefix": []string{"prefix"}, + }, + errCheck: isBadParamErrFn, + }, + { + name: "missing s3 bucket", + reqQuery: url.Values{ + "integrationName": []string{"myintegration"}, + "role": []string{"role"}, + "s3Prefix": []string{"prefix"}, + }, + errCheck: isBadParamErrFn, + }, + { + name: "missing s3 prefix", + reqQuery: url.Values{ + "integrationName": []string{"myintegration"}, + "role": []string{"role"}, + "s3Bucket": []string{"my-bucket"}, }, errCheck: isBadParamErrFn, }, @@ -316,6 +348,8 @@ func TestBuildAWSOIDCIdPConfigureScript(t *testing.T) { "awsRegion": []string{"us-east-1"}, "role": []string{"role"}, "integrationName": []string{"'; rm -rf /tmp/dir; echo '"}, + "s3Bucket": []string{"my-bucket"}, + "s3Prefix": []string{"prefix"}, }, errCheck: isBadParamErrFn, }, @@ -324,7 +358,7 @@ func TestBuildAWSOIDCIdPConfigureScript(t *testing.T) { for _, tc := range tests { tc := tc t.Run(tc.name, func(t *testing.T) { - resp, err := publicClt.Get(ctx, endpoint, tc.reqQuery) + resp, err := publicClt.Get(ctx, scriptEndpoint, tc.reqQuery) tc.errCheck(t, err) if err != nil { return diff --git a/lib/web/oidcidp.go b/lib/web/oidcidp.go index dee948da4bf51..02fba1548392b 100644 --- a/lib/web/oidcidp.go +++ b/lib/web/oidcidp.go @@ -14,6 +14,7 @@ limitations under the License. package web import ( + "context" "net/http" "github.com/gravitational/trace" @@ -37,35 +38,23 @@ func (h *Handler) openidConfiguration(_ http.ResponseWriter, _ *http.Request, _ return nil, trace.Wrap(err) } - return struct { - Issuer string `json:"issuer"` - JWKSURI string `json:"jwks_uri"` - Claims []string `json:"claims"` - IdTokenSigningAlgValuesSupported []string `json:"id_token_signing_alg_values_supported"` - ResponseTypesSupported []string `json:"response_types_supported"` - ScopesSupported []string `json:"scopes_supported"` - SubjectTypesSupported []string `json:"subject_types_supported"` - }{ - Issuer: issuer, - JWKSURI: issuer + OIDCJWKWURI, - Claims: []string{"iss", "sub", "obo", "aud", "jti", "iat", "exp", "nbf"}, - IdTokenSigningAlgValuesSupported: []string{"RS256"}, - ResponseTypesSupported: []string{"id_token"}, - ScopesSupported: []string{"openid"}, - SubjectTypesSupported: []string{"public", "pair-wise"}, - }, nil + return oidc.OpenIDConfigurationForIssuer(issuer, issuer+OIDCJWKWURI), nil } // jwksOIDC returns all public keys used to sign JWT tokens for this cluster. func (h *Handler) jwksOIDC(_ http.ResponseWriter, r *http.Request, _ httprouter.Params) (interface{}, error) { - clusterName, err := h.GetProxyClient().GetDomainName(r.Context()) + return h.jwks(r.Context(), types.OIDCIdPCA) +} + +func (h *Handler) jwks(ctx context.Context, caType types.CertAuthType) (*JWKSResponse, error) { + clusterName, err := h.GetProxyClient().GetDomainName(ctx) if err != nil { return nil, trace.Wrap(err) } // Fetch the JWT public keys only. - ca, err := h.GetProxyClient().GetCertAuthority(r.Context(), types.CertAuthID{ - Type: types.OIDCIdPCA, + ca, err := h.GetProxyClient().GetCertAuthority(ctx, types.CertAuthID{ + Type: caType, DomainName: clusterName, }, false /* loadKeys */) if err != nil { diff --git a/lib/web/ui/integration.go b/lib/web/ui/integration.go index 83b8dbb5af971..fcf0df15ec784 100644 --- a/lib/web/ui/integration.go +++ b/lib/web/ui/integration.go @@ -17,6 +17,9 @@ limitations under the License. package ui import ( + "net/url" + "strings" + "github.com/gravitational/trace" "github.com/gravitational/teleport/api/types" @@ -27,6 +30,26 @@ import ( type IntegrationAWSOIDCSpec struct { // RoleARN is the role associated with the integration when SubKind is `aws-oidc` RoleARN string `json:"roleArn,omitempty"` + + // IssuerS3Bucket is the Issuer configured in AWS using an S3 Bucket. + IssuerS3Bucket string `json:"issuerS3Bucket,omitempty"` + // IssuerS3Prefix is the prefix for the bucket above. + IssuerS3Prefix string `json:"issuerS3Prefix,omitempty"` +} + +// CheckAndSetDefaults for the aws oidc integration spec. +func (r *IntegrationAWSOIDCSpec) CheckAndSetDefaults() error { + if r.RoleARN == "" { + return trace.BadParameter("missing awsoidc.roleArn field") + } + if r.IssuerS3Bucket == "" { + return trace.BadParameter("missing awsoidc.issuerS3Bucket field") + } + if r.IssuerS3Prefix == "" { + return trace.BadParameter("missing awsoidc.issuerS3Prefix field") + } + + return nil } // Integration describes Integration fields @@ -50,8 +73,10 @@ func (r *Integration) CheckAndSetDefaults() error { return trace.BadParameter("missing subKind") } - if r.AWSOIDC != nil && r.AWSOIDC.RoleARN == "" { - return trace.BadParameter("missing awsoidc.roleArn field") + if r.AWSOIDC != nil { + if err := r.AWSOIDC.CheckAndSetDefaults(); err != nil { + return trace.Wrap(err) + } } return nil @@ -65,8 +90,10 @@ type UpdateIntegrationRequest struct { // CheckAndSetDefaults checks if the provided values are valid. func (r *UpdateIntegrationRequest) CheckAndSetDefaults() error { - if r.AWSOIDC != nil && r.AWSOIDC.RoleARN == "" { - return trace.BadParameter("missing awsoidc.roleArn field") + if r.AWSOIDC != nil { + if err := r.AWSOIDC.CheckAndSetDefaults(); err != nil { + return trace.Wrap(err) + } } return nil @@ -77,31 +104,43 @@ func (r *UpdateIntegrationRequest) CheckAndSetDefaults() error { // a `nextToken` is provided and should be used to obtain the next page (as a query param `startKey`) type IntegrationsListResponse struct { // Items is a list of resources retrieved. - Items []Integration `json:"items"` + Items []*Integration `json:"items"` // NextKey is the position to resume listing events. NextKey string `json:"nextKey"` } // MakeIntegrations creates a UI list of Integrations. -func MakeIntegrations(igs []types.Integration) []Integration { - uiList := make([]Integration, 0, len(igs)) +func MakeIntegrations(igs []types.Integration) ([]*Integration, error) { + uiList := make([]*Integration, 0, len(igs)) for _, ig := range igs { - uiList = append(uiList, MakeIntegration(ig)) + uiIg, err := MakeIntegration(ig) + if err != nil { + return nil, trace.Wrap(err) + } + uiList = append(uiList, uiIg) } - return uiList + return uiList, nil } // MakeIntegration creates a UI Integration representation. -func MakeIntegration(ig types.Integration) Integration { - return Integration{ +func MakeIntegration(ig types.Integration) (*Integration, error) { + issuerS3BucketURL, err := url.Parse(ig.GetAWSOIDCIntegrationSpec().IssuerS3URI) + if err != nil { + return nil, trace.Wrap(err) + } + prefix := strings.TrimLeft(issuerS3BucketURL.Path, "/") + + return &Integration{ Name: ig.GetName(), SubKind: ig.GetSubKind(), AWSOIDC: &IntegrationAWSOIDCSpec{ - RoleARN: ig.GetAWSOIDCIntegrationSpec().RoleARN, + RoleARN: ig.GetAWSOIDCIntegrationSpec().RoleARN, + IssuerS3Bucket: issuerS3BucketURL.Host, + IssuerS3Prefix: prefix, }, - } + }, nil } // AWSOIDCListDatabasesRequest is a request to ListDatabases using the AWS OIDC Integration. diff --git a/tool/teleport/common/teleport.go b/tool/teleport/common/teleport.go index fc3fdb98ec8e7..ee354a70b790c 100644 --- a/tool/teleport/common/teleport.go +++ b/tool/teleport/common/teleport.go @@ -476,8 +476,12 @@ func Run(options Options) (app *kingpin.Application, executedCommand string, con IntegrationConfAWSOIDCIdPArguments.Name) integrationConfAWSOIDCIdPCmd.Flag("role", "The AWS Role used by the AWS OIDC Integration.").Required().StringVar(&ccf. IntegrationConfAWSOIDCIdPArguments.Role) - integrationConfAWSOIDCIdPCmd.Flag("proxy-public-url", "Proxy Public URL (eg https://mytenant.teleport.sh).").Required().StringVar(&ccf. + integrationConfAWSOIDCIdPCmd.Flag("proxy-public-url", "Proxy Public URL (eg https://mytenant.teleport.sh).").StringVar(&ccf. IntegrationConfAWSOIDCIdPArguments.ProxyPublicURL) + integrationConfAWSOIDCIdPCmd.Flag("s3-bucket-uri", "The S3 URI(format: s3:///) used to store the OpenID configuration and public keys. ").StringVar(&ccf. + IntegrationConfAWSOIDCIdPArguments.S3BucketURI) + integrationConfAWSOIDCIdPCmd.Flag("s3-jwks-base64", `The JWKS base 64 encoded. Required when using the S3 Bucket as the Issuer URL. Format: base64({"keys":[{"kty":"RSA","alg":"RS256","n":"","e":"","use":"sig","kid":""}]}).`).StringVar(&ccf. + IntegrationConfAWSOIDCIdPArguments.S3JWKSContentsB64) integrationConfListDatabasesCmd := integrationConfigureCmd.Command("listdatabases-iam", "Adds required IAM permissions to List RDS Databases (Instances and Clusters).") integrationConfListDatabasesCmd.Flag("aws-region", "AWS Region.").Required().StringVar(&ccf.IntegrationConfListDatabasesIAMArguments.Region) @@ -991,6 +995,8 @@ func onIntegrationConfAWSOIDCIdP(params config.IntegrationConfAWSOIDCIdP) error IntegrationName: params.Name, IntegrationRole: params.Role, ProxyPublicAddress: params.ProxyPublicURL, + S3BucketLocation: params.S3BucketURI, + S3JWKSContentsB64: params.S3JWKSContentsB64, }) if err != nil { return trace.Wrap(err)