From 83932878e818c2bd0b9da3902dd6bdb46a73e150 Mon Sep 17 00:00:00 2001 From: STeve Huang Date: Thu, 14 Nov 2024 11:29:15 -0500 Subject: [PATCH 1/6] github integration resource --- api/client/client.go | 14 +- .../integration/v1/integration_service.pb.go | 200 +- .../integration/v1/integration_service.proto | 4 + .../teleport/legacy/types/events/events.proto | 8 + api/proto/teleport/legacy/types/types.proto | 36 + api/types/events/events.pb.go | 2575 +++++++++-------- api/types/integration.go | 138 + api/types/integration_test.go | 173 ++ api/types/types.pb.go | 1821 ++++++++---- lib/auth/authclient/api.go | 2 +- lib/auth/integration/integrationv1/service.go | 65 +- .../integration/integrationv1/service_test.go | 94 +- lib/auth/keystore/manager.go | 8 +- lib/cache/cache.go | 10 +- lib/cache/cache_test.go | 8 +- lib/cache/collections.go | 2 +- lib/cryptosuites/suites.go | 8 + lib/integrations/awsoidc/clientsv1.go | 4 +- lib/integrations/awsoidc/clientsv1_test.go | 5 +- .../integration_config_provider.go | 4 +- lib/integrations/awsoidc/token_generator.go | 4 +- .../externalauditstorage/configurator.go | 4 +- lib/reversetunnel/localsite.go | 2 +- lib/services/integration.go | 4 +- lib/services/local/externalauditstorage.go | 2 +- lib/services/local/integrations.go | 14 +- lib/srv/forward/sshserver.go | 2 +- lib/web/integrations.go | 6 +- lib/web/integrations_awsoidc.go | 8 +- tool/tctl/common/plugin/entraid.go | 2 +- tool/tctl/common/plugin/plugins_command.go | 2 +- .../common/plugin/plugins_command_test.go | 2 +- tool/tctl/common/resource_command.go | 8 +- 33 files changed, 3430 insertions(+), 1809 deletions(-) diff --git a/api/client/client.go b/api/client/client.go index a9b8c665de599..9c4e358387d7b 100644 --- a/api/client/client.go +++ b/api/client/client.go @@ -4660,10 +4660,11 @@ func (c *Client) integrationsClient() integrationpb.IntegrationServiceClient { // ListIntegrations returns a paginated list of Integrations. // The response includes a nextKey which must be used to fetch the next page. -func (c *Client) ListIntegrations(ctx context.Context, pageSize int, nextKey string) ([]types.Integration, string, error) { +func (c *Client) ListIntegrations(ctx context.Context, pageSize int, nextKey string, withSecrets bool) ([]types.Integration, string, error) { resp, err := c.integrationsClient().ListIntegrations(ctx, &integrationpb.ListIntegrationsRequest{ - Limit: int32(pageSize), - NextKey: nextKey, + Limit: int32(pageSize), + NextKey: nextKey, + WithSecrets: withSecrets, }) if err != nil { return nil, "", trace.Wrap(err) @@ -4682,7 +4683,7 @@ func (c *Client) ListAllIntegrations(ctx context.Context) ([]types.Integration, var result []types.Integration var nextKey string for { - integrations, nextKey, err := c.ListIntegrations(ctx, 0, nextKey) + integrations, nextKey, err := c.ListIntegrations(ctx, 0, nextKey, false /*withSecrets*/) if err != nil { return nil, trace.Wrap(err) } @@ -4694,9 +4695,10 @@ func (c *Client) ListAllIntegrations(ctx context.Context) ([]types.Integration, } // GetIntegration returns an Integration by its name. -func (c *Client) GetIntegration(ctx context.Context, name string) (types.Integration, error) { +func (c *Client) GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) { ig, err := c.integrationsClient().GetIntegration(ctx, &integrationpb.GetIntegrationRequest{ - Name: name, + Name: name, + WithSecrets: withSecrets, }) if err != nil { return nil, 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 4bf4813a11236..631f86c06a34d 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 @@ -46,6 +46,8 @@ type ListIntegrationsRequest struct { Limit int32 `protobuf:"varint,1,opt,name=limit,proto3" json:"limit,omitempty"` // NextKey is the key for the next page of Integrations. NextKey string `protobuf:"bytes,2,opt,name=next_key,json=nextKey,proto3" json:"next_key,omitempty"` + // WithSecrets specifies whether to load associated secrets. + WithSecrets bool `protobuf:"varint,3,opt,name=with_secrets,json=withSecrets,proto3" json:"with_secrets,omitempty"` } func (x *ListIntegrationsRequest) Reset() { @@ -92,6 +94,13 @@ func (x *ListIntegrationsRequest) GetNextKey() string { return "" } +func (x *ListIntegrationsRequest) GetWithSecrets() bool { + if x != nil { + return x.WithSecrets + } + return false +} + // ListIntegrationsResponse is the response for ListIntegrationsRequest. type ListIntegrationsResponse struct { state protoimpl.MessageState @@ -165,6 +174,8 @@ type GetIntegrationRequest struct { // Name is the name of the Integration to be requested. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // WithSecrets specifies whether to load associated secrets. + WithSecrets bool `protobuf:"varint,2,opt,name=with_secrets,json=withSecrets,proto3" json:"with_secrets,omitempty"` } func (x *GetIntegrationRequest) Reset() { @@ -204,6 +215,13 @@ func (x *GetIntegrationRequest) GetName() string { return "" } +func (x *GetIntegrationRequest) GetWithSecrets() bool { + if x != nil { + return x.WithSecrets + } + return false +} + // CreateIntegrationRequest is the request to create the provided integration. type CreateIntegrationRequest struct { state protoimpl.MessageState @@ -505,102 +523,106 @@ var file_teleport_integration_v1_integration_service_proto_rawDesc = []byte{ 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4a, 0x0a, 0x17, + 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6d, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x6e, 0x65, 0x78, 0x74, 0x4b, 0x65, 0x79, 0x22, 0x90, 0x01, 0x0a, 0x18, 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, 0x38, 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x79, + 0x07, 0x6e, 0x65, 0x78, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x69, 0x74, 0x68, + 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, + 0x77, 0x69, 0x74, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x18, + 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, 0x38, 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x56, 0x31, 0x52, 0x0c, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x78, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, + 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x4e, + 0x0a, 0x15, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x77, + 0x69, 0x74, 0x68, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, 0x52, + 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0b, 0x69, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x56, 0x31, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x52, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, + 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x31, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2e, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 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, 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, 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, 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, 0x52, 0x0c, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x19, 0x0a, 0x08, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x6e, 0x65, 0x78, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x2b, 0x0a, 0x15, 0x47, - 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x52, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x31, 0x52, - 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x52, 0x0a, 0x18, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x56, 0x31, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x2e, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, - 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, 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, 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, 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, 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, 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, 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, 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, + 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, 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, 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, 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, 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, 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, + 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, } var ( diff --git a/api/proto/teleport/integration/v1/integration_service.proto b/api/proto/teleport/integration/v1/integration_service.proto index 6306a204a79d7..cf4000b741981 100644 --- a/api/proto/teleport/integration/v1/integration_service.proto +++ b/api/proto/teleport/integration/v1/integration_service.proto @@ -52,6 +52,8 @@ message ListIntegrationsRequest { int32 limit = 1; // NextKey is the key for the next page of Integrations. string next_key = 2; + // WithSecrets specifies whether to load associated secrets. + bool with_secrets = 3; } // ListIntegrationsResponse is the response for ListIntegrationsRequest. @@ -68,6 +70,8 @@ message ListIntegrationsResponse { message GetIntegrationRequest { // Name is the name of the Integration to be requested. string name = 1; + // WithSecrets specifies whether to load associated secrets. + bool with_secrets = 2; } // CreateIntegrationRequest is the request to create the provided integration. diff --git a/api/proto/teleport/legacy/types/events/events.proto b/api/proto/teleport/legacy/types/events/events.proto index bd61c99381b62..4fdba25e8bd13 100644 --- a/api/proto/teleport/legacy/types/events/events.proto +++ b/api/proto/teleport/legacy/types/events/events.proto @@ -4330,6 +4330,8 @@ message IntegrationMetadata { AWSOIDCIntegrationMetadata AWSOIDC = 2 [(gogoproto.jsontag) = "aws_oidc,omitempty"]; // AzureOIDC contains metadata for Azure OIDC integrations. AzureOIDCIntegrationMetadata AzureOIDC = 3 [(gogoproto.jsontag) = "azure_oidc,omitempty"]; + // GitHub contains metadata for GitHub integrations. + GitHubIntegrationMetadata GitHub = 4 [(gogoproto.jsontag) = "github,omitempty"]; } // AWSOIDCIntegrationMetadata contains metadata for AWS OIDC integrations. @@ -4351,6 +4353,12 @@ message AzureOIDCIntegrationMetadata { string ClientID = 2 [(gogoproto.jsontag) = "client_id,omitempty"]; } +// GitHubIntegrationMetadata contains metadata for GitHub integrations. +message GitHubIntegrationMetadata { + // Organization specifies the name of the organization for the GitHub integration. + string Organization = 1 [(gogoproto.jsontag) = "organization,omitempty"]; +} + // PluginCreate is emitted when a plugin resource is created. message PluginCreate { // Metadata is a common event metadata. diff --git a/api/proto/teleport/legacy/types/types.proto b/api/proto/teleport/legacy/types/types.proto index 4b82464d670b3..9e1f033d39cd3 100644 --- a/api/proto/teleport/legacy/types/types.proto +++ b/api/proto/teleport/legacy/types/types.proto @@ -7362,6 +7362,8 @@ message IntegrationSpecV1 { AWSOIDCIntegrationSpecV1 AWSOIDC = 1 [(gogoproto.jsontag) = "aws_oidc,omitempty"]; // AzureOIDC contains the specific fields to handle the Azure OIDC Integration subkind AzureOIDCIntegrationSpecV1 AzureOIDC = 2 [(gogoproto.jsontag) = "azure_oidc,omitempty"]; + // GitHub contains the specific fields to handle the GitHub integration subkind. + GitHubIntegrationSpecV1 GitHub = 3 [(gogoproto.jsontag) = "github,omitempty"]; } } @@ -7407,6 +7409,40 @@ message AzureOIDCIntegrationSpecV1 { string ClientID = 2 [(gogoproto.jsontag) = "client_id,omitempty"]; } +// GitHubIntegrationSpecV1 contains the specific fields to handle the GitHub integration subkind. +message GitHubIntegrationSpecV1 { + // Organization specifies the name of the organization for the GitHub integration. + string Organization = 1 [(gogoproto.jsontag) = "organization,omitempty"]; + + // Proxy specifies GitHub proxy related settings. + GitHubProxy proxy = 2 [(gogoproto.jsontag) = "proxy,omitempty"]; +} + +// GitHubProxy specifies GitHub proxy related settings. +message GitHubProxy { + // CertAuthority contains the active SSH CAs used between Teleport and + // GitHub. GitHub does not allow the same CA to be used for a different + // organization so the CA is defined per integration. TODO(greedy52) support + // rotation, HSM encryption. + repeated SSHKeyPair cert_authorities = 1 [(gogoproto.jsontag) = "cert_authorities,omitempty"]; + + // Connector specifies the GitHub connector spec used to obtain user ID and + // username. + GitHubProxyConnector connector = 2 [(gogoproto.jsontag) = "connector,omitempty"]; +} + +// GitHubProxyConnector specifies the GitHub connector spec for a GitHub proxy. +// This type is a subset of GithubConnectorSpecV3 but does not require fields +// like TeamRolesMapping. +message GitHubProxyConnector { + // ClientID is the Github OAuth app client ID. + string ClientID = 1 [(gogoproto.jsontag) = "client_id"]; + // ClientSecret is the Github OAuth app client secret. + string ClientSecret = 2 [(gogoproto.jsontag) = "client_secret"]; + // RedirectURL is the authorization callback URL. + string RedirectURL = 3 [(gogoproto.jsontag) = "redirect_url"]; +} + // HeadlessAuthentication holds data for an ongoing headless authentication attempt. message HeadlessAuthentication { // Header is the resource header. diff --git a/api/types/events/events.pb.go b/api/types/events/events.pb.go index b386ffc8f6e20..a5a2226582149 100644 --- a/api/types/events/events.pb.go +++ b/api/types/events/events.pb.go @@ -7320,10 +7320,12 @@ type IntegrationMetadata struct { // AWSOIDC contains metadata for AWS OIDC integrations. AWSOIDC *AWSOIDCIntegrationMetadata `protobuf:"bytes,2,opt,name=AWSOIDC,proto3" json:"aws_oidc,omitempty"` // AzureOIDC contains metadata for Azure OIDC integrations. - AzureOIDC *AzureOIDCIntegrationMetadata `protobuf:"bytes,3,opt,name=AzureOIDC,proto3" json:"azure_oidc,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + AzureOIDC *AzureOIDCIntegrationMetadata `protobuf:"bytes,3,opt,name=AzureOIDC,proto3" json:"azure_oidc,omitempty"` + // GitHub contains metadata for GitHub integrations. + GitHub *GitHubIntegrationMetadata `protobuf:"bytes,4,opt,name=GitHub,proto3" json:"github,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *IntegrationMetadata) Reset() { *m = IntegrationMetadata{} } @@ -7448,6 +7450,48 @@ func (m *AzureOIDCIntegrationMetadata) XXX_DiscardUnknown() { var xxx_messageInfo_AzureOIDCIntegrationMetadata proto.InternalMessageInfo +// GitHubIntegrationMetadata contains metadata for GitHub integrations. +type GitHubIntegrationMetadata struct { + // Organization specifies the name of the organization for the GitHub integration. + Organization string `protobuf:"bytes,1,opt,name=Organization,proto3" json:"organization,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GitHubIntegrationMetadata) Reset() { *m = GitHubIntegrationMetadata{} } +func (m *GitHubIntegrationMetadata) String() string { return proto.CompactTextString(m) } +func (*GitHubIntegrationMetadata) ProtoMessage() {} +func (*GitHubIntegrationMetadata) Descriptor() ([]byte, []int) { + return fileDescriptor_007ba1c3d6266d56, []int{138} +} +func (m *GitHubIntegrationMetadata) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GitHubIntegrationMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GitHubIntegrationMetadata.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GitHubIntegrationMetadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_GitHubIntegrationMetadata.Merge(m, src) +} +func (m *GitHubIntegrationMetadata) XXX_Size() int { + return m.Size() +} +func (m *GitHubIntegrationMetadata) XXX_DiscardUnknown() { + xxx_messageInfo_GitHubIntegrationMetadata.DiscardUnknown(m) +} + +var xxx_messageInfo_GitHubIntegrationMetadata proto.InternalMessageInfo + // PluginCreate is emitted when a plugin resource is created. type PluginCreate struct { // Metadata is a common event metadata. @@ -7468,7 +7512,7 @@ func (m *PluginCreate) Reset() { *m = PluginCreate{} } func (m *PluginCreate) String() string { return proto.CompactTextString(m) } func (*PluginCreate) ProtoMessage() {} func (*PluginCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{138} + return fileDescriptor_007ba1c3d6266d56, []int{139} } func (m *PluginCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7517,7 +7561,7 @@ func (m *PluginUpdate) Reset() { *m = PluginUpdate{} } func (m *PluginUpdate) String() string { return proto.CompactTextString(m) } func (*PluginUpdate) ProtoMessage() {} func (*PluginUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{139} + return fileDescriptor_007ba1c3d6266d56, []int{140} } func (m *PluginUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7566,7 +7610,7 @@ func (m *PluginDelete) Reset() { *m = PluginDelete{} } func (m *PluginDelete) String() string { return proto.CompactTextString(m) } func (*PluginDelete) ProtoMessage() {} func (*PluginDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{140} + return fileDescriptor_007ba1c3d6266d56, []int{141} } func (m *PluginDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7615,7 +7659,7 @@ func (m *PluginMetadata) Reset() { *m = PluginMetadata{} } func (m *PluginMetadata) String() string { return proto.CompactTextString(m) } func (*PluginMetadata) ProtoMessage() {} func (*PluginMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{141} + return fileDescriptor_007ba1c3d6266d56, []int{142} } func (m *PluginMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7844,7 +7888,7 @@ func (m *OneOf) Reset() { *m = OneOf{} } func (m *OneOf) String() string { return proto.CompactTextString(m) } func (*OneOf) ProtoMessage() {} func (*OneOf) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{142} + return fileDescriptor_007ba1c3d6266d56, []int{143} } func (m *OneOf) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10155,7 +10199,7 @@ func (m *StreamStatus) Reset() { *m = StreamStatus{} } func (m *StreamStatus) String() string { return proto.CompactTextString(m) } func (*StreamStatus) ProtoMessage() {} func (*StreamStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{143} + return fileDescriptor_007ba1c3d6266d56, []int{144} } func (m *StreamStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10201,7 +10245,7 @@ func (m *SessionUpload) Reset() { *m = SessionUpload{} } func (m *SessionUpload) String() string { return proto.CompactTextString(m) } func (*SessionUpload) ProtoMessage() {} func (*SessionUpload) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{144} + return fileDescriptor_007ba1c3d6266d56, []int{145} } func (m *SessionUpload) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10320,7 +10364,7 @@ func (m *Identity) Reset() { *m = Identity{} } func (m *Identity) String() string { return proto.CompactTextString(m) } func (*Identity) ProtoMessage() {} func (*Identity) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{145} + return fileDescriptor_007ba1c3d6266d56, []int{146} } func (m *Identity) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10376,7 +10420,7 @@ func (m *RouteToApp) Reset() { *m = RouteToApp{} } func (m *RouteToApp) String() string { return proto.CompactTextString(m) } func (*RouteToApp) ProtoMessage() {} func (*RouteToApp) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{146} + return fileDescriptor_007ba1c3d6266d56, []int{147} } func (m *RouteToApp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10426,7 +10470,7 @@ func (m *RouteToDatabase) Reset() { *m = RouteToDatabase{} } func (m *RouteToDatabase) String() string { return proto.CompactTextString(m) } func (*RouteToDatabase) ProtoMessage() {} func (*RouteToDatabase) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{147} + return fileDescriptor_007ba1c3d6266d56, []int{148} } func (m *RouteToDatabase) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10476,7 +10520,7 @@ func (m *DeviceExtensions) Reset() { *m = DeviceExtensions{} } func (m *DeviceExtensions) String() string { return proto.CompactTextString(m) } func (*DeviceExtensions) ProtoMessage() {} func (*DeviceExtensions) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{148} + return fileDescriptor_007ba1c3d6266d56, []int{149} } func (m *DeviceExtensions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10533,7 +10577,7 @@ func (m *AccessRequestResourceSearch) Reset() { *m = AccessRequestResour func (m *AccessRequestResourceSearch) String() string { return proto.CompactTextString(m) } func (*AccessRequestResourceSearch) ProtoMessage() {} func (*AccessRequestResourceSearch) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{149} + return fileDescriptor_007ba1c3d6266d56, []int{150} } func (m *AccessRequestResourceSearch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10584,7 +10628,7 @@ func (m *MySQLStatementPrepare) Reset() { *m = MySQLStatementPrepare{} } func (m *MySQLStatementPrepare) String() string { return proto.CompactTextString(m) } func (*MySQLStatementPrepare) ProtoMessage() {} func (*MySQLStatementPrepare) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{150} + return fileDescriptor_007ba1c3d6266d56, []int{151} } func (m *MySQLStatementPrepare) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10637,7 +10681,7 @@ func (m *MySQLStatementExecute) Reset() { *m = MySQLStatementExecute{} } func (m *MySQLStatementExecute) String() string { return proto.CompactTextString(m) } func (*MySQLStatementExecute) ProtoMessage() {} func (*MySQLStatementExecute) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{151} + return fileDescriptor_007ba1c3d6266d56, []int{152} } func (m *MySQLStatementExecute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10692,7 +10736,7 @@ func (m *MySQLStatementSendLongData) Reset() { *m = MySQLStatementSendLo func (m *MySQLStatementSendLongData) String() string { return proto.CompactTextString(m) } func (*MySQLStatementSendLongData) ProtoMessage() {} func (*MySQLStatementSendLongData) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{152} + return fileDescriptor_007ba1c3d6266d56, []int{153} } func (m *MySQLStatementSendLongData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10743,7 +10787,7 @@ func (m *MySQLStatementClose) Reset() { *m = MySQLStatementClose{} } func (m *MySQLStatementClose) String() string { return proto.CompactTextString(m) } func (*MySQLStatementClose) ProtoMessage() {} func (*MySQLStatementClose) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{153} + return fileDescriptor_007ba1c3d6266d56, []int{154} } func (m *MySQLStatementClose) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10794,7 +10838,7 @@ func (m *MySQLStatementReset) Reset() { *m = MySQLStatementReset{} } func (m *MySQLStatementReset) String() string { return proto.CompactTextString(m) } func (*MySQLStatementReset) ProtoMessage() {} func (*MySQLStatementReset) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{154} + return fileDescriptor_007ba1c3d6266d56, []int{155} } func (m *MySQLStatementReset) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10847,7 +10891,7 @@ func (m *MySQLStatementFetch) Reset() { *m = MySQLStatementFetch{} } func (m *MySQLStatementFetch) String() string { return proto.CompactTextString(m) } func (*MySQLStatementFetch) ProtoMessage() {} func (*MySQLStatementFetch) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{155} + return fileDescriptor_007ba1c3d6266d56, []int{156} } func (m *MySQLStatementFetch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10900,7 +10944,7 @@ func (m *MySQLStatementBulkExecute) Reset() { *m = MySQLStatementBulkExe func (m *MySQLStatementBulkExecute) String() string { return proto.CompactTextString(m) } func (*MySQLStatementBulkExecute) ProtoMessage() {} func (*MySQLStatementBulkExecute) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{156} + return fileDescriptor_007ba1c3d6266d56, []int{157} } func (m *MySQLStatementBulkExecute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10951,7 +10995,7 @@ func (m *MySQLInitDB) Reset() { *m = MySQLInitDB{} } func (m *MySQLInitDB) String() string { return proto.CompactTextString(m) } func (*MySQLInitDB) ProtoMessage() {} func (*MySQLInitDB) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{157} + return fileDescriptor_007ba1c3d6266d56, []int{158} } func (m *MySQLInitDB) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11001,7 +11045,7 @@ func (m *MySQLCreateDB) Reset() { *m = MySQLCreateDB{} } func (m *MySQLCreateDB) String() string { return proto.CompactTextString(m) } func (*MySQLCreateDB) ProtoMessage() {} func (*MySQLCreateDB) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{158} + return fileDescriptor_007ba1c3d6266d56, []int{159} } func (m *MySQLCreateDB) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11051,7 +11095,7 @@ func (m *MySQLDropDB) Reset() { *m = MySQLDropDB{} } func (m *MySQLDropDB) String() string { return proto.CompactTextString(m) } func (*MySQLDropDB) ProtoMessage() {} func (*MySQLDropDB) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{159} + return fileDescriptor_007ba1c3d6266d56, []int{160} } func (m *MySQLDropDB) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11099,7 +11143,7 @@ func (m *MySQLShutDown) Reset() { *m = MySQLShutDown{} } func (m *MySQLShutDown) String() string { return proto.CompactTextString(m) } func (*MySQLShutDown) ProtoMessage() {} func (*MySQLShutDown) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{160} + return fileDescriptor_007ba1c3d6266d56, []int{161} } func (m *MySQLShutDown) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11150,7 +11194,7 @@ func (m *MySQLProcessKill) Reset() { *m = MySQLProcessKill{} } func (m *MySQLProcessKill) String() string { return proto.CompactTextString(m) } func (*MySQLProcessKill) ProtoMessage() {} func (*MySQLProcessKill) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{161} + return fileDescriptor_007ba1c3d6266d56, []int{162} } func (m *MySQLProcessKill) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11199,7 +11243,7 @@ func (m *MySQLDebug) Reset() { *m = MySQLDebug{} } func (m *MySQLDebug) String() string { return proto.CompactTextString(m) } func (*MySQLDebug) ProtoMessage() {} func (*MySQLDebug) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{162} + return fileDescriptor_007ba1c3d6266d56, []int{163} } func (m *MySQLDebug) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11249,7 +11293,7 @@ func (m *MySQLRefresh) Reset() { *m = MySQLRefresh{} } func (m *MySQLRefresh) String() string { return proto.CompactTextString(m) } func (*MySQLRefresh) ProtoMessage() {} func (*MySQLRefresh) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{163} + return fileDescriptor_007ba1c3d6266d56, []int{164} } func (m *MySQLRefresh) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11301,7 +11345,7 @@ func (m *SQLServerRPCRequest) Reset() { *m = SQLServerRPCRequest{} } func (m *SQLServerRPCRequest) String() string { return proto.CompactTextString(m) } func (*SQLServerRPCRequest) ProtoMessage() {} func (*SQLServerRPCRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{164} + return fileDescriptor_007ba1c3d6266d56, []int{165} } func (m *SQLServerRPCRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11351,7 +11395,7 @@ func (m *DatabaseSessionMalformedPacket) Reset() { *m = DatabaseSessionM func (m *DatabaseSessionMalformedPacket) String() string { return proto.CompactTextString(m) } func (*DatabaseSessionMalformedPacket) ProtoMessage() {} func (*DatabaseSessionMalformedPacket) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{165} + return fileDescriptor_007ba1c3d6266d56, []int{166} } func (m *DatabaseSessionMalformedPacket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11418,7 +11462,7 @@ func (m *ElasticsearchRequest) Reset() { *m = ElasticsearchRequest{} } func (m *ElasticsearchRequest) String() string { return proto.CompactTextString(m) } func (*ElasticsearchRequest) ProtoMessage() {} func (*ElasticsearchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{166} + return fileDescriptor_007ba1c3d6266d56, []int{167} } func (m *ElasticsearchRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11484,7 +11528,7 @@ func (m *OpenSearchRequest) Reset() { *m = OpenSearchRequest{} } func (m *OpenSearchRequest) String() string { return proto.CompactTextString(m) } func (*OpenSearchRequest) ProtoMessage() {} func (*OpenSearchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{167} + return fileDescriptor_007ba1c3d6266d56, []int{168} } func (m *OpenSearchRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11544,7 +11588,7 @@ func (m *DynamoDBRequest) Reset() { *m = DynamoDBRequest{} } func (m *DynamoDBRequest) String() string { return proto.CompactTextString(m) } func (*DynamoDBRequest) ProtoMessage() {} func (*DynamoDBRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{168} + return fileDescriptor_007ba1c3d6266d56, []int{169} } func (m *DynamoDBRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11610,7 +11654,7 @@ func (m *AppSessionDynamoDBRequest) Reset() { *m = AppSessionDynamoDBReq func (m *AppSessionDynamoDBRequest) String() string { return proto.CompactTextString(m) } func (*AppSessionDynamoDBRequest) ProtoMessage() {} func (*AppSessionDynamoDBRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{169} + return fileDescriptor_007ba1c3d6266d56, []int{170} } func (m *AppSessionDynamoDBRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11652,7 +11696,7 @@ func (m *UpgradeWindowStartMetadata) Reset() { *m = UpgradeWindowStartMe func (m *UpgradeWindowStartMetadata) String() string { return proto.CompactTextString(m) } func (*UpgradeWindowStartMetadata) ProtoMessage() {} func (*UpgradeWindowStartMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{170} + return fileDescriptor_007ba1c3d6266d56, []int{171} } func (m *UpgradeWindowStartMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11700,7 +11744,7 @@ func (m *UpgradeWindowStartUpdate) Reset() { *m = UpgradeWindowStartUpda func (m *UpgradeWindowStartUpdate) String() string { return proto.CompactTextString(m) } func (*UpgradeWindowStartUpdate) ProtoMessage() {} func (*UpgradeWindowStartUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{171} + return fileDescriptor_007ba1c3d6266d56, []int{172} } func (m *UpgradeWindowStartUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11751,7 +11795,7 @@ func (m *SessionRecordingAccess) Reset() { *m = SessionRecordingAccess{} func (m *SessionRecordingAccess) String() string { return proto.CompactTextString(m) } func (*SessionRecordingAccess) ProtoMessage() {} func (*SessionRecordingAccess) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{172} + return fileDescriptor_007ba1c3d6266d56, []int{173} } func (m *SessionRecordingAccess) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11793,7 +11837,7 @@ func (m *KubeClusterMetadata) Reset() { *m = KubeClusterMetadata{} } func (m *KubeClusterMetadata) String() string { return proto.CompactTextString(m) } func (*KubeClusterMetadata) ProtoMessage() {} func (*KubeClusterMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{173} + return fileDescriptor_007ba1c3d6266d56, []int{174} } func (m *KubeClusterMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11841,7 +11885,7 @@ func (m *KubernetesClusterCreate) Reset() { *m = KubernetesClusterCreate func (m *KubernetesClusterCreate) String() string { return proto.CompactTextString(m) } func (*KubernetesClusterCreate) ProtoMessage() {} func (*KubernetesClusterCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{174} + return fileDescriptor_007ba1c3d6266d56, []int{175} } func (m *KubernetesClusterCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11889,7 +11933,7 @@ func (m *KubernetesClusterUpdate) Reset() { *m = KubernetesClusterUpdate func (m *KubernetesClusterUpdate) String() string { return proto.CompactTextString(m) } func (*KubernetesClusterUpdate) ProtoMessage() {} func (*KubernetesClusterUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{175} + return fileDescriptor_007ba1c3d6266d56, []int{176} } func (m *KubernetesClusterUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11935,7 +11979,7 @@ func (m *KubernetesClusterDelete) Reset() { *m = KubernetesClusterDelete func (m *KubernetesClusterDelete) String() string { return proto.CompactTextString(m) } func (*KubernetesClusterDelete) ProtoMessage() {} func (*KubernetesClusterDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{176} + return fileDescriptor_007ba1c3d6266d56, []int{177} } func (m *KubernetesClusterDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11998,7 +12042,7 @@ func (m *SSMRun) Reset() { *m = SSMRun{} } func (m *SSMRun) String() string { return proto.CompactTextString(m) } func (*SSMRun) ProtoMessage() {} func (*SSMRun) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{177} + return fileDescriptor_007ba1c3d6266d56, []int{178} } func (m *SSMRun) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12051,7 +12095,7 @@ func (m *CassandraPrepare) Reset() { *m = CassandraPrepare{} } func (m *CassandraPrepare) String() string { return proto.CompactTextString(m) } func (*CassandraPrepare) ProtoMessage() {} func (*CassandraPrepare) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{178} + return fileDescriptor_007ba1c3d6266d56, []int{179} } func (m *CassandraPrepare) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12101,7 +12145,7 @@ func (m *CassandraExecute) Reset() { *m = CassandraExecute{} } func (m *CassandraExecute) String() string { return proto.CompactTextString(m) } func (*CassandraExecute) ProtoMessage() {} func (*CassandraExecute) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{179} + return fileDescriptor_007ba1c3d6266d56, []int{180} } func (m *CassandraExecute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12157,7 +12201,7 @@ func (m *CassandraBatch) Reset() { *m = CassandraBatch{} } func (m *CassandraBatch) String() string { return proto.CompactTextString(m) } func (*CassandraBatch) ProtoMessage() {} func (*CassandraBatch) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{180} + return fileDescriptor_007ba1c3d6266d56, []int{181} } func (m *CassandraBatch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12203,7 +12247,7 @@ func (m *CassandraBatch_BatchChild) Reset() { *m = CassandraBatch_BatchC func (m *CassandraBatch_BatchChild) String() string { return proto.CompactTextString(m) } func (*CassandraBatch_BatchChild) ProtoMessage() {} func (*CassandraBatch_BatchChild) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{180, 0} + return fileDescriptor_007ba1c3d6266d56, []int{181, 0} } func (m *CassandraBatch_BatchChild) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12247,7 +12291,7 @@ func (m *CassandraBatch_BatchChild_Value) Reset() { *m = CassandraBatch_ func (m *CassandraBatch_BatchChild_Value) String() string { return proto.CompactTextString(m) } func (*CassandraBatch_BatchChild_Value) ProtoMessage() {} func (*CassandraBatch_BatchChild_Value) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{180, 0, 0} + return fileDescriptor_007ba1c3d6266d56, []int{181, 0, 0} } func (m *CassandraBatch_BatchChild_Value) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12298,7 +12342,7 @@ func (m *CassandraRegister) Reset() { *m = CassandraRegister{} } func (m *CassandraRegister) String() string { return proto.CompactTextString(m) } func (*CassandraRegister) ProtoMessage() {} func (*CassandraRegister) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{181} + return fileDescriptor_007ba1c3d6266d56, []int{182} } func (m *CassandraRegister) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12344,7 +12388,7 @@ func (m *LoginRuleCreate) Reset() { *m = LoginRuleCreate{} } func (m *LoginRuleCreate) String() string { return proto.CompactTextString(m) } func (*LoginRuleCreate) ProtoMessage() {} func (*LoginRuleCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{182} + return fileDescriptor_007ba1c3d6266d56, []int{183} } func (m *LoginRuleCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12390,7 +12434,7 @@ func (m *LoginRuleDelete) Reset() { *m = LoginRuleDelete{} } func (m *LoginRuleDelete) String() string { return proto.CompactTextString(m) } func (*LoginRuleDelete) ProtoMessage() {} func (*LoginRuleDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{183} + return fileDescriptor_007ba1c3d6266d56, []int{184} } func (m *LoginRuleDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12440,7 +12484,7 @@ func (m *SAMLIdPAuthAttempt) Reset() { *m = SAMLIdPAuthAttempt{} } func (m *SAMLIdPAuthAttempt) String() string { return proto.CompactTextString(m) } func (*SAMLIdPAuthAttempt) ProtoMessage() {} func (*SAMLIdPAuthAttempt) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{184} + return fileDescriptor_007ba1c3d6266d56, []int{185} } func (m *SAMLIdPAuthAttempt) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12486,7 +12530,7 @@ func (m *SAMLIdPServiceProviderCreate) Reset() { *m = SAMLIdPServiceProv func (m *SAMLIdPServiceProviderCreate) String() string { return proto.CompactTextString(m) } func (*SAMLIdPServiceProviderCreate) ProtoMessage() {} func (*SAMLIdPServiceProviderCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{185} + return fileDescriptor_007ba1c3d6266d56, []int{186} } func (m *SAMLIdPServiceProviderCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12532,7 +12576,7 @@ func (m *SAMLIdPServiceProviderUpdate) Reset() { *m = SAMLIdPServiceProv func (m *SAMLIdPServiceProviderUpdate) String() string { return proto.CompactTextString(m) } func (*SAMLIdPServiceProviderUpdate) ProtoMessage() {} func (*SAMLIdPServiceProviderUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{186} + return fileDescriptor_007ba1c3d6266d56, []int{187} } func (m *SAMLIdPServiceProviderUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12578,7 +12622,7 @@ func (m *SAMLIdPServiceProviderDelete) Reset() { *m = SAMLIdPServiceProv func (m *SAMLIdPServiceProviderDelete) String() string { return proto.CompactTextString(m) } func (*SAMLIdPServiceProviderDelete) ProtoMessage() {} func (*SAMLIdPServiceProviderDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{187} + return fileDescriptor_007ba1c3d6266d56, []int{188} } func (m *SAMLIdPServiceProviderDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12622,7 +12666,7 @@ func (m *SAMLIdPServiceProviderDeleteAll) Reset() { *m = SAMLIdPServiceP func (m *SAMLIdPServiceProviderDeleteAll) String() string { return proto.CompactTextString(m) } func (*SAMLIdPServiceProviderDeleteAll) ProtoMessage() {} func (*SAMLIdPServiceProviderDeleteAll) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{188} + return fileDescriptor_007ba1c3d6266d56, []int{189} } func (m *SAMLIdPServiceProviderDeleteAll) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12668,7 +12712,7 @@ func (m *OktaResourcesUpdate) Reset() { *m = OktaResourcesUpdate{} } func (m *OktaResourcesUpdate) String() string { return proto.CompactTextString(m) } func (*OktaResourcesUpdate) ProtoMessage() {} func (*OktaResourcesUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{189} + return fileDescriptor_007ba1c3d6266d56, []int{190} } func (m *OktaResourcesUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12714,7 +12758,7 @@ func (m *OktaSyncFailure) Reset() { *m = OktaSyncFailure{} } func (m *OktaSyncFailure) String() string { return proto.CompactTextString(m) } func (*OktaSyncFailure) ProtoMessage() {} func (*OktaSyncFailure) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{190} + return fileDescriptor_007ba1c3d6266d56, []int{191} } func (m *OktaSyncFailure) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12764,7 +12808,7 @@ func (m *OktaAssignmentResult) Reset() { *m = OktaAssignmentResult{} } func (m *OktaAssignmentResult) String() string { return proto.CompactTextString(m) } func (*OktaAssignmentResult) ProtoMessage() {} func (*OktaAssignmentResult) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{191} + return fileDescriptor_007ba1c3d6266d56, []int{192} } func (m *OktaAssignmentResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12810,7 +12854,7 @@ func (m *AccessListCreate) Reset() { *m = AccessListCreate{} } func (m *AccessListCreate) String() string { return proto.CompactTextString(m) } func (*AccessListCreate) ProtoMessage() {} func (*AccessListCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{192} + return fileDescriptor_007ba1c3d6266d56, []int{193} } func (m *AccessListCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12856,7 +12900,7 @@ func (m *AccessListUpdate) Reset() { *m = AccessListUpdate{} } func (m *AccessListUpdate) String() string { return proto.CompactTextString(m) } func (*AccessListUpdate) ProtoMessage() {} func (*AccessListUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{193} + return fileDescriptor_007ba1c3d6266d56, []int{194} } func (m *AccessListUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12902,7 +12946,7 @@ func (m *AccessListDelete) Reset() { *m = AccessListDelete{} } func (m *AccessListDelete) String() string { return proto.CompactTextString(m) } func (*AccessListDelete) ProtoMessage() {} func (*AccessListDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{194} + return fileDescriptor_007ba1c3d6266d56, []int{195} } func (m *AccessListDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12950,7 +12994,7 @@ func (m *AccessListMemberCreate) Reset() { *m = AccessListMemberCreate{} func (m *AccessListMemberCreate) String() string { return proto.CompactTextString(m) } func (*AccessListMemberCreate) ProtoMessage() {} func (*AccessListMemberCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{195} + return fileDescriptor_007ba1c3d6266d56, []int{196} } func (m *AccessListMemberCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12998,7 +13042,7 @@ func (m *AccessListMemberUpdate) Reset() { *m = AccessListMemberUpdate{} func (m *AccessListMemberUpdate) String() string { return proto.CompactTextString(m) } func (*AccessListMemberUpdate) ProtoMessage() {} func (*AccessListMemberUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{196} + return fileDescriptor_007ba1c3d6266d56, []int{197} } func (m *AccessListMemberUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13046,7 +13090,7 @@ func (m *AccessListMemberDelete) Reset() { *m = AccessListMemberDelete{} func (m *AccessListMemberDelete) String() string { return proto.CompactTextString(m) } func (*AccessListMemberDelete) ProtoMessage() {} func (*AccessListMemberDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{197} + return fileDescriptor_007ba1c3d6266d56, []int{198} } func (m *AccessListMemberDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13096,7 +13140,7 @@ func (m *AccessListMemberDeleteAllForAccessList) Reset() { func (m *AccessListMemberDeleteAllForAccessList) String() string { return proto.CompactTextString(m) } func (*AccessListMemberDeleteAllForAccessList) ProtoMessage() {} func (*AccessListMemberDeleteAllForAccessList) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{198} + return fileDescriptor_007ba1c3d6266d56, []int{199} } func (m *AccessListMemberDeleteAllForAccessList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13144,7 +13188,7 @@ func (m *AccessListReview) Reset() { *m = AccessListReview{} } func (m *AccessListReview) String() string { return proto.CompactTextString(m) } func (*AccessListReview) ProtoMessage() {} func (*AccessListReview) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{199} + return fileDescriptor_007ba1c3d6266d56, []int{200} } func (m *AccessListReview) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13192,7 +13236,7 @@ func (m *AuditQueryRun) Reset() { *m = AuditQueryRun{} } func (m *AuditQueryRun) String() string { return proto.CompactTextString(m) } func (*AuditQueryRun) ProtoMessage() {} func (*AuditQueryRun) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{200} + return fileDescriptor_007ba1c3d6266d56, []int{201} } func (m *AuditQueryRun) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13242,7 +13286,7 @@ func (m *AuditQueryDetails) Reset() { *m = AuditQueryDetails{} } func (m *AuditQueryDetails) String() string { return proto.CompactTextString(m) } func (*AuditQueryDetails) ProtoMessage() {} func (*AuditQueryDetails) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{201} + return fileDescriptor_007ba1c3d6266d56, []int{202} } func (m *AuditQueryDetails) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13298,7 +13342,7 @@ func (m *SecurityReportRun) Reset() { *m = SecurityReportRun{} } func (m *SecurityReportRun) String() string { return proto.CompactTextString(m) } func (*SecurityReportRun) ProtoMessage() {} func (*SecurityReportRun) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{202} + return fileDescriptor_007ba1c3d6266d56, []int{203} } func (m *SecurityReportRun) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13346,7 +13390,7 @@ func (m *ExternalAuditStorageEnable) Reset() { *m = ExternalAuditStorage func (m *ExternalAuditStorageEnable) String() string { return proto.CompactTextString(m) } func (*ExternalAuditStorageEnable) ProtoMessage() {} func (*ExternalAuditStorageEnable) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{203} + return fileDescriptor_007ba1c3d6266d56, []int{204} } func (m *ExternalAuditStorageEnable) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13394,7 +13438,7 @@ func (m *ExternalAuditStorageDisable) Reset() { *m = ExternalAuditStorag func (m *ExternalAuditStorageDisable) String() string { return proto.CompactTextString(m) } func (*ExternalAuditStorageDisable) ProtoMessage() {} func (*ExternalAuditStorageDisable) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{204} + return fileDescriptor_007ba1c3d6266d56, []int{205} } func (m *ExternalAuditStorageDisable) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13455,7 +13499,7 @@ func (m *ExternalAuditStorageDetails) Reset() { *m = ExternalAuditStorag func (m *ExternalAuditStorageDetails) String() string { return proto.CompactTextString(m) } func (*ExternalAuditStorageDetails) ProtoMessage() {} func (*ExternalAuditStorageDetails) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{205} + return fileDescriptor_007ba1c3d6266d56, []int{206} } func (m *ExternalAuditStorageDetails) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13513,7 +13557,7 @@ func (m *OktaAccessListSync) Reset() { *m = OktaAccessListSync{} } func (m *OktaAccessListSync) String() string { return proto.CompactTextString(m) } func (*OktaAccessListSync) ProtoMessage() {} func (*OktaAccessListSync) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{206} + return fileDescriptor_007ba1c3d6266d56, []int{207} } func (m *OktaAccessListSync) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13577,7 +13621,7 @@ func (m *OktaUserSync) Reset() { *m = OktaUserSync{} } func (m *OktaUserSync) String() string { return proto.CompactTextString(m) } func (*OktaUserSync) ProtoMessage() {} func (*OktaUserSync) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{207} + return fileDescriptor_007ba1c3d6266d56, []int{208} } func (m *OktaUserSync) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13641,7 +13685,7 @@ func (m *SPIFFESVIDIssued) Reset() { *m = SPIFFESVIDIssued{} } func (m *SPIFFESVIDIssued) String() string { return proto.CompactTextString(m) } func (*SPIFFESVIDIssued) ProtoMessage() {} func (*SPIFFESVIDIssued) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{208} + return fileDescriptor_007ba1c3d6266d56, []int{209} } func (m *SPIFFESVIDIssued) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13692,7 +13736,7 @@ func (m *AuthPreferenceUpdate) Reset() { *m = AuthPreferenceUpdate{} } func (m *AuthPreferenceUpdate) String() string { return proto.CompactTextString(m) } func (*AuthPreferenceUpdate) ProtoMessage() {} func (*AuthPreferenceUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{209} + return fileDescriptor_007ba1c3d6266d56, []int{210} } func (m *AuthPreferenceUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13740,7 +13784,7 @@ func (m *ClusterNetworkingConfigUpdate) Reset() { *m = ClusterNetworking func (m *ClusterNetworkingConfigUpdate) String() string { return proto.CompactTextString(m) } func (*ClusterNetworkingConfigUpdate) ProtoMessage() {} func (*ClusterNetworkingConfigUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{210} + return fileDescriptor_007ba1c3d6266d56, []int{211} } func (m *ClusterNetworkingConfigUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13788,7 +13832,7 @@ func (m *SessionRecordingConfigUpdate) Reset() { *m = SessionRecordingCo func (m *SessionRecordingConfigUpdate) String() string { return proto.CompactTextString(m) } func (*SessionRecordingConfigUpdate) ProtoMessage() {} func (*SessionRecordingConfigUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{211} + return fileDescriptor_007ba1c3d6266d56, []int{212} } func (m *SessionRecordingConfigUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13838,7 +13882,7 @@ func (m *AccessPathChanged) Reset() { *m = AccessPathChanged{} } func (m *AccessPathChanged) String() string { return proto.CompactTextString(m) } func (*AccessPathChanged) ProtoMessage() {} func (*AccessPathChanged) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{212} + return fileDescriptor_007ba1c3d6266d56, []int{213} } func (m *AccessPathChanged) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13892,7 +13936,7 @@ func (m *SpannerRPC) Reset() { *m = SpannerRPC{} } func (m *SpannerRPC) String() string { return proto.CompactTextString(m) } func (*SpannerRPC) ProtoMessage() {} func (*SpannerRPC) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{213} + return fileDescriptor_007ba1c3d6266d56, []int{214} } func (m *SpannerRPC) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13940,7 +13984,7 @@ func (m *AccessGraphSettingsUpdate) Reset() { *m = AccessGraphSettingsUp func (m *AccessGraphSettingsUpdate) String() string { return proto.CompactTextString(m) } func (*AccessGraphSettingsUpdate) ProtoMessage() {} func (*AccessGraphSettingsUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{214} + return fileDescriptor_007ba1c3d6266d56, []int{215} } func (m *AccessGraphSettingsUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13988,7 +14032,7 @@ func (m *SPIFFEFederationCreate) Reset() { *m = SPIFFEFederationCreate{} func (m *SPIFFEFederationCreate) String() string { return proto.CompactTextString(m) } func (*SPIFFEFederationCreate) ProtoMessage() {} func (*SPIFFEFederationCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{215} + return fileDescriptor_007ba1c3d6266d56, []int{216} } func (m *SPIFFEFederationCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14036,7 +14080,7 @@ func (m *SPIFFEFederationDelete) Reset() { *m = SPIFFEFederationDelete{} func (m *SPIFFEFederationDelete) String() string { return proto.CompactTextString(m) } func (*SPIFFEFederationDelete) ProtoMessage() {} func (*SPIFFEFederationDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{216} + return fileDescriptor_007ba1c3d6266d56, []int{217} } func (m *SPIFFEFederationDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14086,7 +14130,7 @@ func (m *AutoUpdateConfigCreate) Reset() { *m = AutoUpdateConfigCreate{} func (m *AutoUpdateConfigCreate) String() string { return proto.CompactTextString(m) } func (*AutoUpdateConfigCreate) ProtoMessage() {} func (*AutoUpdateConfigCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{217} + return fileDescriptor_007ba1c3d6266d56, []int{218} } func (m *AutoUpdateConfigCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14136,7 +14180,7 @@ func (m *AutoUpdateConfigUpdate) Reset() { *m = AutoUpdateConfigUpdate{} func (m *AutoUpdateConfigUpdate) String() string { return proto.CompactTextString(m) } func (*AutoUpdateConfigUpdate) ProtoMessage() {} func (*AutoUpdateConfigUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{218} + return fileDescriptor_007ba1c3d6266d56, []int{219} } func (m *AutoUpdateConfigUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14186,7 +14230,7 @@ func (m *AutoUpdateConfigDelete) Reset() { *m = AutoUpdateConfigDelete{} func (m *AutoUpdateConfigDelete) String() string { return proto.CompactTextString(m) } func (*AutoUpdateConfigDelete) ProtoMessage() {} func (*AutoUpdateConfigDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{219} + return fileDescriptor_007ba1c3d6266d56, []int{220} } func (m *AutoUpdateConfigDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14236,7 +14280,7 @@ func (m *AutoUpdateVersionCreate) Reset() { *m = AutoUpdateVersionCreate func (m *AutoUpdateVersionCreate) String() string { return proto.CompactTextString(m) } func (*AutoUpdateVersionCreate) ProtoMessage() {} func (*AutoUpdateVersionCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{220} + return fileDescriptor_007ba1c3d6266d56, []int{221} } func (m *AutoUpdateVersionCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14286,7 +14330,7 @@ func (m *AutoUpdateVersionUpdate) Reset() { *m = AutoUpdateVersionUpdate func (m *AutoUpdateVersionUpdate) String() string { return proto.CompactTextString(m) } func (*AutoUpdateVersionUpdate) ProtoMessage() {} func (*AutoUpdateVersionUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{221} + return fileDescriptor_007ba1c3d6266d56, []int{222} } func (m *AutoUpdateVersionUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14336,7 +14380,7 @@ func (m *AutoUpdateVersionDelete) Reset() { *m = AutoUpdateVersionDelete func (m *AutoUpdateVersionDelete) String() string { return proto.CompactTextString(m) } func (*AutoUpdateVersionDelete) ProtoMessage() {} func (*AutoUpdateVersionDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{222} + return fileDescriptor_007ba1c3d6266d56, []int{223} } func (m *AutoUpdateVersionDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14386,7 +14430,7 @@ func (m *StaticHostUserCreate) Reset() { *m = StaticHostUserCreate{} } func (m *StaticHostUserCreate) String() string { return proto.CompactTextString(m) } func (*StaticHostUserCreate) ProtoMessage() {} func (*StaticHostUserCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{223} + return fileDescriptor_007ba1c3d6266d56, []int{224} } func (m *StaticHostUserCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14436,7 +14480,7 @@ func (m *StaticHostUserUpdate) Reset() { *m = StaticHostUserUpdate{} } func (m *StaticHostUserUpdate) String() string { return proto.CompactTextString(m) } func (*StaticHostUserUpdate) ProtoMessage() {} func (*StaticHostUserUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{224} + return fileDescriptor_007ba1c3d6266d56, []int{225} } func (m *StaticHostUserUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14486,7 +14530,7 @@ func (m *StaticHostUserDelete) Reset() { *m = StaticHostUserDelete{} } func (m *StaticHostUserDelete) String() string { return proto.CompactTextString(m) } func (*StaticHostUserDelete) ProtoMessage() {} func (*StaticHostUserDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{225} + return fileDescriptor_007ba1c3d6266d56, []int{226} } func (m *StaticHostUserDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14538,7 +14582,7 @@ func (m *CrownJewelCreate) Reset() { *m = CrownJewelCreate{} } func (m *CrownJewelCreate) String() string { return proto.CompactTextString(m) } func (*CrownJewelCreate) ProtoMessage() {} func (*CrownJewelCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{226} + return fileDescriptor_007ba1c3d6266d56, []int{227} } func (m *CrownJewelCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14592,7 +14636,7 @@ func (m *CrownJewelUpdate) Reset() { *m = CrownJewelUpdate{} } func (m *CrownJewelUpdate) String() string { return proto.CompactTextString(m) } func (*CrownJewelUpdate) ProtoMessage() {} func (*CrownJewelUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{227} + return fileDescriptor_007ba1c3d6266d56, []int{228} } func (m *CrownJewelUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14642,7 +14686,7 @@ func (m *CrownJewelDelete) Reset() { *m = CrownJewelDelete{} } func (m *CrownJewelDelete) String() string { return proto.CompactTextString(m) } func (*CrownJewelDelete) ProtoMessage() {} func (*CrownJewelDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{228} + return fileDescriptor_007ba1c3d6266d56, []int{229} } func (m *CrownJewelDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14694,7 +14738,7 @@ func (m *UserTaskCreate) Reset() { *m = UserTaskCreate{} } func (m *UserTaskCreate) String() string { return proto.CompactTextString(m) } func (*UserTaskCreate) ProtoMessage() {} func (*UserTaskCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{229} + return fileDescriptor_007ba1c3d6266d56, []int{230} } func (m *UserTaskCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14750,7 +14794,7 @@ func (m *UserTaskUpdate) Reset() { *m = UserTaskUpdate{} } func (m *UserTaskUpdate) String() string { return proto.CompactTextString(m) } func (*UserTaskUpdate) ProtoMessage() {} func (*UserTaskUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{230} + return fileDescriptor_007ba1c3d6266d56, []int{231} } func (m *UserTaskUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14796,7 +14840,7 @@ func (m *UserTaskMetadata) Reset() { *m = UserTaskMetadata{} } func (m *UserTaskMetadata) String() string { return proto.CompactTextString(m) } func (*UserTaskMetadata) ProtoMessage() {} func (*UserTaskMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{231} + return fileDescriptor_007ba1c3d6266d56, []int{232} } func (m *UserTaskMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14846,7 +14890,7 @@ func (m *UserTaskDelete) Reset() { *m = UserTaskDelete{} } func (m *UserTaskDelete) String() string { return proto.CompactTextString(m) } func (*UserTaskDelete) ProtoMessage() {} func (*UserTaskDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{232} + return fileDescriptor_007ba1c3d6266d56, []int{233} } func (m *UserTaskDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -15033,6 +15077,7 @@ func init() { proto.RegisterType((*IntegrationMetadata)(nil), "events.IntegrationMetadata") proto.RegisterType((*AWSOIDCIntegrationMetadata)(nil), "events.AWSOIDCIntegrationMetadata") proto.RegisterType((*AzureOIDCIntegrationMetadata)(nil), "events.AzureOIDCIntegrationMetadata") + proto.RegisterType((*GitHubIntegrationMetadata)(nil), "events.GitHubIntegrationMetadata") proto.RegisterType((*PluginCreate)(nil), "events.PluginCreate") proto.RegisterType((*PluginUpdate)(nil), "events.PluginUpdate") proto.RegisterType((*PluginDelete)(nil), "events.PluginDelete") @@ -15139,1063 +15184,1066 @@ func init() { } var fileDescriptor_007ba1c3d6266d56 = []byte{ - // 16888 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x78, 0x24, 0x49, - 0x72, 0x18, 0x86, 0x7e, 0xa0, 0x01, 0x04, 0x1e, 0x03, 0xe4, 0xbc, 0x6a, 0x67, 0x67, 0x17, 0xbb, - 0xb5, 0x77, 0x73, 0x33, 0x7b, 0xbb, 0x98, 0xdb, 0xd9, 0xd9, 0xdd, 0xdb, 0xd7, 0xed, 0x35, 0xd0, - 0xc0, 0xa0, 0x67, 0xf0, 0xda, 0x6a, 0xcc, 0xcc, 0xed, 0x91, 0x77, 0xcd, 0x42, 0x57, 0xa2, 0x51, - 0x3b, 0xdd, 0x55, 0xcd, 0xaa, 0xea, 0xc1, 0x60, 0xfd, 0xe2, 0xd1, 0x14, 0x45, 0x8a, 0xc7, 0xd3, - 0xf9, 0x68, 0x8a, 0xd4, 0xc3, 0xd6, 0x51, 0x0f, 0x9b, 0xa2, 0x28, 0x9e, 0x29, 0xd1, 0x24, 0x8f, - 0xe4, 0x59, 0x92, 0xe9, 0xc7, 0x89, 0xfc, 0xcc, 0x8f, 0x94, 0x6d, 0x7d, 0xfa, 0x6c, 0x19, 0x27, - 0xd3, 0xd6, 0x1f, 0x7c, 0xf6, 0xf7, 0xd1, 0xf6, 0x7d, 0xd6, 0x59, 0x96, 0xfd, 0xe9, 0xcb, 0xc8, - 0xac, 0xaa, 0xac, 0x57, 0xe3, 0xb9, 0xc2, 0xe2, 0x06, 0x7f, 0x66, 0xd0, 0x11, 0x91, 0x91, 0x59, - 0x91, 0x91, 0x99, 0x91, 0x99, 0x91, 0x11, 0x70, 0xcd, 0xa3, 0x2d, 0xda, 0xb1, 0x1d, 0xef, 0x7a, - 0x8b, 0x36, 0xf5, 0xc6, 0xd6, 0x75, 0x6f, 0xab, 0x43, 0xdd, 0xeb, 0xf4, 0x21, 0xb5, 0x3c, 0xff, - 0xbf, 0xa9, 0x8e, 0x63, 0x7b, 0x36, 0x29, 0xf1, 0x5f, 0x97, 0xce, 0x35, 0xed, 0xa6, 0x8d, 0xa0, - 0xeb, 0xec, 0x2f, 0x8e, 0xbd, 0x74, 0xb9, 0x69, 0xdb, 0xcd, 0x16, 0xbd, 0x8e, 0xbf, 0xd6, 0xba, - 0xeb, 0xd7, 0x5d, 0xcf, 0xe9, 0x36, 0x3c, 0x81, 0x9d, 0x8c, 0x63, 0x3d, 0xb3, 0x4d, 0x5d, 0x4f, - 0x6f, 0x77, 0x04, 0xc1, 0xd3, 0x71, 0x82, 0x4d, 0x47, 0xef, 0x74, 0xa8, 0x23, 0x2a, 0xbf, 0xf4, - 0x89, 0xa0, 0x9d, 0x7a, 0xa3, 0x41, 0x5d, 0xb7, 0x65, 0xba, 0xde, 0xf5, 0x87, 0x2f, 0x49, 0xbf, - 0x04, 0xe1, 0xb3, 0xe9, 0x1f, 0x84, 0xff, 0x0a, 0x92, 0x17, 0xd3, 0x49, 0xfc, 0x1a, 0x63, 0x55, - 0xab, 0x5f, 0xcb, 0xc3, 0xe0, 0x22, 0xf5, 0x74, 0x43, 0xf7, 0x74, 0x72, 0x19, 0xfa, 0xab, 0x96, - 0x41, 0x1f, 0x29, 0xb9, 0x67, 0x72, 0x57, 0x0b, 0xd3, 0xa5, 0x9d, 0xed, 0xc9, 0x3c, 0x35, 0x35, - 0x0e, 0x24, 0x4f, 0x41, 0x71, 0x75, 0xab, 0x43, 0x95, 0xfc, 0x33, 0xb9, 0xab, 0x43, 0xd3, 0x43, - 0x3b, 0xdb, 0x93, 0xfd, 0x28, 0x34, 0x0d, 0xc1, 0xe4, 0x59, 0xc8, 0x57, 0x2b, 0x4a, 0x01, 0x91, - 0x13, 0x3b, 0xdb, 0x93, 0xa3, 0x5d, 0xd3, 0x78, 0xc1, 0x6e, 0x9b, 0x1e, 0x6d, 0x77, 0xbc, 0x2d, - 0x2d, 0x5f, 0xad, 0x90, 0x2b, 0x50, 0x9c, 0xb1, 0x0d, 0xaa, 0x14, 0x91, 0x88, 0xec, 0x6c, 0x4f, - 0x8e, 0x35, 0x6c, 0x83, 0x4a, 0x54, 0x88, 0x27, 0x9f, 0x85, 0xe2, 0xaa, 0xd9, 0xa6, 0x4a, 0xff, - 0x33, 0xb9, 0xab, 0xc3, 0x37, 0x2e, 0x4d, 0x71, 0xf1, 0x4d, 0xf9, 0xe2, 0x9b, 0x5a, 0xf5, 0xe5, - 0x3b, 0x3d, 0xfe, 0xed, 0xed, 0xc9, 0xbe, 0x9d, 0xed, 0xc9, 0x22, 0x13, 0xf9, 0x57, 0xbf, 0x33, - 0x99, 0xd3, 0xb0, 0x24, 0x79, 0x0b, 0x86, 0x67, 0x5a, 0x5d, 0xd7, 0xa3, 0xce, 0x92, 0xde, 0xa6, - 0x4a, 0x09, 0x2b, 0xbc, 0xb4, 0xb3, 0x3d, 0x79, 0xa1, 0xc1, 0xc1, 0x75, 0x4b, 0x6f, 0xcb, 0x15, - 0xcb, 0xe4, 0xea, 0x6f, 0xe6, 0xe0, 0x4c, 0x8d, 0xba, 0xae, 0x69, 0x5b, 0x81, 0x6c, 0x3e, 0x0e, - 0x43, 0x02, 0x54, 0xad, 0xa0, 0x7c, 0x86, 0xa6, 0x07, 0x76, 0xb6, 0x27, 0x0b, 0xae, 0x69, 0x68, - 0x21, 0x86, 0x7c, 0x0a, 0x06, 0xee, 0x9b, 0xde, 0xc6, 0xe2, 0x5c, 0x59, 0xc8, 0xe9, 0xc2, 0xce, - 0xf6, 0x24, 0xd9, 0x34, 0xbd, 0x8d, 0x7a, 0x7b, 0x5d, 0x97, 0x2a, 0xf4, 0xc9, 0xc8, 0x02, 0x8c, - 0xaf, 0x38, 0xe6, 0x43, 0xdd, 0xa3, 0x77, 0xe8, 0xd6, 0x8a, 0xdd, 0x32, 0x1b, 0x5b, 0x42, 0x8a, - 0xcf, 0xec, 0x6c, 0x4f, 0x5e, 0xee, 0x70, 0x5c, 0xfd, 0x01, 0xdd, 0xaa, 0x77, 0x10, 0x2b, 0x31, - 0x49, 0x94, 0x54, 0x7f, 0xab, 0x04, 0x23, 0x77, 0x5d, 0xea, 0x04, 0xed, 0xbe, 0x02, 0x45, 0xf6, - 0x5b, 0x34, 0x19, 0x65, 0xde, 0x75, 0xa9, 0x23, 0xcb, 0x9c, 0xe1, 0xc9, 0x35, 0xe8, 0x5f, 0xb0, - 0x9b, 0xa6, 0x25, 0x9a, 0x7d, 0x76, 0x67, 0x7b, 0xf2, 0x4c, 0x8b, 0x01, 0x24, 0x4a, 0x4e, 0x41, - 0x3e, 0x03, 0x23, 0xd5, 0x36, 0xd3, 0x21, 0xdb, 0xd2, 0x3d, 0xdb, 0x11, 0xad, 0x45, 0xe9, 0x9a, - 0x12, 0x5c, 0x2a, 0x18, 0xa1, 0x27, 0x6f, 0x00, 0x94, 0xef, 0xd7, 0x34, 0xbb, 0x45, 0xcb, 0xda, - 0x92, 0x50, 0x06, 0x2c, 0xad, 0x6f, 0xba, 0x75, 0xc7, 0x6e, 0xd1, 0xba, 0xee, 0xc8, 0xd5, 0x4a, - 0xd4, 0x64, 0x16, 0xc6, 0xca, 0x38, 0x2a, 0x34, 0xfa, 0xc3, 0x5d, 0xea, 0x7a, 0xae, 0xd2, 0xff, - 0x4c, 0xe1, 0xea, 0xd0, 0xf4, 0x53, 0x3b, 0xdb, 0x93, 0x4f, 0xf0, 0xf1, 0x52, 0x77, 0x04, 0x4a, - 0x62, 0x11, 0x2b, 0x44, 0xa6, 0x61, 0xb4, 0xfc, 0x41, 0xd7, 0xa1, 0x55, 0x83, 0x5a, 0x9e, 0xe9, - 0x6d, 0x09, 0x0d, 0xb9, 0xbc, 0xb3, 0x3d, 0xa9, 0xe8, 0x0c, 0x51, 0x37, 0x05, 0x46, 0x62, 0x12, - 0x2d, 0x42, 0x96, 0x61, 0xe2, 0xd6, 0xcc, 0x4a, 0x8d, 0x3a, 0x0f, 0xcd, 0x06, 0x2d, 0x37, 0x1a, - 0x76, 0xd7, 0xf2, 0x94, 0x01, 0xe4, 0xf3, 0xec, 0xce, 0xf6, 0xe4, 0x53, 0xcd, 0x46, 0xa7, 0xee, - 0x72, 0x6c, 0x5d, 0xe7, 0x68, 0x89, 0x59, 0xb2, 0x2c, 0xf9, 0x3c, 0x8c, 0xae, 0x3a, 0x4c, 0x0b, - 0x8d, 0x0a, 0x65, 0x70, 0x65, 0x10, 0xf5, 0xff, 0xc2, 0x94, 0x98, 0xa9, 0x38, 0xd4, 0xef, 0x59, - 0xde, 0x58, 0x8f, 0x17, 0xa8, 0x1b, 0x88, 0x93, 0x1b, 0x1b, 0x61, 0x45, 0x28, 0x28, 0xec, 0xe3, - 0x4d, 0x87, 0x1a, 0x09, 0x6d, 0x1b, 0xc2, 0x36, 0x5f, 0xdb, 0xd9, 0x9e, 0xfc, 0xb8, 0x23, 0x68, - 0xea, 0x3d, 0xd5, 0x2e, 0x93, 0x15, 0x99, 0x85, 0x41, 0xa6, 0x4d, 0x77, 0x4c, 0xcb, 0x50, 0xe0, - 0x99, 0xdc, 0xd5, 0xb1, 0x1b, 0xe3, 0x7e, 0xeb, 0x7d, 0xf8, 0xf4, 0xc5, 0x9d, 0xed, 0xc9, 0xb3, - 0x4c, 0x07, 0xeb, 0x0f, 0x4c, 0x4b, 0x9e, 0x22, 0x82, 0xa2, 0x6c, 0x14, 0x4d, 0xdb, 0x1e, 0x0e, - 0xdd, 0xe1, 0x70, 0x14, 0xad, 0xd9, 0x5e, 0x7c, 0xd8, 0xfa, 0x64, 0x64, 0x06, 0x46, 0xa7, 0x6d, - 0xaf, 0x6a, 0xb9, 0x9e, 0x6e, 0x35, 0x68, 0xb5, 0xa2, 0x8c, 0x60, 0x39, 0x54, 0x0b, 0x56, 0xce, - 0x14, 0x98, 0x7a, 0x64, 0x52, 0x8a, 0x96, 0x51, 0xff, 0x79, 0x11, 0xc6, 0x58, 0x9f, 0x48, 0xc3, - 0xa7, 0xcc, 0x66, 0x02, 0x06, 0x61, 0xb5, 0xb8, 0x1d, 0xbd, 0x41, 0xc5, 0x48, 0xc2, 0xaf, 0xb0, - 0x7c, 0xa0, 0xc4, 0x33, 0x4e, 0x4f, 0xae, 0xc1, 0x20, 0x07, 0x55, 0x2b, 0x62, 0x70, 0x8d, 0xee, - 0x6c, 0x4f, 0x0e, 0xb9, 0x08, 0xab, 0x9b, 0x86, 0x16, 0xa0, 0x99, 0x76, 0xf3, 0xbf, 0xe7, 0x6d, - 0xd7, 0x63, 0xcc, 0xc5, 0xd8, 0xc2, 0xcf, 0x10, 0x05, 0x36, 0x04, 0x4a, 0xd6, 0xee, 0x68, 0x21, - 0xf2, 0x3a, 0x00, 0x87, 0x94, 0x0d, 0xc3, 0x11, 0x03, 0xec, 0x89, 0x9d, 0xed, 0xc9, 0xf3, 0x82, - 0x85, 0x6e, 0x18, 0xf2, 0xe8, 0x94, 0x88, 0x49, 0x1b, 0x46, 0xf8, 0xaf, 0x05, 0x7d, 0x8d, 0xb6, - 0xf8, 0xe8, 0x1a, 0xbe, 0x71, 0xd5, 0xef, 0xc4, 0xa8, 0x74, 0xa6, 0x64, 0xd2, 0x59, 0xcb, 0x73, - 0xb6, 0xa6, 0x27, 0xc5, 0x84, 0x7c, 0x51, 0x54, 0xd5, 0x42, 0x9c, 0x3c, 0x15, 0xc8, 0x65, 0xd8, - 0x3c, 0x3d, 0x67, 0x3b, 0x9b, 0xba, 0x63, 0x50, 0x63, 0x7a, 0x4b, 0x9e, 0xa7, 0xd7, 0x7d, 0x70, - 0x7d, 0x4d, 0x56, 0x3d, 0x99, 0x9c, 0x75, 0x3a, 0xe7, 0x56, 0xeb, 0xae, 0xa1, 0xca, 0x0d, 0x24, - 0xa4, 0xe5, 0x76, 0xd7, 0xe2, 0x6a, 0x16, 0x2d, 0xc3, 0xa6, 0x02, 0x0e, 0xb8, 0x47, 0x1d, 0x36, - 0x89, 0xe3, 0xa8, 0x13, 0x53, 0x81, 0x60, 0xf2, 0x90, 0x63, 0x92, 0x3c, 0x44, 0x91, 0x4b, 0xef, - 0xc0, 0x44, 0x42, 0x14, 0x64, 0x1c, 0x0a, 0x0f, 0xe8, 0x16, 0x57, 0x17, 0x8d, 0xfd, 0x49, 0xce, - 0x41, 0xff, 0x43, 0xbd, 0xd5, 0x15, 0x4b, 0xa8, 0xc6, 0x7f, 0xbc, 0x91, 0xff, 0x74, 0x8e, 0xad, - 0x38, 0x64, 0xc6, 0xb6, 0x2c, 0xda, 0xf0, 0xe4, 0x45, 0xe7, 0x55, 0x18, 0x5a, 0xb0, 0x1b, 0x7a, - 0x0b, 0xfb, 0x91, 0xeb, 0x9d, 0xb2, 0xb3, 0x3d, 0x79, 0x8e, 0x75, 0xe0, 0x54, 0x8b, 0x61, 0xa4, - 0x36, 0x85, 0xa4, 0x4c, 0x01, 0x34, 0xda, 0xb6, 0x3d, 0x8a, 0x05, 0xf3, 0xa1, 0x02, 0x60, 0x41, - 0x07, 0x51, 0xb2, 0x02, 0x84, 0xc4, 0xe4, 0x3a, 0x0c, 0xae, 0xb0, 0x75, 0xb6, 0x61, 0xb7, 0x84, - 0xf2, 0xe1, 0x52, 0x80, 0x6b, 0xaf, 0x3c, 0x56, 0x7d, 0x22, 0x75, 0x1e, 0xc6, 0x66, 0x5a, 0x26, - 0xb5, 0x3c, 0xb9, 0xd5, 0x6c, 0x24, 0x97, 0x9b, 0xd4, 0xf2, 0xe4, 0x56, 0xe3, 0x98, 0xd7, 0x19, - 0x54, 0x6e, 0x75, 0x40, 0xaa, 0xfe, 0x41, 0x01, 0x9e, 0xb8, 0xd3, 0x5d, 0xa3, 0x8e, 0x45, 0x3d, - 0xea, 0x8a, 0x05, 0x39, 0xe0, 0xba, 0x04, 0x13, 0x09, 0xa4, 0xe0, 0x8e, 0x0b, 0xe5, 0x83, 0x00, - 0x59, 0x17, 0x6b, 0xbc, 0x3c, 0xdb, 0x26, 0x8a, 0x92, 0x79, 0x38, 0x13, 0x02, 0x59, 0x23, 0x5c, - 0x25, 0x8f, 0x4b, 0xc9, 0xd3, 0x3b, 0xdb, 0x93, 0x97, 0x24, 0x6e, 0xac, 0xd9, 0xb2, 0x06, 0xc7, - 0x8b, 0x91, 0x3b, 0x30, 0x1e, 0x82, 0x6e, 0x39, 0x76, 0xb7, 0xe3, 0x2a, 0x05, 0x64, 0x35, 0xb9, - 0xb3, 0x3d, 0xf9, 0xa4, 0xc4, 0xaa, 0x89, 0x48, 0x79, 0x01, 0x8f, 0x17, 0x24, 0x3f, 0x96, 0x93, - 0xb9, 0x89, 0x51, 0x58, 0xc4, 0x51, 0xf8, 0x9a, 0x3f, 0x0a, 0x33, 0x85, 0x34, 0x15, 0x2f, 0x29, - 0x06, 0x65, 0xac, 0x19, 0x89, 0x41, 0x99, 0xa8, 0xf1, 0xd2, 0x0c, 0x9c, 0x4f, 0xe5, 0xb5, 0x2f, - 0xad, 0xfe, 0x67, 0x05, 0x99, 0xcb, 0x8a, 0x6d, 0x04, 0x9d, 0xb9, 0x2c, 0x77, 0xe6, 0x8a, 0x6d, - 0xe0, 0x54, 0x9f, 0x0b, 0xd7, 0x4e, 0xa9, 0xb1, 0x1d, 0xdb, 0x88, 0xcf, 0xfa, 0xc9, 0xb2, 0xe4, - 0x8b, 0x70, 0x21, 0x01, 0xe4, 0xd3, 0x35, 0xd7, 0xfe, 0x2b, 0x3b, 0xdb, 0x93, 0x6a, 0x0a, 0xd7, - 0xf8, 0xec, 0x9d, 0xc1, 0x85, 0xe8, 0x70, 0x51, 0x92, 0xba, 0x6d, 0x79, 0xba, 0x69, 0x09, 0xe3, - 0x92, 0x8f, 0x92, 0x4f, 0xec, 0x6c, 0x4f, 0x3e, 0x27, 0xeb, 0xa0, 0x4f, 0x13, 0x6f, 0x7c, 0x16, - 0x1f, 0x62, 0x80, 0x92, 0x82, 0xaa, 0xb6, 0xf5, 0xa6, 0x6f, 0x31, 0x5f, 0xdd, 0xd9, 0x9e, 0xfc, - 0x58, 0x6a, 0x1d, 0x26, 0xa3, 0x92, 0x57, 0xe8, 0x2c, 0x4e, 0x44, 0x03, 0x12, 0xe2, 0x96, 0x6c, - 0x83, 0xe2, 0x37, 0xf4, 0x23, 0x7f, 0x75, 0x67, 0x7b, 0xf2, 0x69, 0x89, 0xbf, 0x65, 0x1b, 0x34, - 0xde, 0xfc, 0x94, 0xd2, 0xea, 0x6f, 0x16, 0xe0, 0xe9, 0x5a, 0x79, 0x71, 0xa1, 0x6a, 0xf8, 0x26, - 0xcd, 0x8a, 0x63, 0x3f, 0x34, 0x0d, 0x69, 0xf4, 0xae, 0xc1, 0xc5, 0x18, 0x6a, 0x16, 0xad, 0xa8, + // 16942 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x5b, 0x74, 0x24, 0x49, + 0x76, 0x18, 0x86, 0x7a, 0xa0, 0x00, 0x5c, 0x3c, 0x1a, 0x1d, 0xfd, 0xca, 0xee, 0xe9, 0x69, 0xcc, + 0xe4, 0xec, 0xf6, 0x76, 0xcf, 0xce, 0xa0, 0x77, 0x7a, 0x7a, 0x66, 0x76, 0x5e, 0x3b, 0x5b, 0x40, + 0x01, 0x8d, 0xea, 0xc6, 0x6b, 0xb2, 0xd0, 0xdd, 0x3b, 0xbb, 0xdc, 0x2d, 0x26, 0x2a, 0x03, 0x85, + 0x9c, 0xae, 0xca, 0x2c, 0x66, 0x66, 0x35, 0x1a, 0xe3, 0x17, 0x97, 0xa6, 0x28, 0x52, 0x5c, 0xae, + 0xd6, 0x4b, 0x53, 0xa4, 0x1e, 0xb6, 0x96, 0x7a, 0xd8, 0x14, 0x45, 0x71, 0x4d, 0x89, 0x26, 0xb9, + 0x24, 0xd7, 0x92, 0x4c, 0x3f, 0x56, 0xe4, 0x31, 0x0f, 0x29, 0xdb, 0x3a, 0x3a, 0xb6, 0x8c, 0x95, + 0x69, 0xeb, 0x07, 0xc7, 0x3e, 0x87, 0xc7, 0xe6, 0xb1, 0xd6, 0xb2, 0xec, 0xe3, 0x13, 0x37, 0x22, + 0x33, 0x23, 0x5f, 0x85, 0xe7, 0x10, 0x83, 0x6d, 0xfc, 0x74, 0xa3, 0xee, 0xbd, 0x71, 0x23, 0xf2, + 0xc6, 0x8d, 0x88, 0x1b, 0x11, 0x37, 0xee, 0x85, 0xeb, 0x1e, 0x6d, 0xd1, 0x8e, 0xed, 0x78, 0x37, + 0x5a, 0xb4, 0xa9, 0x37, 0x36, 0x6f, 0x78, 0x9b, 0x1d, 0xea, 0xde, 0xa0, 0x8f, 0xa8, 0xe5, 0xf9, + 0xff, 0x4d, 0x76, 0x1c, 0xdb, 0xb3, 0x49, 0x89, 0xff, 0xba, 0x74, 0xb6, 0x69, 0x37, 0x6d, 0x04, + 0xdd, 0x60, 0x7f, 0x71, 0xec, 0xa5, 0xcb, 0x4d, 0xdb, 0x6e, 0xb6, 0xe8, 0x0d, 0xfc, 0xb5, 0xda, + 0x5d, 0xbb, 0xe1, 0x7a, 0x4e, 0xb7, 0xe1, 0x09, 0xec, 0x44, 0x1c, 0xeb, 0x99, 0x6d, 0xea, 0x7a, + 0x7a, 0xbb, 0x23, 0x08, 0xae, 0xc4, 0x09, 0x36, 0x1c, 0xbd, 0xd3, 0xa1, 0x8e, 0xa8, 0xfc, 0xd2, + 0x27, 0x82, 0x76, 0xea, 0x8d, 0x06, 0x75, 0xdd, 0x96, 0xe9, 0x7a, 0x37, 0x1e, 0xbd, 0x24, 0xfd, + 0x12, 0x84, 0xcf, 0xa6, 0x7f, 0x10, 0xfe, 0x2b, 0x48, 0x5e, 0x4c, 0x27, 0xf1, 0x6b, 0x8c, 0x55, + 0xad, 0x7e, 0x3d, 0x0f, 0x83, 0x0b, 0xd4, 0xd3, 0x0d, 0xdd, 0xd3, 0xc9, 0x65, 0xe8, 0xaf, 0x5a, + 0x06, 0x7d, 0xac, 0xe4, 0x9e, 0xc9, 0x5d, 0x2b, 0x4c, 0x95, 0xb6, 0xb7, 0x26, 0xf2, 0xd4, 0xd4, + 0x38, 0x90, 0x3c, 0x0d, 0xc5, 0x95, 0xcd, 0x0e, 0x55, 0xf2, 0xcf, 0xe4, 0xae, 0x0d, 0x4d, 0x0d, + 0x6d, 0x6f, 0x4d, 0xf4, 0xa3, 0xd0, 0x34, 0x04, 0x93, 0x67, 0x21, 0x5f, 0xad, 0x28, 0x05, 0x44, + 0x9e, 0xde, 0xde, 0x9a, 0x18, 0xed, 0x9a, 0xc6, 0x0b, 0x76, 0xdb, 0xf4, 0x68, 0xbb, 0xe3, 0x6d, + 0x6a, 0xf9, 0x6a, 0x85, 0x5c, 0x85, 0xe2, 0xb4, 0x6d, 0x50, 0xa5, 0x88, 0x44, 0x64, 0x7b, 0x6b, + 0x62, 0xac, 0x61, 0x1b, 0x54, 0xa2, 0x42, 0x3c, 0xf9, 0x2c, 0x14, 0x57, 0xcc, 0x36, 0x55, 0xfa, + 0x9f, 0xc9, 0x5d, 0x1b, 0xbe, 0x79, 0x69, 0x92, 0x8b, 0x6f, 0xd2, 0x17, 0xdf, 0xe4, 0x8a, 0x2f, + 0xdf, 0xa9, 0xf1, 0xef, 0x6c, 0x4d, 0xf4, 0x6d, 0x6f, 0x4d, 0x14, 0x99, 0xc8, 0xbf, 0xf6, 0xdd, + 0x89, 0x9c, 0x86, 0x25, 0xc9, 0x5b, 0x30, 0x3c, 0xdd, 0xea, 0xba, 0x1e, 0x75, 0x16, 0xf5, 0x36, + 0x55, 0x4a, 0x58, 0xe1, 0xa5, 0xed, 0xad, 0x89, 0xf3, 0x0d, 0x0e, 0xae, 0x5b, 0x7a, 0x5b, 0xae, + 0x58, 0x26, 0x57, 0x7f, 0x23, 0x07, 0xa7, 0x6a, 0xd4, 0x75, 0x4d, 0xdb, 0x0a, 0x64, 0xf3, 0x71, + 0x18, 0x12, 0xa0, 0x6a, 0x05, 0xe5, 0x33, 0x34, 0x35, 0xb0, 0xbd, 0x35, 0x51, 0x70, 0x4d, 0x43, + 0x0b, 0x31, 0xe4, 0x53, 0x30, 0xf0, 0xc0, 0xf4, 0xd6, 0x17, 0x66, 0xcb, 0x42, 0x4e, 0xe7, 0xb7, + 0xb7, 0x26, 0xc8, 0x86, 0xe9, 0xad, 0xd7, 0xdb, 0x6b, 0xba, 0x54, 0xa1, 0x4f, 0x46, 0xe6, 0x61, + 0x7c, 0xd9, 0x31, 0x1f, 0xe9, 0x1e, 0xbd, 0x4b, 0x37, 0x97, 0xed, 0x96, 0xd9, 0xd8, 0x14, 0x52, + 0x7c, 0x66, 0x7b, 0x6b, 0xe2, 0x72, 0x87, 0xe3, 0xea, 0x0f, 0xe9, 0x66, 0xbd, 0x83, 0x58, 0x89, + 0x49, 0xa2, 0xa4, 0xfa, 0x9b, 0x25, 0x18, 0xb9, 0xe7, 0x52, 0x27, 0x68, 0xf7, 0x55, 0x28, 0xb2, + 0xdf, 0xa2, 0xc9, 0x28, 0xf3, 0xae, 0x4b, 0x1d, 0x59, 0xe6, 0x0c, 0x4f, 0xae, 0x43, 0xff, 0xbc, + 0xdd, 0x34, 0x2d, 0xd1, 0xec, 0x33, 0xdb, 0x5b, 0x13, 0xa7, 0x5a, 0x0c, 0x20, 0x51, 0x72, 0x0a, + 0xf2, 0x19, 0x18, 0xa9, 0xb6, 0x99, 0x0e, 0xd9, 0x96, 0xee, 0xd9, 0x8e, 0x68, 0x2d, 0x4a, 0xd7, + 0x94, 0xe0, 0x52, 0xc1, 0x08, 0x3d, 0x79, 0x03, 0xa0, 0xfc, 0xa0, 0xa6, 0xd9, 0x2d, 0x5a, 0xd6, + 0x16, 0x85, 0x32, 0x60, 0x69, 0x7d, 0xc3, 0xad, 0x3b, 0x76, 0x8b, 0xd6, 0x75, 0x47, 0xae, 0x56, + 0xa2, 0x26, 0x33, 0x30, 0x56, 0xc6, 0x51, 0xa1, 0xd1, 0x1f, 0xea, 0x52, 0xd7, 0x73, 0x95, 0xfe, + 0x67, 0x0a, 0xd7, 0x86, 0xa6, 0x9e, 0xde, 0xde, 0x9a, 0xb8, 0xc8, 0xc7, 0x4b, 0xdd, 0x11, 0x28, + 0x89, 0x45, 0xac, 0x10, 0x99, 0x82, 0xd1, 0xf2, 0x07, 0x5d, 0x87, 0x56, 0x0d, 0x6a, 0x79, 0xa6, + 0xb7, 0x29, 0x34, 0xe4, 0xf2, 0xf6, 0xd6, 0x84, 0xa2, 0x33, 0x44, 0xdd, 0x14, 0x18, 0x89, 0x49, + 0xb4, 0x08, 0x59, 0x82, 0xd3, 0xb7, 0xa7, 0x97, 0x6b, 0xd4, 0x79, 0x64, 0x36, 0x68, 0xb9, 0xd1, + 0xb0, 0xbb, 0x96, 0xa7, 0x0c, 0x20, 0x9f, 0x67, 0xb7, 0xb7, 0x26, 0x9e, 0x6e, 0x36, 0x3a, 0x75, + 0x97, 0x63, 0xeb, 0x3a, 0x47, 0x4b, 0xcc, 0x92, 0x65, 0xc9, 0xe7, 0x61, 0x74, 0xc5, 0x61, 0x5a, + 0x68, 0x54, 0x28, 0x83, 0x2b, 0x83, 0xa8, 0xff, 0xe7, 0x27, 0xc5, 0x4c, 0xc5, 0xa1, 0x7e, 0xcf, + 0xf2, 0xc6, 0x7a, 0xbc, 0x40, 0xdd, 0x40, 0x9c, 0xdc, 0xd8, 0x08, 0x2b, 0x42, 0x41, 0x61, 0x1f, + 0x6f, 0x3a, 0xd4, 0x48, 0x68, 0xdb, 0x10, 0xb6, 0xf9, 0xfa, 0xf6, 0xd6, 0xc4, 0xc7, 0x1d, 0x41, + 0x53, 0xef, 0xa9, 0x76, 0x99, 0xac, 0xc8, 0x0c, 0x0c, 0x32, 0x6d, 0xba, 0x6b, 0x5a, 0x86, 0x02, + 0xcf, 0xe4, 0xae, 0x8d, 0xdd, 0x1c, 0xf7, 0x5b, 0xef, 0xc3, 0xa7, 0x2e, 0x6c, 0x6f, 0x4d, 0x9c, + 0x61, 0x3a, 0x58, 0x7f, 0x68, 0x5a, 0xf2, 0x14, 0x11, 0x14, 0x65, 0xa3, 0x68, 0xca, 0xf6, 0x70, + 0xe8, 0x0e, 0x87, 0xa3, 0x68, 0xd5, 0xf6, 0xe2, 0xc3, 0xd6, 0x27, 0x23, 0xd3, 0x30, 0x3a, 0x65, + 0x7b, 0x55, 0xcb, 0xf5, 0x74, 0xab, 0x41, 0xab, 0x15, 0x65, 0x04, 0xcb, 0xa1, 0x5a, 0xb0, 0x72, + 0xa6, 0xc0, 0xd4, 0x23, 0x93, 0x52, 0xb4, 0x8c, 0xfa, 0x2f, 0x8b, 0x30, 0xc6, 0xfa, 0x44, 0x1a, + 0x3e, 0x65, 0x36, 0x13, 0x30, 0x08, 0xab, 0xc5, 0xed, 0xe8, 0x0d, 0x2a, 0x46, 0x12, 0x7e, 0x85, + 0xe5, 0x03, 0x25, 0x9e, 0x71, 0x7a, 0x72, 0x1d, 0x06, 0x39, 0xa8, 0x5a, 0x11, 0x83, 0x6b, 0x74, + 0x7b, 0x6b, 0x62, 0xc8, 0x45, 0x58, 0xdd, 0x34, 0xb4, 0x00, 0xcd, 0xb4, 0x9b, 0xff, 0x3d, 0x67, + 0xbb, 0x1e, 0x63, 0x2e, 0xc6, 0x16, 0x7e, 0x86, 0x28, 0xb0, 0x2e, 0x50, 0xb2, 0x76, 0x47, 0x0b, + 0x91, 0xd7, 0x01, 0x38, 0xa4, 0x6c, 0x18, 0x8e, 0x18, 0x60, 0x17, 0xb7, 0xb7, 0x26, 0xce, 0x09, + 0x16, 0xba, 0x61, 0xc8, 0xa3, 0x53, 0x22, 0x26, 0x6d, 0x18, 0xe1, 0xbf, 0xe6, 0xf5, 0x55, 0xda, + 0xe2, 0xa3, 0x6b, 0xf8, 0xe6, 0x35, 0xbf, 0x13, 0xa3, 0xd2, 0x99, 0x94, 0x49, 0x67, 0x2c, 0xcf, + 0xd9, 0x9c, 0x9a, 0x10, 0x13, 0xf2, 0x05, 0x51, 0x55, 0x0b, 0x71, 0xf2, 0x54, 0x20, 0x97, 0x61, + 0xf3, 0xf4, 0xac, 0xed, 0x6c, 0xe8, 0x8e, 0x41, 0x8d, 0xa9, 0x4d, 0x79, 0x9e, 0x5e, 0xf3, 0xc1, + 0xf5, 0x55, 0x59, 0xf5, 0x64, 0x72, 0xd6, 0xe9, 0x9c, 0x5b, 0xad, 0xbb, 0x8a, 0x2a, 0x37, 0x90, + 0x90, 0x96, 0xdb, 0x5d, 0x8d, 0xab, 0x59, 0xb4, 0x0c, 0x9b, 0x0a, 0x38, 0xe0, 0x3e, 0x75, 0xd8, + 0x24, 0x8e, 0xa3, 0x4e, 0x4c, 0x05, 0x82, 0xc9, 0x23, 0x8e, 0x49, 0xf2, 0x10, 0x45, 0x2e, 0xbd, + 0x03, 0xa7, 0x13, 0xa2, 0x20, 0xe3, 0x50, 0x78, 0x48, 0x37, 0xb9, 0xba, 0x68, 0xec, 0x4f, 0x72, + 0x16, 0xfa, 0x1f, 0xe9, 0xad, 0xae, 0x58, 0x42, 0x35, 0xfe, 0xe3, 0x8d, 0xfc, 0xa7, 0x73, 0x6c, + 0xc5, 0x21, 0xd3, 0xb6, 0x65, 0xd1, 0x86, 0x27, 0x2f, 0x3a, 0xaf, 0xc2, 0xd0, 0xbc, 0xdd, 0xd0, + 0x5b, 0xd8, 0x8f, 0x5c, 0xef, 0x94, 0xed, 0xad, 0x89, 0xb3, 0xac, 0x03, 0x27, 0x5b, 0x0c, 0x23, + 0xb5, 0x29, 0x24, 0x65, 0x0a, 0xa0, 0xd1, 0xb6, 0xed, 0x51, 0x2c, 0x98, 0x0f, 0x15, 0x00, 0x0b, + 0x3a, 0x88, 0x92, 0x15, 0x20, 0x24, 0x26, 0x37, 0x60, 0x70, 0x99, 0xad, 0xb3, 0x0d, 0xbb, 0x25, + 0x94, 0x0f, 0x97, 0x02, 0x5c, 0x7b, 0xe5, 0xb1, 0xea, 0x13, 0xa9, 0x73, 0x30, 0x36, 0xdd, 0x32, + 0xa9, 0xe5, 0xc9, 0xad, 0x66, 0x23, 0xb9, 0xdc, 0xa4, 0x96, 0x27, 0xb7, 0x1a, 0xc7, 0xbc, 0xce, + 0xa0, 0x72, 0xab, 0x03, 0x52, 0xf5, 0xf7, 0x0b, 0x70, 0xf1, 0x6e, 0x77, 0x95, 0x3a, 0x16, 0xf5, + 0xa8, 0x2b, 0x16, 0xe4, 0x80, 0xeb, 0x22, 0x9c, 0x4e, 0x20, 0x05, 0x77, 0x5c, 0x28, 0x1f, 0x06, + 0xc8, 0xba, 0x58, 0xe3, 0xe5, 0xd9, 0x36, 0x51, 0x94, 0xcc, 0xc1, 0xa9, 0x10, 0xc8, 0x1a, 0xe1, + 0x2a, 0x79, 0x5c, 0x4a, 0xae, 0x6c, 0x6f, 0x4d, 0x5c, 0x92, 0xb8, 0xb1, 0x66, 0xcb, 0x1a, 0x1c, + 0x2f, 0x46, 0xee, 0xc2, 0x78, 0x08, 0xba, 0xed, 0xd8, 0xdd, 0x8e, 0xab, 0x14, 0x90, 0xd5, 0xc4, + 0xf6, 0xd6, 0xc4, 0x53, 0x12, 0xab, 0x26, 0x22, 0xe5, 0x05, 0x3c, 0x5e, 0x90, 0xfc, 0x68, 0x4e, + 0xe6, 0x26, 0x46, 0x61, 0x11, 0x47, 0xe1, 0x6b, 0xfe, 0x28, 0xcc, 0x14, 0xd2, 0x64, 0xbc, 0xa4, + 0x18, 0x94, 0xb1, 0x66, 0x24, 0x06, 0x65, 0xa2, 0xc6, 0x4b, 0xd3, 0x70, 0x2e, 0x95, 0xd7, 0x9e, + 0xb4, 0xfa, 0x5f, 0x14, 0x64, 0x2e, 0xcb, 0xb6, 0x11, 0x74, 0xe6, 0x92, 0xdc, 0x99, 0xcb, 0xb6, + 0x81, 0x53, 0x7d, 0x2e, 0x5c, 0x3b, 0xa5, 0xc6, 0x76, 0x6c, 0x23, 0x3e, 0xeb, 0x27, 0xcb, 0x92, + 0x2f, 0xc1, 0xf9, 0x04, 0x90, 0x4f, 0xd7, 0x5c, 0xfb, 0xaf, 0x6e, 0x6f, 0x4d, 0xa8, 0x29, 0x5c, + 0xe3, 0xb3, 0x77, 0x06, 0x17, 0xa2, 0xc3, 0x05, 0x49, 0xea, 0xb6, 0xe5, 0xe9, 0xa6, 0x25, 0x8c, + 0x4b, 0x3e, 0x4a, 0x3e, 0xb1, 0xbd, 0x35, 0xf1, 0x9c, 0xac, 0x83, 0x3e, 0x4d, 0xbc, 0xf1, 0x59, + 0x7c, 0x88, 0x01, 0x4a, 0x0a, 0xaa, 0xda, 0xd6, 0x9b, 0xbe, 0xc5, 0x7c, 0x6d, 0x7b, 0x6b, 0xe2, + 0x63, 0xa9, 0x75, 0x98, 0x8c, 0x4a, 0x5e, 0xa1, 0xb3, 0x38, 0x11, 0x0d, 0x48, 0x88, 0x5b, 0xb4, + 0x0d, 0x8a, 0xdf, 0xd0, 0x8f, 0xfc, 0xd5, 0xed, 0xad, 0x89, 0x2b, 0x12, 0x7f, 0xcb, 0x36, 0x68, + 0xbc, 0xf9, 0x29, 0xa5, 0xd5, 0xdf, 0x28, 0xc0, 0x95, 0x5a, 0x79, 0x61, 0xbe, 0x6a, 0xf8, 0x26, + 0xcd, 0xb2, 0x63, 0x3f, 0x32, 0x0d, 0x69, 0xf4, 0xae, 0xc2, 0x85, 0x18, 0x6a, 0x06, 0xad, 0xa8, 0xc0, 0x98, 0xc6, 0x6f, 0xf3, 0xcd, 0xa5, 0x8e, 0xa0, 0xa9, 0x73, 0x53, 0x2b, 0xba, 0x68, 0x67, - 0x31, 0x62, 0x7d, 0x14, 0x43, 0xd5, 0x36, 0x6c, 0xc7, 0x6b, 0x74, 0x3d, 0xa1, 0x04, 0xd8, 0x47, - 0x89, 0x3a, 0x5c, 0x41, 0xd4, 0xa3, 0x0a, 0x9f, 0x0f, 0xf9, 0xc9, 0x1c, 0x8c, 0x97, 0x3d, 0xcf, - 0x31, 0xd7, 0xba, 0x1e, 0x5d, 0xd4, 0x3b, 0x1d, 0xd3, 0x6a, 0xe2, 0x58, 0x1f, 0xbe, 0xf1, 0x56, - 0xb0, 0x46, 0xf6, 0x94, 0xc4, 0x54, 0xbc, 0xb8, 0x34, 0x44, 0x75, 0x1f, 0x55, 0x6f, 0x73, 0x9c, - 0x3c, 0x44, 0xe3, 0xe5, 0xd8, 0x10, 0x4d, 0xe5, 0xb5, 0xaf, 0x21, 0xfa, 0xb5, 0x02, 0x5c, 0x5e, - 0x7e, 0xe0, 0xe9, 0x1a, 0x75, 0xed, 0xae, 0xd3, 0xa0, 0xee, 0xdd, 0x8e, 0xa1, 0x7b, 0x34, 0x1c, - 0xa9, 0x93, 0xd0, 0x5f, 0x36, 0x0c, 0x6a, 0x20, 0xbb, 0x7e, 0xbe, 0xed, 0xd3, 0x19, 0x40, 0xe3, - 0x70, 0xf2, 0x71, 0x18, 0x10, 0x65, 0x90, 0x7b, 0xff, 0xf4, 0xf0, 0xce, 0xf6, 0xe4, 0x40, 0x97, + 0x31, 0x62, 0x7d, 0x14, 0x43, 0xd5, 0xd6, 0x6d, 0xc7, 0x6b, 0x74, 0x3d, 0xa1, 0x04, 0xd8, 0x47, + 0x89, 0x3a, 0x5c, 0x41, 0xd4, 0xa3, 0x0a, 0x9f, 0x0f, 0xf9, 0x89, 0x1c, 0x8c, 0x97, 0x3d, 0xcf, + 0x31, 0x57, 0xbb, 0x1e, 0x5d, 0xd0, 0x3b, 0x1d, 0xd3, 0x6a, 0xe2, 0x58, 0x1f, 0xbe, 0xf9, 0x56, + 0xb0, 0x46, 0xf6, 0x94, 0xc4, 0x64, 0xbc, 0xb8, 0x34, 0x44, 0x75, 0x1f, 0x55, 0x6f, 0x73, 0x9c, + 0x3c, 0x44, 0xe3, 0xe5, 0xd8, 0x10, 0x4d, 0xe5, 0xb5, 0xa7, 0x21, 0xfa, 0xf5, 0x02, 0x5c, 0x5e, + 0x7a, 0xe8, 0xe9, 0x1a, 0x75, 0xed, 0xae, 0xd3, 0xa0, 0xee, 0xbd, 0x8e, 0xa1, 0x7b, 0x34, 0x1c, + 0xa9, 0x13, 0xd0, 0x5f, 0x36, 0x0c, 0x6a, 0x20, 0xbb, 0x7e, 0xbe, 0xed, 0xd3, 0x19, 0x40, 0xe3, + 0x70, 0xf2, 0x71, 0x18, 0x10, 0x65, 0x90, 0x7b, 0xff, 0xd4, 0xf0, 0xf6, 0xd6, 0xc4, 0x40, 0x97, 0x83, 0x34, 0x1f, 0xc7, 0xc8, 0x2a, 0xb4, 0x45, 0x19, 0x59, 0x21, 0x24, 0x33, 0x38, 0x48, 0xf3, - 0x71, 0xe4, 0x5d, 0x18, 0x43, 0xb6, 0x41, 0x7b, 0xc4, 0xdc, 0x77, 0xce, 0x97, 0xae, 0xdc, 0x58, - 0xbe, 0x34, 0x61, 0x6b, 0xea, 0x8e, 0x5f, 0x40, 0x8b, 0x31, 0x20, 0xf7, 0x61, 0x5c, 0x34, 0x22, - 0x64, 0xda, 0xdf, 0x83, 0xe9, 0xf9, 0x9d, 0xed, 0xc9, 0x09, 0xd1, 0x7e, 0x89, 0x6d, 0x82, 0x09, - 0x63, 0x2c, 0x9a, 0x1d, 0x32, 0x2e, 0xed, 0xc6, 0x58, 0x7c, 0xb1, 0xcc, 0x38, 0xce, 0x44, 0x7d, - 0x0f, 0x46, 0xe4, 0x82, 0xe4, 0x02, 0x6e, 0xad, 0xf9, 0x38, 0xc1, 0x4d, 0xb9, 0x69, 0xe0, 0x7e, - 0xfa, 0x25, 0x18, 0xae, 0x50, 0xb7, 0xe1, 0x98, 0x1d, 0x66, 0x35, 0x08, 0x25, 0x3f, 0xb3, 0xb3, - 0x3d, 0x39, 0x6c, 0x84, 0x60, 0x4d, 0xa6, 0x51, 0xff, 0xef, 0x1c, 0x5c, 0x60, 0xbc, 0xcb, 0xae, - 0x6b, 0x36, 0xad, 0xb6, 0xbc, 0x6c, 0xbf, 0x00, 0xa5, 0x1a, 0xd6, 0x27, 0x6a, 0x3a, 0xb7, 0xb3, - 0x3d, 0x39, 0xce, 0x5b, 0x20, 0xe9, 0xa1, 0xa0, 0x09, 0xf6, 0x95, 0xf9, 0x5d, 0xf6, 0x95, 0xcc, - 0xa4, 0xf5, 0x74, 0xc7, 0x33, 0xad, 0x66, 0xcd, 0xd3, 0xbd, 0xae, 0x1b, 0x31, 0x69, 0x05, 0xa6, - 0xee, 0x22, 0x2a, 0x62, 0xd2, 0x46, 0x0a, 0x91, 0x77, 0x60, 0x64, 0xd6, 0x32, 0x42, 0x26, 0x7c, - 0x42, 0x7c, 0x92, 0x59, 0x9a, 0x14, 0xe1, 0x49, 0x16, 0x91, 0x02, 0xea, 0xdf, 0xca, 0x81, 0xc2, - 0x37, 0x81, 0x0b, 0xa6, 0xeb, 0x2d, 0xd2, 0xf6, 0x9a, 0x34, 0x3b, 0xcd, 0xf9, 0xbb, 0x4a, 0x86, - 0x93, 0xd6, 0x22, 0x34, 0x05, 0xc4, 0xae, 0xb2, 0x65, 0xba, 0x89, 0xed, 0x47, 0xac, 0x14, 0xa9, - 0xc2, 0x00, 0xe7, 0xcc, 0x6d, 0x89, 0xe1, 0x1b, 0x8a, 0xaf, 0x08, 0xf1, 0xaa, 0xb9, 0x32, 0xb4, - 0x39, 0xb1, 0xbc, 0xa1, 0x11, 0xe5, 0xd5, 0xaf, 0x17, 0x60, 0x3c, 0x5e, 0x88, 0xdc, 0x87, 0xc1, - 0xdb, 0xb6, 0x69, 0x51, 0x63, 0xd9, 0xc2, 0x16, 0xf6, 0x3e, 0x1c, 0xf1, 0x6d, 0xf1, 0xb3, 0xef, - 0x63, 0x99, 0xba, 0x6c, 0xc1, 0xe2, 0x59, 0x49, 0xc0, 0x8c, 0x7c, 0x1e, 0x86, 0x98, 0x0d, 0xf8, - 0x10, 0x39, 0xe7, 0x77, 0xe5, 0xfc, 0x8c, 0xe0, 0x7c, 0xce, 0xe1, 0x85, 0x92, 0xac, 0x43, 0x76, - 0x4c, 0xaf, 0x34, 0xaa, 0xbb, 0xb6, 0x25, 0x7a, 0x1e, 0xf5, 0xca, 0x41, 0x88, 0xac, 0x57, 0x9c, - 0x86, 0x99, 0xae, 0xfc, 0x63, 0xb1, 0x1b, 0xa4, 0xbd, 0x0b, 0x97, 0x55, 0xbc, 0x07, 0x24, 0x62, - 0x62, 0xc1, 0x19, 0x21, 0xd0, 0x0d, 0xb3, 0x83, 0x56, 0x3f, 0xae, 0x6b, 0x63, 0x37, 0xae, 0x4c, - 0xf9, 0x87, 0x62, 0x53, 0xd2, 0x91, 0xda, 0xc3, 0x97, 0xa6, 0x16, 0x03, 0x72, 0xdc, 0x99, 0xa2, - 0x4e, 0xc6, 0x58, 0xc8, 0xbd, 0xdd, 0x8e, 0x90, 0xab, 0x3f, 0x9e, 0x87, 0x17, 0xc3, 0x2e, 0xd2, - 0xe8, 0x43, 0x93, 0x6e, 0x86, 0x1c, 0xc5, 0x1e, 0x99, 0x0d, 0x31, 0x77, 0x66, 0x43, 0xb7, 0x9a, - 0xd4, 0x20, 0xd7, 0xa0, 0x5f, 0xb3, 0x5b, 0xd4, 0x55, 0x72, 0x68, 0x1e, 0xe2, 0xf4, 0xe5, 0x30, - 0x80, 0x7c, 0xc8, 0x82, 0x14, 0xc4, 0x86, 0xd2, 0xaa, 0xa3, 0x9b, 0x9e, 0xaf, 0x49, 0xe5, 0xa4, - 0x26, 0xed, 0xa1, 0xc6, 0x29, 0xce, 0x83, 0xaf, 0x31, 0x28, 0x78, 0x0f, 0x01, 0xb2, 0xe0, 0x39, - 0xc9, 0xa5, 0xd7, 0x61, 0x58, 0x22, 0xde, 0xd7, 0x22, 0xf2, 0xcd, 0xa2, 0x3c, 0xb6, 0xfc, 0x66, - 0x89, 0xb1, 0x75, 0x9d, 0x8d, 0x09, 0xd7, 0x65, 0x56, 0x0c, 0x1f, 0x54, 0x42, 0xf3, 0x11, 0x14, - 0xd5, 0x7c, 0x04, 0x91, 0x97, 0x61, 0x90, 0xb3, 0x08, 0xf6, 0xcb, 0xb8, 0xd7, 0x76, 0x10, 0x16, - 0x35, 0x05, 0x02, 0x42, 0xf2, 0x4b, 0x39, 0x78, 0xaa, 0xa7, 0x24, 0x50, 0xf9, 0x86, 0x6f, 0xbc, - 0x72, 0x20, 0x31, 0x4e, 0xbf, 0xb8, 0xb3, 0x3d, 0x79, 0x4d, 0xd2, 0x0c, 0x47, 0xa2, 0xa9, 0x37, - 0x38, 0x91, 0xd4, 0xae, 0xde, 0x4d, 0x61, 0xc6, 0x2a, 0xaf, 0x74, 0x0e, 0x8f, 0xaa, 0xac, 0xc6, - 0x96, 0xdf, 0xc8, 0x62, 0x68, 0xac, 0x8a, 0xef, 0x5d, 0xf7, 0x49, 0x52, 0xaa, 0xc9, 0xe0, 0x42, - 0x1a, 0x70, 0x91, 0x63, 0x2a, 0xfa, 0xd6, 0xf2, 0xfa, 0xa2, 0x6d, 0x79, 0x1b, 0x7e, 0x05, 0xfd, - 0xf2, 0x59, 0x0f, 0x56, 0x60, 0xe8, 0x5b, 0x75, 0x7b, 0xbd, 0xde, 0x66, 0x54, 0x29, 0x75, 0x64, - 0x71, 0x62, 0x13, 0xbb, 0x18, 0xe3, 0xfe, 0x94, 0x57, 0x0a, 0x4f, 0xe2, 0xfc, 0x79, 0x21, 0x39, - 0xc1, 0xc5, 0x0a, 0xa9, 0x55, 0x18, 0x59, 0xb0, 0x1b, 0x0f, 0x02, 0x75, 0x79, 0x1d, 0x4a, 0xab, - 0xba, 0xd3, 0xa4, 0x1e, 0xca, 0x62, 0xf8, 0xc6, 0xc4, 0x14, 0x3f, 0xdd, 0x66, 0x44, 0x1c, 0x31, - 0x3d, 0x26, 0x66, 0x9f, 0x92, 0x87, 0xbf, 0x35, 0x51, 0x40, 0xfd, 0x4e, 0x3f, 0x8c, 0x88, 0x93, - 0x58, 0x5c, 0x3d, 0xc8, 0x1b, 0xe1, 0xd9, 0xb6, 0x98, 0x2e, 0x83, 0xd3, 0xa8, 0xe0, 0x14, 0x6d, - 0x84, 0x31, 0xfb, 0xc3, 0xed, 0xc9, 0xdc, 0xce, 0xf6, 0x64, 0x9f, 0x36, 0x28, 0x6d, 0x62, 0xc3, - 0xf5, 0x4d, 0x5a, 0xd0, 0xe5, 0xb3, 0xd5, 0x58, 0x59, 0xbe, 0xde, 0xbd, 0x03, 0x03, 0xa2, 0x0d, - 0x42, 0xe3, 0x2e, 0x86, 0x67, 0x27, 0x91, 0x13, 0xe5, 0x58, 0x69, 0xbf, 0x14, 0x79, 0x0b, 0x4a, - 0xfc, 0x2c, 0x41, 0x08, 0xe0, 0x42, 0xfa, 0xd9, 0x4b, 0xac, 0xb8, 0x28, 0x43, 0xe6, 0x01, 0xc2, - 0x73, 0x84, 0xe0, 0x00, 0x5d, 0x70, 0x48, 0x9e, 0x30, 0xc4, 0xb8, 0x48, 0x65, 0xc9, 0xab, 0x30, - 0xb2, 0x4a, 0x9d, 0xb6, 0x69, 0xe9, 0xad, 0x9a, 0xf9, 0x81, 0x7f, 0x86, 0x8e, 0x0b, 0xbd, 0x6b, - 0x7e, 0x20, 0x8f, 0xdc, 0x08, 0x1d, 0xf9, 0x42, 0xda, 0x3e, 0x7d, 0x00, 0x1b, 0xf2, 0xec, 0xae, - 0x1b, 0xd8, 0x58, 0x7b, 0x52, 0xb6, 0xed, 0xef, 0xc2, 0x68, 0x64, 0x8b, 0x26, 0x0e, 0x49, 0x9f, - 0x4a, 0xb2, 0x96, 0xf6, 0x9b, 0x31, 0xb6, 0x51, 0x0e, 0x4c, 0x93, 0xab, 0x96, 0xe9, 0x99, 0x7a, - 0x6b, 0xc6, 0x6e, 0xb7, 0x75, 0xcb, 0x50, 0x86, 0x42, 0x4d, 0x36, 0x39, 0xa6, 0xde, 0xe0, 0x28, - 0x59, 0x93, 0xa3, 0x85, 0xc8, 0x1d, 0x18, 0x17, 0x7d, 0xa8, 0xd1, 0x86, 0xed, 0x30, 0xdb, 0x03, - 0xcf, 0x40, 0xc5, 0x31, 0x80, 0xcb, 0x71, 0x75, 0xc7, 0x47, 0xca, 0xc6, 0x7d, 0xbc, 0xe0, 0xed, - 0xe2, 0xe0, 0xf0, 0xf8, 0x48, 0xfc, 0xd8, 0x5a, 0xfd, 0x1b, 0x05, 0x18, 0x16, 0xa4, 0x6c, 0xe9, - 0x3e, 0x55, 0xf0, 0xc3, 0x28, 0x78, 0xaa, 0xa2, 0x96, 0x8e, 0x4a, 0x51, 0xd5, 0x2f, 0xe7, 0x83, - 0xd9, 0x68, 0xc5, 0x31, 0xad, 0xc3, 0xcd, 0x46, 0x57, 0x00, 0x66, 0x36, 0xba, 0xd6, 0x03, 0x7e, - 0x3d, 0x97, 0x0f, 0xaf, 0xe7, 0x1a, 0xa6, 0x26, 0x61, 0xc8, 0x53, 0x50, 0xac, 0x30, 0xfe, 0xac, - 0x67, 0x46, 0xa6, 0x87, 0xbe, 0xcd, 0x39, 0xe5, 0x5e, 0xd4, 0x10, 0xcc, 0x36, 0x73, 0xd3, 0x5b, - 0x1e, 0xe5, 0xe6, 0x73, 0x81, 0x6f, 0xe6, 0xd6, 0x18, 0x40, 0xe3, 0x70, 0x72, 0x13, 0x26, 0x2a, - 0xb4, 0xa5, 0x6f, 0x2d, 0x9a, 0xad, 0x96, 0xe9, 0xd2, 0x86, 0x6d, 0x19, 0x2e, 0x0a, 0x59, 0x54, - 0xd7, 0x76, 0xb5, 0x24, 0x01, 0x51, 0xa1, 0xb4, 0xbc, 0xbe, 0xee, 0x52, 0x0f, 0xc5, 0x57, 0x98, - 0x06, 0x36, 0x39, 0xdb, 0x08, 0xd1, 0x04, 0x46, 0xfd, 0x46, 0x8e, 0xed, 0x96, 0xdc, 0x07, 0x9e, - 0xdd, 0x09, 0xb4, 0xfc, 0x50, 0x22, 0xb9, 0x16, 0xda, 0x15, 0x79, 0xfc, 0xda, 0x33, 0xe2, 0x6b, - 0x07, 0x84, 0x6d, 0x11, 0x5a, 0x14, 0xa9, 0x5f, 0x55, 0xd8, 0xe5, 0xab, 0xd4, 0x3f, 0xc9, 0xc3, - 0x45, 0xd1, 0xe2, 0x99, 0x96, 0xd9, 0x59, 0xb3, 0x75, 0xc7, 0xd0, 0x68, 0x83, 0x9a, 0x0f, 0xe9, - 0xc9, 0x1c, 0x78, 0xd1, 0xa1, 0x53, 0x3c, 0xc4, 0xd0, 0xb9, 0x81, 0x1b, 0x4f, 0x26, 0x19, 0x3c, - 0x60, 0xe6, 0x46, 0xc5, 0xf8, 0xce, 0xf6, 0xe4, 0x88, 0xc1, 0xc1, 0x78, 0xc5, 0xa0, 0xc9, 0x44, - 0x4c, 0x49, 0x16, 0xa8, 0xd5, 0xf4, 0x36, 0x50, 0x49, 0xfa, 0xb9, 0x92, 0xb4, 0x10, 0xa2, 0x09, - 0x8c, 0xfa, 0xbf, 0xe7, 0xe1, 0x5c, 0x5c, 0xe4, 0x35, 0x6a, 0x19, 0xa7, 0xf2, 0xfe, 0x70, 0xe4, - 0xfd, 0xdd, 0x02, 0x3c, 0x29, 0xca, 0xd4, 0x36, 0x74, 0x87, 0x1a, 0x15, 0xd3, 0xa1, 0x0d, 0xcf, - 0x76, 0xb6, 0x4e, 0xb0, 0x01, 0x75, 0x74, 0x62, 0xbf, 0x09, 0x25, 0x71, 0xdc, 0xc0, 0xd7, 0x99, - 0xb1, 0xa0, 0x25, 0x08, 0x4d, 0xac, 0x50, 0xfc, 0xa8, 0x22, 0xd6, 0x59, 0xa5, 0xbd, 0x74, 0xd6, - 0xa7, 0x61, 0x34, 0x10, 0x3d, 0x6e, 0x7c, 0x07, 0x42, 0x6b, 0xcb, 0xf0, 0x11, 0xb8, 0xf7, 0xd5, - 0xa2, 0x84, 0x58, 0x9b, 0x0f, 0xa8, 0x56, 0xd0, 0x1a, 0x1a, 0x15, 0xb5, 0x05, 0xe5, 0x4c, 0x43, - 0x93, 0x89, 0xd4, 0xed, 0x22, 0x5c, 0x4a, 0xef, 0x76, 0x8d, 0xea, 0xc6, 0x69, 0xaf, 0x7f, 0x5f, - 0xf6, 0x3a, 0x79, 0x16, 0x8a, 0x2b, 0xba, 0xb7, 0x21, 0xae, 0xfb, 0xf1, 0x0e, 0x7a, 0xdd, 0x6c, - 0xd1, 0x7a, 0x47, 0xf7, 0x36, 0x34, 0x44, 0x49, 0x73, 0x06, 0x20, 0xc7, 0x94, 0x39, 0x43, 0x5a, - 0xec, 0x87, 0x9f, 0xc9, 0x5d, 0x2d, 0xa6, 0x2e, 0xf6, 0xdf, 0x29, 0x66, 0xcd, 0x2b, 0xf7, 0x1d, - 0xd3, 0xa3, 0xa7, 0x1a, 0x76, 0xaa, 0x61, 0x87, 0xd4, 0xb0, 0x7f, 0x98, 0x87, 0xd1, 0x60, 0xd3, - 0xf4, 0x3e, 0x6d, 0x1c, 0xcf, 0x5a, 0x15, 0x6e, 0x65, 0x0a, 0x87, 0xde, 0xca, 0x1c, 0x46, 0xa1, - 0xd4, 0xe0, 0x88, 0x95, 0x9b, 0x06, 0x28, 0x31, 0x7e, 0xc4, 0x1a, 0x1c, 0xac, 0x3e, 0x0b, 0x03, - 0x8b, 0xfa, 0x23, 0xb3, 0xdd, 0x6d, 0x0b, 0x2b, 0x1d, 0xdd, 0xd7, 0xda, 0xfa, 0x23, 0xcd, 0x87, - 0xab, 0xff, 0x5d, 0x0e, 0xc6, 0x84, 0x50, 0x05, 0xf3, 0x43, 0x49, 0x35, 0x94, 0x4e, 0xfe, 0xd0, - 0xd2, 0x29, 0x1c, 0x5c, 0x3a, 0xea, 0x5f, 0x2a, 0x80, 0x32, 0x67, 0xb6, 0xe8, 0xaa, 0xa3, 0x5b, - 0xee, 0x3a, 0x75, 0xc4, 0x76, 0x7a, 0x96, 0xb1, 0x3a, 0xd4, 0x07, 0x4a, 0x53, 0x4a, 0xfe, 0x40, - 0x53, 0xca, 0x27, 0x61, 0x48, 0x34, 0x26, 0x70, 0x9d, 0xc4, 0x51, 0xe3, 0xf8, 0x40, 0x2d, 0xc4, - 0x33, 0xe2, 0x72, 0xa7, 0xe3, 0xd8, 0x0f, 0xa9, 0xc3, 0x6f, 0xc5, 0x04, 0xb1, 0xee, 0x03, 0xb5, - 0x10, 0x2f, 0x71, 0xa6, 0xbe, 0xbd, 0x28, 0x73, 0xa6, 0x8e, 0x16, 0xe2, 0xc9, 0x55, 0x18, 0x5c, - 0xb0, 0x1b, 0x3a, 0x0a, 0x9a, 0x4f, 0x2b, 0x23, 0x3b, 0xdb, 0x93, 0x83, 0x2d, 0x01, 0xd3, 0x02, - 0x2c, 0xa3, 0xac, 0xd8, 0x9b, 0x56, 0xcb, 0xd6, 0xb9, 0xb3, 0xcd, 0x20, 0xa7, 0x34, 0x04, 0x4c, - 0x0b, 0xb0, 0x8c, 0x92, 0xc9, 0x1c, 0x9d, 0x98, 0x06, 0x43, 0x9e, 0xeb, 0x02, 0xa6, 0x05, 0x58, - 0xf5, 0x1b, 0x45, 0xa6, 0xbd, 0xae, 0xf9, 0xc1, 0x63, 0xbf, 0x2e, 0x84, 0x03, 0xa6, 0xff, 0x00, - 0x03, 0xe6, 0xb1, 0x39, 0xb0, 0x53, 0xff, 0xf9, 0x00, 0x80, 0x90, 0xfe, 0xec, 0xe9, 0xe6, 0xf0, - 0x70, 0x5a, 0x53, 0x81, 0x89, 0x59, 0x6b, 0x43, 0xb7, 0x1a, 0xd4, 0x08, 0x8f, 0x2d, 0x4b, 0x38, - 0xb4, 0xd1, 0xe9, 0x92, 0x0a, 0x64, 0x78, 0x6e, 0xa9, 0x25, 0x0b, 0x90, 0x97, 0x60, 0xb8, 0x6a, - 0x79, 0xd4, 0xd1, 0x1b, 0x9e, 0xf9, 0x90, 0x8a, 0xa9, 0x01, 0x6f, 0xa2, 0xcd, 0x10, 0xac, 0xc9, - 0x34, 0xe4, 0x26, 0x8c, 0xac, 0xe8, 0x8e, 0x67, 0x36, 0xcc, 0x8e, 0x6e, 0x79, 0xae, 0x32, 0x88, - 0x33, 0x1a, 0x5a, 0x18, 0x1d, 0x09, 0xae, 0x45, 0xa8, 0xc8, 0x17, 0x60, 0x08, 0xb7, 0xa6, 0xe8, - 0x1f, 0x3e, 0xb4, 0xeb, 0x45, 0xe5, 0x73, 0xa1, 0x3b, 0x22, 0x3f, 0x7d, 0xc5, 0x1b, 0xe7, 0xf8, - 0x5d, 0x65, 0xc0, 0x91, 0x7c, 0x0e, 0x06, 0x66, 0x2d, 0x03, 0x99, 0xc3, 0xae, 0xcc, 0x55, 0xc1, - 0xfc, 0x42, 0xc8, 0xdc, 0xee, 0xc4, 0x78, 0xfb, 0xec, 0xd2, 0x47, 0xd9, 0xf0, 0x87, 0x37, 0xca, - 0x46, 0x3e, 0x84, 0x63, 0xf1, 0xd1, 0xa3, 0x3a, 0x16, 0x1f, 0x3b, 0xe0, 0xb1, 0xb8, 0xfa, 0x01, - 0x0c, 0x4f, 0xaf, 0xcc, 0x05, 0xa3, 0xf7, 0x09, 0x28, 0xac, 0x08, 0xcf, 0x88, 0x22, 0xb7, 0x67, - 0x3a, 0xa6, 0xa1, 0x31, 0x18, 0xb9, 0x06, 0x83, 0x33, 0xe8, 0x6e, 0x27, 0x6e, 0x11, 0x8b, 0x7c, - 0xfd, 0x6b, 0x20, 0x0c, 0xbd, 0x6e, 0x7d, 0x34, 0xf9, 0x38, 0x0c, 0xac, 0x38, 0x76, 0xd3, 0xd1, - 0xdb, 0x62, 0x0d, 0x46, 0xd7, 0x94, 0x0e, 0x07, 0x69, 0x3e, 0x4e, 0xfd, 0x99, 0x9c, 0x6f, 0xb6, - 0xb3, 0x12, 0xb5, 0x2e, 0x1e, 0xcd, 0x63, 0xdd, 0x83, 0xbc, 0x84, 0xcb, 0x41, 0x9a, 0x8f, 0x23, - 0xd7, 0xa0, 0x7f, 0xd6, 0x71, 0x6c, 0x47, 0xf6, 0xa9, 0xa7, 0x0c, 0x20, 0x5f, 0xf7, 0x22, 0x05, - 0x79, 0x0d, 0x86, 0xf9, 0x9c, 0xc3, 0x4f, 0x34, 0x0b, 0xbd, 0x6e, 0x4a, 0x65, 0x4a, 0xf5, 0x77, - 0x0b, 0x92, 0xcd, 0xc6, 0x25, 0xfe, 0x18, 0xde, 0x0a, 0xbc, 0x0c, 0x85, 0xe9, 0x95, 0x39, 0x31, - 0x01, 0x9e, 0xf5, 0x8b, 0x4a, 0xaa, 0x12, 0x2b, 0xc7, 0xa8, 0xc9, 0x65, 0x28, 0xae, 0x30, 0xf5, - 0x29, 0xa1, 0x7a, 0x0c, 0xee, 0x6c, 0x4f, 0x16, 0x3b, 0x4c, 0x7f, 0x10, 0x8a, 0x58, 0xb6, 0x99, - 0xe1, 0x3b, 0x26, 0x8e, 0x0d, 0xf7, 0x31, 0x97, 0xa1, 0x58, 0x76, 0x9a, 0x0f, 0xc5, 0xac, 0x85, - 0x58, 0xdd, 0x69, 0x3e, 0xd4, 0x10, 0x4a, 0xae, 0x03, 0x68, 0xd4, 0xeb, 0x3a, 0x16, 0x3e, 0x77, - 0x19, 0xc2, 0xf3, 0x37, 0x9c, 0x0d, 0x1d, 0x84, 0xd6, 0x1b, 0xb6, 0x41, 0x35, 0x89, 0x44, 0xfd, - 0xeb, 0xe1, 0xc5, 0x4e, 0xc5, 0x74, 0x1f, 0x9c, 0x76, 0xe1, 0x3e, 0xba, 0x50, 0x17, 0x47, 0x9c, - 0xc9, 0x4e, 0x9a, 0x84, 0xfe, 0xb9, 0x96, 0xde, 0x74, 0xb1, 0x0f, 0x85, 0xef, 0xda, 0x3a, 0x03, - 0x68, 0x1c, 0x1e, 0xeb, 0xa7, 0xc1, 0xdd, 0xfb, 0xe9, 0xe7, 0xfa, 0x83, 0xd1, 0xb6, 0x44, 0xbd, - 0x4d, 0xdb, 0x39, 0xed, 0xaa, 0xbd, 0x76, 0xd5, 0x15, 0x18, 0xa8, 0x39, 0x0d, 0xe9, 0xe8, 0x02, - 0xf7, 0x03, 0xae, 0xd3, 0xe0, 0xc7, 0x16, 0x3e, 0x92, 0xd1, 0x55, 0x5c, 0x0f, 0xe9, 0x06, 0x42, - 0x3a, 0xc3, 0xf5, 0x04, 0x9d, 0x40, 0x0a, 0xba, 0x15, 0xdb, 0xf1, 0x44, 0xc7, 0x05, 0x74, 0x1d, - 0xdb, 0xf1, 0x34, 0x1f, 0x49, 0x3e, 0x09, 0xb0, 0x3a, 0xb3, 0xe2, 0x3b, 0xf7, 0x0f, 0x85, 0xbe, - 0x87, 0xc2, 0xab, 0x5f, 0x93, 0xd0, 0x64, 0x15, 0x86, 0x96, 0x3b, 0xd4, 0xe1, 0x5b, 0x21, 0xfe, - 0x80, 0xe5, 0x13, 0x31, 0xd1, 0x8a, 0x7e, 0x9f, 0x12, 0xff, 0x07, 0xe4, 0x7c, 0x7d, 0xb1, 0xfd, - 0x9f, 0x5a, 0xc8, 0x88, 0xbc, 0x06, 0xa5, 0x32, 0xb7, 0xf3, 0x86, 0x91, 0x65, 0x20, 0x32, 0xdc, - 0x82, 0x72, 0x14, 0xdf, 0xb3, 0xeb, 0xf8, 0xb7, 0x26, 0xc8, 0xd5, 0x6b, 0x30, 0x1e, 0xaf, 0x86, - 0x0c, 0xc3, 0xc0, 0xcc, 0xf2, 0xd2, 0xd2, 0xec, 0xcc, 0xea, 0x78, 0x1f, 0x19, 0x84, 0x62, 0x6d, - 0x76, 0xa9, 0x32, 0x9e, 0x53, 0x7f, 0x59, 0x9a, 0x41, 0x98, 0x6a, 0x9d, 0x5e, 0x0d, 0x1f, 0xea, - 0xbe, 0x65, 0x1c, 0xef, 0x43, 0xf1, 0xc4, 0xa0, 0x6d, 0x7a, 0x1e, 0x35, 0xc4, 0x2a, 0x81, 0xf7, - 0x85, 0xde, 0x23, 0x2d, 0x81, 0x27, 0x2f, 0xc0, 0x28, 0xc2, 0xc4, 0x15, 0x21, 0xdf, 0x1f, 0x8b, - 0x02, 0xce, 0x23, 0x2d, 0x8a, 0x54, 0x7f, 0x3f, 0xbc, 0x1d, 0x5e, 0xa0, 0xfa, 0x49, 0xbd, 0x51, - 0xfc, 0x88, 0xf4, 0x97, 0xfa, 0x2f, 0x8b, 0xfc, 0xc9, 0x09, 0x7f, 0x9f, 0x78, 0x1c, 0xa2, 0x0c, - 0x8f, 0x74, 0x0b, 0xfb, 0x38, 0xd2, 0x7d, 0x01, 0x4a, 0x8b, 0xd4, 0xdb, 0xb0, 0x7d, 0xc7, 0x2f, - 0xf4, 0xd0, 0x6b, 0x23, 0x44, 0xf6, 0xd0, 0xe3, 0x34, 0xe4, 0x01, 0x10, 0xff, 0xf1, 0x61, 0xe0, - 0xf8, 0xed, 0x1f, 0x21, 0x5f, 0x4c, 0xec, 0x53, 0x6a, 0xf8, 0x44, 0x19, 0x7d, 0xfa, 0xcf, 0x05, - 0x8e, 0xe5, 0x92, 0x27, 0xd6, 0xbf, 0xd8, 0x9e, 0x2c, 0x71, 0x1a, 0x2d, 0x85, 0x2d, 0x79, 0x17, - 0x86, 0x16, 0xe7, 0xca, 0xe2, 0x21, 0x22, 0xf7, 0x8a, 0x78, 0x22, 0x90, 0xa2, 0x8f, 0x08, 0x44, - 0x82, 0xef, 0x7b, 0xda, 0xeb, 0x7a, 0xf2, 0x1d, 0x62, 0xc8, 0x85, 0x69, 0x0b, 0x7f, 0x29, 0x24, - 0x4e, 0x17, 0x02, 0x6d, 0x89, 0xbe, 0x1f, 0x8a, 0xcb, 0x8a, 0x63, 0x63, 0xda, 0x32, 0x78, 0x88, - 0xd1, 0xbd, 0x0c, 0x13, 0xe5, 0x4e, 0xa7, 0x65, 0x52, 0x03, 0xf5, 0x45, 0xeb, 0xb6, 0xa8, 0x2b, - 0x5c, 0x7e, 0xf0, 0xf1, 0x89, 0xce, 0x91, 0x75, 0x7c, 0xfe, 0x5a, 0x77, 0xba, 0x51, 0xff, 0xcc, - 0x64, 0x59, 0xf5, 0xcf, 0xe5, 0xe1, 0xc2, 0x8c, 0x43, 0x75, 0x8f, 0x2e, 0xce, 0x95, 0xcb, 0x5d, - 0xf4, 0x91, 0x6b, 0xb5, 0xa8, 0xd5, 0x3c, 0x9e, 0x61, 0xfd, 0x26, 0x8c, 0x05, 0x0d, 0xa8, 0x35, - 0xec, 0x0e, 0x95, 0x1f, 0x72, 0x35, 0x7c, 0x4c, 0xdd, 0x65, 0x28, 0x2d, 0x46, 0x4a, 0xee, 0xc0, - 0xd9, 0x00, 0x52, 0x6e, 0xb5, 0xec, 0x4d, 0x8d, 0x76, 0x5d, 0xee, 0x88, 0x3b, 0xc8, 0x1d, 0x71, - 0x43, 0x0e, 0x3a, 0xc3, 0xd7, 0x1d, 0x46, 0xa0, 0xa5, 0x95, 0x52, 0xbf, 0x5e, 0x80, 0x8b, 0xf7, - 0xf4, 0x96, 0x69, 0x84, 0xa2, 0xd1, 0xa8, 0xdb, 0xb1, 0x2d, 0x97, 0x9e, 0xa0, 0x51, 0x1a, 0x19, - 0x0a, 0xc5, 0x23, 0x19, 0x0a, 0xc9, 0x2e, 0xea, 0x3f, 0x74, 0x17, 0x95, 0x0e, 0xd4, 0x45, 0xff, - 0x5b, 0x0e, 0xc6, 0xfd, 0x87, 0x06, 0xf2, 0xa3, 0x71, 0xc9, 0x0b, 0x1e, 0x8f, 0x10, 0x63, 0x7e, - 0xd7, 0x88, 0x27, 0x35, 0x18, 0x98, 0x7d, 0xd4, 0x31, 0x1d, 0xea, 0xee, 0xc1, 0x69, 0xfc, 0x29, - 0x71, 0x5c, 0x32, 0x41, 0x79, 0x91, 0xc4, 0x49, 0x09, 0x07, 0xe3, 0xf3, 0x41, 0xfe, 0xd4, 0x62, - 0xda, 0x7f, 0x09, 0xcf, 0x9f, 0x0f, 0x8a, 0x27, 0x19, 0x91, 0xf7, 0xa0, 0x21, 0x29, 0x79, 0x0e, - 0x0a, 0xab, 0xab, 0x0b, 0x62, 0x26, 0xc5, 0x08, 0x04, 0x9e, 0x27, 0xbf, 0x8f, 0x64, 0x58, 0xf5, - 0x9f, 0xe4, 0x01, 0x98, 0x2a, 0xf0, 0xe1, 0x7a, 0x2c, 0x4a, 0x38, 0x0d, 0x83, 0xbe, 0xc0, 0x85, - 0x1a, 0x06, 0xaf, 0x04, 0xe2, 0x1d, 0x11, 0xaf, 0x3b, 0x78, 0x11, 0x32, 0xe9, 0x3b, 0x92, 0xf3, - 0x7b, 0x00, 0xdc, 0xd9, 0xa0, 0x23, 0xb9, 0xef, 0x3e, 0xfe, 0x49, 0x18, 0x12, 0x33, 0x9e, 0x1d, - 0x39, 0xff, 0x6f, 0xf8, 0x40, 0x2d, 0xc4, 0xc7, 0xa6, 0xd6, 0xd2, 0x21, 0x16, 0x62, 0x5f, 0xbc, - 0xbc, 0x57, 0x4e, 0xc5, 0x7b, 0xc4, 0xe2, 0xfd, 0x8a, 0x10, 0x2f, 0x7f, 0x31, 0x74, 0x62, 0xc5, - 0x7b, 0x64, 0x67, 0xdf, 0xea, 0x3f, 0xcc, 0x01, 0x61, 0xcd, 0x5a, 0xd1, 0x5d, 0x77, 0xd3, 0x76, - 0x0c, 0xee, 0x9c, 0x7e, 0x2c, 0x82, 0x39, 0xba, 0xfb, 0xca, 0xdf, 0x1d, 0x84, 0xb3, 0x11, 0xc7, - 0xdf, 0x13, 0x3e, 0x59, 0x5d, 0x8b, 0x8e, 0xa6, 0x5e, 0xaf, 0x5e, 0x3e, 0x26, 0x5f, 0x88, 0xf6, - 0x47, 0x1e, 0xbc, 0x49, 0x37, 0xa1, 0x2f, 0xc2, 0x88, 0xf8, 0xc1, 0x56, 0x68, 0xff, 0xa6, 0x0b, - 0x47, 0xa9, 0xcb, 0x00, 0x5a, 0x04, 0x4d, 0x5e, 0x81, 0x21, 0x36, 0x60, 0x9a, 0x18, 0xac, 0x64, - 0x20, 0x7c, 0x51, 0x62, 0xf8, 0x40, 0x79, 0x3d, 0x09, 0x28, 0xa5, 0x77, 0x4b, 0x83, 0x7b, 0x78, - 0xb7, 0xf4, 0x45, 0x18, 0x2e, 0x5b, 0x96, 0xed, 0xe1, 0x26, 0xdd, 0x15, 0x57, 0x13, 0x99, 0x56, - 0xf9, 0x73, 0xf8, 0x18, 0x3f, 0xa4, 0x4f, 0x35, 0xcb, 0x65, 0x86, 0xe4, 0x86, 0xff, 0x2a, 0x86, - 0x3a, 0xc2, 0xab, 0x1c, 0xaf, 0x67, 0x1c, 0x01, 0x4b, 0x3e, 0x8a, 0xc1, 0xce, 0x1b, 0x5d, 0x71, - 0xec, 0x8e, 0xed, 0x52, 0x83, 0x0b, 0x6a, 0x38, 0x0c, 0x6d, 0xd0, 0x11, 0x08, 0x7c, 0x37, 0x17, - 0x09, 0x1c, 0x12, 0x29, 0x42, 0xd6, 0xe1, 0x9c, 0x7f, 0x51, 0x1c, 0xbc, 0x50, 0xac, 0x56, 0x5c, - 0x65, 0x04, 0x5f, 0x25, 0x91, 0xb8, 0x32, 0x54, 0x2b, 0xd3, 0x4f, 0xfb, 0xd7, 0x22, 0xfe, 0x13, - 0xc7, 0xba, 0x69, 0xc8, 0x5d, 0x9d, 0xca, 0x8f, 0xfc, 0x10, 0x0c, 0x2f, 0xea, 0x8f, 0x2a, 0x5d, - 0x71, 0xf6, 0x32, 0xba, 0xf7, 0xdb, 0x97, 0xb6, 0xfe, 0xa8, 0x6e, 0x88, 0x72, 0x31, 0x9b, 0x42, - 0x66, 0x49, 0xea, 0x70, 0x61, 0xc5, 0xb1, 0xdb, 0xb6, 0x47, 0x8d, 0xd8, 0x63, 0xbf, 0x33, 0xe1, - 0xeb, 0xe0, 0x8e, 0xa0, 0xa8, 0xf7, 0x78, 0xf5, 0x97, 0xc1, 0x86, 0xb4, 0xe1, 0x4c, 0xd9, 0x75, - 0xbb, 0x6d, 0x1a, 0xde, 0x50, 0x8d, 0xef, 0xfa, 0x19, 0x9f, 0x10, 0x5e, 0xcb, 0x4f, 0xea, 0x58, - 0x94, 0x5f, 0x50, 0xd5, 0x3d, 0x53, 0xae, 0x11, 0xbf, 0x25, 0xce, 0xfb, 0x76, 0x71, 0x70, 0x6c, - 0xfc, 0x8c, 0x76, 0x31, 0xd9, 0x98, 0x55, 0xd3, 0x6b, 0x51, 0xf5, 0x5b, 0x39, 0x80, 0x50, 0xc0, - 0xe4, 0xc5, 0x68, 0x44, 0xa4, 0x5c, 0x78, 0xd1, 0x21, 0xa2, 0x25, 0x44, 0x42, 0x20, 0x91, 0xcb, - 0x50, 0xc4, 0x88, 0x1a, 0xf9, 0xf0, 0x60, 0xf5, 0x81, 0x69, 0x19, 0x1a, 0x42, 0x19, 0x56, 0x7a, - 0xfa, 0x8e, 0x58, 0xbc, 0xd4, 0xe7, 0x56, 0x61, 0x05, 0xce, 0xd4, 0xba, 0x6b, 0x7e, 0xdd, 0xd2, - 0x3b, 0x3e, 0x0c, 0xec, 0xe1, 0x76, 0xd7, 0x82, 0xc7, 0xaf, 0x91, 0xb0, 0x29, 0xd1, 0x22, 0xea, - 0x37, 0x72, 0xb1, 0x59, 0xf0, 0x18, 0x17, 0xbd, 0x8f, 0x25, 0xfd, 0x34, 0x92, 0xd3, 0x92, 0xfa, - 0x97, 0xf3, 0x30, 0xbc, 0x62, 0x3b, 0x9e, 0x08, 0x51, 0x72, 0xb2, 0x57, 0x21, 0x69, 0xaf, 0x54, - 0xdc, 0xc7, 0x5e, 0xe9, 0x32, 0x14, 0x25, 0x17, 0x65, 0x7e, 0x2f, 0x62, 0x18, 0x8e, 0x86, 0x50, - 0xf5, 0x47, 0xf2, 0x00, 0x9f, 0x7b, 0xe9, 0xa5, 0xc7, 0x58, 0x40, 0xea, 0x5f, 0xcc, 0xc1, 0x19, - 0x71, 0x51, 0x27, 0xc5, 0x16, 0x1b, 0xf0, 0xaf, 0x58, 0xe5, 0x71, 0xc9, 0x41, 0x9a, 0x8f, 0x63, - 0x4b, 0xc0, 0xec, 0x23, 0xd3, 0xc3, 0xbb, 0x0a, 0x29, 0xb8, 0x18, 0x15, 0x30, 0x79, 0x09, 0xf0, - 0xe9, 0xc8, 0x8b, 0xfe, 0x15, 0x64, 0x21, 0x5c, 0xf7, 0x58, 0x81, 0xd9, 0xd4, 0x6b, 0x48, 0xf5, - 0xd7, 0x8b, 0x50, 0x9c, 0x7d, 0x44, 0x1b, 0x27, 0xbc, 0x6b, 0xa4, 0x83, 0xcd, 0xe2, 0x21, 0x0f, - 0x36, 0x0f, 0xe2, 0x53, 0xf1, 0x4e, 0xd8, 0x9f, 0xa5, 0x68, 0xf5, 0xb1, 0x9e, 0x8f, 0x57, 0xef, - 0xf7, 0xf4, 0xc9, 0x73, 0xc9, 0xf9, 0x2f, 0x0b, 0x50, 0xa8, 0xcd, 0xac, 0x9c, 0xea, 0xcd, 0xb1, - 0xea, 0x4d, 0xef, 0x3b, 0x6b, 0x35, 0xb8, 0x86, 0x1a, 0x0c, 0xbd, 0x44, 0x63, 0x37, 0x4e, 0xdf, - 0x2d, 0xc0, 0x58, 0x6d, 0x6e, 0x75, 0x45, 0x3a, 0x09, 0xbe, 0xc3, 0x3d, 0xf9, 0xd0, 0xa7, 0x8c, - 0x77, 0xe9, 0xe5, 0x84, 0x3d, 0x73, 0xb7, 0x6a, 0x79, 0xaf, 0xde, 0xbc, 0xa7, 0xb7, 0xba, 0x14, - 0x8f, 0x5e, 0xb8, 0xdf, 0xaf, 0x6b, 0x7e, 0x40, 0xbf, 0x8e, 0x81, 0x06, 0x7c, 0x06, 0xe4, 0x4d, - 0x28, 0xdc, 0x15, 0x1e, 0x19, 0x59, 0x7c, 0x5e, 0xbe, 0xc1, 0xf9, 0xb0, 0x49, 0xb0, 0xd0, 0x35, - 0x0d, 0xe4, 0xc0, 0x4a, 0xb1, 0xc2, 0xb7, 0xc4, 0x02, 0xbc, 0xa7, 0xc2, 0x4d, 0xbf, 0xf0, 0xad, - 0x6a, 0x85, 0xd4, 0x60, 0x78, 0x85, 0x3a, 0x6d, 0x13, 0x3b, 0xca, 0x9f, 0xb3, 0x7b, 0x33, 0x61, - 0x3b, 0x95, 0xe1, 0x4e, 0x58, 0x08, 0x99, 0xc9, 0x5c, 0xc8, 0x7b, 0x00, 0xdc, 0x46, 0xd9, 0x63, - 0xbc, 0xca, 0xa7, 0xd0, 0xee, 0xe7, 0xa6, 0x65, 0x8a, 0x8d, 0x27, 0x31, 0x23, 0x0f, 0x60, 0x7c, - 0xd1, 0x36, 0xcc, 0x75, 0x93, 0xbb, 0x5e, 0x62, 0x05, 0xa5, 0xdd, 0x1d, 0x9e, 0x98, 0x29, 0xd9, - 0x96, 0xca, 0xa5, 0x55, 0x93, 0x60, 0xac, 0xfe, 0xdd, 0x7e, 0x28, 0xb2, 0x6e, 0x3f, 0x1d, 0xbf, - 0x87, 0x19, 0xbf, 0x65, 0x18, 0xbf, 0x6f, 0x3b, 0x0f, 0x4c, 0xab, 0x19, 0x78, 0xc5, 0x8b, 0xbd, - 0x29, 0x7a, 0xf2, 0x6c, 0x72, 0x5c, 0x3d, 0x70, 0xa0, 0xd7, 0x12, 0xe4, 0xbb, 0x8c, 0xe0, 0xd7, - 0x01, 0xf8, 0x5b, 0x77, 0xa4, 0x19, 0x0c, 0x83, 0x63, 0xf0, 0x97, 0xf0, 0xe8, 0x68, 0x2f, 0x07, - 0xc7, 0x08, 0x89, 0xd9, 0x26, 0x9c, 0xfb, 0x42, 0x0c, 0xa1, 0xdf, 0x3d, 0x6e, 0xc2, 0xd1, 0x17, - 0x42, 0x36, 0x02, 0xb8, 0x57, 0xc4, 0x0a, 0x80, 0x74, 0xbf, 0x04, 0x31, 0x41, 0x44, 0x26, 0x07, - 0x11, 0x8e, 0x2e, 0xe5, 0x7a, 0x49, 0x93, 0x78, 0x90, 0x57, 0x63, 0x17, 0xe0, 0x24, 0xc2, 0x2d, - 0xf3, 0xfe, 0x3b, 0x74, 0xa0, 0x1a, 0xd9, 0xcd, 0x81, 0x4a, 0xfd, 0x9b, 0x05, 0x18, 0x66, 0xdc, - 0x6a, 0xdd, 0x76, 0x5b, 0x77, 0xb6, 0x4e, 0x15, 0xf9, 0x30, 0x8a, 0x5c, 0x87, 0x09, 0xd9, 0x61, - 0x9e, 0x99, 0xae, 0x7e, 0x68, 0xa3, 0xe0, 0xf8, 0x27, 0x4e, 0xc0, 0x6d, 0x4b, 0x9c, 0xf7, 0x3d, - 0x01, 0xc6, 0xb3, 0x05, 0x57, 0x4b, 0xf2, 0x52, 0x7f, 0x36, 0x07, 0xe3, 0x71, 0x68, 0xa0, 0xfb, - 0xb9, 0x54, 0xdd, 0x7f, 0x01, 0x86, 0xc4, 0x15, 0xba, 0x6e, 0x08, 0x8f, 0xbe, 0xb1, 0x9d, 0xed, - 0x49, 0xc0, 0xf7, 0xcb, 0x75, 0x87, 0xea, 0x86, 0x16, 0x12, 0x90, 0x57, 0x60, 0x04, 0x7f, 0xdc, - 0x77, 0x4c, 0xcf, 0xa3, 0xbc, 0x33, 0x8a, 0xfc, 0x56, 0x80, 0x17, 0xd8, 0xe4, 0x08, 0x2d, 0x42, - 0xa6, 0xfe, 0x5e, 0x1e, 0x86, 0x6a, 0xdd, 0x35, 0x77, 0xcb, 0xf5, 0x68, 0xfb, 0x84, 0xeb, 0x90, - 0xbf, 0x49, 0x2f, 0xa6, 0x6e, 0xd2, 0x9f, 0xf3, 0x87, 0x96, 0x74, 0x7a, 0x1d, 0x6c, 0x0c, 0x7c, - 0xaf, 0xc4, 0x50, 0x8b, 0x4a, 0xfb, 0xd7, 0x22, 0xf5, 0x6f, 0xe7, 0x61, 0x9c, 0x5f, 0xde, 0x56, - 0x4c, 0xb7, 0x71, 0x04, 0x0f, 0x4a, 0x8e, 0x5f, 0xa6, 0x87, 0x73, 0x78, 0xd8, 0xc3, 0x33, 0x1d, - 0xf5, 0x4b, 0x79, 0x18, 0x2e, 0x77, 0xbd, 0x8d, 0xb2, 0x87, 0xf3, 0xdb, 0x63, 0xb9, 0x47, 0xfe, - 0x07, 0x39, 0x38, 0xc3, 0x1a, 0xb2, 0x6a, 0x3f, 0xa0, 0xd6, 0x11, 0x1c, 0x7e, 0xcb, 0x87, 0xd8, - 0xf9, 0x03, 0x1e, 0x62, 0xfb, 0xb2, 0x2c, 0xec, 0x4f, 0x96, 0x78, 0x65, 0xa3, 0xd9, 0x2d, 0x7a, - 0xb2, 0x3f, 0xe3, 0x08, 0xaf, 0x6c, 0x7c, 0x81, 0x1c, 0xc1, 0x15, 0xe1, 0xf7, 0x97, 0x40, 0x8e, - 0xe0, 0x7c, 0xf3, 0xfb, 0x43, 0x20, 0xbf, 0x9b, 0x83, 0xa1, 0x69, 0xdb, 0x3b, 0xe1, 0x03, 0x5f, - 0x7c, 0xc5, 0xc9, 0x56, 0x73, 0xff, 0x2b, 0x4e, 0xb6, 0x6e, 0xaa, 0x3f, 0x9f, 0x87, 0x73, 0x22, - 0x1e, 0xbe, 0x38, 0x03, 0x3b, 0x9d, 0x8e, 0xc5, 0x60, 0x4b, 0x8a, 0xe6, 0x74, 0x1e, 0x12, 0xa2, - 0xf9, 0xc5, 0x02, 0x9c, 0xc3, 0xf0, 0xbd, 0x6c, 0x47, 0xf5, 0x7d, 0x60, 0x8b, 0x90, 0x46, 0xf4, - 0x22, 0x7e, 0x31, 0xe5, 0x22, 0xfe, 0x5f, 0x6c, 0x4f, 0xbe, 0xda, 0x34, 0xbd, 0x8d, 0xee, 0xda, - 0x54, 0xc3, 0x6e, 0x5f, 0x6f, 0x3a, 0xfa, 0x43, 0x93, 0x5f, 0x41, 0xeb, 0xad, 0xeb, 0x61, 0x9a, - 0x9a, 0x8e, 0x29, 0x92, 0xce, 0xd4, 0x70, 0xa7, 0xc4, 0xb8, 0xfa, 0x57, 0xf8, 0x2e, 0xc0, 0x6d, - 0xdb, 0xb4, 0x84, 0x5f, 0x2b, 0x37, 0x74, 0x6b, 0x3b, 0xdb, 0x93, 0xe7, 0xdf, 0xb7, 0x4d, 0xab, - 0x1e, 0x77, 0x6e, 0xdd, 0x6f, 0x7d, 0x21, 0x6b, 0x4d, 0xaa, 0x46, 0xfd, 0x6f, 0x73, 0xf0, 0x44, - 0x54, 0x8b, 0xbf, 0x1f, 0x6c, 0xc7, 0x3f, 0x9f, 0x87, 0xf3, 0xb7, 0x50, 0x38, 0x81, 0x33, 0xd1, - 0xe9, 0xbc, 0x25, 0x06, 0x67, 0x8a, 0x6c, 0x4e, 0x2d, 0xca, 0x6c, 0xd9, 0x9c, 0x4e, 0xea, 0x42, - 0x36, 0xff, 0x4d, 0x0e, 0xce, 0x2e, 0x57, 0x2b, 0x33, 0xdf, 0x27, 0x23, 0x2a, 0xf9, 0x3d, 0x27, - 0xdc, 0xe0, 0x4c, 0x7c, 0xcf, 0x09, 0x37, 0x3d, 0xbf, 0x96, 0x87, 0xb3, 0xb5, 0xf2, 0xe2, 0xc2, - 0xf7, 0xcb, 0x0c, 0x3e, 0x23, 0x7b, 0xbe, 0xfa, 0x87, 0x60, 0xc2, 0x16, 0x90, 0x3f, 0xf3, 0xde, - 0x8d, 0x6c, 0x8f, 0xd8, 0xa4, 0x50, 0x4e, 0xf8, 0xd4, 0x7d, 0x24, 0x42, 0x61, 0x9a, 0x1f, 0xa1, - 0x3e, 0xe1, 0x9a, 0xff, 0x5f, 0x94, 0x60, 0xf8, 0x4e, 0x77, 0x8d, 0x0a, 0x07, 0xa9, 0xc7, 0xfa, - 0xe4, 0xf7, 0x06, 0x0c, 0x0b, 0x31, 0xe0, 0x0d, 0x87, 0x14, 0xc0, 0x51, 0x04, 0xe4, 0xe1, 0x31, - 0xb2, 0x64, 0x22, 0x72, 0x19, 0x8a, 0xf7, 0xa8, 0xb3, 0x26, 0xbf, 0x6d, 0x7e, 0x48, 0x9d, 0x35, - 0x0d, 0xa1, 0x64, 0x21, 0x7c, 0xb6, 0x51, 0x5e, 0xa9, 0x62, 0xf2, 0x20, 0x71, 0x69, 0x88, 0xd9, - 0x90, 0x02, 0xdf, 0x4b, 0xbd, 0x63, 0xf2, 0xb4, 0x43, 0x72, 0x5c, 0x85, 0x78, 0x49, 0xb2, 0x04, - 0x13, 0xb2, 0xf3, 0x1d, 0xcf, 0x9c, 0x33, 0x98, 0xc2, 0x2e, 0x2d, 0x67, 0x4e, 0xb2, 0x28, 0x79, - 0x07, 0x46, 0x7c, 0x20, 0xba, 0x11, 0x0e, 0x85, 0xe9, 0x1a, 0x02, 0x56, 0xb1, 0xe8, 0xfa, 0x91, - 0x02, 0x32, 0x03, 0xbc, 0xc4, 0x80, 0x14, 0x06, 0x31, 0xb7, 0xcc, 0x48, 0x01, 0xf2, 0x0a, 0x32, - 0xc0, 0xa7, 0x46, 0xe8, 0x30, 0x35, 0x8c, 0x0f, 0x7f, 0xf1, 0x02, 0xc8, 0x11, 0x70, 0xfe, 0xbc, - 0x3b, 0x42, 0x46, 0x96, 0x01, 0x42, 0xc7, 0x16, 0x11, 0x44, 0x63, 0xdf, 0x2e, 0x37, 0x12, 0x0b, - 0xf9, 0x26, 0x6f, 0xf4, 0x20, 0x37, 0x79, 0xea, 0x1f, 0xe5, 0x61, 0xb8, 0xdc, 0xe9, 0x04, 0x43, - 0xe1, 0x45, 0x28, 0x95, 0x3b, 0x9d, 0xbb, 0x5a, 0x55, 0x0e, 0xa7, 0xaf, 0x77, 0x3a, 0xf5, 0xae, - 0x63, 0xca, 0x7e, 0xc9, 0x9c, 0x88, 0xcc, 0xc0, 0x68, 0xb9, 0xd3, 0x59, 0xe9, 0xae, 0xb5, 0xcc, - 0x86, 0x94, 0x0d, 0x8c, 0xe7, 0x4b, 0xec, 0x74, 0xea, 0x1d, 0xc4, 0xc4, 0x53, 0xc2, 0x45, 0xcb, - 0x90, 0x2f, 0x62, 0xe8, 0x29, 0x91, 0x8c, 0x8a, 0xa7, 0xbb, 0x51, 0x83, 0x40, 0xfa, 0x61, 0xdb, - 0xa6, 0x02, 0x22, 0x9e, 0x70, 0xe0, 0xb2, 0x9f, 0x26, 0x82, 0x55, 0x94, 0x48, 0x3a, 0x15, 0xb2, - 0x24, 0x9f, 0x82, 0x81, 0x72, 0xa7, 0x23, 0xdd, 0x56, 0xa1, 0x63, 0x1b, 0x2b, 0x15, 0xcf, 0xf7, - 0x27, 0xc8, 0x2e, 0xbd, 0x05, 0x63, 0xd1, 0xca, 0xf6, 0x95, 0xb0, 0xe0, 0x7b, 0x39, 0xfc, 0xa0, - 0x13, 0xee, 0x57, 0xff, 0x32, 0x14, 0xca, 0x9d, 0x8e, 0x98, 0x8f, 0xce, 0xa6, 0xf4, 0x47, 0xfc, - 0x19, 0x7e, 0xb9, 0xd3, 0xf1, 0x3f, 0xfd, 0x84, 0x3f, 0xd0, 0x39, 0xd0, 0xa7, 0xff, 0x2e, 0xff, - 0xf4, 0x93, 0xfd, 0x78, 0x46, 0xfd, 0xf5, 0x02, 0x9c, 0x29, 0x77, 0x3a, 0xa7, 0x89, 0x0e, 0x8e, - 0xea, 0xb1, 0xff, 0x4b, 0x00, 0xd2, 0xf4, 0x38, 0x10, 0x3c, 0x1f, 0x1c, 0x96, 0xa6, 0x46, 0x25, - 0xa7, 0x49, 0x44, 0xbe, 0xfa, 0x0d, 0xee, 0x4b, 0xfd, 0xbe, 0x54, 0xc0, 0xa9, 0xf8, 0xa4, 0x07, - 0x2e, 0xfb, 0xa8, 0x74, 0x9b, 0xe8, 0x83, 0xd2, 0xbe, 0xfa, 0xe0, 0xef, 0x47, 0x06, 0x0f, 0x06, - 0xce, 0x3f, 0xed, 0x85, 0xfe, 0x43, 0x99, 0xc5, 0x63, 0xb2, 0x30, 0x45, 0x34, 0x25, 0x3f, 0x79, - 0x98, 0x88, 0xed, 0xd5, 0x60, 0xa8, 0xba, 0x69, 0x68, 0x31, 0x5a, 0xbf, 0x0f, 0x07, 0xf6, 0xd5, - 0x87, 0xdb, 0x79, 0x7c, 0xbf, 0x1f, 0xc4, 0x06, 0x3b, 0xfc, 0xee, 0xe2, 0x3a, 0x00, 0xf7, 0x3c, - 0x08, 0x5c, 0xeb, 0x47, 0x79, 0x18, 0x20, 0x9e, 0x53, 0x4c, 0x84, 0x01, 0x0a, 0x49, 0x02, 0x4f, - 0xa5, 0x42, 0xaa, 0xa7, 0xd2, 0x35, 0x18, 0xd4, 0xf4, 0xcd, 0x77, 0xbb, 0xd4, 0xd9, 0x12, 0xe6, - 0x0c, 0x0f, 0xbd, 0xa9, 0x6f, 0xd6, 0x7f, 0x98, 0x01, 0xb5, 0x00, 0x4d, 0xd4, 0x20, 0x00, 0x84, - 0xe4, 0x11, 0xc2, 0xcf, 0xc8, 0x83, 0xb0, 0x0f, 0x07, 0x51, 0x74, 0xf2, 0x06, 0x14, 0xca, 0xf7, - 0x6b, 0x42, 0xb2, 0x41, 0xd7, 0x96, 0xef, 0xd7, 0x84, 0xbc, 0x32, 0xcb, 0xde, 0xaf, 0xa9, 0x5f, - 0xca, 0x03, 0x49, 0x52, 0x92, 0x57, 0x61, 0x08, 0xa1, 0x4d, 0xa6, 0x33, 0x72, 0x32, 0xda, 0x4d, - 0xb7, 0xee, 0x20, 0x34, 0x62, 0xdc, 0xf9, 0xa4, 0xe4, 0x75, 0x4c, 0xf7, 0x2d, 0xd2, 0x21, 0x46, - 0x92, 0xd1, 0x6e, 0xba, 0x7e, 0x82, 0xec, 0x58, 0xb6, 0x6f, 0x41, 0x8c, 0x76, 0xe1, 0xfd, 0xda, - 0xbc, 0xed, 0x7a, 0x42, 0xd4, 0xdc, 0x2e, 0xdc, 0x74, 0x31, 0x0b, 0x72, 0xc4, 0x2e, 0xe4, 0x64, - 0x98, 0xc9, 0xed, 0x7e, 0x8d, 0x3f, 0x95, 0x32, 0x34, 0xbb, 0xe5, 0x1b, 0x94, 0x3c, 0x93, 0xdb, - 0xa6, 0x5b, 0xe7, 0xcf, 0xac, 0x0c, 0xcc, 0x33, 0x1e, 0xc9, 0xe4, 0x16, 0x29, 0xa5, 0xfe, 0xf4, - 0x20, 0x8c, 0x57, 0x74, 0x4f, 0x5f, 0xd3, 0x5d, 0x2a, 0xed, 0xa6, 0xcf, 0xf8, 0x30, 0xff, 0x73, - 0x24, 0x39, 0x18, 0x6b, 0x29, 0x5f, 0x13, 0x2f, 0x40, 0xde, 0x0c, 0xf9, 0x06, 0x79, 0x76, 0xe5, - 0xc4, 0x7d, 0x6b, 0xf5, 0x8e, 0x00, 0x6b, 0x09, 0x42, 0xf2, 0x02, 0x0c, 0xfb, 0x30, 0xb6, 0x01, - 0x28, 0x84, 0x3a, 0x63, 0xac, 0x31, 0xfb, 0x5f, 0x93, 0xd1, 0xe4, 0x75, 0x18, 0xf1, 0x7f, 0x4a, - 0xa6, 0x35, 0xcf, 0x42, 0xb8, 0x96, 0xd8, 0x3d, 0xc9, 0xa4, 0x72, 0x51, 0x9c, 0xdf, 0xfa, 0x23, - 0x45, 0x63, 0x89, 0xfe, 0x22, 0xa4, 0xe4, 0x87, 0x61, 0xcc, 0xff, 0x2d, 0x36, 0x0c, 0xdc, 0x71, - 0xf0, 0x85, 0x20, 0x8d, 0x79, 0x4c, 0xac, 0x53, 0x51, 0x72, 0xbe, 0x75, 0x78, 0xd2, 0xcf, 0x5d, - 0x67, 0xac, 0x25, 0x77, 0x0e, 0xb1, 0x0a, 0x48, 0x15, 0x26, 0x7c, 0x48, 0xa8, 0xa1, 0x03, 0xe1, - 0x8e, 0xd1, 0x58, 0xab, 0xa7, 0x2a, 0x69, 0xb2, 0x14, 0x69, 0xc1, 0xe5, 0x08, 0xd0, 0x70, 0x37, - 0xcc, 0x75, 0x4f, 0x6c, 0xf7, 0x44, 0x1c, 0x6c, 0x91, 0xac, 0x34, 0xe0, 0xca, 0x69, 0xfc, 0xac, - 0xc3, 0xd1, 0x0c, 0x65, 0x3d, 0xb9, 0x91, 0x1a, 0x9c, 0xf3, 0xf1, 0xb7, 0x66, 0x56, 0x56, 0x1c, - 0xfb, 0x7d, 0xda, 0xf0, 0xaa, 0x15, 0xb1, 0x5d, 0xc6, 0xf8, 0x88, 0xc6, 0x5a, 0xbd, 0xd9, 0xe8, - 0x30, 0xa5, 0x60, 0xb8, 0x28, 0xf3, 0xd4, 0xc2, 0xe4, 0x1e, 0x9c, 0x97, 0xe0, 0x52, 0x4a, 0x74, - 0x08, 0xf7, 0xf3, 0x82, 0x6b, 0x7a, 0x56, 0xf4, 0xf4, 0xe2, 0xe4, 0x2d, 0x18, 0xf5, 0x11, 0xfc, - 0x16, 0x71, 0x18, 0x6f, 0x11, 0x71, 0x48, 0x1a, 0x6b, 0xf5, 0xf8, 0x8b, 0xde, 0x28, 0xb1, 0xac, - 0x51, 0xab, 0x5b, 0x1d, 0x2a, 0x3c, 0x7a, 0x7d, 0x8d, 0xf2, 0xb6, 0x3a, 0xa9, 0xca, 0xc8, 0x48, - 0xc9, 0x3b, 0xa1, 0x46, 0x2d, 0x3b, 0x66, 0xd3, 0xe4, 0x3b, 0x69, 0xff, 0x11, 0xef, 0x5a, 0xdd, - 0x46, 0x60, 0x9a, 0x7e, 0x70, 0xf2, 0x4b, 0x65, 0x38, 0x9b, 0xa2, 0x63, 0xfb, 0xda, 0x31, 0x7e, - 0x39, 0x1f, 0x36, 0xe2, 0x84, 0x6f, 0x1b, 0xa7, 0x61, 0xd0, 0xff, 0x12, 0x61, 0x3c, 0x28, 0x59, - 0x43, 0x33, 0xce, 0xc3, 0xc7, 0x47, 0xc4, 0x71, 0xc2, 0xb7, 0x92, 0x47, 0x21, 0x8e, 0x6f, 0xe7, - 0x42, 0x71, 0x9c, 0xf0, 0xed, 0xe5, 0x4f, 0x15, 0xc3, 0x39, 0xe9, 0x74, 0x8f, 0x79, 0x54, 0x66, - 0x72, 0xe8, 0x07, 0x5b, 0xda, 0xc7, 0x63, 0x5a, 0x59, 0x35, 0x07, 0x0e, 0xa6, 0x9a, 0xe4, 0x2d, - 0x18, 0x5e, 0xb1, 0x5d, 0xaf, 0xe9, 0x50, 0x77, 0x25, 0xc8, 0xe3, 0x80, 0x0f, 0xb1, 0x3b, 0x02, - 0x5c, 0xef, 0x44, 0x66, 0x7f, 0x99, 0x5c, 0xfd, 0x47, 0x85, 0x84, 0x36, 0x70, 0xc3, 0xf5, 0x44, - 0x6a, 0xc3, 0x11, 0x0c, 0x75, 0x72, 0x23, 0x5c, 0x05, 0xb9, 0x85, 0xdf, 0x2f, 0x05, 0xa9, 0x5c, - 0x13, 0x06, 0x7e, 0x94, 0x84, 0xfc, 0x00, 0x5c, 0x8c, 0x00, 0x56, 0x74, 0x47, 0x6f, 0x53, 0x2f, - 0xcc, 0x99, 0x89, 0x61, 0xc7, 0xfc, 0xd2, 0xf5, 0x4e, 0x80, 0x96, 0xf3, 0x70, 0x66, 0x70, 0x90, - 0x54, 0x6b, 0x60, 0x1f, 0x2e, 0xd6, 0x3f, 0x57, 0x08, 0x0d, 0x9d, 0x68, 0xf8, 0x60, 0x8d, 0xba, - 0xdd, 0x96, 0xf7, 0xf8, 0x76, 0xf0, 0xc1, 0x92, 0xb3, 0xcc, 0xc3, 0x99, 0xf2, 0xfa, 0x3a, 0x6d, - 0x78, 0x7e, 0x54, 0x74, 0x57, 0x04, 0x8c, 0xe4, 0x1b, 0x0f, 0x81, 0x12, 0x51, 0xae, 0xe5, 0x7e, - 0x8d, 0x17, 0x53, 0xff, 0x71, 0x11, 0x94, 0xc0, 0xf0, 0x0f, 0x9e, 0x1a, 0x1e, 0xe3, 0x22, 0xfb, - 0x91, 0xe8, 0x15, 0x13, 0x26, 0x42, 0x61, 0x88, 0x37, 0x5e, 0x22, 0x8b, 0xfb, 0x64, 0x9c, 0x59, - 0x48, 0xc8, 0xf7, 0x12, 0x97, 0xc4, 0x5e, 0x82, 0x84, 0x4f, 0x39, 0xeb, 0x2e, 0x67, 0xa1, 0x25, - 0xb9, 0x92, 0xaf, 0xe4, 0xe0, 0x9c, 0xdf, 0x29, 0xcb, 0x6b, 0xcc, 0xa8, 0x9e, 0xb1, 0xbb, 0x56, - 0xf0, 0x00, 0xea, 0x8d, 0xec, 0xea, 0x78, 0x27, 0x4d, 0xa5, 0x15, 0xe6, 0x2d, 0x09, 0x42, 0xa3, - 0x04, 0x0a, 0x61, 0x23, 0x4d, 0xbd, 0x81, 0x44, 0x5a, 0x6a, 0xbd, 0x97, 0x6e, 0xc1, 0x13, 0x99, - 0x2c, 0x77, 0x33, 0x62, 0xfb, 0x65, 0x23, 0xf6, 0xbf, 0xcf, 0x85, 0x13, 0x51, 0x4c, 0x48, 0x64, - 0x0a, 0x20, 0x04, 0x89, 0x6d, 0x2d, 0xbe, 0xaf, 0x0a, 0x85, 0xa6, 0x49, 0x14, 0x64, 0x19, 0x4a, - 0x42, 0x2c, 0x3c, 0x3f, 0xf5, 0x27, 0x77, 0xe9, 0x85, 0x29, 0x59, 0x0e, 0xb8, 0x65, 0x15, 0xdf, - 0x2c, 0xd8, 0x5c, 0x7a, 0x1d, 0x86, 0x0f, 0xfa, 0x5d, 0x5f, 0x29, 0x00, 0x91, 0xf7, 0xa0, 0xc7, - 0x68, 0xa0, 0x9f, 0xe0, 0x29, 0xec, 0x2a, 0x0c, 0xb2, 0x4f, 0xc0, 0x8c, 0x2d, 0x52, 0x84, 0xe6, - 0xae, 0x80, 0x69, 0x01, 0x36, 0x0c, 0x8f, 0x36, 0x90, 0x1e, 0x1e, 0x4d, 0xfd, 0xd9, 0x02, 0x5c, - 0x90, 0x3b, 0xa4, 0x42, 0x31, 0xe9, 0xc3, 0x69, 0xa7, 0x7c, 0x88, 0x9d, 0xa2, 0x42, 0x89, 0x6f, - 0x3d, 0x44, 0xf6, 0x0d, 0x7e, 0x2c, 0x84, 0x10, 0x4d, 0x60, 0xd4, 0xff, 0x25, 0x0f, 0xa3, 0x81, - 0x79, 0xa7, 0x3b, 0xee, 0x63, 0xdc, 0x1d, 0x9f, 0x86, 0x51, 0x0c, 0x70, 0xd5, 0xa6, 0x16, 0x0f, - 0x02, 0xd5, 0x2f, 0xa5, 0xcb, 0xf1, 0x11, 0x22, 0x33, 0x5a, 0x84, 0x90, 0x69, 0x3f, 0xb7, 0xfc, - 0xa4, 0xb0, 0x63, 0xdc, 0xec, 0xe3, 0x70, 0xf5, 0xaf, 0x14, 0x60, 0xc4, 0x97, 0xf2, 0xb4, 0x79, - 0x52, 0xef, 0x79, 0x8e, 0x57, 0xc8, 0xd7, 0x01, 0x56, 0x6c, 0xc7, 0xd3, 0x5b, 0x4b, 0xa1, 0xe6, - 0xe3, 0x01, 0x69, 0x07, 0xa1, 0xbc, 0x8c, 0x44, 0x82, 0xeb, 0x57, 0x68, 0x56, 0xf3, 0x89, 0x89, - 0xaf, 0x5f, 0x01, 0x54, 0x93, 0x28, 0xd4, 0xdf, 0xce, 0xc3, 0x19, 0xbf, 0x93, 0x66, 0x1f, 0xd1, - 0x46, 0xf7, 0x71, 0x9e, 0x9b, 0xa2, 0xd2, 0xee, 0xdf, 0x55, 0xda, 0xea, 0xff, 0x25, 0x4d, 0x24, - 0x33, 0x2d, 0xfb, 0x74, 0x22, 0xf9, 0xd7, 0xa1, 0xe3, 0xea, 0x8f, 0x15, 0xe0, 0x9c, 0x2f, 0xf5, - 0xb9, 0xae, 0x85, 0x47, 0x0b, 0x33, 0x7a, 0xab, 0xf5, 0x38, 0xef, 0xc6, 0x87, 0x7d, 0x41, 0x2c, - 0x8b, 0x88, 0x91, 0x22, 0x4b, 0xe5, 0xba, 0x00, 0xd7, 0x6d, 0xd3, 0xd0, 0x64, 0x22, 0xf2, 0x0e, - 0x8c, 0xf8, 0x3f, 0xcb, 0x4e, 0xd3, 0xdf, 0x82, 0xe3, 0x45, 0x41, 0x50, 0x48, 0x77, 0x22, 0x81, - 0x31, 0x22, 0x05, 0xd4, 0x2f, 0x0d, 0xc0, 0xa5, 0xfb, 0xa6, 0x65, 0xd8, 0x9b, 0xae, 0x9f, 0xe4, - 0xf4, 0xc4, 0x1f, 0x94, 0x1d, 0x77, 0x72, 0xd3, 0x77, 0xe1, 0x7c, 0x5c, 0xa4, 0x4e, 0x10, 0x7a, - 0x5e, 0xf4, 0xce, 0x26, 0x27, 0xa8, 0xfb, 0xe9, 0x4e, 0xc5, 0x6d, 0x9b, 0x96, 0x5e, 0x32, 0x9e, - 0x2f, 0x75, 0x60, 0x2f, 0xf9, 0x52, 0x9f, 0x87, 0x52, 0xc5, 0x6e, 0xeb, 0xa6, 0x1f, 0x22, 0x09, - 0x47, 0x71, 0x50, 0x2f, 0x62, 0x34, 0x41, 0xc1, 0xf8, 0x8b, 0x8a, 0xb1, 0xcb, 0x86, 0x42, 0xfe, - 0x7e, 0x01, 0x66, 0xa5, 0x69, 0x32, 0x11, 0xb1, 0x61, 0x54, 0x54, 0x27, 0xee, 0xc6, 0x00, 0x37, - 0x4f, 0xaf, 0xf8, 0x32, 0xca, 0x56, 0xab, 0xa9, 0x48, 0x39, 0xbe, 0x8d, 0xe2, 0x69, 0x5c, 0xc5, - 0xc7, 0xf0, 0x5b, 0x32, 0x2d, 0xca, 0x5f, 0x12, 0x02, 0x4e, 0x32, 0xc3, 0x49, 0x21, 0xe0, 0x2c, - 0x23, 0x13, 0x91, 0x59, 0x98, 0xc0, 0x00, 0xe1, 0xc1, 0x56, 0x8a, 0xa9, 0xc4, 0x08, 0x1a, 0x95, - 0x78, 0xe5, 0xc2, 0x63, 0x8a, 0xb3, 0x8f, 0xab, 0x37, 0x04, 0x5a, 0x4b, 0x96, 0x20, 0x4f, 0x40, - 0x61, 0x69, 0xa1, 0x8c, 0x77, 0x35, 0x83, 0x3c, 0x39, 0x97, 0xd5, 0xd2, 0x35, 0x06, 0xbb, 0xf4, - 0x59, 0x20, 0xc9, 0xcf, 0xd9, 0xd7, 0x7d, 0xcc, 0x7f, 0x25, 0x6d, 0xf9, 0x4e, 0xba, 0x47, 0xcd, - 0x51, 0x4c, 0x84, 0x91, 0xbc, 0x78, 0xfd, 0x1f, 0x66, 0x5e, 0xbc, 0xd2, 0x91, 0xe6, 0xc5, 0x53, - 0x7f, 0x25, 0x07, 0x13, 0x89, 0x20, 0xfa, 0xe4, 0x65, 0x00, 0x0e, 0x91, 0x82, 0x95, 0x62, 0xf4, - 0x9f, 0x30, 0xb0, 0xbe, 0x58, 0x1e, 0x43, 0x32, 0x72, 0x1d, 0x06, 0xf9, 0x2f, 0x11, 0x60, 0x2c, - 0x59, 0xa4, 0xdb, 0x35, 0x0d, 0x2d, 0x20, 0x0a, 0x6b, 0xc1, 0x1b, 0xc9, 0x42, 0x6a, 0x11, 0x6f, - 0xab, 0x13, 0xd4, 0xc2, 0xc8, 0xd4, 0x9f, 0xce, 0xc3, 0x48, 0xd0, 0xe0, 0xb2, 0x71, 0x5c, 0x3a, - 0x57, 0x12, 0xf9, 0x08, 0x0a, 0xbb, 0xe5, 0x23, 0x88, 0xcd, 0xb7, 0x22, 0x01, 0xc1, 0xd1, 0x3d, - 0xa8, 0xfa, 0x6a, 0x1e, 0xce, 0x04, 0xb5, 0x1e, 0xe3, 0xe5, 0xd7, 0x47, 0x48, 0x24, 0x5f, 0xc9, - 0x81, 0x32, 0x6d, 0xb6, 0x5a, 0xa6, 0xd5, 0xac, 0x5a, 0xeb, 0xb6, 0xd3, 0xc6, 0x09, 0xf1, 0xf8, - 0x8e, 0x70, 0xd5, 0x3f, 0x9d, 0x83, 0x09, 0xd1, 0xa0, 0x19, 0xdd, 0x31, 0x8e, 0xef, 0x7c, 0x2c, - 0xde, 0x92, 0xe3, 0xd3, 0x17, 0xf5, 0x9b, 0x79, 0x80, 0x05, 0xbb, 0xf1, 0xe0, 0x84, 0xbf, 0xc7, - 0x7a, 0x13, 0x4a, 0x3c, 0xca, 0x9b, 0xd0, 0xd8, 0x09, 0xf1, 0xee, 0x88, 0x7d, 0x1a, 0x47, 0x4c, - 0x8f, 0x8b, 0xf9, 0xb8, 0xc4, 0xa3, 0xc4, 0x29, 0x39, 0x4d, 0x14, 0x61, 0x95, 0x32, 0x3a, 0xb1, - 0x60, 0x04, 0x95, 0x32, 0x58, 0xb4, 0xd2, 0x9d, 0xed, 0xc9, 0x62, 0xcb, 0x6e, 0x3c, 0xd0, 0x90, - 0x5e, 0xfd, 0x97, 0x39, 0x2e, 0xbb, 0x13, 0xfe, 0xaa, 0xd4, 0xff, 0xfc, 0xe2, 0x3e, 0x3f, 0xff, - 0xcf, 0xe4, 0xe0, 0x9c, 0x46, 0x1b, 0xf6, 0x43, 0xea, 0x6c, 0xcd, 0xd8, 0x06, 0xbd, 0x45, 0x2d, - 0xea, 0x1c, 0xd7, 0x88, 0xfa, 0x1d, 0x4c, 0xe0, 0x12, 0x36, 0xe6, 0xae, 0x4b, 0x8d, 0x93, 0x93, - 0x5c, 0x47, 0xfd, 0xb5, 0x01, 0x50, 0x52, 0xad, 0xde, 0x13, 0x6b, 0xce, 0x65, 0x6e, 0x65, 0x8a, - 0x47, 0xb5, 0x95, 0xe9, 0xdf, 0xdf, 0x56, 0xa6, 0xb4, 0xdf, 0xad, 0xcc, 0xc0, 0x5e, 0xb6, 0x32, - 0xed, 0xf8, 0x56, 0x66, 0x10, 0xb7, 0x32, 0x2f, 0xf7, 0xdc, 0xca, 0xcc, 0x5a, 0xc6, 0x01, 0x37, - 0x32, 0x27, 0x36, 0xf1, 0xf3, 0x41, 0x76, 0x60, 0x57, 0xd9, 0xa4, 0xd8, 0xb0, 0x1d, 0x83, 0x1a, - 0x62, 0xe3, 0x85, 0xa7, 0xfe, 0x8e, 0x80, 0x69, 0x01, 0x36, 0x91, 0x45, 0x7b, 0x74, 0x2f, 0x59, - 0xb4, 0x8f, 0x60, 0xff, 0xf5, 0xe5, 0x3c, 0x4c, 0xcc, 0x50, 0xc7, 0xe3, 0x61, 0x64, 0x8f, 0xc2, - 0x25, 0xae, 0x0c, 0x67, 0x24, 0x86, 0x68, 0x91, 0xe7, 0x43, 0x37, 0xbf, 0x06, 0x75, 0xbc, 0xb8, - 0x97, 0x60, 0x9c, 0x9e, 0x55, 0xef, 0x67, 0xb2, 0x13, 0x63, 0x37, 0xa8, 0xde, 0x87, 0x73, 0x41, - 0x9a, 0xe2, 0x97, 0x16, 0xd0, 0x4b, 0xc9, 0xe9, 0x8a, 0xfb, 0x4f, 0x4e, 0xa7, 0xfe, 0x72, 0x0e, - 0xae, 0x68, 0xd4, 0xa2, 0x9b, 0xfa, 0x5a, 0x8b, 0x4a, 0xcd, 0x12, 0x2b, 0x03, 0x9b, 0x35, 0x4c, - 0xb7, 0xad, 0x7b, 0x8d, 0x8d, 0x43, 0xc9, 0x68, 0x0e, 0x46, 0xe4, 0xf9, 0x6b, 0x1f, 0x73, 0x5b, - 0xa4, 0x9c, 0xfa, 0x6b, 0x45, 0x18, 0x98, 0xb6, 0xbd, 0xdb, 0xf6, 0x21, 0xb3, 0x25, 0x86, 0x53, - 0x7e, 0x7e, 0x1f, 0x67, 0x3d, 0x9f, 0xc2, 0xca, 0xa5, 0x04, 0x12, 0xe8, 0x42, 0xba, 0x66, 0x27, - 0x12, 0x6d, 0xf8, 0x64, 0xfb, 0xcc, 0x93, 0xf8, 0x2a, 0x0c, 0x61, 0xf4, 0x17, 0xe9, 0x34, 0x16, - 0x1d, 0xb4, 0x3d, 0x06, 0x8c, 0xd7, 0x11, 0x92, 0x92, 0x1f, 0x88, 0xc4, 0xbd, 0x2d, 0x1d, 0x3e, - 0xaf, 0xa2, 0x1c, 0x02, 0xf7, 0x65, 0x7e, 0x91, 0x87, 0x6d, 0x92, 0x72, 0xd0, 0xe0, 0x29, 0x4a, - 0xac, 0x49, 0x01, 0xe1, 0x11, 0xe6, 0x3c, 0x9c, 0x81, 0xd1, 0x69, 0xdb, 0x93, 0x9c, 0x81, 0x87, - 0xc2, 0x67, 0xa0, 0x4c, 0xf2, 0xe9, 0x9e, 0xc0, 0xd1, 0x32, 0xea, 0x77, 0x8b, 0x30, 0xe2, 0xff, - 0x3c, 0x26, 0xdd, 0x79, 0x11, 0x4a, 0xf3, 0xb6, 0x94, 0x86, 0x03, 0x1d, 0x88, 0x37, 0x6c, 0x37, - 0xe6, 0x19, 0x2d, 0x88, 0x98, 0xd4, 0x97, 0x6c, 0x43, 0x76, 0x7f, 0x47, 0xa9, 0x5b, 0xb6, 0x91, - 0x78, 0x3e, 0x1c, 0x10, 0x92, 0x2b, 0x50, 0xc4, 0x97, 0x03, 0xd2, 0x41, 0x7e, 0xec, 0xb5, 0x00, - 0xe2, 0x25, 0xad, 0x2c, 0xed, 0x57, 0x2b, 0x07, 0x0e, 0xaa, 0x95, 0x83, 0x47, 0xab, 0x95, 0xef, - 0xc1, 0x08, 0xd6, 0xe4, 0x67, 0xf1, 0xdb, 0x7d, 0x61, 0x7d, 0x42, 0xac, 0x7d, 0xa3, 0xbc, 0xdd, - 0x22, 0x97, 0x1f, 0x2e, 0x79, 0x11, 0x56, 0x31, 0xdd, 0x85, 0x43, 0x6c, 0xa7, 0xff, 0x51, 0x0e, - 0x06, 0xee, 0x5a, 0x0f, 0x2c, 0x7b, 0xf3, 0x70, 0x1a, 0xf7, 0x32, 0x0c, 0x0b, 0x36, 0xd2, 0xea, - 0x82, 0x2f, 0xc2, 0xbb, 0x1c, 0x5c, 0x47, 0x4e, 0x9a, 0x4c, 0x45, 0xde, 0x0a, 0x0a, 0xe1, 0xe3, - 0xa0, 0x42, 0x98, 0xc8, 0xc6, 0x2f, 0xd4, 0x88, 0xe6, 0xde, 0x90, 0xc9, 0xc9, 0x65, 0x28, 0x56, - 0x58, 0x53, 0xa5, 0x18, 0xbc, 0xac, 0x29, 0x1a, 0x42, 0xd5, 0x2f, 0x17, 0x61, 0x2c, 0x76, 0xf0, - 0xf5, 0x3c, 0x0c, 0x89, 0x83, 0x27, 0xd3, 0x4f, 0x06, 0x82, 0x8f, 0x87, 0x02, 0xa0, 0x36, 0xc8, - 0xff, 0xac, 0x1a, 0xe4, 0x33, 0x30, 0x60, 0xbb, 0xb8, 0x28, 0xe2, 0xb7, 0x8c, 0x85, 0x43, 0x68, - 0xb9, 0xc6, 0xda, 0xce, 0x07, 0x87, 0x20, 0x91, 0x35, 0xd2, 0x76, 0xf1, 0xd3, 0x6e, 0xc2, 0x90, - 0xee, 0xba, 0xd4, 0xab, 0x7b, 0x7a, 0x53, 0xce, 0x0f, 0x12, 0x00, 0xe5, 0xd1, 0x81, 0xc0, 0x55, - 0xbd, 0x49, 0x3e, 0x0b, 0xa3, 0x0d, 0x87, 0xe2, 0xb2, 0xa9, 0xb7, 0x58, 0x2b, 0x25, 0xb3, 0x36, - 0x82, 0x90, 0xef, 0x4f, 0x42, 0x44, 0xd5, 0x20, 0xf7, 0x60, 0x54, 0x7c, 0x0e, 0xf7, 0xdc, 0xc7, - 0x81, 0x36, 0x16, 0x2e, 0x63, 0x5c, 0x24, 0xdc, 0x77, 0x5f, 0x3c, 0xe0, 0x90, 0xc9, 0x65, 0xbe, - 0x86, 0x44, 0x4a, 0x96, 0x81, 0x6c, 0xd2, 0xb5, 0xba, 0xde, 0xf5, 0x36, 0x58, 0x5d, 0x3c, 0xbc, - 0xbd, 0x48, 0x8b, 0x89, 0xaf, 0x1e, 0x92, 0x58, 0xf9, 0x31, 0xc8, 0x26, 0x5d, 0x2b, 0x47, 0x90, - 0xe4, 0x3e, 0x9c, 0x4f, 0x16, 0x61, 0x9f, 0xcc, 0x2f, 0x07, 0x9e, 0xdb, 0xd9, 0x9e, 0x9c, 0x4c, - 0x25, 0x90, 0xd8, 0x9e, 0x4d, 0xb0, 0xad, 0x1a, 0xb7, 0x8b, 0x83, 0x03, 0xe3, 0x83, 0xda, 0x18, - 0x2b, 0xeb, 0x9b, 0x90, 0xa6, 0xa1, 0xfe, 0x7e, 0x8e, 0x99, 0x8a, 0xec, 0x83, 0x30, 0x2f, 0x38, - 0xd3, 0xf5, 0xf6, 0x3e, 0x75, 0xbd, 0x1d, 0x66, 0xf0, 0x2c, 0xb9, 0x3d, 0x66, 0x57, 0x4d, 0x60, - 0xc9, 0x14, 0x94, 0x0c, 0xf9, 0xd4, 0xec, 0x42, 0xb4, 0x13, 0xfc, 0x7a, 0x34, 0x41, 0x45, 0xae, - 0x42, 0x91, 0x2d, 0x59, 0xf1, 0x2d, 0xb3, 0x6c, 0x5d, 0x68, 0x48, 0xa1, 0xfe, 0x48, 0x1e, 0x46, - 0xa4, 0xaf, 0xb9, 0x71, 0xa8, 0xcf, 0x79, 0x63, 0x6f, 0xcd, 0xf4, 0x9d, 0x5e, 0x70, 0x2f, 0xe5, - 0x37, 0xf9, 0x66, 0x20, 0x8a, 0x3d, 0x5d, 0x48, 0x09, 0xc1, 0xbc, 0x2a, 0x3e, 0xb4, 0xb4, 0xf7, - 0xed, 0x23, 0xa3, 0xbf, 0x5d, 0x1c, 0xcc, 0x8f, 0x17, 0x6e, 0x17, 0x07, 0x8b, 0xe3, 0xfd, 0x18, - 0x87, 0x0b, 0x43, 0x5f, 0xf3, 0xbd, 0xb9, 0xb5, 0x6e, 0x36, 0x4f, 0xf8, 0xdb, 0x91, 0xa3, 0x8d, - 0x51, 0x16, 0x93, 0xcd, 0x09, 0x7f, 0x48, 0xf2, 0xa1, 0xca, 0xe6, 0x34, 0xe3, 0xa7, 0x90, 0xcd, - 0x3f, 0xce, 0x81, 0x92, 0x2a, 0x9b, 0xf2, 0x31, 0xf9, 0x41, 0x1c, 0x5d, 0xde, 0xcf, 0x3f, 0xce, - 0xc3, 0x44, 0xd5, 0xf2, 0x68, 0x93, 0xef, 0x18, 0x4f, 0xf8, 0x54, 0x71, 0x07, 0x86, 0xa5, 0x8f, - 0x11, 0x7d, 0xfe, 0x64, 0xb0, 0x1f, 0x0f, 0x51, 0x19, 0x9c, 0xe4, 0xd2, 0x47, 0xf7, 0x12, 0x27, - 0x2e, 0xe4, 0x13, 0x3e, 0xe7, 0x9c, 0x0c, 0x21, 0x9f, 0xf0, 0xc9, 0xeb, 0x23, 0x2a, 0xe4, 0xff, - 0x23, 0x07, 0x67, 0x53, 0x2a, 0x27, 0x57, 0x60, 0xa0, 0xd6, 0x5d, 0xc3, 0xb0, 0x5b, 0xb9, 0xd0, - 0x63, 0xd8, 0xed, 0xae, 0x61, 0xc4, 0x2d, 0xcd, 0x47, 0x92, 0x55, 0x7c, 0x5c, 0xbf, 0x5c, 0xad, - 0xcc, 0x08, 0xa9, 0xaa, 0x52, 0x98, 0x00, 0x06, 0x4e, 0xfb, 0xb2, 0xe0, 0x01, 0xbe, 0x6d, 0x1a, - 0x8d, 0xd8, 0x03, 0x7c, 0x56, 0x86, 0xfc, 0x20, 0x0c, 0x95, 0x3f, 0xe8, 0x3a, 0x14, 0xf9, 0x72, - 0x89, 0x7f, 0x2c, 0xe0, 0xeb, 0x23, 0xd2, 0x38, 0xf3, 0x58, 0x02, 0x8c, 0x22, 0xce, 0x3b, 0x64, - 0xa8, 0xfe, 0x74, 0x0e, 0x2e, 0x65, 0xb7, 0x8e, 0x7c, 0x0a, 0x06, 0xd8, 0xce, 0xbc, 0xac, 0x2d, - 0x89, 0x4f, 0xe7, 0x39, 0x72, 0xed, 0x16, 0xad, 0xeb, 0x8e, 0x6c, 0xec, 0xfb, 0x64, 0xe4, 0x6d, - 0x18, 0xae, 0xba, 0x6e, 0x97, 0x3a, 0xb5, 0x97, 0xef, 0x6a, 0x55, 0xb1, 0x27, 0xc4, 0x3d, 0x87, - 0x89, 0xe0, 0xba, 0xfb, 0x72, 0x2c, 0xb0, 0x96, 0x4c, 0xaf, 0xfe, 0x44, 0x0e, 0x2e, 0xf7, 0xfa, - 0x2a, 0xf2, 0x32, 0x0c, 0xae, 0x52, 0x4b, 0xb7, 0xbc, 0x6a, 0x45, 0x34, 0x09, 0xb7, 0x58, 0x1e, - 0xc2, 0xa2, 0x3b, 0x85, 0x80, 0x90, 0x15, 0xe2, 0xe7, 0x8a, 0x81, 0x23, 0x03, 0x3f, 0x03, 0x45, - 0x58, 0xac, 0x90, 0x4f, 0xa8, 0xfe, 0x41, 0x1e, 0x46, 0x56, 0x5a, 0xdd, 0xa6, 0x29, 0x2d, 0x1c, - 0x07, 0xb6, 0xb7, 0x7d, 0xeb, 0x37, 0xbf, 0x3f, 0xeb, 0x97, 0x0d, 0x37, 0xe7, 0x80, 0xc3, 0xcd, - 0x2f, 0x47, 0xde, 0x82, 0x52, 0x07, 0xbf, 0x23, 0x7e, 0x12, 0xcb, 0xbf, 0x2e, 0xeb, 0x24, 0x96, - 0x97, 0x61, 0xe3, 0xab, 0x71, 0x88, 0xf1, 0x15, 0x96, 0x95, 0x04, 0x1a, 0x2e, 0x12, 0xa7, 0x02, - 0x3d, 0x12, 0x81, 0x86, 0x0b, 0xc2, 0xa9, 0x40, 0x0f, 0x21, 0xd0, 0x5f, 0xcb, 0xc3, 0x58, 0xb4, - 0x4a, 0xf2, 0x29, 0x18, 0xe6, 0xd5, 0xf0, 0x73, 0xa1, 0x9c, 0xe4, 0x54, 0x1c, 0x82, 0x35, 0xe0, - 0x3f, 0xc4, 0x01, 0xd7, 0x99, 0x0d, 0xdd, 0xad, 0x87, 0x27, 0x34, 0xfc, 0xfe, 0x76, 0x90, 0x7b, - 0x42, 0xc5, 0x50, 0xda, 0xd8, 0x86, 0xee, 0xce, 0x84, 0xbf, 0xc9, 0x2c, 0x10, 0x87, 0x76, 0x5d, - 0x1a, 0x65, 0x50, 0x44, 0x06, 0x22, 0x41, 0x79, 0x1c, 0xab, 0x4d, 0x70, 0x98, 0xcc, 0xe6, 0x0b, - 0x41, 0xb3, 0x51, 0x19, 0xfa, 0xf7, 0x90, 0x3d, 0x5d, 0xa2, 0x4f, 0x3f, 0xe6, 0xe4, 0x04, 0x15, - 0xdd, 0xd3, 0xf9, 0xa6, 0xdc, 0xef, 0x00, 0xf5, 0x47, 0x3b, 0xd0, 0xbf, 0x6c, 0xd1, 0xe5, 0x75, - 0xf2, 0x12, 0x0c, 0x31, 0x85, 0x59, 0xb0, 0x59, 0x5f, 0xe6, 0x84, 0xff, 0x84, 0xa4, 0x49, 0x88, - 0x98, 0xef, 0xd3, 0x42, 0x2a, 0x72, 0x13, 0x20, 0x7c, 0x62, 0x26, 0xb4, 0x8f, 0xc8, 0x65, 0x38, - 0x66, 0xbe, 0x4f, 0x93, 0xe8, 0xfc, 0x52, 0xe2, 0x81, 0x4e, 0x21, 0x59, 0x8a, 0x63, 0xfc, 0x52, - 0x62, 0x7c, 0x2c, 0x00, 0x61, 0xbf, 0x56, 0x74, 0xd7, 0xdd, 0xb4, 0x1d, 0x63, 0x66, 0x43, 0xb7, - 0x9a, 0x34, 0xbe, 0x7b, 0x4a, 0x52, 0xcc, 0xf7, 0x69, 0x29, 0xe5, 0xc8, 0x1b, 0x30, 0x22, 0x3b, - 0x94, 0xc6, 0x9d, 0x3e, 0x64, 0xdc, 0x7c, 0x9f, 0x16, 0xa1, 0x25, 0xaf, 0xc1, 0xb0, 0xf8, 0x7d, - 0xdb, 0x16, 0x37, 0xca, 0x52, 0x2c, 0x22, 0x09, 0x35, 0xdf, 0xa7, 0xc9, 0x94, 0x52, 0xa5, 0x2b, - 0x8e, 0x69, 0x79, 0xe2, 0x8d, 0x72, 0xbc, 0x52, 0xc4, 0x49, 0x95, 0xe2, 0x6f, 0xf2, 0x36, 0x8c, - 0x06, 0x41, 0x9e, 0xde, 0xa7, 0x0d, 0x4f, 0x1c, 0x7e, 0x9f, 0x8f, 0x15, 0xe6, 0xc8, 0xf9, 0x3e, - 0x2d, 0x4a, 0x4d, 0xae, 0x42, 0x49, 0xa3, 0xae, 0xf9, 0x81, 0x7f, 0x5d, 0x3c, 0x26, 0x8d, 0x73, - 0xf3, 0x03, 0x26, 0x25, 0x81, 0x67, 0xbd, 0x13, 0xde, 0x4f, 0x8b, 0xa3, 0x6a, 0x12, 0xab, 0x65, - 0xd6, 0x32, 0x58, 0xef, 0x48, 0xce, 0x09, 0x9f, 0x0d, 0x43, 0x5f, 0x89, 0xa4, 0xad, 0xc3, 0xf1, - 0x18, 0x03, 0x32, 0x76, 0xbe, 0x4f, 0x8b, 0xd1, 0x4b, 0x52, 0xad, 0x98, 0xee, 0x03, 0x11, 0x6d, - 0x34, 0x2e, 0x55, 0x86, 0x92, 0xa4, 0xca, 0x7e, 0x4a, 0x55, 0x2f, 0x51, 0x6f, 0xd3, 0x76, 0x1e, - 0x88, 0xd8, 0xa2, 0xf1, 0xaa, 0x05, 0x56, 0xaa, 0x5a, 0x40, 0xe4, 0xaa, 0xd9, 0x80, 0x1b, 0x4b, - 0xaf, 0x5a, 0xf7, 0x74, 0xb9, 0x6a, 0x7e, 0x12, 0xe7, 0x77, 0xd2, 0x02, 0xd5, 0x1f, 0xf2, 0xdc, - 0xf9, 0xc9, 0x0e, 0x45, 0x9c, 0xd4, 0xa1, 0xf8, 0x9b, 0x55, 0x2a, 0xe5, 0x47, 0x17, 0xc9, 0xf1, - 0x83, 0x4a, 0x25, 0x14, 0xab, 0x54, 0xce, 0xa4, 0x7e, 0x53, 0x4e, 0x1b, 0xae, 0x4c, 0x44, 0x3b, - 0x28, 0xc4, 0xb0, 0x0e, 0x92, 0xd2, 0x8b, 0x4f, 0x62, 0x4a, 0x62, 0x85, 0x20, 0xf9, 0x70, 0xd0, - 0xc2, 0x99, 0x95, 0xf9, 0x3e, 0x0d, 0x93, 0x15, 0xab, 0x3c, 0xd9, 0xb5, 0x72, 0x16, 0x29, 0x46, - 0x7c, 0x0a, 0x06, 0x9b, 0xef, 0xd3, 0x78, 0x22, 0xec, 0x97, 0xa4, 0x84, 0x80, 0xca, 0xb9, 0xe8, - 0x14, 0x11, 0x20, 0xd8, 0x14, 0x11, 0xa6, 0x0d, 0x9c, 0x4b, 0xa6, 0xbd, 0x53, 0xce, 0x47, 0x97, - 0x9a, 0x38, 0x7e, 0xbe, 0x4f, 0x4b, 0xa6, 0xca, 0x7b, 0x2d, 0x92, 0x09, 0x4e, 0xb9, 0x10, 0x0b, - 0x00, 0x16, 0xa2, 0x98, 0xb8, 0xe4, 0x9c, 0x71, 0xcb, 0xb1, 0xcc, 0xf9, 0x62, 0xb2, 0xba, 0x18, - 0xdd, 0xb8, 0xa4, 0x90, 0xcc, 0xf7, 0x69, 0x69, 0x25, 0xc9, 0x4c, 0x22, 0x1f, 0x9b, 0xa2, 0x44, - 0x7d, 0x63, 0x62, 0xe8, 0xf9, 0x3e, 0x2d, 0x91, 0xc1, 0xed, 0xa6, 0x9c, 0x08, 0x4d, 0x79, 0x22, - 0xda, 0x89, 0x21, 0x86, 0x75, 0xa2, 0x94, 0x30, 0xed, 0xa6, 0x9c, 0x1c, 0x4b, 0xb9, 0x94, 0x2c, - 0x15, 0xce, 0x9c, 0x52, 0x12, 0x2d, 0x2d, 0x3d, 0xdf, 0x8f, 0xf2, 0xa4, 0xc8, 0xfa, 0x2b, 0xca, - 0xa7, 0xd1, 0xcc, 0xf7, 0x69, 0xe9, 0xb9, 0x82, 0xb4, 0xf4, 0x44, 0x39, 0xca, 0xe5, 0x5e, 0x3c, - 0x83, 0xd6, 0xa5, 0x27, 0xd9, 0xd1, 0x7b, 0xa4, 0x2d, 0x51, 0x9e, 0x8a, 0x46, 0x1f, 0xce, 0x24, - 0x9c, 0xef, 0xd3, 0x7a, 0x24, 0x3f, 0xb9, 0x9b, 0x91, 0x43, 0x44, 0x79, 0x3a, 0x9a, 0xf4, 0x3b, - 0x95, 0x68, 0xbe, 0x4f, 0xcb, 0xc8, 0x40, 0x72, 0x37, 0x23, 0xc5, 0x84, 0x32, 0xd9, 0x93, 0x6d, - 0x20, 0x8f, 0x8c, 0x04, 0x15, 0xcb, 0xa9, 0xd9, 0x19, 0x94, 0x67, 0xa2, 0xaa, 0x9b, 0x42, 0xc2, - 0x54, 0x37, 0x2d, 0xaf, 0xc3, 0x72, 0x6a, 0x3a, 0x01, 0xe5, 0xd9, 0x1e, 0x0c, 0x83, 0x36, 0xa6, - 0x26, 0x22, 0x58, 0x4e, 0x8d, 0xe7, 0xaf, 0xa8, 0x51, 0x86, 0x29, 0x24, 0x8c, 0x61, 0x5a, 0x26, - 0x80, 0xe5, 0xd4, 0xb0, 0xef, 0xca, 0x73, 0x3d, 0x18, 0x86, 0x2d, 0x4c, 0x0b, 0x18, 0xff, 0x5a, - 0x24, 0xee, 0xba, 0xf2, 0xb1, 0xe8, 0xbc, 0x21, 0xa1, 0xd8, 0xbc, 0x21, 0x47, 0x68, 0x9f, 0x49, - 0x44, 0x96, 0x55, 0x3e, 0x1e, 0x1d, 0xe6, 0x31, 0x34, 0x1b, 0xe6, 0xf1, 0x58, 0xb4, 0x33, 0x89, - 0x08, 0x9b, 0xca, 0x95, 0x2c, 0x26, 0x88, 0x8e, 0x32, 0xe1, 0x31, 0x39, 0xab, 0x29, 0x21, 0x1e, - 0x95, 0x4f, 0x44, 0xfd, 0xba, 0x13, 0x04, 0xf3, 0x7d, 0x5a, 0x4a, 0x60, 0x48, 0x2d, 0x3d, 0x9e, - 0x91, 0x72, 0x35, 0x3a, 0x6c, 0xd3, 0x68, 0xd8, 0xb0, 0x4d, 0x8d, 0x85, 0xb4, 0x90, 0xf6, 0xf8, - 0x44, 0xb9, 0x16, 0x35, 0xcc, 0x92, 0x14, 0xcc, 0x30, 0x4b, 0x79, 0xb4, 0xa2, 0xa5, 0xc7, 0xd8, - 0x51, 0x9e, 0xef, 0xd9, 0x42, 0xa4, 0x49, 0x69, 0x21, 0x0f, 0x39, 0x13, 0xda, 0x4e, 0x77, 0x3b, - 0x2d, 0x5b, 0x37, 0x94, 0x4f, 0xa6, 0xda, 0x4e, 0x1c, 0x29, 0xd9, 0x4e, 0x1c, 0xc0, 0x56, 0x79, - 0xf9, 0x8d, 0x83, 0xf2, 0x42, 0x74, 0x95, 0x97, 0x71, 0x6c, 0x95, 0x8f, 0xbc, 0x87, 0x98, 0x49, - 0xbc, 0x07, 0x50, 0x5e, 0x8c, 0x2a, 0x40, 0x0c, 0xcd, 0x14, 0x20, 0xfe, 0x82, 0xe0, 0x8b, 0xd9, - 0x1e, 0xf4, 0xca, 0x14, 0x72, 0x7b, 0xc6, 0xe7, 0x96, 0x45, 0x37, 0xdf, 0xa7, 0x65, 0x7b, 0xe1, - 0x57, 0x53, 0x1c, 0xe2, 0x95, 0xeb, 0x51, 0x05, 0x4b, 0x10, 0x30, 0x05, 0x4b, 0xba, 0xd1, 0x57, - 0x53, 0x3c, 0xda, 0x95, 0x4f, 0x65, 0xb2, 0x0a, 0xbe, 0x39, 0xc5, 0x0f, 0xfe, 0xa6, 0xec, 0x92, - 0xae, 0xbc, 0x14, 0x5d, 0xec, 0x42, 0x0c, 0x5b, 0xec, 0x24, 0xd7, 0xf5, 0x9b, 0xb2, 0x33, 0xb6, - 0x72, 0x23, 0x59, 0x2a, 0x5c, 0x22, 0x25, 0xa7, 0x6d, 0x2d, 0xdd, 0x87, 0x59, 0x79, 0x39, 0xaa, - 0x75, 0x69, 0x34, 0x4c, 0xeb, 0x52, 0xfd, 0x9f, 0xe7, 0x92, 0xae, 0xc8, 0xca, 0xcd, 0xf8, 0x26, - 0x3b, 0x8a, 0x67, 0x96, 0x4f, 0xc2, 0x7d, 0xf9, 0xb3, 0xf1, 0x60, 0x7b, 0xca, 0x2b, 0xb1, 0x6b, - 0xdf, 0x08, 0x96, 0xd9, 0xb7, 0xb1, 0xe0, 0x7c, 0x9f, 0x8d, 0xc7, 0xa7, 0x53, 0x5e, 0x4d, 0xe7, - 0x10, 0xe8, 0x4a, 0x3c, 0x9e, 0xdd, 0x67, 0xe3, 0x21, 0xdd, 0x94, 0xd7, 0xd2, 0x39, 0x04, 0xd2, - 0x8d, 0x87, 0x80, 0x7b, 0x49, 0x0a, 0x32, 0xaf, 0x7c, 0x3a, 0x6a, 0x3a, 0x06, 0x08, 0x66, 0x3a, - 0x86, 0xa1, 0xe8, 0x5f, 0x92, 0x82, 0xb3, 0x2b, 0xaf, 0x27, 0x8a, 0x04, 0x8d, 0x95, 0x42, 0xb8, - 0xbf, 0x24, 0x05, 0x35, 0x57, 0xde, 0x48, 0x14, 0x09, 0x5a, 0x27, 0x85, 0x3e, 0x37, 0x7a, 0xbd, - 0x5f, 0x55, 0xde, 0x8c, 0x1e, 0x06, 0x67, 0x53, 0xce, 0xf7, 0x69, 0xbd, 0xde, 0xc1, 0x7e, 0x31, - 0xdb, 0xb1, 0x5b, 0x79, 0x2b, 0x3a, 0x84, 0xb3, 0xe8, 0xd8, 0x10, 0xce, 0x74, 0x0e, 0x7f, 0x3b, - 0x16, 0xcb, 0x42, 0x79, 0x3b, 0x3a, 0xc5, 0x45, 0x90, 0x6c, 0x8a, 0x8b, 0x47, 0xbe, 0x88, 0x04, - 0x69, 0x50, 0x3e, 0x13, 0x9d, 0xe2, 0x64, 0x1c, 0x9b, 0xe2, 0x22, 0x01, 0x1d, 0x66, 0x12, 0xb1, - 0x03, 0x94, 0x77, 0xa2, 0x53, 0x5c, 0x0c, 0xcd, 0xa6, 0xb8, 0x78, 0xb4, 0x81, 0xb7, 0x63, 0x4f, - 0xe8, 0x95, 0xcf, 0xa6, 0xb7, 0x1f, 0x91, 0x72, 0xfb, 0xf9, 0x83, 0x7b, 0x2d, 0xfd, 0x2d, 0xb8, - 0x52, 0x8e, 0x8e, 0xdf, 0x34, 0x1a, 0x36, 0x7e, 0x53, 0xdf, 0x91, 0xc7, 0x37, 0x0e, 0x42, 0xab, - 0xa6, 0x7b, 0x6c, 0x1c, 0x42, 0x53, 0x24, 0x05, 0x1c, 0xd9, 0x23, 0xf3, 0x8d, 0xd0, 0x4c, 0xc6, - 0x1e, 0xd9, 0xdf, 0x06, 0xc5, 0xe8, 0xd9, 0xec, 0x9a, 0xf0, 0x33, 0x56, 0x2a, 0xd1, 0xd9, 0x35, - 0x41, 0xc0, 0x66, 0xd7, 0xa4, 0x77, 0xf2, 0x1c, 0x8c, 0x0b, 0x2d, 0xe2, 0xee, 0xd3, 0xa6, 0xd5, - 0x54, 0x66, 0x63, 0xef, 0x2d, 0x63, 0x78, 0x36, 0x3b, 0xc5, 0x61, 0xb8, 0x5e, 0x73, 0xd8, 0x4c, - 0xcb, 0xec, 0xac, 0xd9, 0xba, 0x63, 0xd4, 0xa8, 0x65, 0x28, 0x73, 0xb1, 0xf5, 0x3a, 0x85, 0x06, - 0xd7, 0xeb, 0x14, 0x38, 0x86, 0x88, 0x8b, 0xc1, 0x35, 0xda, 0xa0, 0xe6, 0x43, 0xaa, 0xdc, 0x42, - 0xb6, 0x93, 0x59, 0x6c, 0x05, 0xd9, 0x7c, 0x9f, 0x96, 0xc5, 0x81, 0xd9, 0xea, 0x8b, 0x5b, 0xb5, - 0x77, 0x17, 0x82, 0xf0, 0x03, 0x2b, 0x0e, 0xed, 0xe8, 0x0e, 0x55, 0xe6, 0xa3, 0xb6, 0x7a, 0x2a, - 0x11, 0xb3, 0xd5, 0x53, 0x11, 0x49, 0xb6, 0xfe, 0x58, 0xa8, 0xf6, 0x62, 0x1b, 0x8e, 0x88, 0xf4, - 0xd2, 0x6c, 0x76, 0x8a, 0x22, 0x98, 0x80, 0x16, 0x6c, 0xab, 0x89, 0x27, 0x15, 0xb7, 0xa3, 0xb3, - 0x53, 0x36, 0x25, 0x9b, 0x9d, 0xb2, 0xb1, 0x4c, 0xd5, 0xa3, 0x58, 0x3e, 0x06, 0xef, 0x44, 0x55, - 0x3d, 0x85, 0x84, 0xa9, 0x7a, 0x0a, 0x38, 0xc9, 0x50, 0xa3, 0x2e, 0xf5, 0x94, 0x85, 0x5e, 0x0c, - 0x91, 0x24, 0xc9, 0x10, 0xc1, 0x49, 0x86, 0x73, 0xd4, 0x6b, 0x6c, 0x28, 0x8b, 0xbd, 0x18, 0x22, - 0x49, 0x92, 0x21, 0x82, 0xd9, 0x66, 0x33, 0x0a, 0x9e, 0xee, 0xb6, 0x1e, 0xf8, 0x7d, 0xb6, 0x14, - 0xdd, 0x6c, 0x66, 0x12, 0xb2, 0xcd, 0x66, 0x26, 0x92, 0xfc, 0xc4, 0x9e, 0xfd, 0xe0, 0x95, 0x65, - 0xac, 0x70, 0x2a, 0xb4, 0x0b, 0xf6, 0x52, 0x6a, 0xbe, 0x4f, 0xdb, 0xab, 0x9f, 0xfd, 0x27, 0x03, - 0xa7, 0x51, 0x65, 0x05, 0xab, 0x3a, 0x13, 0x9c, 0x55, 0x70, 0xf0, 0x7c, 0x9f, 0x16, 0xb8, 0x95, - 0xbe, 0x06, 0xc3, 0xf8, 0x51, 0x55, 0xcb, 0xf4, 0x2a, 0xd3, 0xca, 0xbb, 0xd1, 0x2d, 0x93, 0x84, - 0x62, 0x5b, 0x26, 0xe9, 0x27, 0x9b, 0xc4, 0xf1, 0x27, 0x9f, 0x62, 0x2a, 0xd3, 0x8a, 0x16, 0x9d, - 0xc4, 0x23, 0x48, 0x36, 0x89, 0x47, 0x00, 0x41, 0xbd, 0x15, 0xc7, 0xee, 0x54, 0xa6, 0x95, 0x5a, - 0x4a, 0xbd, 0x1c, 0x15, 0xd4, 0xcb, 0x7f, 0x06, 0xf5, 0xd6, 0x36, 0xba, 0x5e, 0x85, 0x7d, 0xe3, - 0x6a, 0x4a, 0xbd, 0x3e, 0x32, 0xa8, 0xd7, 0x07, 0xb0, 0xa9, 0x10, 0x01, 0x2b, 0x8e, 0xcd, 0x26, - 0xed, 0x3b, 0x66, 0xab, 0xa5, 0xdc, 0x8d, 0x4e, 0x85, 0x71, 0x3c, 0x9b, 0x0a, 0xe3, 0x30, 0x66, - 0x7a, 0xf2, 0x56, 0xd1, 0xb5, 0x6e, 0x53, 0xb9, 0x17, 0x35, 0x3d, 0x43, 0x0c, 0x33, 0x3d, 0xc3, - 0x5f, 0xb8, 0xbb, 0x60, 0xbf, 0x34, 0xba, 0xee, 0x50, 0x77, 0x43, 0xb9, 0x1f, 0xdb, 0x5d, 0x48, - 0x38, 0xdc, 0x5d, 0x48, 0xbf, 0x49, 0x13, 0x9e, 0x8c, 0x2c, 0x34, 0xfe, 0xa5, 0x4d, 0x8d, 0xea, - 0x4e, 0x63, 0x43, 0xf9, 0x1c, 0xb2, 0x7a, 0x2e, 0x75, 0xa9, 0x8a, 0x92, 0xce, 0xf7, 0x69, 0xbd, - 0x38, 0xe1, 0xb6, 0xfc, 0xdd, 0x05, 0x1e, 0x09, 0x56, 0x5b, 0x99, 0xf1, 0x37, 0xa1, 0xef, 0xc5, - 0xb6, 0xe5, 0x49, 0x12, 0xdc, 0x96, 0x27, 0xc1, 0xa4, 0x03, 0x4f, 0xc7, 0xb6, 0x6a, 0x8b, 0x7a, - 0x8b, 0xed, 0x4b, 0xa8, 0xb1, 0xa2, 0x37, 0x1e, 0x50, 0x4f, 0xf9, 0x3c, 0xf2, 0xbe, 0x92, 0xb1, - 0xe1, 0x8b, 0x51, 0xcf, 0xf7, 0x69, 0xbb, 0xf0, 0x23, 0x2a, 0x14, 0x6b, 0x73, 0xab, 0x2b, 0xca, - 0x0f, 0x44, 0xcf, 0x37, 0x19, 0x6c, 0xbe, 0x4f, 0x43, 0x1c, 0xb3, 0xd2, 0xee, 0x76, 0x9a, 0x8e, - 0x6e, 0x50, 0x6e, 0x68, 0xa1, 0xed, 0x26, 0x0c, 0xd0, 0x1f, 0x8c, 0x5a, 0x69, 0x59, 0x74, 0xcc, - 0x4a, 0xcb, 0xc2, 0x31, 0x45, 0x8d, 0x24, 0x3d, 0x51, 0xbe, 0x10, 0x55, 0xd4, 0x08, 0x92, 0x29, - 0x6a, 0x34, 0x45, 0xca, 0xe7, 0xe0, 0x42, 0xb0, 0x9f, 0x17, 0xeb, 0x2f, 0xef, 0x34, 0xe5, 0x8b, - 0xc8, 0xe7, 0xe9, 0xc4, 0x65, 0x40, 0x84, 0x6a, 0xbe, 0x4f, 0xcb, 0x28, 0xcf, 0x56, 0xdc, 0x44, - 0x3e, 0x2f, 0x61, 0x5e, 0xfc, 0x50, 0x74, 0xc5, 0xcd, 0x20, 0x63, 0x2b, 0x6e, 0x06, 0x2a, 0x95, - 0xb9, 0x10, 0xaa, 0xbe, 0x0b, 0xf3, 0x40, 0xa6, 0x59, 0x1c, 0x52, 0x99, 0x0b, 0x4b, 0x6d, 0x6d, - 0x17, 0xe6, 0x81, 0xb5, 0x96, 0xc5, 0x81, 0x5c, 0x85, 0x52, 0xad, 0xb6, 0xa8, 0x75, 0x2d, 0xa5, - 0x11, 0xf3, 0x96, 0x45, 0xe8, 0x7c, 0x9f, 0x26, 0xf0, 0xcc, 0x0c, 0x9a, 0x6d, 0xe9, 0xae, 0x67, - 0x36, 0x5c, 0x1c, 0x31, 0xfe, 0x08, 0x31, 0xa2, 0x66, 0x50, 0x1a, 0x0d, 0x33, 0x83, 0xd2, 0xe0, - 0xcc, 0x5e, 0x9c, 0xd1, 0x5d, 0x57, 0xb7, 0x0c, 0x47, 0x9f, 0xc6, 0x65, 0x82, 0xc6, 0x5e, 0x63, - 0x45, 0xb0, 0xcc, 0x5e, 0x8c, 0x42, 0xf0, 0xf0, 0xdd, 0x87, 0xf8, 0x66, 0xce, 0x7a, 0xec, 0xf0, - 0x3d, 0x86, 0xc7, 0xc3, 0xf7, 0x18, 0x0c, 0xed, 0x4e, 0x1f, 0xa6, 0xd1, 0xa6, 0xc9, 0x44, 0xa4, - 0x34, 0x63, 0x76, 0x67, 0x9c, 0x00, 0xed, 0xce, 0x38, 0x30, 0xd2, 0x24, 0x7f, 0xb9, 0xdd, 0xc8, - 0x68, 0x52, 0xb8, 0xca, 0x26, 0xca, 0xb0, 0xf5, 0x3b, 0x1c, 0x1c, 0x95, 0x2d, 0x4b, 0x6f, 0xdb, - 0x95, 0x69, 0x5f, 0xea, 0x66, 0x74, 0xfd, 0xce, 0x24, 0x64, 0xeb, 0x77, 0x26, 0x92, 0xcd, 0xae, - 0xfe, 0x46, 0x6b, 0x43, 0x77, 0xa8, 0x51, 0x31, 0x1d, 0x3c, 0x59, 0xdc, 0xe2, 0x5b, 0xc3, 0xf7, - 0xa3, 0xb3, 0x6b, 0x0f, 0x52, 0x36, 0xbb, 0xf6, 0x40, 0x33, 0x23, 0x2f, 0x1d, 0xad, 0x51, 0xdd, - 0x50, 0x1e, 0x44, 0x8d, 0xbc, 0x6c, 0x4a, 0x66, 0xe4, 0x65, 0x63, 0xb3, 0x3f, 0xe7, 0xbe, 0x63, - 0x7a, 0x54, 0x69, 0xed, 0xe5, 0x73, 0x90, 0x34, 0xfb, 0x73, 0x10, 0xcd, 0x36, 0x84, 0xf1, 0x0e, - 0x69, 0x47, 0x37, 0x84, 0xc9, 0x6e, 0x88, 0x97, 0x60, 0x16, 0x8b, 0x78, 0x94, 0xa7, 0x58, 0x51, - 0x8b, 0x45, 0x80, 0x99, 0xc5, 0x12, 0x3e, 0xdb, 0x8b, 0x3c, 0xc5, 0x52, 0xec, 0xe8, 0x1a, 0x2a, - 0xe3, 0xd8, 0x1a, 0x1a, 0x79, 0xb6, 0xf5, 0x5a, 0xe4, 0x9d, 0x81, 0xd2, 0x89, 0x5a, 0x1d, 0x12, - 0x8a, 0x59, 0x1d, 0xf2, 0x8b, 0x84, 0x19, 0x38, 0x83, 0xb7, 0xe0, 0x5a, 0x37, 0xb8, 0xc7, 0xf9, - 0xe1, 0xe8, 0x67, 0xc6, 0xd0, 0xec, 0x33, 0x63, 0xa0, 0x08, 0x13, 0x31, 0x6d, 0x39, 0x19, 0x4c, - 0xc2, 0xf3, 0xc1, 0x18, 0x88, 0x2c, 0x00, 0xa9, 0x95, 0x17, 0x17, 0xaa, 0xc6, 0x8a, 0x7c, 0x45, - 0xe6, 0x46, 0x4f, 0x60, 0x93, 0x14, 0xf3, 0x7d, 0x5a, 0x4a, 0x39, 0xf2, 0x3e, 0x5c, 0x16, 0x50, - 0xf1, 0xe2, 0x1a, 0xd3, 0xfe, 0x1b, 0xc1, 0x82, 0xe0, 0x45, 0xfd, 0xd8, 0x7a, 0xd1, 0xce, 0xf7, - 0x69, 0x3d, 0x79, 0x65, 0xd7, 0x25, 0xd6, 0x87, 0xee, 0x5e, 0xea, 0x0a, 0x16, 0x89, 0x9e, 0xbc, - 0xb2, 0xeb, 0x12, 0x72, 0x7f, 0xb8, 0x97, 0xba, 0x82, 0x4e, 0xe8, 0xc9, 0x8b, 0xb8, 0x30, 0xd9, - 0x0b, 0x5f, 0x6e, 0xb5, 0x94, 0x4d, 0xac, 0xee, 0x13, 0x7b, 0xa9, 0xae, 0x8c, 0x06, 0xe7, 0x6e, - 0x1c, 0xd9, 0x2c, 0xbd, 0xdc, 0xa1, 0x56, 0x2d, 0xb2, 0x00, 0x3d, 0x8a, 0xce, 0xd2, 0x09, 0x02, - 0x36, 0x4b, 0x27, 0x80, 0x6c, 0x40, 0xc9, 0xcf, 0x55, 0x94, 0xad, 0xe8, 0x80, 0x92, 0x71, 0x6c, - 0x40, 0x45, 0x9e, 0xb6, 0x2c, 0xc3, 0xd9, 0xe5, 0x07, 0x9e, 0xee, 0x5b, 0x90, 0xae, 0xe8, 0xca, - 0x0f, 0x62, 0x97, 0x4c, 0x49, 0x12, 0xbc, 0x64, 0x4a, 0x82, 0xd9, 0x18, 0x61, 0xe0, 0xda, 0x96, - 0xd5, 0x98, 0xd3, 0xcd, 0x56, 0xd7, 0xa1, 0xca, 0xbf, 0x11, 0x1d, 0x23, 0x31, 0x34, 0x1b, 0x23, - 0x31, 0x10, 0x5b, 0xa0, 0x19, 0xa8, 0xec, 0xba, 0x66, 0xd3, 0x12, 0xfb, 0xca, 0x6e, 0xcb, 0x53, - 0xfe, 0xcd, 0xe8, 0x02, 0x9d, 0x46, 0xc3, 0x16, 0xe8, 0x34, 0x38, 0x9e, 0x3a, 0xb1, 0x5e, 0x60, - 0x8b, 0x87, 0x7c, 0x57, 0xf9, 0x6f, 0xc5, 0x4e, 0x9d, 0x52, 0x68, 0xf0, 0xd4, 0x29, 0x05, 0xce, - 0xd6, 0x47, 0x6e, 0x93, 0x2d, 0x98, 0xc1, 0x5d, 0xf5, 0xbf, 0x1d, 0x5d, 0x1f, 0xe3, 0x78, 0xb6, - 0x3e, 0xc6, 0x61, 0x51, 0x3e, 0xa2, 0x0b, 0xfe, 0x9d, 0x2c, 0x3e, 0x81, 0xfc, 0x13, 0x65, 0xc8, - 0x2d, 0x99, 0x8f, 0x18, 0x29, 0x3f, 0x92, 0xcb, 0x62, 0x14, 0x0c, 0x8f, 0x44, 0xa1, 0x28, 0x23, - 0x8d, 0x3e, 0x34, 0xe9, 0xa6, 0xf2, 0xa5, 0x4c, 0x46, 0x9c, 0x20, 0xca, 0x88, 0xc3, 0xc8, 0x7b, - 0x70, 0x21, 0x84, 0x2d, 0xd2, 0xf6, 0x5a, 0x30, 0x33, 0xfd, 0x68, 0x2e, 0x6a, 0x06, 0xa7, 0x93, - 0x31, 0x33, 0x38, 0x1d, 0x93, 0xc6, 0x5a, 0x88, 0xee, 0xdf, 0xdd, 0x85, 0x75, 0x20, 0xc1, 0x0c, - 0x06, 0x69, 0xac, 0x85, 0x34, 0x7f, 0x6c, 0x17, 0xd6, 0x81, 0x4c, 0x33, 0x18, 0x90, 0x9f, 0xcc, - 0xc1, 0x95, 0x74, 0x54, 0xb9, 0xd5, 0x9a, 0xb3, 0x9d, 0x10, 0xa7, 0xfc, 0xa9, 0x5c, 0xf4, 0xa0, - 0x61, 0x6f, 0xc5, 0xe6, 0xfb, 0xb4, 0x3d, 0x56, 0x40, 0x3e, 0x03, 0xa3, 0xe5, 0xae, 0x61, 0x7a, - 0x78, 0xf1, 0xc6, 0x0c, 0xe7, 0x1f, 0xcf, 0xc5, 0xb6, 0x38, 0x32, 0x16, 0xb7, 0x38, 0x32, 0x80, - 0xdc, 0x86, 0x89, 0x1a, 0x6d, 0x74, 0x1d, 0xd3, 0xdb, 0xd2, 0x68, 0xc7, 0x76, 0x3c, 0xc6, 0xe3, - 0x4f, 0xe7, 0xa2, 0x93, 0x58, 0x82, 0x82, 0x4d, 0x62, 0x09, 0x20, 0xb9, 0x97, 0xb8, 0x95, 0x17, - 0x9d, 0xf9, 0x13, 0xb9, 0x9e, 0xd7, 0xf2, 0x41, 0x5f, 0xa6, 0x17, 0x27, 0x2b, 0xb1, 0x5b, 0x74, - 0xc1, 0xf5, 0x27, 0x73, 0x3d, 0xae, 0xd1, 0xa5, 0x19, 0x2e, 0x09, 0x66, 0x1c, 0x53, 0x32, 0xc0, - 0x2b, 0x7f, 0x26, 0xd7, 0xe3, 0xda, 0x3b, 0xe4, 0x98, 0x96, 0x3c, 0xfe, 0x15, 0xee, 0x29, 0x22, - 0x18, 0xfd, 0x54, 0x2e, 0xe9, 0x2a, 0x12, 0x94, 0x97, 0x08, 0x59, 0xb1, 0xbb, 0x6e, 0xa0, 0xf4, - 0x5f, 0xce, 0x25, 0x7d, 0xf3, 0xc2, 0x62, 0xe1, 0x2f, 0x42, 0xe1, 0xd2, 0xec, 0x23, 0x8f, 0x3a, - 0x96, 0xde, 0xc2, 0xee, 0xac, 0x79, 0xb6, 0xa3, 0x37, 0xe9, 0xac, 0xa5, 0xaf, 0xb5, 0xa8, 0xf2, - 0xd3, 0xb9, 0xa8, 0x05, 0x9b, 0x4d, 0xca, 0x2c, 0xd8, 0x6c, 0x2c, 0xd9, 0x80, 0x27, 0xd3, 0xb0, - 0x15, 0xd3, 0xc5, 0x7a, 0xbe, 0x92, 0x8b, 0x9a, 0xb0, 0x3d, 0x68, 0x99, 0x09, 0xdb, 0x03, 0x4d, - 0x6e, 0xc0, 0xd0, 0xb4, 0xed, 0x4f, 0xbf, 0x7f, 0x36, 0xe6, 0x0c, 0x19, 0x60, 0xe6, 0xfb, 0xb4, - 0x90, 0x4c, 0x94, 0x11, 0x83, 0xfa, 0xab, 0xc9, 0x32, 0xe1, 0xe5, 0x53, 0xf0, 0x43, 0x94, 0x11, - 0xe2, 0xfe, 0xf7, 0x92, 0x65, 0xc2, 0x3b, 0xae, 0xe0, 0x07, 0x9b, 0x49, 0x78, 0x8d, 0x8b, 0x73, - 0x65, 0x66, 0xb7, 0xcd, 0x6c, 0xe8, 0xad, 0x16, 0xb5, 0x9a, 0x54, 0xf9, 0x5a, 0x6c, 0x26, 0x49, - 0x27, 0x63, 0x33, 0x49, 0x3a, 0x86, 0xfc, 0x20, 0x5c, 0xbc, 0xa7, 0xb7, 0x4c, 0x23, 0xc4, 0xf9, - 0xf9, 0xc0, 0x95, 0x9f, 0xc9, 0x45, 0x77, 0xd3, 0x19, 0x74, 0x6c, 0x37, 0x9d, 0x81, 0x22, 0x8b, - 0x40, 0x70, 0x19, 0x0d, 0x66, 0x0b, 0xb6, 0x3e, 0x2b, 0xff, 0x7e, 0x2e, 0x6a, 0xa7, 0x26, 0x49, - 0x98, 0x9d, 0x9a, 0x84, 0x92, 0x7a, 0x76, 0x6a, 0x10, 0xe5, 0x67, 0x73, 0xd1, 0xd3, 0x9a, 0x2c, - 0xc2, 0xf9, 0x3e, 0x2d, 0x3b, 0xbf, 0xc8, 0x2d, 0x18, 0xaf, 0xad, 0x54, 0xe7, 0xe6, 0x66, 0x6b, - 0xf7, 0xaa, 0x15, 0x7c, 0xe8, 0x60, 0x28, 0x7f, 0x2e, 0xb6, 0x62, 0xc5, 0x09, 0xd8, 0x8a, 0x15, - 0x87, 0x91, 0x37, 0x61, 0x84, 0xb5, 0x9f, 0x0d, 0x18, 0xfc, 0xe4, 0x9f, 0xcb, 0x45, 0xcd, 0x29, - 0x19, 0xc9, 0xcc, 0x29, 0xf9, 0x37, 0xa9, 0xc1, 0x39, 0x26, 0xc5, 0x15, 0x87, 0xae, 0x53, 0x87, - 0x5a, 0x0d, 0x7f, 0x4c, 0xff, 0x7c, 0x2e, 0x6a, 0x65, 0xa4, 0x11, 0x31, 0x2b, 0x23, 0x0d, 0x4e, - 0x1e, 0xc0, 0xe5, 0xf8, 0x49, 0x90, 0xfc, 0xec, 0x54, 0xf9, 0xf3, 0xb9, 0x98, 0x31, 0xdc, 0x83, - 0x18, 0x8d, 0xe1, 0x1e, 0x78, 0x62, 0xc1, 0x53, 0xe2, 0x58, 0x45, 0x38, 0x5c, 0xc6, 0x6b, 0xfb, - 0x0b, 0xbc, 0xb6, 0x8f, 0x87, 0x0e, 0x81, 0x3d, 0xa8, 0xe7, 0xfb, 0xb4, 0xde, 0xec, 0x98, 0x9e, - 0x25, 0x13, 0x60, 0x28, 0x7f, 0x31, 0x97, 0xee, 0x91, 0x12, 0x71, 0x53, 0x4e, 0xcb, 0x9c, 0xf1, - 0x5e, 0x56, 0xfa, 0x06, 0xe5, 0x2f, 0xc5, 0xc6, 0x5b, 0x3a, 0x19, 0x1b, 0x6f, 0x19, 0xf9, 0x1f, - 0x6e, 0xc3, 0x04, 0x57, 0xea, 0x15, 0x1d, 0x87, 0xa1, 0xd5, 0xa4, 0x86, 0xf2, 0x1f, 0xc4, 0x56, - 0xbb, 0x04, 0x05, 0xba, 0xf6, 0xc4, 0x81, 0x6c, 0xea, 0xae, 0x75, 0x74, 0xcb, 0xc2, 0x63, 0x56, - 0xe5, 0x3f, 0x8c, 0x4d, 0xdd, 0x21, 0x0a, 0x1d, 0x77, 0x83, 0x5f, 0x4c, 0x13, 0x7a, 0xa5, 0x3e, - 0x52, 0xfe, 0x72, 0x4c, 0x13, 0x7a, 0x11, 0x33, 0x4d, 0xe8, 0x99, 0x47, 0xe9, 0x5e, 0xc6, 0x13, - 0x70, 0xe5, 0xeb, 0xb1, 0x15, 0x39, 0x95, 0x8a, 0xad, 0xc8, 0xe9, 0x2f, 0xc8, 0xef, 0x65, 0x3c, - 0x9f, 0x56, 0x7e, 0xa1, 0x37, 0xdf, 0x70, 0xa5, 0x4f, 0x7f, 0x7d, 0x7d, 0x2f, 0xe3, 0xe9, 0xb1, - 0xf2, 0x57, 0x7a, 0xf3, 0x0d, 0x1d, 0xfb, 0xd2, 0x5f, 0x2e, 0xd7, 0xb3, 0x9f, 0xed, 0x2a, 0x7f, - 0x35, 0x3e, 0x75, 0x65, 0x10, 0xe2, 0xd4, 0x95, 0xf5, 0xf6, 0x77, 0x0d, 0x9e, 0xe0, 0x1a, 0x72, - 0xcb, 0xd1, 0x3b, 0x1b, 0x35, 0xea, 0x79, 0xa6, 0xd5, 0xf4, 0x77, 0x62, 0x7f, 0x2d, 0x17, 0x3b, - 0x1e, 0xcb, 0xa2, 0xc4, 0xe3, 0xb1, 0x2c, 0x24, 0x53, 0xde, 0xc4, 0x03, 0x5d, 0xe5, 0xaf, 0xc7, - 0x94, 0x37, 0x41, 0xc1, 0x94, 0x37, 0xf9, 0xae, 0xf7, 0x76, 0xca, 0x3b, 0x54, 0xe5, 0x3f, 0xca, - 0xe6, 0x15, 0xb4, 0x2f, 0xe5, 0xf9, 0xea, 0xed, 0x94, 0xe7, 0x96, 0xca, 0x7f, 0x9c, 0xcd, 0x2b, - 0xf4, 0x41, 0x4a, 0xbe, 0xd2, 0x7c, 0x0f, 0x2e, 0xf0, 0xd9, 0x7c, 0x8e, 0x1a, 0x34, 0xf2, 0xa1, - 0xbf, 0x18, 0x1b, 0xfb, 0xe9, 0x64, 0x78, 0xe4, 0x9e, 0x8a, 0x49, 0x63, 0x2d, 0xda, 0xfa, 0x37, - 0x76, 0x61, 0x1d, 0x6e, 0x08, 0xd2, 0x31, 0x6c, 0xbd, 0x91, 0x1f, 0xbf, 0x29, 0xbf, 0x14, 0x5b, - 0x6f, 0x64, 0x24, 0xba, 0x73, 0xc8, 0x2f, 0xe5, 0xde, 0x8c, 0x3e, 0xf4, 0x52, 0xfe, 0x66, 0x6a, - 0xe1, 0xa0, 0x03, 0xa2, 0xaf, 0xc2, 0xde, 0x8c, 0x3e, 0x6a, 0x52, 0x7e, 0x39, 0xb5, 0x70, 0xf0, - 0x01, 0xd1, 0x17, 0x50, 0x6c, 0x8b, 0xd4, 0xf5, 0x6c, 0xce, 0x2a, 0x32, 0x3d, 0xfc, 0xad, 0xf8, - 0x16, 0x29, 0x95, 0x0c, 0xb7, 0x48, 0xa9, 0x98, 0x34, 0xd6, 0xe2, 0xf3, 0x7e, 0x65, 0x17, 0xd6, - 0xd2, 0xc6, 0x2e, 0x15, 0x93, 0xc6, 0x5a, 0x7c, 0xfc, 0x37, 0x76, 0x61, 0x2d, 0x6d, 0xec, 0x52, - 0x31, 0xcc, 0x1c, 0x0b, 0x31, 0xf7, 0xa8, 0xe3, 0x86, 0xea, 0xf7, 0x9f, 0xc4, 0xcc, 0xb1, 0x0c, - 0x3a, 0x66, 0x8e, 0x65, 0xa0, 0x52, 0xb9, 0x0b, 0xa1, 0xfc, 0xea, 0x6e, 0xdc, 0xc3, 0x7b, 0x99, - 0x0c, 0x54, 0x2a, 0x77, 0x21, 0x97, 0xbf, 0xbd, 0x1b, 0xf7, 0xf0, 0x62, 0x26, 0x03, 0xc5, 0x8c, - 0xa2, 0x9a, 0xa7, 0x7b, 0x66, 0x63, 0xde, 0x76, 0x3d, 0x69, 0x91, 0xff, 0x3b, 0x31, 0xa3, 0x28, - 0x8d, 0x88, 0x19, 0x45, 0x69, 0xf0, 0x24, 0x53, 0x21, 0x8d, 0x5f, 0xeb, 0xc9, 0x34, 0xb4, 0xb4, - 0xd2, 0xe0, 0x49, 0xa6, 0x42, 0x08, 0xff, 0x69, 0x4f, 0xa6, 0xa1, 0xa7, 0x7c, 0x1a, 0x9c, 0x59, - 0xa6, 0x33, 0x8e, 0xbd, 0x69, 0xdd, 0xa6, 0x9b, 0xb4, 0x25, 0x3e, 0xfd, 0xd7, 0x63, 0x96, 0x69, - 0x9c, 0x00, 0x6f, 0x51, 0x62, 0xb0, 0x28, 0x23, 0xf1, 0xb9, 0xbf, 0x91, 0xc9, 0x28, 0x3c, 0x26, - 0x8a, 0xc3, 0xa2, 0x8c, 0xc4, 0x27, 0xfe, 0x66, 0x26, 0xa3, 0xf0, 0x98, 0x28, 0x0e, 0x23, 0x65, - 0x18, 0xc3, 0xb7, 0x12, 0xba, 0xeb, 0x7b, 0x7e, 0xfe, 0x4e, 0x2e, 0x7a, 0xeb, 0x15, 0x45, 0xcf, - 0xf7, 0x69, 0xb1, 0x02, 0x32, 0x0b, 0xf1, 0x49, 0xdf, 0xca, 0x60, 0x11, 0xfa, 0x3b, 0x46, 0x21, - 0x32, 0x0b, 0xf1, 0x31, 0xff, 0x59, 0x06, 0x8b, 0xd0, 0xe1, 0x31, 0x0a, 0x21, 0x9f, 0x86, 0xe1, - 0xda, 0xdc, 0xea, 0x8a, 0x9f, 0x9e, 0xef, 0xef, 0xe6, 0x62, 0xaf, 0x8a, 0x42, 0x1c, 0xbe, 0x2a, - 0x0a, 0x7f, 0x4e, 0x0f, 0x40, 0x3f, 0x1e, 0xa5, 0xde, 0x2e, 0x0d, 0x7e, 0x33, 0x37, 0xfe, 0x5b, - 0xb9, 0xdb, 0xa5, 0xc1, 0xdf, 0xca, 0x8d, 0xff, 0x36, 0xfb, 0xff, 0xb7, 0x73, 0xe3, 0xbf, 0x93, - 0xd3, 0x9e, 0x08, 0x87, 0x45, 0xb9, 0x49, 0x2d, 0x6f, 0xa5, 0xa5, 0x8b, 0x41, 0x9d, 0x8a, 0xe2, - 0x3f, 0x53, 0x51, 0x22, 0x15, 0xd6, 0xd7, 0x73, 0x30, 0x52, 0xf3, 0x1c, 0xaa, 0xb7, 0x45, 0x64, - 0xb9, 0x4b, 0x30, 0xc8, 0x9d, 0x9f, 0xfd, 0x97, 0xda, 0x5a, 0xf0, 0x9b, 0x5c, 0x81, 0xb1, 0x05, - 0xdd, 0xf5, 0xb0, 0x89, 0x55, 0xcb, 0xa0, 0x8f, 0xf0, 0xe1, 0x5f, 0x41, 0x8b, 0x41, 0xc9, 0x02, - 0xa7, 0xe3, 0xe5, 0x30, 0x98, 0x68, 0x61, 0xd7, 0x80, 0x6a, 0x83, 0xdf, 0xde, 0x9e, 0xec, 0xc3, - 0xf8, 0x69, 0xb1, 0xb2, 0xea, 0xef, 0xe7, 0x20, 0xe1, 0x96, 0x7d, 0xf0, 0x08, 0x0a, 0xcb, 0x70, - 0x26, 0x16, 0xc0, 0x56, 0xbc, 0x5e, 0xdc, 0x63, 0x7c, 0xdb, 0x78, 0x69, 0xf2, 0x89, 0xe0, 0xd5, - 0xdc, 0x5d, 0x6d, 0x41, 0x04, 0xcb, 0xc3, 0x34, 0x0f, 0x5d, 0xa7, 0xa5, 0x49, 0x28, 0x11, 0x0c, - 0xe9, 0x7b, 0xe3, 0x61, 0x74, 0x4e, 0x72, 0x45, 0x84, 0x73, 0xc8, 0x85, 0x21, 0xf6, 0x62, 0x49, - 0xe5, 0x79, 0xf8, 0x86, 0xcf, 0xc0, 0x48, 0xb5, 0xdd, 0xa1, 0x8e, 0x6b, 0x5b, 0xba, 0x67, 0x3b, - 0xe2, 0x35, 0x3c, 0x86, 0x5f, 0x33, 0x25, 0xb8, 0x1c, 0x12, 0x4c, 0xa6, 0x27, 0xd7, 0xfc, 0x4c, - 0x75, 0x05, 0x8c, 0x8b, 0x8a, 0x4f, 0x5a, 0xe3, 0x89, 0xca, 0x39, 0x05, 0x23, 0xbd, 0xeb, 0xea, - 0xf8, 0xbe, 0x32, 0x20, 0xed, 0x32, 0x80, 0x4c, 0x8a, 0x14, 0xe4, 0x05, 0x28, 0xe1, 0x7d, 0x94, - 0x8b, 0x19, 0x28, 0x45, 0xe0, 0xbf, 0x16, 0x42, 0xe4, 0x30, 0x6b, 0x9c, 0x86, 0xdc, 0x81, 0xf1, - 0xf0, 0xb2, 0xfd, 0x96, 0x63, 0x77, 0x3b, 0x7e, 0xce, 0x19, 0x4c, 0xf0, 0xfe, 0x20, 0xc0, 0xd5, - 0x9b, 0x88, 0x94, 0x58, 0x24, 0x0a, 0x92, 0x79, 0x38, 0x13, 0xc2, 0x98, 0x88, 0xfc, 0x5c, 0x57, - 0x98, 0x67, 0x54, 0xe2, 0xc5, 0xc4, 0x19, 0xc9, 0x33, 0x1a, 0x2b, 0x46, 0xaa, 0x30, 0xe0, 0x47, - 0xfd, 0x1b, 0xdc, 0x55, 0x49, 0xcf, 0x8a, 0xa8, 0x7f, 0x03, 0x72, 0xbc, 0x3f, 0xbf, 0x3c, 0x99, - 0x83, 0x31, 0xcd, 0xee, 0x7a, 0x74, 0xd5, 0x16, 0xbb, 0x54, 0x11, 0x5d, 0x12, 0xdb, 0xe4, 0x30, - 0x4c, 0xdd, 0xb3, 0xfd, 0xfc, 0xf8, 0x72, 0x9e, 0xf6, 0x68, 0x29, 0xb2, 0x04, 0x13, 0x09, 0xb7, - 0x04, 0x39, 0x6b, 0xbd, 0xf4, 0x79, 0x49, 0x66, 0xc9, 0xa2, 0xe4, 0xc7, 0x73, 0x50, 0x5a, 0x75, - 0x74, 0xd3, 0x73, 0xc5, 0xd3, 0xcc, 0xf3, 0x53, 0x9b, 0x8e, 0xde, 0x61, 0xfa, 0x31, 0x85, 0x81, - 0x6f, 0xef, 0xe9, 0xad, 0x2e, 0x75, 0xa7, 0xef, 0xb3, 0xaf, 0xfb, 0x1f, 0xb6, 0x27, 0xdf, 0x6c, - 0xe2, 0xe1, 0xe7, 0x54, 0xc3, 0x6e, 0x5f, 0x6f, 0x3a, 0xfa, 0x43, 0xd3, 0x43, 0x13, 0x53, 0x6f, - 0x5d, 0xf7, 0x68, 0x0b, 0xcf, 0x58, 0xaf, 0xeb, 0x1d, 0xf3, 0x3a, 0x06, 0x58, 0xbf, 0x1e, 0x70, - 0xe2, 0x35, 0x30, 0x15, 0xf0, 0xf0, 0x2f, 0x59, 0x05, 0x38, 0x8e, 0x2c, 0x01, 0x88, 0x4f, 0x2d, - 0x77, 0x3a, 0xe2, 0x9d, 0xa7, 0x74, 0x32, 0xe9, 0x63, 0xb8, 0x62, 0x07, 0x02, 0xd3, 0x3b, 0x52, - 0x50, 0x61, 0x4d, 0xe2, 0xc0, 0xb4, 0x60, 0x55, 0xb4, 0xc8, 0x17, 0xd3, 0x68, 0x28, 0x71, 0xbf, - 0xb1, 0x29, 0x42, 0x8a, 0x17, 0x23, 0x6b, 0x70, 0x46, 0xf0, 0x0d, 0x52, 0x90, 0x8c, 0x45, 0x67, - 0x85, 0x18, 0x9a, 0x2b, 0x6d, 0xd0, 0x46, 0x43, 0x80, 0xe5, 0x3a, 0x62, 0x25, 0xc8, 0x74, 0x98, - 0x32, 0x79, 0x49, 0x6f, 0x53, 0x57, 0x39, 0x83, 0x1a, 0x7b, 0x79, 0x67, 0x7b, 0x52, 0xf1, 0xcb, - 0x63, 0x00, 0x4c, 0x59, 0x74, 0xd1, 0x22, 0x32, 0x0f, 0xae, 0xf5, 0xe3, 0x29, 0x3c, 0xe2, 0x3a, - 0x1f, 0x2d, 0x42, 0x66, 0x60, 0x34, 0x78, 0x66, 0x72, 0xf7, 0x6e, 0xb5, 0x82, 0x0f, 0x49, 0x45, - 0x0c, 0xd4, 0x58, 0x92, 0x10, 0x99, 0x49, 0xa4, 0x8c, 0x14, 0x9b, 0x83, 0xbf, 0x2c, 0x8d, 0xc5, - 0xe6, 0xe8, 0xa4, 0xc4, 0xe6, 0x58, 0x21, 0x6f, 0xc3, 0x70, 0xf9, 0x7e, 0x4d, 0xc4, 0x1c, 0x71, - 0x95, 0xb3, 0x61, 0xc6, 0x29, 0x7d, 0xd3, 0xad, 0xfb, 0xf1, 0x49, 0xe4, 0xa6, 0xcb, 0xf4, 0x64, - 0x16, 0xc6, 0x22, 0x9e, 0x6a, 0xae, 0x72, 0x0e, 0x39, 0x60, 0xcb, 0x75, 0xc4, 0xd4, 0x1d, 0x81, - 0x92, 0x87, 0x57, 0xb4, 0x10, 0xd3, 0x9a, 0x8a, 0xe9, 0x62, 0xf6, 0x1e, 0x8d, 0x62, 0x78, 0x13, - 0x7c, 0x96, 0x3a, 0xc8, 0xb5, 0xc6, 0x10, 0xa8, 0xba, 0xc3, 0x71, 0x72, 0x8f, 0xc6, 0x8a, 0x91, - 0xf7, 0x81, 0x60, 0xbe, 0x1f, 0x6a, 0xf8, 0x17, 0x97, 0xd5, 0x8a, 0xab, 0x5c, 0xc0, 0x00, 0xe0, - 0x24, 0x1e, 0x4e, 0xa1, 0x5a, 0x99, 0xbe, 0x22, 0xa6, 0x8f, 0xa7, 0x75, 0x5e, 0xaa, 0xee, 0x87, - 0x52, 0xa8, 0x9b, 0x91, 0x64, 0xc8, 0x29, 0x5c, 0xc9, 0x26, 0x5c, 0x5c, 0x71, 0xe8, 0x43, 0xd3, - 0xee, 0xba, 0xfe, 0xf2, 0xe1, 0xcf, 0x5b, 0x17, 0x77, 0x9d, 0xb7, 0x9e, 0x15, 0x15, 0x9f, 0xef, - 0x38, 0xf4, 0x61, 0xdd, 0x0f, 0xfb, 0x1c, 0x89, 0x5a, 0x9a, 0xc5, 0x1d, 0x53, 0x3a, 0x7f, 0xd0, - 0x75, 0xa8, 0x80, 0x9b, 0xd4, 0x55, 0x94, 0x70, 0xaa, 0xe5, 0x91, 0x6a, 0xcc, 0x00, 0x17, 0x49, - 0xe9, 0x1c, 0x2d, 0x46, 0x34, 0x20, 0xb7, 0x66, 0xfc, 0x4b, 0xec, 0x72, 0x83, 0x27, 0xbe, 0x55, - 0x9e, 0x40, 0x66, 0x2a, 0x13, 0x4b, 0xb3, 0x11, 0x84, 0x80, 0xaf, 0xeb, 0x02, 0x2f, 0x8b, 0x25, - 0x59, 0x9a, 0x2c, 0xc0, 0xf8, 0x8a, 0x83, 0x47, 0x6a, 0x77, 0xe8, 0xd6, 0x8a, 0xdd, 0x32, 0x1b, - 0x5b, 0xf8, 0x3a, 0x56, 0x4c, 0x95, 0x1d, 0x8e, 0xab, 0x3f, 0xa0, 0x5b, 0xf5, 0x0e, 0x62, 0xe5, - 0x65, 0x25, 0x5e, 0x52, 0x0e, 0xc9, 0xfc, 0xe4, 0xde, 0x42, 0x32, 0x53, 0x18, 0x17, 0x57, 0xe0, - 0x8f, 0x3c, 0x6a, 0xb1, 0xa5, 0xde, 0x15, 0x2f, 0x61, 0x95, 0xd8, 0x95, 0x79, 0x80, 0xe7, 0x53, - 0x87, 0x18, 0x65, 0x34, 0x00, 0xcb, 0x0d, 0x8b, 0x17, 0x49, 0xc6, 0x2d, 0x7e, 0xea, 0x00, 0x71, - 0x8b, 0xff, 0x4e, 0x41, 0x9e, 0x7f, 0xc9, 0x65, 0x28, 0x4a, 0x69, 0x85, 0x30, 0x28, 0x2b, 0x86, - 0x60, 0x2f, 0x8a, 0x58, 0xd3, 0x43, 0xc2, 0x76, 0x09, 0xa2, 0xef, 0x60, 0x1e, 0xc9, 0x30, 0x50, - 0xa7, 0x16, 0x12, 0x60, 0x0e, 0xbf, 0xee, 0x5a, 0xcb, 0x6c, 0x60, 0x60, 0xfe, 0x82, 0x14, 0x6e, - 0x03, 0xa1, 0x3c, 0x2e, 0xbf, 0x44, 0x42, 0x6e, 0xc0, 0xb0, 0x7f, 0x94, 0x1b, 0x06, 0x25, 0xc6, - 0x78, 0xed, 0x62, 0xb6, 0x16, 0xe1, 0xe0, 0x25, 0x22, 0xf2, 0x06, 0x40, 0x38, 0x1d, 0x08, 0x4b, - 0x0b, 0x97, 0x0a, 0x79, 0xf6, 0x90, 0x97, 0x8a, 0x90, 0x9a, 0x4d, 0x9c, 0xb2, 0x3a, 0xfa, 0x59, - 0x4b, 0x71, 0xe2, 0x8c, 0xe8, 0xb0, 0xac, 0x20, 0xd1, 0x22, 0x64, 0x19, 0x26, 0x12, 0x1a, 0x28, - 0x42, 0x18, 0x63, 0xe6, 0xfa, 0x14, 0xf5, 0x95, 0x17, 0xe6, 0x44, 0x59, 0xf2, 0x1c, 0x14, 0xee, - 0x6a, 0x55, 0x11, 0x46, 0x95, 0x47, 0xe0, 0x8d, 0xc4, 0x58, 0x62, 0x58, 0xf5, 0x47, 0xf3, 0x89, - 0xb5, 0x89, 0x49, 0x4f, 0xb0, 0x92, 0x7a, 0x10, 0xa5, 0xe7, 0xd7, 0xcf, 0xa5, 0x27, 0x11, 0x91, - 0xab, 0x30, 0xb8, 0xc2, 0x66, 0x86, 0x86, 0xdd, 0x12, 0xfd, 0x89, 0x01, 0xb1, 0x3a, 0x02, 0xa6, - 0x05, 0x58, 0x72, 0x43, 0x4a, 0xb6, 0x2b, 0x45, 0x26, 0xf7, 0x93, 0xed, 0xc6, 0x43, 0x74, 0x63, - 0xda, 0xdd, 0x1b, 0xb1, 0xe4, 0x5d, 0xa2, 0x4c, 0xca, 0xba, 0x18, 0x26, 0xeb, 0x0a, 0xac, 0xd2, - 0xfe, 0xdd, 0xac, 0x52, 0xf5, 0xef, 0xe5, 0x92, 0xe3, 0x8c, 0xdc, 0x4c, 0x06, 0x09, 0xc6, 0x45, - 0x28, 0x00, 0xca, 0xb5, 0x06, 0xe1, 0x82, 0x23, 0xe1, 0x7e, 0xf3, 0x07, 0x0e, 0xf7, 0x5b, 0xd8, - 0x67, 0xb8, 0x5f, 0xf5, 0xff, 0x2d, 0xf6, 0x74, 0xd9, 0x3e, 0x96, 0xb0, 0x70, 0xaf, 0xb3, 0x9d, - 0x15, 0xab, 0xbd, 0xec, 0x26, 0xf6, 0x07, 0xdc, 0x23, 0xb5, 0xae, 0xf3, 0xa1, 0xe5, 0x6a, 0x51, - 0x4a, 0xf2, 0x0e, 0x8c, 0xf8, 0x1f, 0x80, 0x61, 0xa4, 0xa5, 0xf0, 0xc7, 0xc1, 0xaa, 0x16, 0x0b, - 0xb8, 0x1c, 0x29, 0x40, 0x5e, 0x81, 0x21, 0xb4, 0x69, 0x3a, 0x7a, 0xc3, 0x8f, 0x31, 0xce, 0x83, - 0x92, 0xfb, 0x40, 0x39, 0xf4, 0x59, 0x40, 0x49, 0xbe, 0x00, 0x25, 0x91, 0x68, 0x83, 0xe7, 0xa1, - 0xbf, 0xbe, 0x07, 0x1f, 0xf7, 0x29, 0x39, 0xc9, 0x06, 0xdf, 0xa5, 0x20, 0x20, 0xb2, 0x4b, 0xe1, - 0xf9, 0x35, 0x56, 0xe1, 0xec, 0x8a, 0x43, 0x0d, 0x7c, 0x4d, 0x31, 0xfb, 0xa8, 0xe3, 0x88, 0x14, - 0x28, 0x7c, 0x94, 0xe3, 0x22, 0xd5, 0xf1, 0xd1, 0x6c, 0xf9, 0x14, 0x78, 0x39, 0xd0, 0x71, 0x4a, - 0x71, 0x66, 0xb9, 0xf0, 0x96, 0xdc, 0xa1, 0x5b, 0x9b, 0xb6, 0x63, 0xf0, 0x2c, 0x21, 0x62, 0xfe, - 0x16, 0x82, 0x7e, 0x20, 0x50, 0xb2, 0xe5, 0x12, 0x2d, 0x74, 0xe9, 0x75, 0x18, 0x3e, 0x68, 0xa2, - 0x8a, 0x5f, 0xcd, 0x67, 0x3c, 0x7e, 0x7a, 0x7c, 0x73, 0x05, 0x06, 0x09, 0xac, 0xfb, 0x33, 0x12, - 0x58, 0x7f, 0x37, 0x9f, 0xf1, 0xb2, 0xeb, 0xb1, 0x4e, 0x34, 0x1b, 0x08, 0x23, 0x9a, 0x68, 0x36, - 0xcc, 0xf1, 0x6b, 0x1a, 0x9a, 0x4c, 0x14, 0x4b, 0x49, 0x5d, 0xda, 0x35, 0x25, 0xf5, 0x2f, 0x16, - 0x7a, 0xbd, 0x7c, 0x3b, 0x95, 0xfd, 0x7e, 0x64, 0x7f, 0x03, 0x86, 0x03, 0xc9, 0x56, 0x2b, 0x68, - 0xf4, 0x8c, 0x06, 0x69, 0x71, 0x38, 0x18, 0xcb, 0x48, 0x44, 0xe4, 0x1a, 0x6f, 0x6b, 0xcd, 0xfc, - 0x80, 0x27, 0x68, 0x18, 0x15, 0xa1, 0xf7, 0x75, 0x4f, 0xaf, 0xbb, 0xe6, 0x07, 0x54, 0x0b, 0xd0, - 0xea, 0x7f, 0x9e, 0x4f, 0x7d, 0x3e, 0x78, 0xda, 0x47, 0xfb, 0xe8, 0xa3, 0x14, 0x21, 0xf2, 0x87, - 0x8f, 0xa7, 0x42, 0xdc, 0x87, 0x10, 0xff, 0x24, 0x9f, 0xfa, 0x4c, 0xf4, 0x54, 0x88, 0xfb, 0x99, - 0x2d, 0x5e, 0x80, 0x21, 0xcd, 0xde, 0x74, 0x67, 0x70, 0x63, 0xc3, 0xe7, 0x0a, 0x9c, 0xa8, 0x1d, - 0x7b, 0xd3, 0xad, 0xe3, 0x96, 0x45, 0x0b, 0x09, 0xd4, 0xef, 0xe5, 0x7b, 0x3c, 0xa4, 0x3d, 0x15, - 0xfc, 0x87, 0xb9, 0x44, 0xfe, 0x46, 0x3e, 0xf2, 0x50, 0xf7, 0xf1, 0x15, 0xf6, 0x75, 0x80, 0x5a, - 0x63, 0x83, 0xb6, 0x75, 0x29, 0xc9, 0x15, 0x9e, 0x3b, 0xb8, 0x08, 0x15, 0xc9, 0x91, 0x43, 0x12, - 0xf5, 0x9b, 0xf9, 0xd8, 0x4b, 0xe5, 0x53, 0xd9, 0xed, 0x59, 0x76, 0x81, 0xd6, 0x89, 0xc7, 0xd7, - 0xa7, 0x92, 0xdb, 0xab, 0xe4, 0x7e, 0x22, 0x1f, 0x7b, 0xa7, 0xfe, 0xd8, 0xca, 0x8e, 0x0d, 0xc0, - 0xe4, 0xfb, 0xf9, 0xc7, 0x56, 0x93, 0x5e, 0x80, 0x21, 0x21, 0x87, 0x60, 0xa9, 0xe0, 0xf3, 0x3e, - 0x07, 0xe2, 0x29, 0x6b, 0x40, 0xa0, 0xfe, 0xa9, 0x3c, 0x44, 0xe3, 0x07, 0x3c, 0xa6, 0x3a, 0xf4, - 0x1b, 0xf9, 0x68, 0xe4, 0x84, 0xc7, 0x57, 0x7f, 0xa6, 0x00, 0x6a, 0xdd, 0xb5, 0x86, 0x08, 0xbc, - 0xdb, 0x2f, 0x1d, 0xd3, 0x07, 0x50, 0x4d, 0xa2, 0x50, 0xff, 0xbf, 0x7c, 0x6a, 0x38, 0x87, 0xc7, - 0x57, 0x80, 0x2f, 0xe3, 0xa9, 0x78, 0xc3, 0x0a, 0x27, 0x72, 0x3c, 0x84, 0x64, 0xe3, 0x2f, 0x91, - 0x19, 0xd1, 0x27, 0x24, 0x9f, 0x4e, 0x31, 0xd7, 0x30, 0x6f, 0x43, 0x68, 0xae, 0xc9, 0xd7, 0x10, - 0x92, 0xe1, 0xf6, 0x7b, 0xf9, 0xdd, 0xa2, 0x5f, 0x3c, 0xce, 0xab, 0xea, 0xc0, 0x8a, 0xbe, 0x85, - 0x51, 0x1a, 0x59, 0x4f, 0x8c, 0xf0, 0xbc, 0x7d, 0x1d, 0x0e, 0x92, 0xef, 0xde, 0x04, 0x95, 0xfa, - 0xcf, 0xfa, 0xd3, 0x43, 0x2f, 0x3c, 0xbe, 0x22, 0xbc, 0x0c, 0xc5, 0x15, 0xdd, 0xdb, 0x10, 0x9a, - 0x8c, 0x57, 0x7a, 0x1d, 0xdd, 0xdb, 0xd0, 0x10, 0x4a, 0xae, 0xc1, 0xa0, 0xa6, 0x6f, 0xf2, 0x33, - 0xcf, 0x52, 0x98, 0x53, 0xd1, 0xd1, 0x37, 0xeb, 0xfc, 0xdc, 0x33, 0x40, 0x13, 0x35, 0xc8, 0xe9, - 0xc9, 0x4f, 0xbe, 0x31, 0xa1, 0x1c, 0xcf, 0xe9, 0x19, 0x64, 0xf2, 0xbc, 0x0c, 0xc5, 0x69, 0xdb, - 0xd8, 0xc2, 0xeb, 0xab, 0x11, 0x5e, 0xd9, 0x9a, 0x6d, 0x6c, 0x69, 0x08, 0x25, 0x3f, 0x99, 0x83, - 0x81, 0x79, 0xaa, 0x1b, 0x6c, 0x84, 0x0c, 0xf5, 0xf2, 0x3a, 0xf9, 0xdc, 0xd1, 0x78, 0x9d, 0x4c, - 0x6c, 0xf0, 0xca, 0x64, 0x45, 0x11, 0xf5, 0x93, 0x5b, 0x30, 0x38, 0xa3, 0x7b, 0xb4, 0x69, 0x3b, - 0x5b, 0xe8, 0x47, 0x33, 0x16, 0xba, 0xef, 0x47, 0xf4, 0xc7, 0x27, 0xe2, 0x37, 0x63, 0x0d, 0xf1, - 0x4b, 0x0b, 0x0a, 0x33, 0xb1, 0xac, 0xea, 0x4e, 0x93, 0x7a, 0x22, 0x7f, 0x35, 0x8a, 0xc5, 0x43, - 0x88, 0x26, 0x30, 0xe1, 0xb1, 0xf2, 0x48, 0xfa, 0xb1, 0x32, 0x5a, 0x8f, 0xe8, 0x6b, 0x87, 0x99, - 0x34, 0x47, 0x71, 0xd1, 0xe7, 0xd6, 0x23, 0x42, 0x31, 0x91, 0xa6, 0x26, 0x91, 0xa8, 0xdf, 0xe9, - 0x87, 0xd4, 0x87, 0xda, 0xa7, 0x4a, 0x7e, 0xaa, 0xe4, 0xa1, 0x92, 0x57, 0x12, 0x4a, 0x7e, 0x29, - 0xf9, 0xf4, 0xff, 0x23, 0xaa, 0xe1, 0x3f, 0x57, 0x4c, 0x04, 0x0e, 0x79, 0xbc, 0x77, 0x97, 0xa1, - 0xf4, 0xfa, 0x77, 0x95, 0x5e, 0x30, 0x20, 0x4a, 0xbb, 0x0e, 0x88, 0x81, 0xbd, 0x0e, 0x88, 0xc1, - 0xcc, 0x01, 0x11, 0x2a, 0xc8, 0x50, 0xa6, 0x82, 0x54, 0xc5, 0xa0, 0x81, 0xde, 0xf9, 0x4b, 0x2e, - 0xef, 0x6c, 0x4f, 0x8e, 0xb1, 0xd1, 0x94, 0x9a, 0xb8, 0x04, 0x59, 0xa8, 0xbf, 0x5f, 0xec, 0x11, - 0xed, 0xe7, 0x58, 0x74, 0xe4, 0x65, 0x28, 0x94, 0x3b, 0x1d, 0xa1, 0x1f, 0x67, 0xa5, 0x40, 0x43, - 0x19, 0xa5, 0x18, 0x35, 0x79, 0x03, 0x0a, 0xe5, 0xfb, 0xb5, 0x78, 0xce, 0x92, 0xf2, 0xfd, 0x9a, - 0xf8, 0x92, 0xcc, 0xb2, 0xf7, 0x6b, 0xe4, 0xad, 0x30, 0x78, 0xe8, 0x46, 0xd7, 0x7a, 0x20, 0x36, - 0x8a, 0xc2, 0xdd, 0xd6, 0x77, 0xc7, 0x69, 0x30, 0x14, 0xdb, 0x2e, 0xc6, 0x68, 0x63, 0xda, 0x54, - 0xda, 0xbb, 0x36, 0x0d, 0xec, 0xaa, 0x4d, 0x83, 0x7b, 0xd5, 0xa6, 0xa1, 0x3d, 0x68, 0x13, 0xec, - 0xaa, 0x4d, 0xc3, 0x87, 0xd7, 0xa6, 0x0e, 0x5c, 0x4a, 0x46, 0x68, 0x0b, 0x34, 0x42, 0x03, 0x92, - 0xc4, 0x0a, 0xc7, 0x12, 0xbc, 0xfa, 0xef, 0x72, 0x6c, 0x7d, 0x13, 0xd1, 0x75, 0x97, 0xe1, 0x65, - 0xff, 0xb4, 0x64, 0x69, 0xf5, 0x57, 0xf3, 0xd9, 0x81, 0xe5, 0x4e, 0xe6, 0x14, 0xf7, 0x43, 0xa9, - 0x52, 0x2a, 0x46, 0x1f, 0xfa, 0x67, 0x4b, 0x39, 0xc6, 0x36, 0x4d, 0x66, 0xdf, 0xc8, 0x67, 0x45, - 0xbb, 0x3b, 0x94, 0xc4, 0x3e, 0x9e, 0xf4, 0x68, 0x43, 0x3f, 0x7d, 0x37, 0xea, 0xca, 0x36, 0x07, - 0x23, 0xb2, 0x10, 0x85, 0x94, 0xf6, 0x22, 0xe0, 0x48, 0x39, 0xf2, 0x56, 0x90, 0x5a, 0x46, 0xf2, - 0x8f, 0x41, 0x77, 0x35, 0x7f, 0xcc, 0xc6, 0xdc, 0x63, 0x64, 0x72, 0xf2, 0x02, 0x94, 0xe6, 0x30, - 0x56, 0xbb, 0x3c, 0xd8, 0x79, 0xf4, 0x76, 0xd9, 0x6b, 0x85, 0xd3, 0xa8, 0x7f, 0x2f, 0x07, 0x67, - 0xef, 0x74, 0xd7, 0xa8, 0xf0, 0x96, 0x0b, 0xda, 0xf0, 0x3e, 0x00, 0x03, 0x0b, 0x87, 0x99, 0x1c, - 0x3a, 0xcc, 0x7c, 0x52, 0x8e, 0x8a, 0x17, 0x2b, 0x30, 0x15, 0x52, 0x73, 0x67, 0x99, 0xa7, 0x7c, - 0xc7, 0xd1, 0x07, 0xdd, 0x35, 0x5a, 0x4f, 0x78, 0xcd, 0x48, 0xdc, 0x2f, 0xbd, 0xcd, 0x5d, 0xf2, - 0x0f, 0xea, 0xa0, 0xf2, 0x2b, 0xf9, 0xcc, 0x40, 0x84, 0x27, 0x36, 0x63, 0xe6, 0x0f, 0xa4, 0xf6, - 0x4a, 0x3c, 0x73, 0x66, 0x0a, 0x49, 0x8c, 0x63, 0x1a, 0x97, 0x74, 0x81, 0x9d, 0xf0, 0x3c, 0xae, - 0x1f, 0xaa, 0xc0, 0xfe, 0x28, 0x97, 0x19, 0x30, 0xf2, 0xa4, 0x0a, 0x4c, 0xfd, 0x5f, 0x0b, 0x7e, - 0x9c, 0xca, 0x43, 0x7d, 0xc2, 0x0b, 0x30, 0x24, 0x9e, 0xeb, 0x47, 0x9d, 0x7d, 0xc5, 0xb1, 0x21, - 0x1e, 0x43, 0x07, 0x04, 0xcc, 0xa4, 0x90, 0x3c, 0x91, 0x25, 0x67, 0x5f, 0xc9, 0x0b, 0x59, 0x93, - 0x48, 0x98, 0xd1, 0x30, 0xfb, 0xc8, 0xf4, 0xd0, 0x02, 0x61, 0x7d, 0x59, 0xe0, 0x46, 0x03, 0x7d, - 0x64, 0x7a, 0xdc, 0xfe, 0x08, 0xd0, 0xcc, 0x20, 0xa8, 0x85, 0x59, 0xea, 0x85, 0x41, 0xe0, 0x8a, - 0x64, 0xfd, 0xe2, 0x89, 0xda, 0x0b, 0x30, 0x24, 0x3c, 0x68, 0x85, 0x4b, 0x8b, 0x68, 0xad, 0xf0, - 0xb9, 0xc5, 0xd6, 0x06, 0x04, 0x8c, 0xa3, 0x46, 0x9b, 0xa1, 0x13, 0x1f, 0x72, 0x74, 0x10, 0xa2, - 0x09, 0x0c, 0xb9, 0x01, 0x63, 0x35, 0x4f, 0xb7, 0x0c, 0xdd, 0x31, 0x96, 0xbb, 0x5e, 0xa7, 0xeb, - 0xc9, 0x06, 0xb0, 0xeb, 0x19, 0x76, 0xd7, 0xd3, 0x62, 0x14, 0xe4, 0x53, 0x30, 0xea, 0x43, 0x66, - 0x1d, 0xc7, 0x76, 0x64, 0x2b, 0xc7, 0xf5, 0x0c, 0xea, 0x38, 0x5a, 0x94, 0x80, 0x7c, 0x1a, 0x46, - 0xab, 0xd6, 0x43, 0xbb, 0xc1, 0x9f, 0xac, 0x6b, 0x0b, 0xc2, 0xe6, 0xc1, 0x67, 0x5f, 0x66, 0x80, - 0xa8, 0x77, 0x9d, 0x96, 0x16, 0x25, 0x54, 0x77, 0xf2, 0xc9, 0x70, 0x9e, 0x8f, 0xef, 0x06, 0xe9, - 0x5a, 0xd4, 0x71, 0x0f, 0xbd, 0x55, 0xd1, 0xf8, 0x94, 0xfd, 0x86, 0xb9, 0x0d, 0x7a, 0x03, 0x06, - 0xef, 0xd0, 0x2d, 0xee, 0x63, 0x5a, 0x0a, 0xdd, 0x92, 0x1f, 0x08, 0x98, 0x7c, 0xba, 0xeb, 0xd3, - 0xa9, 0xdf, 0xca, 0x27, 0x03, 0x95, 0x3e, 0xbe, 0xc2, 0xfe, 0x14, 0x0c, 0xa0, 0x28, 0xab, 0xfe, - 0xf5, 0x02, 0x0a, 0x10, 0xc5, 0x1d, 0xf5, 0x76, 0xf6, 0xc9, 0xd4, 0x5f, 0x28, 0xc5, 0xa3, 0xd7, - 0x3e, 0xbe, 0xd2, 0x7b, 0x13, 0x86, 0x67, 0x6c, 0xcb, 0x35, 0x5d, 0x8f, 0x5a, 0x0d, 0x5f, 0x61, - 0x9f, 0x60, 0x06, 0x55, 0x23, 0x04, 0xcb, 0x36, 0xa0, 0x44, 0x7d, 0x10, 0xe5, 0x25, 0xaf, 0xc2, - 0x10, 0x8a, 0x1c, 0x6d, 0x4e, 0x3e, 0xe1, 0xe1, 0xcd, 0xc4, 0x1a, 0x03, 0xc6, 0x2d, 0xce, 0x90, - 0x94, 0xdc, 0x85, 0xc1, 0x99, 0x0d, 0xb3, 0x65, 0x38, 0xd4, 0x42, 0xdf, 0x64, 0x29, 0x48, 0x48, - 0xb4, 0x2f, 0xa7, 0xf0, 0x5f, 0xa4, 0xe5, 0xcd, 0x69, 0x88, 0x62, 0x91, 0x17, 0x5f, 0x02, 0x76, - 0xe9, 0x67, 0xf3, 0x00, 0x61, 0x01, 0xf2, 0x0c, 0xe4, 0x83, 0x04, 0xd0, 0xe8, 0x12, 0x13, 0xd1, - 0xa0, 0x3c, 0x2e, 0x15, 0x62, 0x6c, 0xe7, 0x77, 0x1d, 0xdb, 0x77, 0xa1, 0xc4, 0x4f, 0xd7, 0xd0, - 0x6b, 0x5d, 0x0a, 0xa8, 0x99, 0xd9, 0xe0, 0x29, 0xa4, 0xe7, 0xb6, 0x34, 0x5a, 0x9e, 0x11, 0x0f, - 0x70, 0xce, 0xec, 0x52, 0x03, 0xfa, 0xf1, 0x2f, 0x72, 0x05, 0x8a, 0xab, 0x7e, 0xf2, 0xd8, 0x51, - 0x3e, 0x4b, 0xc7, 0xe4, 0x87, 0x78, 0xd6, 0x4d, 0x33, 0xb6, 0xe5, 0xb1, 0xaa, 0xb1, 0xd5, 0x23, - 0x42, 0x2e, 0x02, 0x16, 0x91, 0x8b, 0x80, 0xa9, 0xff, 0x75, 0x3e, 0x25, 0xae, 0xf2, 0xe3, 0x3b, - 0x4c, 0x5e, 0x07, 0xc0, 0xe7, 0xe3, 0x4c, 0x9e, 0xfe, 0x73, 0x10, 0x1c, 0x25, 0xc8, 0x08, 0xd5, - 0x36, 0xb2, 0xed, 0x08, 0x89, 0xd5, 0x7f, 0x90, 0x4b, 0x04, 0xe3, 0x3d, 0x94, 0x1c, 0x65, 0xab, - 0x2c, 0x7f, 0x40, 0x33, 0xd6, 0xef, 0x8b, 0xc2, 0xfe, 0xfa, 0x22, 0xfa, 0x2d, 0x47, 0x60, 0x99, - 0x1e, 0xe7, 0xb7, 0x7c, 0x27, 0x9f, 0x16, 0x9a, 0xf8, 0x64, 0xaa, 0xf8, 0xcd, 0xc0, 0x28, 0x2d, - 0xc6, 0x82, 0xc1, 0x23, 0x34, 0x9e, 0xe0, 0x5a, 0x98, 0xa9, 0x5f, 0x84, 0x33, 0xb1, 0x80, 0xbd, - 0x22, 0xd7, 0xf0, 0x95, 0xde, 0x91, 0x7f, 0xb3, 0x03, 0x0f, 0x44, 0xc8, 0xd4, 0xff, 0x3f, 0xd7, - 0x3b, 0x5c, 0xf3, 0xb1, 0xab, 0x4e, 0x8a, 0x00, 0x0a, 0xff, 0x7a, 0x04, 0x70, 0x04, 0xdb, 0xe0, - 0x93, 0x2d, 0x80, 0x8f, 0xc8, 0xe4, 0xf1, 0x61, 0x0b, 0xe0, 0x17, 0x72, 0xbb, 0x46, 0xdb, 0x3e, - 0x6e, 0x19, 0xa8, 0xff, 0x53, 0x2e, 0x35, 0x2a, 0xf6, 0xa1, 0xda, 0xf5, 0x16, 0x94, 0xb8, 0x0b, - 0x8f, 0x68, 0x95, 0x94, 0x47, 0x8c, 0x41, 0xb3, 0x32, 0xef, 0x73, 0x2c, 0x59, 0x80, 0x01, 0xde, - 0x06, 0x43, 0xf4, 0xc6, 0xc7, 0x7a, 0x84, 0xe6, 0x36, 0xb2, 0x26, 0x47, 0x81, 0x56, 0xff, 0x7e, - 0x2e, 0x11, 0xa4, 0xfb, 0x18, 0xbf, 0x2d, 0x9c, 0xaa, 0x0b, 0x7b, 0x9f, 0xaa, 0xd5, 0x7f, 0x9a, - 0x4f, 0x8f, 0x11, 0x7e, 0x8c, 0x1f, 0x72, 0x14, 0xc7, 0x69, 0x07, 0x5b, 0xb7, 0x56, 0x61, 0x2c, - 0x2a, 0x0b, 0xb1, 0x6c, 0x3d, 0x9d, 0x1e, 0x29, 0x3d, 0xa3, 0x15, 0x31, 0x1e, 0xea, 0xb7, 0x73, - 0xc9, 0xf0, 0xe6, 0xc7, 0x3e, 0x3f, 0x1d, 0x4c, 0x5b, 0xa2, 0x9f, 0xf2, 0x11, 0x59, 0x6b, 0x8e, - 0xe2, 0x53, 0x3e, 0x22, 0xab, 0xc6, 0xc1, 0x3e, 0xe5, 0x97, 0xf2, 0x59, 0xd1, 0xe1, 0x8f, 0xfd, - 0x83, 0x3e, 0x2f, 0x0b, 0x99, 0xb7, 0x4c, 0x7c, 0xda, 0x33, 0x59, 0xe1, 0xd8, 0x33, 0x78, 0x26, - 0xf8, 0x1c, 0x6c, 0x8c, 0xa7, 0x0a, 0xeb, 0x23, 0xa2, 0xc8, 0x27, 0x43, 0x58, 0x1f, 0x91, 0xa1, - 0xf2, 0xd1, 0x13, 0xd6, 0x6f, 0xe5, 0xf7, 0x9a, 0x92, 0xe0, 0x54, 0x78, 0x09, 0xe1, 0x7d, 0x35, - 0x9f, 0x4c, 0x95, 0x71, 0xec, 0x62, 0x9a, 0x83, 0x92, 0x48, 0xda, 0x91, 0x29, 0x1c, 0x8e, 0xcf, - 0xb2, 0x68, 0xc4, 0x77, 0xdc, 0x04, 0x71, 0x91, 0xb3, 0x37, 0x91, 0x70, 0x5a, 0xf5, 0x7b, 0xb9, - 0x58, 0x5e, 0x89, 0x63, 0x39, 0x42, 0x38, 0xd0, 0x92, 0x44, 0xde, 0xf6, 0x0f, 0x33, 0x8b, 0xb1, - 0xb8, 0xde, 0xc1, 0xf7, 0x54, 0xa8, 0xa7, 0x9b, 0xad, 0x78, 0x79, 0x11, 0x7f, 0xe0, 0x5b, 0x79, - 0x98, 0x48, 0x90, 0x92, 0x2b, 0x91, 0xb0, 0x3d, 0x78, 0x2c, 0x19, 0x73, 0x54, 0xe7, 0x01, 0x7c, - 0xf6, 0x71, 0x92, 0x7a, 0x05, 0x8a, 0x15, 0x7d, 0x8b, 0x7f, 0x5b, 0x3f, 0x67, 0x69, 0xe8, 0x5b, - 0xf2, 0x89, 0x1b, 0xe2, 0xc9, 0x1a, 0x9c, 0xe7, 0xf7, 0x21, 0xa6, 0x6d, 0xad, 0x9a, 0x6d, 0x5a, - 0xb5, 0x16, 0xcd, 0x56, 0xcb, 0x74, 0xc5, 0xa5, 0xde, 0x0b, 0x3b, 0xdb, 0x93, 0x57, 0x3d, 0xdb, - 0xd3, 0x5b, 0x75, 0xea, 0x93, 0xd5, 0x3d, 0xb3, 0x4d, 0xeb, 0xa6, 0x55, 0x6f, 0x23, 0xa5, 0xc4, - 0x32, 0x9d, 0x15, 0xa9, 0xf2, 0x10, 0xee, 0xb5, 0x86, 0x6e, 0x59, 0xd4, 0xa8, 0x5a, 0xd3, 0x5b, - 0x1e, 0xe5, 0x97, 0x81, 0x05, 0x7e, 0x24, 0xc8, 0xdf, 0xa1, 0x73, 0x34, 0x63, 0xbc, 0xc6, 0x08, - 0xb4, 0x94, 0x42, 0xea, 0x6f, 0x17, 0x53, 0x52, 0x8a, 0x9c, 0x20, 0xf5, 0xf1, 0x7b, 0xba, 0xb8, - 0x4b, 0x4f, 0x5f, 0x87, 0x01, 0x11, 0x23, 0x57, 0x5c, 0x30, 0xa0, 0xe3, 0xfc, 0x43, 0x0e, 0x92, - 0x6f, 0x68, 0x04, 0x15, 0x69, 0xc1, 0xa5, 0x55, 0xd6, 0x4d, 0xe9, 0x9d, 0x59, 0x3a, 0x40, 0x67, - 0xf6, 0xe0, 0x47, 0xde, 0x83, 0x8b, 0x88, 0x4d, 0xe9, 0xd6, 0x01, 0xac, 0x0a, 0xe3, 0x61, 0xf1, - 0xaa, 0xd2, 0x3b, 0x37, 0xab, 0x3c, 0xf9, 0x3c, 0x8c, 0x04, 0x03, 0xc4, 0xa4, 0xae, 0xb8, 0xb9, - 0xe8, 0x31, 0xce, 0x78, 0xb0, 0x39, 0x06, 0x46, 0x77, 0xb5, 0x68, 0xc0, 0xb2, 0x08, 0x2f, 0xf5, - 0x7f, 0xcc, 0xf5, 0x4a, 0x6d, 0x72, 0xec, 0xb3, 0xf2, 0xdb, 0x30, 0x60, 0xf0, 0x8f, 0x12, 0x3a, - 0xd5, 0x3b, 0xf9, 0x09, 0x27, 0xd5, 0xfc, 0x32, 0xea, 0x3f, 0xc9, 0xf5, 0xcc, 0xa8, 0x72, 0xd2, - 0x3f, 0xef, 0xab, 0x85, 0x8c, 0xcf, 0x13, 0x93, 0xe8, 0x35, 0x18, 0x37, 0xc3, 0x90, 0xef, 0xf5, - 0x30, 0xd4, 0x95, 0x76, 0x46, 0x82, 0xe3, 0xe8, 0xba, 0x09, 0x81, 0xc3, 0x96, 0xe3, 0x7b, 0xa3, - 0xb9, 0xf5, 0xae, 0x63, 0xf2, 0x71, 0xa9, 0x9d, 0x73, 0x63, 0xae, 0x6a, 0xee, 0x5d, 0xc7, 0x64, - 0x15, 0xe8, 0xde, 0x06, 0xb5, 0xf4, 0xfa, 0xa6, 0xed, 0x3c, 0xc0, 0x88, 0xa6, 0x7c, 0x70, 0x6a, - 0x67, 0x38, 0xfc, 0xbe, 0x0f, 0x26, 0xcf, 0xc1, 0x68, 0xb3, 0xd5, 0xa5, 0x41, 0x0c, 0x49, 0x7e, - 0xd7, 0xa7, 0x8d, 0x30, 0x60, 0x70, 0x43, 0xf2, 0x14, 0x00, 0x12, 0x79, 0x98, 0xef, 0x06, 0x2f, - 0xf6, 0xb4, 0x21, 0x06, 0x59, 0x15, 0xdd, 0x75, 0x89, 0x6b, 0x35, 0x17, 0x52, 0xbd, 0x65, 0x5b, - 0xcd, 0xba, 0x47, 0x9d, 0x36, 0x36, 0x14, 0x9d, 0x19, 0xb4, 0x0b, 0x48, 0x81, 0x57, 0x27, 0xee, - 0x82, 0x6d, 0x35, 0x57, 0xa9, 0xd3, 0x66, 0x4d, 0x7d, 0x01, 0x88, 0x68, 0xaa, 0x83, 0x87, 0x1e, - 0xfc, 0xe3, 0xd0, 0x9b, 0x41, 0x13, 0x1f, 0xc1, 0x4f, 0x43, 0xf0, 0xc3, 0x26, 0x61, 0x98, 0x07, - 0xd2, 0xe3, 0x42, 0x43, 0x17, 0x06, 0x0d, 0x38, 0x08, 0xe5, 0x75, 0x01, 0x84, 0x77, 0x05, 0xf7, - 0x20, 0xd7, 0xc4, 0x2f, 0xf5, 0xcb, 0x85, 0xb4, 0x24, 0x30, 0x87, 0x52, 0xb4, 0x70, 0x5a, 0xcd, - 0xef, 0x6b, 0x5a, 0x3d, 0x63, 0x75, 0xdb, 0x75, 0xbd, 0xd3, 0xa9, 0xaf, 0x9b, 0x2d, 0x7c, 0xc2, - 0x85, 0x0b, 0x9f, 0x36, 0x6a, 0x75, 0xdb, 0xe5, 0x4e, 0x67, 0x8e, 0x03, 0xc9, 0xf3, 0x30, 0xc1, - 0xe8, 0xb0, 0x93, 0x02, 0xca, 0x22, 0x52, 0x32, 0x06, 0x18, 0x89, 0xd6, 0xa7, 0x7d, 0x02, 0x06, - 0x05, 0x4f, 0xbe, 0x56, 0xf5, 0x6b, 0x03, 0x9c, 0x99, 0xcb, 0x7a, 0x2e, 0x60, 0xc3, 0x27, 0xd7, - 0x7e, 0x6d, 0xc8, 0x2f, 0x8f, 0xf1, 0x96, 0xad, 0x6e, 0x9b, 0x47, 0xdf, 0x1a, 0x40, 0x64, 0xf0, - 0x9b, 0x5c, 0x81, 0x31, 0xc6, 0x25, 0x10, 0x18, 0x0f, 0x51, 0xdb, 0xaf, 0xc5, 0xa0, 0xe4, 0x06, - 0x9c, 0x8b, 0x40, 0xb8, 0x0d, 0xca, 0x9f, 0x24, 0xf4, 0x6b, 0xa9, 0x38, 0xf5, 0x9b, 0x85, 0x68, - 0x6a, 0x9a, 0x63, 0xe8, 0x88, 0x8b, 0x30, 0x60, 0x3b, 0xcd, 0x7a, 0xd7, 0x69, 0x89, 0xb1, 0x57, - 0xb2, 0x9d, 0xe6, 0x5d, 0xa7, 0x45, 0xce, 0x43, 0x89, 0xf5, 0x8e, 0x69, 0x88, 0x21, 0xd6, 0xaf, - 0x77, 0x3a, 0x55, 0x83, 0x94, 0x79, 0x87, 0x60, 0x78, 0xd3, 0x7a, 0x03, 0xb7, 0xf6, 0xdc, 0x29, - 0xa1, 0x9f, 0xaf, 0x78, 0x09, 0x24, 0xf6, 0x13, 0x06, 0x3d, 0xe5, 0x07, 0x01, 0x31, 0x16, 0x06, - 0x6e, 0x4b, 0x0c, 0xde, 0x27, 0x71, 0x16, 0x02, 0x19, 0xb2, 0xe0, 0x9b, 0x18, 0x83, 0x54, 0x80, - 0x84, 0x54, 0x6d, 0xdb, 0x30, 0xd7, 0x4d, 0xca, 0x5f, 0x90, 0xf4, 0xf3, 0x8b, 0xdf, 0x24, 0x56, - 0x1b, 0xf7, 0x99, 0x2c, 0x0a, 0x08, 0x79, 0x93, 0x2b, 0x21, 0xa7, 0xc3, 0xb5, 0x8f, 0xf7, 0x2d, - 0xb7, 0xd3, 0x62, 0x28, 0xd4, 0x4c, 0x2c, 0x8f, 0x0b, 0xa1, 0xfa, 0xd7, 0x8a, 0xc9, 0xfc, 0x44, - 0xc7, 0x62, 0xd7, 0xcc, 0x03, 0x88, 0xf4, 0x63, 0xe1, 0xe5, 0x5a, 0xe0, 0xdd, 0x1e, 0x62, 0x32, - 0x78, 0x48, 0x65, 0xc9, 0x35, 0x18, 0xe4, 0x5f, 0x54, 0xad, 0x08, 0x7b, 0x07, 0x5d, 0xc4, 0xdc, - 0x8e, 0xb9, 0xbe, 0x8e, 0xfe, 0x64, 0x01, 0x9a, 0x5c, 0x81, 0x81, 0xca, 0x52, 0xad, 0x56, 0x5e, - 0xf2, 0x6f, 0x8a, 0xf1, 0x2d, 0x8b, 0x61, 0xb9, 0x75, 0x57, 0xb7, 0x5c, 0xcd, 0x47, 0x92, 0xe7, - 0xa0, 0x54, 0x5d, 0x41, 0x32, 0xfe, 0x42, 0x73, 0x78, 0x67, 0x7b, 0x72, 0xc0, 0xec, 0x70, 0x2a, - 0x81, 0xc2, 0x7a, 0xef, 0x55, 0x2b, 0x92, 0xbb, 0x04, 0xaf, 0xf7, 0xa1, 0x69, 0xe0, 0xb5, 0xb3, - 0x16, 0xa0, 0xc9, 0x2b, 0x30, 0x52, 0xa3, 0x8e, 0xa9, 0xb7, 0x96, 0xba, 0xb8, 0x55, 0x94, 0xc2, - 0x36, 0xba, 0x08, 0xaf, 0x5b, 0x88, 0xd0, 0x22, 0x64, 0xe4, 0x32, 0x14, 0xe7, 0x4d, 0xcb, 0x7f, - 0x2e, 0x81, 0xfe, 0xf4, 0x1b, 0xa6, 0xe5, 0x69, 0x08, 0x25, 0xcf, 0x41, 0xe1, 0xf6, 0x6a, 0x55, - 0x78, 0x82, 0x21, 0xaf, 0xf7, 0xbd, 0x48, 0x08, 0xc8, 0xdb, 0xab, 0x55, 0xf2, 0x0a, 0x0c, 0xb1, - 0x45, 0x8c, 0x5a, 0x0d, 0xea, 0x2a, 0xc3, 0xf8, 0x31, 0x3c, 0x64, 0xa1, 0x0f, 0x94, 0x7d, 0x3a, - 0x02, 0x4a, 0xf5, 0xff, 0xcc, 0xa7, 0x27, 0x90, 0x3a, 0x86, 0xa1, 0x7e, 0xc0, 0x5b, 0xe4, 0x98, - 0x82, 0x15, 0x0f, 0xa1, 0x60, 0xeb, 0x70, 0xa6, 0x6c, 0xb4, 0x4d, 0xab, 0x8c, 0x3f, 0xdd, 0xc5, - 0xb9, 0x32, 0x4e, 0x1d, 0xd2, 0x53, 0xc0, 0x18, 0x5a, 0x7c, 0x0f, 0x0f, 0x2e, 0xcc, 0x50, 0x75, - 0x9d, 0xe3, 0xea, 0xed, 0x75, 0xbd, 0xde, 0xe0, 0xb9, 0x97, 0xb4, 0x38, 0x53, 0xf5, 0x67, 0xf2, - 0xbb, 0xe4, 0xbc, 0x7a, 0x1c, 0xa5, 0xaf, 0x7e, 0x2d, 0xdf, 0x3b, 0xed, 0xd8, 0x63, 0x29, 0x94, - 0x3f, 0xc9, 0xa7, 0x24, 0x01, 0x3b, 0x94, 0x24, 0xae, 0xc1, 0x20, 0x67, 0x13, 0xb8, 0xf1, 0xe2, - 0x6c, 0xc6, 0x95, 0x15, 0x67, 0x51, 0x1f, 0x4d, 0x96, 0xe0, 0x5c, 0x79, 0x7d, 0x9d, 0x36, 0xbc, - 0x30, 0xcc, 0xf4, 0x52, 0x18, 0xf0, 0x95, 0x87, 0xd5, 0x15, 0xf8, 0x30, 0x4c, 0x35, 0x06, 0x36, - 0x49, 0x2d, 0x47, 0x56, 0xe1, 0x42, 0x1c, 0x5e, 0xe3, 0x5b, 0x80, 0xa2, 0x14, 0x69, 0x37, 0xc1, - 0x91, 0xff, 0xa7, 0x65, 0x94, 0x4d, 0x6b, 0x25, 0x4e, 0xd5, 0xfd, 0xbd, 0x5a, 0x89, 0xf3, 0x76, - 0x6a, 0x39, 0xf5, 0x5b, 0x05, 0x39, 0x57, 0xda, 0xe3, 0xeb, 0x70, 0x75, 0x33, 0xe2, 0x66, 0xbd, - 0xd7, 0x21, 0xf3, 0x8a, 0x88, 0x56, 0x62, 0x74, 0x1d, 0xdf, 0x23, 0x31, 0x88, 0x96, 0x80, 0x40, - 0x79, 0x1d, 0x0a, 0x28, 0x49, 0x15, 0x8a, 0x65, 0xa7, 0xc9, 0xcd, 0xdb, 0xdd, 0x1e, 0x70, 0xe9, - 0x4e, 0xd3, 0x4d, 0x7f, 0xc0, 0xc5, 0x58, 0xa8, 0x7f, 0x36, 0xdf, 0x23, 0xbd, 0xd9, 0x63, 0x39, - 0x89, 0xfc, 0x85, 0x7c, 0x56, 0xa2, 0xb2, 0x93, 0xea, 0x3a, 0xf6, 0x21, 0x0b, 0xe7, 0x64, 0xfb, - 0xd5, 0x1d, 0xa1, 0x70, 0xfe, 0x30, 0x9f, 0x95, 0x75, 0xed, 0x54, 0x38, 0x07, 0x9b, 0x20, 0x53, - 0x45, 0xfa, 0x18, 0xdb, 0xdc, 0xb2, 0x2a, 0xf4, 0x1f, 0xd0, 0x7d, 0x2a, 0x4d, 0xa4, 0xa7, 0x43, - 0xf8, 0x50, 0x5a, 0xfa, 0x47, 0xf9, 0xcc, 0xec, 0x82, 0xa7, 0x32, 0x3d, 0x4a, 0x99, 0x9e, 0x0e, - 0xfd, 0x43, 0x0d, 0xfd, 0x54, 0x99, 0x9e, 0x8e, 0xfd, 0x43, 0xe9, 0xe9, 0x1f, 0xe4, 0xd3, 0xf3, - 0x67, 0x1e, 0x83, 0x92, 0x1e, 0x85, 0x87, 0xa3, 0xdf, 0x0d, 0xc5, 0x43, 0x75, 0x43, 0xff, 0x21, - 0xac, 0xa8, 0xa4, 0x40, 0x8f, 0x6d, 0xd4, 0x7f, 0xbf, 0x0a, 0xf4, 0x08, 0x86, 0xfc, 0xe3, 0x2c, - 0xd0, 0x9f, 0x2a, 0x24, 0x73, 0xc6, 0x3e, 0xae, 0x6b, 0x92, 0x73, 0xc0, 0x35, 0xc9, 0x2f, 0x47, - 0xde, 0x81, 0x33, 0xa1, 0x2c, 0xe5, 0x28, 0x63, 0x78, 0x7d, 0xd4, 0x60, 0xa8, 0xfa, 0xfb, 0x0c, - 0x27, 0xc2, 0xe1, 0xc4, 0xa9, 0xd5, 0xef, 0x15, 0x92, 0x89, 0x77, 0x4f, 0x7b, 0xe3, 0x80, 0xbd, - 0x71, 0x17, 0x2e, 0xcc, 0x74, 0x1d, 0x87, 0x5a, 0x5e, 0x7a, 0xa7, 0xe0, 0xe1, 0x7d, 0x83, 0x53, - 0xd4, 0x93, 0x9d, 0x93, 0x51, 0x98, 0xb1, 0x15, 0xaf, 0x1b, 0xe2, 0x6c, 0x07, 0x42, 0xb6, 0x5d, - 0x4e, 0x91, 0xc6, 0x36, 0xbd, 0xb0, 0xfa, 0x7b, 0xf9, 0x64, 0xaa, 0xe4, 0xd3, 0xae, 0x3f, 0x58, - 0xd7, 0xab, 0x5f, 0x2e, 0xc4, 0xd3, 0x45, 0x9f, 0x2e, 0x10, 0x07, 0xef, 0x0e, 0x5f, 0x92, 0x38, - 0x6e, 0xa4, 0xaf, 0xf0, 0xe1, 0x59, 0x5f, 0xe1, 0xe3, 0xd5, 0x5f, 0x29, 0xc6, 0x53, 0x6f, 0x9f, - 0x76, 0xc7, 0xf1, 0x75, 0x07, 0x59, 0x86, 0x73, 0x62, 0x6e, 0xf3, 0x41, 0x98, 0x6e, 0x42, 0xcc, - 0x5f, 0x3c, 0x6b, 0x9d, 0x98, 0x16, 0xbb, 0x2e, 0x75, 0xea, 0x9e, 0xee, 0x3e, 0xa8, 0x63, 0x7e, - 0x0a, 0x2d, 0xb5, 0x20, 0x63, 0x28, 0x66, 0xb5, 0x28, 0xc3, 0xc1, 0x90, 0xa1, 0x3f, 0x21, 0x26, - 0x18, 0xa6, 0x15, 0x54, 0x7f, 0x23, 0x07, 0xe3, 0xf1, 0xcf, 0x21, 0x53, 0x30, 0xc8, 0x7e, 0x07, - 0xcf, 0xee, 0xa5, 0x9c, 0xd8, 0x9c, 0x23, 0xbf, 0x92, 0xf7, 0x69, 0xc8, 0xab, 0x30, 0x84, 0xde, - 0x0f, 0x58, 0x20, 0x1f, 0x46, 0x3b, 0x08, 0x0b, 0x60, 0xa2, 0x56, 0x5e, 0x2c, 0x24, 0x25, 0x6f, - 0xc2, 0x70, 0x35, 0x74, 0xf3, 0x12, 0x77, 0x5e, 0xe8, 0x5d, 0x2a, 0x95, 0x0c, 0x09, 0x34, 0x99, - 0x5a, 0xfd, 0x76, 0x3e, 0x9e, 0x22, 0xfe, 0x54, 0xd5, 0x0f, 0xa6, 0xea, 0xcf, 0x2f, 0x72, 0x55, - 0xbf, 0x63, 0x5a, 0x06, 0x79, 0x02, 0xce, 0xdf, 0xad, 0xcd, 0x6a, 0xf5, 0x3b, 0xd5, 0xa5, 0x4a, - 0xfd, 0xee, 0x52, 0x6d, 0x65, 0x76, 0xa6, 0x3a, 0x57, 0x9d, 0xad, 0x8c, 0xf7, 0x91, 0xb3, 0x70, - 0x26, 0x44, 0xcd, 0xdf, 0x5d, 0x2c, 0x2f, 0x8d, 0xe7, 0xc8, 0x04, 0x8c, 0x86, 0xc0, 0xe9, 0xe5, - 0xd5, 0xf1, 0xfc, 0xf3, 0x9f, 0x80, 0x61, 0x74, 0x6f, 0xe3, 0xd7, 0xf1, 0x64, 0x04, 0x06, 0x97, - 0xa7, 0x6b, 0xb3, 0xda, 0x3d, 0x64, 0x02, 0x50, 0xaa, 0xcc, 0x2e, 0x31, 0x86, 0xb9, 0xe7, 0xff, - 0x9f, 0x1c, 0x40, 0x6d, 0x6e, 0x75, 0x45, 0x10, 0x0e, 0xc3, 0x40, 0x75, 0xe9, 0x5e, 0x79, 0xa1, - 0xca, 0xe8, 0x06, 0xa1, 0xb8, 0xbc, 0x32, 0xcb, 0x6a, 0x18, 0x82, 0xfe, 0x99, 0x85, 0xe5, 0xda, - 0xec, 0x78, 0x9e, 0x01, 0xb5, 0xd9, 0x72, 0x65, 0xbc, 0xc0, 0x80, 0xf7, 0xb5, 0xea, 0xea, 0xec, - 0x78, 0x91, 0xfd, 0xb9, 0x50, 0x5b, 0x2d, 0xaf, 0x8e, 0xf7, 0xb3, 0x3f, 0xe7, 0xf0, 0xcf, 0x12, - 0x63, 0x56, 0x9b, 0x5d, 0xc5, 0x1f, 0x03, 0xac, 0x09, 0x73, 0xfe, 0xaf, 0x41, 0x86, 0x62, 0xac, - 0x2b, 0x55, 0x6d, 0x7c, 0x88, 0xfd, 0x60, 0x2c, 0xd9, 0x0f, 0x60, 0x8d, 0xd3, 0x66, 0x17, 0x97, - 0xef, 0xcd, 0x8e, 0x0f, 0x33, 0x5e, 0x8b, 0x77, 0x18, 0x78, 0x84, 0xfd, 0xa9, 0x2d, 0xb2, 0x3f, - 0x47, 0x19, 0x27, 0x6d, 0xb6, 0xbc, 0xb0, 0x52, 0x5e, 0x9d, 0x1f, 0x1f, 0x63, 0xed, 0x41, 0x9e, - 0x67, 0x78, 0xc9, 0xa5, 0xf2, 0xe2, 0xec, 0xf8, 0xb8, 0xa0, 0xa9, 0x2c, 0x54, 0x97, 0xee, 0x8c, - 0x4f, 0x60, 0x43, 0xde, 0x5b, 0xc4, 0x1f, 0x84, 0x15, 0xc0, 0xbf, 0xce, 0x3e, 0xff, 0x83, 0x50, - 0x5a, 0xae, 0xe1, 0x28, 0xb8, 0x08, 0x67, 0x97, 0x6b, 0xf5, 0xd5, 0xf7, 0x56, 0x66, 0x63, 0xf2, - 0x9e, 0x80, 0x51, 0x1f, 0xb1, 0x50, 0x5d, 0xba, 0xfb, 0x39, 0x2e, 0x6d, 0x1f, 0xb4, 0x58, 0x9e, - 0x59, 0xae, 0x8d, 0xe7, 0x59, 0xaf, 0xf8, 0xa0, 0xfb, 0xd5, 0xa5, 0xca, 0xf2, 0xfd, 0xda, 0x78, - 0xe1, 0xf9, 0x87, 0x30, 0xc2, 0xf3, 0x74, 0x2e, 0x3b, 0x66, 0xd3, 0xb4, 0xc8, 0x53, 0xf0, 0x44, - 0x65, 0xf6, 0x5e, 0x75, 0x66, 0xb6, 0xbe, 0xac, 0x55, 0x6f, 0x55, 0x97, 0x62, 0x35, 0x9d, 0x87, - 0x89, 0x28, 0xba, 0xbc, 0x52, 0x1d, 0xcf, 0x91, 0x0b, 0x40, 0xa2, 0xe0, 0xdb, 0xe5, 0xc5, 0xb9, - 0xf1, 0x3c, 0x51, 0xe0, 0x5c, 0x14, 0x5e, 0x5d, 0x5a, 0xbd, 0xbb, 0x34, 0x3b, 0x5e, 0x78, 0xfe, - 0xaf, 0xe6, 0xe0, 0x7c, 0x6a, 0x2c, 0x67, 0xa2, 0xc2, 0xd3, 0xb3, 0x0b, 0xe5, 0xda, 0x6a, 0x75, - 0xa6, 0x36, 0x5b, 0xd6, 0x66, 0xe6, 0xeb, 0x33, 0xe5, 0xd5, 0xd9, 0x5b, 0xcb, 0xda, 0x7b, 0xf5, - 0x5b, 0xb3, 0x4b, 0xb3, 0x5a, 0x79, 0x61, 0xbc, 0x8f, 0x3c, 0x07, 0x93, 0x19, 0x34, 0xb5, 0xd9, - 0x99, 0xbb, 0x5a, 0x75, 0xf5, 0xbd, 0xf1, 0x1c, 0x79, 0x16, 0x9e, 0xca, 0x24, 0x62, 0xbf, 0xc7, - 0xf3, 0xe4, 0x69, 0xb8, 0x94, 0x45, 0xf2, 0xee, 0xc2, 0x78, 0xe1, 0xf9, 0x9f, 0xcf, 0x01, 0x49, - 0x06, 0xe3, 0x25, 0xcf, 0xc0, 0x65, 0xa6, 0x17, 0xf5, 0xec, 0x06, 0x3e, 0x0b, 0x4f, 0xa5, 0x52, - 0x48, 0xcd, 0x9b, 0x84, 0x27, 0x33, 0x48, 0x44, 0xe3, 0x2e, 0x83, 0x92, 0x4e, 0x80, 0x4d, 0xfb, - 0xf5, 0x1c, 0x9c, 0x4f, 0xf5, 0x80, 0x21, 0x57, 0xe1, 0x63, 0xe5, 0xca, 0x22, 0xeb, 0x9b, 0x99, - 0xd5, 0xea, 0xf2, 0x52, 0xad, 0xbe, 0x38, 0x57, 0xae, 0x33, 0xed, 0xbb, 0x5b, 0x8b, 0xf5, 0xe6, - 0x15, 0x50, 0x7b, 0x50, 0xce, 0xcc, 0x97, 0x97, 0x6e, 0xb1, 0xe1, 0x47, 0x3e, 0x06, 0xcf, 0x64, - 0xd2, 0xcd, 0x2e, 0x95, 0xa7, 0x17, 0x66, 0x2b, 0xe3, 0x79, 0xf2, 0x71, 0x78, 0x36, 0x93, 0xaa, - 0x52, 0xad, 0x71, 0xb2, 0xc2, 0x74, 0xe5, 0xdb, 0xff, 0xf3, 0xd3, 0x7d, 0xdf, 0xfe, 0xe3, 0xa7, - 0x73, 0x7f, 0xf8, 0xc7, 0x4f, 0xe7, 0xfe, 0xe9, 0x1f, 0x3f, 0x9d, 0xfb, 0xfc, 0x8d, 0xfd, 0x04, - 0x59, 0xe6, 0xd3, 0xd6, 0x5a, 0x09, 0x6f, 0xa3, 0x5f, 0xfe, 0x57, 0x01, 0x00, 0x00, 0xff, 0xff, - 0xcb, 0xba, 0x9e, 0x8e, 0x2c, 0x81, 0x01, 0x00, + 0x71, 0xe4, 0x5d, 0x18, 0x43, 0xb6, 0x41, 0x7b, 0xc4, 0xdc, 0x77, 0xd6, 0x97, 0xae, 0xdc, 0x58, + 0xbe, 0x34, 0x61, 0x6b, 0xea, 0x8e, 0x5f, 0x40, 0x8b, 0x31, 0x20, 0x0f, 0x60, 0x5c, 0x34, 0x22, + 0x64, 0xda, 0xdf, 0x83, 0xe9, 0xb9, 0xed, 0xad, 0x89, 0xd3, 0xa2, 0xfd, 0x12, 0xdb, 0x04, 0x13, + 0xc6, 0x58, 0x34, 0x3b, 0x64, 0x5c, 0xda, 0x89, 0xb1, 0xf8, 0x62, 0x99, 0x71, 0x9c, 0x89, 0xfa, + 0x1e, 0x8c, 0xc8, 0x05, 0xc9, 0x79, 0xdc, 0x5a, 0xf3, 0x71, 0x82, 0x9b, 0x72, 0xd3, 0xc0, 0xfd, + 0xf4, 0x4b, 0x30, 0x5c, 0xa1, 0x6e, 0xc3, 0x31, 0x3b, 0xcc, 0x6a, 0x10, 0x4a, 0x7e, 0x6a, 0x7b, + 0x6b, 0x62, 0xd8, 0x08, 0xc1, 0x9a, 0x4c, 0xa3, 0xfe, 0x5f, 0x39, 0x38, 0xcf, 0x78, 0x97, 0x5d, + 0xd7, 0x6c, 0x5a, 0x6d, 0x79, 0xd9, 0x7e, 0x01, 0x4a, 0x35, 0xac, 0x4f, 0xd4, 0x74, 0x76, 0x7b, + 0x6b, 0x62, 0x9c, 0xb7, 0x40, 0xd2, 0x43, 0x41, 0x13, 0xec, 0x2b, 0xf3, 0x3b, 0xec, 0x2b, 0x99, + 0x49, 0xeb, 0xe9, 0x8e, 0x67, 0x5a, 0xcd, 0x9a, 0xa7, 0x7b, 0x5d, 0x37, 0x62, 0xd2, 0x0a, 0x4c, + 0xdd, 0x45, 0x54, 0xc4, 0xa4, 0x8d, 0x14, 0x22, 0xef, 0xc0, 0xc8, 0x8c, 0x65, 0x84, 0x4c, 0xf8, + 0x84, 0xf8, 0x14, 0xb3, 0x34, 0x29, 0xc2, 0x93, 0x2c, 0x22, 0x05, 0xd4, 0xbf, 0x93, 0x03, 0x85, + 0x6f, 0x02, 0xe7, 0x4d, 0xd7, 0x5b, 0xa0, 0xed, 0x55, 0x69, 0x76, 0x9a, 0xf5, 0x77, 0x95, 0x0c, + 0x27, 0xad, 0x45, 0x68, 0x0a, 0x88, 0x5d, 0x65, 0xcb, 0x74, 0x13, 0xdb, 0x8f, 0x58, 0x29, 0x52, + 0x85, 0x01, 0xce, 0x99, 0xdb, 0x12, 0xc3, 0x37, 0x15, 0x5f, 0x11, 0xe2, 0x55, 0x73, 0x65, 0x68, + 0x73, 0x62, 0x79, 0x43, 0x23, 0xca, 0xab, 0xdf, 0x28, 0xc0, 0x78, 0xbc, 0x10, 0x79, 0x00, 0x83, + 0x77, 0x6c, 0xd3, 0xa2, 0xc6, 0x92, 0x85, 0x2d, 0xec, 0x7d, 0x38, 0xe2, 0xdb, 0xe2, 0x67, 0xde, + 0xc7, 0x32, 0x75, 0xd9, 0x82, 0xc5, 0xb3, 0x92, 0x80, 0x19, 0xf9, 0x3c, 0x0c, 0x31, 0x1b, 0xf0, + 0x11, 0x72, 0xce, 0xef, 0xc8, 0xf9, 0x19, 0xc1, 0xf9, 0xac, 0xc3, 0x0b, 0x25, 0x59, 0x87, 0xec, + 0x98, 0x5e, 0x69, 0x54, 0x77, 0x6d, 0x4b, 0xf4, 0x3c, 0xea, 0x95, 0x83, 0x10, 0x59, 0xaf, 0x38, + 0x0d, 0x33, 0x5d, 0xf9, 0xc7, 0x62, 0x37, 0x48, 0x7b, 0x17, 0x2e, 0xab, 0x78, 0x0f, 0x48, 0xc4, + 0xc4, 0x82, 0x53, 0x42, 0xa0, 0xeb, 0x66, 0x07, 0xad, 0x7e, 0x5c, 0xd7, 0xc6, 0x6e, 0x5e, 0x9d, + 0xf4, 0x0f, 0xc5, 0x26, 0xa5, 0x23, 0xb5, 0x47, 0x2f, 0x4d, 0x2e, 0x04, 0xe4, 0xb8, 0x33, 0x45, + 0x9d, 0x8c, 0xb1, 0x90, 0x7b, 0xbb, 0x1d, 0x21, 0x57, 0x7f, 0x2c, 0x0f, 0x2f, 0x86, 0x5d, 0xa4, + 0xd1, 0x47, 0x26, 0xdd, 0x08, 0x39, 0x8a, 0x3d, 0x32, 0x1b, 0x62, 0xee, 0xf4, 0xba, 0x6e, 0x35, + 0xa9, 0x41, 0xae, 0x43, 0xbf, 0x66, 0xb7, 0xa8, 0xab, 0xe4, 0xd0, 0x3c, 0xc4, 0xe9, 0xcb, 0x61, + 0x00, 0xf9, 0x90, 0x05, 0x29, 0x88, 0x0d, 0xa5, 0x15, 0x47, 0x37, 0x3d, 0x5f, 0x93, 0xca, 0x49, + 0x4d, 0xda, 0x45, 0x8d, 0x93, 0x9c, 0x07, 0x5f, 0x63, 0x50, 0xf0, 0x1e, 0x02, 0x64, 0xc1, 0x73, + 0x92, 0x4b, 0xaf, 0xc3, 0xb0, 0x44, 0xbc, 0xa7, 0x45, 0xe4, 0x5b, 0x45, 0x79, 0x6c, 0xf9, 0xcd, + 0x12, 0x63, 0xeb, 0x06, 0x1b, 0x13, 0xae, 0xcb, 0xac, 0x18, 0x3e, 0xa8, 0x84, 0xe6, 0x23, 0x28, + 0xaa, 0xf9, 0x08, 0x22, 0x2f, 0xc3, 0x20, 0x67, 0x11, 0xec, 0x97, 0x71, 0xaf, 0xed, 0x20, 0x2c, + 0x6a, 0x0a, 0x04, 0x84, 0xe4, 0x17, 0x73, 0xf0, 0x74, 0x4f, 0x49, 0xa0, 0xf2, 0x0d, 0xdf, 0x7c, + 0x65, 0x5f, 0x62, 0x9c, 0x7a, 0x71, 0x7b, 0x6b, 0xe2, 0xba, 0xa4, 0x19, 0x8e, 0x44, 0x53, 0x6f, + 0x70, 0x22, 0xa9, 0x5d, 0xbd, 0x9b, 0xc2, 0x8c, 0x55, 0x5e, 0xe9, 0x2c, 0x1e, 0x55, 0x59, 0x8d, + 0x4d, 0xbf, 0x91, 0xc5, 0xd0, 0x58, 0x15, 0xdf, 0xbb, 0xe6, 0x93, 0xa4, 0x54, 0x93, 0xc1, 0x85, + 0x34, 0xe0, 0x02, 0xc7, 0x54, 0xf4, 0xcd, 0xa5, 0xb5, 0x05, 0xdb, 0xf2, 0xd6, 0xfd, 0x0a, 0xfa, + 0xe5, 0xb3, 0x1e, 0xac, 0xc0, 0xd0, 0x37, 0xeb, 0xf6, 0x5a, 0xbd, 0xcd, 0xa8, 0x52, 0xea, 0xc8, + 0xe2, 0xc4, 0x26, 0x76, 0x31, 0xc6, 0xfd, 0x29, 0xaf, 0x14, 0x9e, 0xc4, 0xf9, 0xf3, 0x42, 0x72, + 0x82, 0x8b, 0x15, 0x52, 0xab, 0x30, 0x32, 0x6f, 0x37, 0x1e, 0x06, 0xea, 0xf2, 0x3a, 0x94, 0x56, + 0x74, 0xa7, 0x49, 0x3d, 0x94, 0xc5, 0xf0, 0xcd, 0xd3, 0x93, 0xfc, 0x74, 0x9b, 0x11, 0x71, 0xc4, + 0xd4, 0x98, 0x98, 0x7d, 0x4a, 0x1e, 0xfe, 0xd6, 0x44, 0x01, 0xf5, 0xbb, 0xfd, 0x30, 0x22, 0x4e, + 0x62, 0x71, 0xf5, 0x20, 0x6f, 0x84, 0x67, 0xdb, 0x62, 0xba, 0x0c, 0x4e, 0xa3, 0x82, 0x53, 0xb4, + 0x11, 0xc6, 0xec, 0x0f, 0xb6, 0x26, 0x72, 0xdb, 0x5b, 0x13, 0x7d, 0xda, 0xa0, 0xb4, 0x89, 0x0d, + 0xd7, 0x37, 0x69, 0x41, 0x97, 0xcf, 0x56, 0x63, 0x65, 0xf9, 0x7a, 0xf7, 0x0e, 0x0c, 0x88, 0x36, + 0x08, 0x8d, 0xbb, 0x10, 0x9e, 0x9d, 0x44, 0x4e, 0x94, 0x63, 0xa5, 0xfd, 0x52, 0xe4, 0x2d, 0x28, + 0xf1, 0xb3, 0x04, 0x21, 0x80, 0xf3, 0xe9, 0x67, 0x2f, 0xb1, 0xe2, 0xa2, 0x0c, 0x99, 0x03, 0x08, + 0xcf, 0x11, 0x82, 0x03, 0x74, 0xc1, 0x21, 0x79, 0xc2, 0x10, 0xe3, 0x22, 0x95, 0x25, 0xaf, 0xc2, + 0xc8, 0x0a, 0x75, 0xda, 0xa6, 0xa5, 0xb7, 0x6a, 0xe6, 0x07, 0xfe, 0x19, 0x3a, 0x2e, 0xf4, 0xae, + 0xf9, 0x81, 0x3c, 0x72, 0x23, 0x74, 0xe4, 0x8b, 0x69, 0xfb, 0xf4, 0x01, 0x6c, 0xc8, 0xb3, 0x3b, + 0x6e, 0x60, 0x63, 0xed, 0x49, 0xd9, 0xb6, 0xbf, 0x0b, 0xa3, 0x91, 0x2d, 0x9a, 0x38, 0x24, 0x7d, + 0x3a, 0xc9, 0x5a, 0xda, 0x6f, 0xc6, 0xd8, 0x46, 0x39, 0x30, 0x4d, 0xae, 0x5a, 0xa6, 0x67, 0xea, + 0xad, 0x69, 0xbb, 0xdd, 0xd6, 0x2d, 0x43, 0x19, 0x0a, 0x35, 0xd9, 0xe4, 0x98, 0x7a, 0x83, 0xa3, + 0x64, 0x4d, 0x8e, 0x16, 0x22, 0x77, 0x61, 0x5c, 0xf4, 0xa1, 0x46, 0x1b, 0xb6, 0xc3, 0x6c, 0x0f, + 0x3c, 0x03, 0x15, 0xc7, 0x00, 0x2e, 0xc7, 0xd5, 0x1d, 0x1f, 0x29, 0x1b, 0xf7, 0xf1, 0x82, 0x77, + 0x8a, 0x83, 0xc3, 0xe3, 0x23, 0xf1, 0x63, 0x6b, 0xf5, 0x6f, 0x15, 0x60, 0x58, 0x90, 0xb2, 0xa5, + 0xfb, 0x44, 0xc1, 0x0f, 0xa2, 0xe0, 0xa9, 0x8a, 0x5a, 0x3a, 0x2c, 0x45, 0x55, 0xbf, 0x92, 0x0f, + 0x66, 0xa3, 0x65, 0xc7, 0xb4, 0x0e, 0x36, 0x1b, 0x5d, 0x05, 0x98, 0x5e, 0xef, 0x5a, 0x0f, 0xf9, + 0xf5, 0x5c, 0x3e, 0xbc, 0x9e, 0x6b, 0x98, 0x9a, 0x84, 0x21, 0x4f, 0x43, 0xb1, 0xc2, 0xf8, 0xb3, + 0x9e, 0x19, 0x99, 0x1a, 0xfa, 0x0e, 0xe7, 0x94, 0x7b, 0x51, 0x43, 0x30, 0xdb, 0xcc, 0x4d, 0x6d, + 0x7a, 0x94, 0x9b, 0xcf, 0x05, 0xbe, 0x99, 0x5b, 0x65, 0x00, 0x8d, 0xc3, 0xc9, 0x2d, 0x38, 0x5d, + 0xa1, 0x2d, 0x7d, 0x73, 0xc1, 0x6c, 0xb5, 0x4c, 0x97, 0x36, 0x6c, 0xcb, 0x70, 0x51, 0xc8, 0xa2, + 0xba, 0xb6, 0xab, 0x25, 0x09, 0x88, 0x0a, 0xa5, 0xa5, 0xb5, 0x35, 0x97, 0x7a, 0x28, 0xbe, 0xc2, + 0x14, 0xb0, 0xc9, 0xd9, 0x46, 0x88, 0x26, 0x30, 0xea, 0x37, 0x73, 0x6c, 0xb7, 0xe4, 0x3e, 0xf4, + 0xec, 0x4e, 0xa0, 0xe5, 0x07, 0x12, 0xc9, 0xf5, 0xd0, 0xae, 0xc8, 0xe3, 0xd7, 0x9e, 0x12, 0x5f, + 0x3b, 0x20, 0x6c, 0x8b, 0xd0, 0xa2, 0x48, 0xfd, 0xaa, 0xc2, 0x0e, 0x5f, 0xa5, 0xfe, 0x71, 0x1e, + 0x2e, 0x88, 0x16, 0x4f, 0xb7, 0xcc, 0xce, 0xaa, 0xad, 0x3b, 0x86, 0x46, 0x1b, 0xd4, 0x7c, 0x44, + 0x8f, 0xe7, 0xc0, 0x8b, 0x0e, 0x9d, 0xe2, 0x01, 0x86, 0xce, 0x4d, 0xdc, 0x78, 0x32, 0xc9, 0xe0, + 0x01, 0x33, 0x37, 0x2a, 0xc6, 0xb7, 0xb7, 0x26, 0x46, 0x0c, 0x0e, 0xc6, 0x2b, 0x06, 0x4d, 0x26, + 0x62, 0x4a, 0x32, 0x4f, 0xad, 0xa6, 0xb7, 0x8e, 0x4a, 0xd2, 0xcf, 0x95, 0xa4, 0x85, 0x10, 0x4d, + 0x60, 0xd4, 0xff, 0x3d, 0x0f, 0x67, 0xe3, 0x22, 0xaf, 0x51, 0xcb, 0x38, 0x91, 0xf7, 0x87, 0x23, + 0xef, 0x3f, 0x29, 0xc0, 0x53, 0xa2, 0x4c, 0x6d, 0x5d, 0x77, 0xa8, 0x51, 0x31, 0x1d, 0xda, 0xf0, + 0x6c, 0x67, 0xf3, 0x18, 0x1b, 0x50, 0x87, 0x27, 0xf6, 0x5b, 0x50, 0x12, 0xc7, 0x0d, 0x7c, 0x9d, + 0x19, 0x0b, 0x5a, 0x82, 0xd0, 0xc4, 0x0a, 0xc5, 0x8f, 0x2a, 0x62, 0x9d, 0x55, 0xda, 0x4d, 0x67, + 0x7d, 0x1a, 0x46, 0x03, 0xd1, 0xe3, 0xc6, 0x77, 0x20, 0xb4, 0xb6, 0x0c, 0x1f, 0x81, 0x7b, 0x5f, + 0x2d, 0x4a, 0x88, 0xb5, 0xf9, 0x80, 0x6a, 0x05, 0xad, 0xa1, 0x51, 0x51, 0x5b, 0x50, 0xce, 0x34, + 0x34, 0x99, 0x48, 0xdd, 0x2a, 0xc2, 0xa5, 0xf4, 0x6e, 0xd7, 0xa8, 0x6e, 0x9c, 0xf4, 0xfa, 0xf7, + 0x65, 0xaf, 0x93, 0x67, 0xa1, 0xb8, 0xac, 0x7b, 0xeb, 0xe2, 0xba, 0x1f, 0xef, 0xa0, 0xd7, 0xcc, + 0x16, 0xad, 0x77, 0x74, 0x6f, 0x5d, 0x43, 0x94, 0x34, 0x67, 0x00, 0x72, 0x4c, 0x99, 0x33, 0xa4, + 0xc5, 0x7e, 0xf8, 0x99, 0xdc, 0xb5, 0x62, 0xea, 0x62, 0xff, 0xdd, 0x62, 0xd6, 0xbc, 0xf2, 0xc0, + 0x31, 0x3d, 0x7a, 0xa2, 0x61, 0x27, 0x1a, 0x76, 0x40, 0x0d, 0xfb, 0xc7, 0x79, 0x18, 0x0d, 0x36, + 0x4d, 0xef, 0xd3, 0xc6, 0xd1, 0xac, 0x55, 0xe1, 0x56, 0xa6, 0x70, 0xe0, 0xad, 0xcc, 0x41, 0x14, + 0x4a, 0x0d, 0x8e, 0x58, 0xb9, 0x69, 0x80, 0x12, 0xe3, 0x47, 0xac, 0xc1, 0xc1, 0xea, 0xb3, 0x30, + 0xb0, 0xa0, 0x3f, 0x36, 0xdb, 0xdd, 0xb6, 0xb0, 0xd2, 0xd1, 0x7d, 0xad, 0xad, 0x3f, 0xd6, 0x7c, + 0xb8, 0xfa, 0xdf, 0xe5, 0x60, 0x4c, 0x08, 0x55, 0x30, 0x3f, 0x90, 0x54, 0x43, 0xe9, 0xe4, 0x0f, + 0x2c, 0x9d, 0xc2, 0xfe, 0xa5, 0xa3, 0xfe, 0x95, 0x02, 0x28, 0xb3, 0x66, 0x8b, 0xae, 0x38, 0xba, + 0xe5, 0xae, 0x51, 0x47, 0x6c, 0xa7, 0x67, 0x18, 0xab, 0x03, 0x7d, 0xa0, 0x34, 0xa5, 0xe4, 0xf7, + 0x35, 0xa5, 0x7c, 0x12, 0x86, 0x44, 0x63, 0x02, 0xd7, 0x49, 0x1c, 0x35, 0x8e, 0x0f, 0xd4, 0x42, + 0x3c, 0x23, 0x2e, 0x77, 0x3a, 0x8e, 0xfd, 0x88, 0x3a, 0xfc, 0x56, 0x4c, 0x10, 0xeb, 0x3e, 0x50, + 0x0b, 0xf1, 0x12, 0x67, 0xea, 0xdb, 0x8b, 0x32, 0x67, 0xea, 0x68, 0x21, 0x9e, 0x5c, 0x83, 0xc1, + 0x79, 0xbb, 0xa1, 0xa3, 0xa0, 0xf9, 0xb4, 0x32, 0xb2, 0xbd, 0x35, 0x31, 0xd8, 0x12, 0x30, 0x2d, + 0xc0, 0x32, 0xca, 0x8a, 0xbd, 0x61, 0xb5, 0x6c, 0x9d, 0x3b, 0xdb, 0x0c, 0x72, 0x4a, 0x43, 0xc0, + 0xb4, 0x00, 0xcb, 0x28, 0x99, 0xcc, 0xd1, 0x89, 0x69, 0x30, 0xe4, 0xb9, 0x26, 0x60, 0x5a, 0x80, + 0x55, 0xbf, 0x59, 0x64, 0xda, 0xeb, 0x9a, 0x1f, 0x3c, 0xf1, 0xeb, 0x42, 0x38, 0x60, 0xfa, 0xf7, + 0x31, 0x60, 0x9e, 0x98, 0x03, 0x3b, 0xf5, 0x5f, 0x0e, 0x00, 0x08, 0xe9, 0xcf, 0x9c, 0x6c, 0x0e, + 0x0f, 0xa6, 0x35, 0x15, 0x38, 0x3d, 0x63, 0xad, 0xeb, 0x56, 0x83, 0x1a, 0xe1, 0xb1, 0x65, 0x09, + 0x87, 0x36, 0x3a, 0x5d, 0x52, 0x81, 0x0c, 0xcf, 0x2d, 0xb5, 0x64, 0x01, 0xf2, 0x12, 0x0c, 0x57, + 0x2d, 0x8f, 0x3a, 0x7a, 0xc3, 0x33, 0x1f, 0x51, 0x31, 0x35, 0xe0, 0x4d, 0xb4, 0x19, 0x82, 0x35, + 0x99, 0x86, 0xdc, 0x82, 0x91, 0x65, 0xdd, 0xf1, 0xcc, 0x86, 0xd9, 0xd1, 0x2d, 0xcf, 0x55, 0x06, + 0x71, 0x46, 0x43, 0x0b, 0xa3, 0x23, 0xc1, 0xb5, 0x08, 0x15, 0xf9, 0x22, 0x0c, 0xe1, 0xd6, 0x14, + 0xfd, 0xc3, 0x87, 0x76, 0xbc, 0xa8, 0x7c, 0x2e, 0x74, 0x47, 0xe4, 0xa7, 0xaf, 0x78, 0xe3, 0x1c, + 0xbf, 0xab, 0x0c, 0x38, 0x92, 0xcf, 0xc1, 0xc0, 0x8c, 0x65, 0x20, 0x73, 0xd8, 0x91, 0xb9, 0x2a, + 0x98, 0x9f, 0x0f, 0x99, 0xdb, 0x9d, 0x18, 0x6f, 0x9f, 0x5d, 0xfa, 0x28, 0x1b, 0xfe, 0xf0, 0x46, + 0xd9, 0xc8, 0x87, 0x70, 0x2c, 0x3e, 0x7a, 0x58, 0xc7, 0xe2, 0x63, 0xfb, 0x3c, 0x16, 0x57, 0x3f, + 0x80, 0xe1, 0xa9, 0xe5, 0xd9, 0x60, 0xf4, 0x5e, 0x84, 0xc2, 0xb2, 0xf0, 0x8c, 0x28, 0x72, 0x7b, + 0xa6, 0x63, 0x1a, 0x1a, 0x83, 0x91, 0xeb, 0x30, 0x38, 0x8d, 0xee, 0x76, 0xe2, 0x16, 0xb1, 0xc8, + 0xd7, 0xbf, 0x06, 0xc2, 0xd0, 0xeb, 0xd6, 0x47, 0x93, 0x8f, 0xc3, 0xc0, 0xb2, 0x63, 0x37, 0x1d, + 0xbd, 0x2d, 0xd6, 0x60, 0x74, 0x4d, 0xe9, 0x70, 0x90, 0xe6, 0xe3, 0xd4, 0x9f, 0xce, 0xf9, 0x66, + 0x3b, 0x2b, 0x51, 0xeb, 0xe2, 0xd1, 0x3c, 0xd6, 0x3d, 0xc8, 0x4b, 0xb8, 0x1c, 0xa4, 0xf9, 0x38, + 0x72, 0x1d, 0xfa, 0x67, 0x1c, 0xc7, 0x76, 0x64, 0x9f, 0x7a, 0xca, 0x00, 0xf2, 0x75, 0x2f, 0x52, + 0x90, 0xd7, 0x60, 0x98, 0xcf, 0x39, 0xfc, 0x44, 0xb3, 0xd0, 0xeb, 0xa6, 0x54, 0xa6, 0x54, 0x7f, + 0xa7, 0x20, 0xd9, 0x6c, 0x5c, 0xe2, 0x4f, 0xe0, 0xad, 0xc0, 0xcb, 0x50, 0x98, 0x5a, 0x9e, 0x15, + 0x13, 0xe0, 0x19, 0xbf, 0xa8, 0xa4, 0x2a, 0xb1, 0x72, 0x8c, 0x9a, 0x5c, 0x86, 0xe2, 0x32, 0x53, + 0x9f, 0x12, 0xaa, 0xc7, 0xe0, 0xf6, 0xd6, 0x44, 0xb1, 0xc3, 0xf4, 0x07, 0xa1, 0x88, 0x65, 0x9b, + 0x19, 0xbe, 0x63, 0xe2, 0xd8, 0x70, 0x1f, 0x73, 0x19, 0x8a, 0x65, 0xa7, 0xf9, 0x48, 0xcc, 0x5a, + 0x88, 0xd5, 0x9d, 0xe6, 0x23, 0x0d, 0xa1, 0xe4, 0x06, 0x80, 0x46, 0xbd, 0xae, 0x63, 0xe1, 0x73, + 0x97, 0x21, 0x3c, 0x7f, 0xc3, 0xd9, 0xd0, 0x41, 0x68, 0xbd, 0x61, 0x1b, 0x54, 0x93, 0x48, 0xd4, + 0xbf, 0x19, 0x5e, 0xec, 0x54, 0x4c, 0xf7, 0xe1, 0x49, 0x17, 0xee, 0xa1, 0x0b, 0x75, 0x71, 0xc4, + 0x99, 0xec, 0xa4, 0x09, 0xe8, 0x9f, 0x6d, 0xe9, 0x4d, 0x17, 0xfb, 0x50, 0xf8, 0xae, 0xad, 0x31, + 0x80, 0xc6, 0xe1, 0xb1, 0x7e, 0x1a, 0xdc, 0xb9, 0x9f, 0x7e, 0xb6, 0x3f, 0x18, 0x6d, 0x8b, 0xd4, + 0xdb, 0xb0, 0x9d, 0x93, 0xae, 0xda, 0x6d, 0x57, 0x5d, 0x85, 0x81, 0x9a, 0xd3, 0x90, 0x8e, 0x2e, + 0x70, 0x3f, 0xe0, 0x3a, 0x0d, 0x7e, 0x6c, 0xe1, 0x23, 0x19, 0x5d, 0xc5, 0xf5, 0x90, 0x6e, 0x20, + 0xa4, 0x33, 0x5c, 0x4f, 0xd0, 0x09, 0xa4, 0xa0, 0x5b, 0xb6, 0x1d, 0x4f, 0x74, 0x5c, 0x40, 0xd7, + 0xb1, 0x1d, 0x4f, 0xf3, 0x91, 0xe4, 0x93, 0x00, 0x2b, 0xd3, 0xcb, 0xbe, 0x73, 0xff, 0x50, 0xe8, + 0x7b, 0x28, 0xbc, 0xfa, 0x35, 0x09, 0x4d, 0x56, 0x60, 0x68, 0xa9, 0x43, 0x1d, 0xbe, 0x15, 0xe2, + 0x0f, 0x58, 0x3e, 0x11, 0x13, 0xad, 0xe8, 0xf7, 0x49, 0xf1, 0x7f, 0x40, 0xce, 0xd7, 0x17, 0xdb, + 0xff, 0xa9, 0x85, 0x8c, 0xc8, 0x6b, 0x50, 0x2a, 0x73, 0x3b, 0x6f, 0x18, 0x59, 0x06, 0x22, 0xc3, + 0x2d, 0x28, 0x47, 0xf1, 0x3d, 0xbb, 0x8e, 0x7f, 0x6b, 0x82, 0x5c, 0xbd, 0x0e, 0xe3, 0xf1, 0x6a, + 0xc8, 0x30, 0x0c, 0x4c, 0x2f, 0x2d, 0x2e, 0xce, 0x4c, 0xaf, 0x8c, 0xf7, 0x91, 0x41, 0x28, 0xd6, + 0x66, 0x16, 0x2b, 0xe3, 0x39, 0xf5, 0x97, 0xa4, 0x19, 0x84, 0xa9, 0xd6, 0xc9, 0xd5, 0xf0, 0x81, + 0xee, 0x5b, 0xc6, 0xf1, 0x3e, 0x14, 0x4f, 0x0c, 0xda, 0xa6, 0xe7, 0x51, 0x43, 0xac, 0x12, 0x78, + 0x5f, 0xe8, 0x3d, 0xd6, 0x12, 0x78, 0xf2, 0x02, 0x8c, 0x22, 0x4c, 0x5c, 0x11, 0xf2, 0xfd, 0xb1, + 0x28, 0xe0, 0x3c, 0xd6, 0xa2, 0x48, 0xf5, 0xf7, 0xc2, 0xdb, 0xe1, 0x79, 0xaa, 0x1f, 0xd7, 0x1b, + 0xc5, 0x8f, 0x48, 0x7f, 0xa9, 0xff, 0xba, 0xc8, 0x9f, 0x9c, 0xf0, 0xf7, 0x89, 0x47, 0x21, 0xca, + 0xf0, 0x48, 0xb7, 0xb0, 0x87, 0x23, 0xdd, 0x17, 0xa0, 0xb4, 0x40, 0xbd, 0x75, 0xdb, 0x77, 0xfc, + 0x42, 0x0f, 0xbd, 0x36, 0x42, 0x64, 0x0f, 0x3d, 0x4e, 0x43, 0x1e, 0x02, 0xf1, 0x1f, 0x1f, 0x06, + 0x8e, 0xdf, 0xfe, 0x11, 0xf2, 0x85, 0xc4, 0x3e, 0xa5, 0x86, 0x4f, 0x94, 0xd1, 0xa7, 0xff, 0x6c, + 0xe0, 0x58, 0x2e, 0x79, 0x62, 0xfd, 0xab, 0xad, 0x89, 0x12, 0xa7, 0xd1, 0x52, 0xd8, 0x92, 0x77, + 0x61, 0x68, 0x61, 0xb6, 0x2c, 0x1e, 0x22, 0x72, 0xaf, 0x88, 0x8b, 0x81, 0x14, 0x7d, 0x44, 0x20, + 0x12, 0x7c, 0xdf, 0xd3, 0x5e, 0xd3, 0x93, 0xef, 0x10, 0x43, 0x2e, 0x4c, 0x5b, 0xf8, 0x4b, 0x21, + 0x71, 0xba, 0x10, 0x68, 0x4b, 0xf4, 0xfd, 0x50, 0x5c, 0x56, 0x1c, 0x1b, 0xd3, 0x96, 0xc1, 0x03, + 0x8c, 0xee, 0x25, 0x38, 0x5d, 0xee, 0x74, 0x5a, 0x26, 0x35, 0x50, 0x5f, 0xb4, 0x6e, 0x8b, 0xba, + 0xc2, 0xe5, 0x07, 0x1f, 0x9f, 0xe8, 0x1c, 0x59, 0xc7, 0xe7, 0xaf, 0x75, 0xa7, 0x1b, 0xf5, 0xcf, + 0x4c, 0x96, 0x55, 0xff, 0x42, 0x1e, 0xce, 0x4f, 0x3b, 0x54, 0xf7, 0xe8, 0xc2, 0x6c, 0xb9, 0xdc, + 0x45, 0x1f, 0xb9, 0x56, 0x8b, 0x5a, 0xcd, 0xa3, 0x19, 0xd6, 0x6f, 0xc2, 0x58, 0xd0, 0x80, 0x5a, + 0xc3, 0xee, 0x50, 0xf9, 0x21, 0x57, 0xc3, 0xc7, 0xd4, 0x5d, 0x86, 0xd2, 0x62, 0xa4, 0xe4, 0x2e, + 0x9c, 0x09, 0x20, 0xe5, 0x56, 0xcb, 0xde, 0xd0, 0x68, 0xd7, 0xe5, 0x8e, 0xb8, 0x83, 0xdc, 0x11, + 0x37, 0xe4, 0xa0, 0x33, 0x7c, 0xdd, 0x61, 0x04, 0x5a, 0x5a, 0x29, 0xf5, 0x1b, 0x05, 0xb8, 0x70, + 0x5f, 0x6f, 0x99, 0x46, 0x28, 0x1a, 0x8d, 0xba, 0x1d, 0xdb, 0x72, 0xe9, 0x31, 0x1a, 0xa5, 0x91, + 0xa1, 0x50, 0x3c, 0x94, 0xa1, 0x90, 0xec, 0xa2, 0xfe, 0x03, 0x77, 0x51, 0x69, 0x5f, 0x5d, 0xf4, + 0xbf, 0xe5, 0x60, 0xdc, 0x7f, 0x68, 0x20, 0x3f, 0x1a, 0x97, 0xbc, 0xe0, 0xf1, 0x08, 0x31, 0xe6, + 0x77, 0x8d, 0x78, 0x52, 0x83, 0x81, 0x99, 0xc7, 0x1d, 0xd3, 0xa1, 0xee, 0x2e, 0x9c, 0xc6, 0x9f, + 0x16, 0xc7, 0x25, 0xa7, 0x29, 0x2f, 0x92, 0x38, 0x29, 0xe1, 0x60, 0x7c, 0x3e, 0xc8, 0x9f, 0x5a, + 0x4c, 0xf9, 0x2f, 0xe1, 0xf9, 0xf3, 0x41, 0xf1, 0x24, 0x23, 0xf2, 0x1e, 0x34, 0x24, 0x25, 0xcf, + 0x41, 0x61, 0x65, 0x65, 0x5e, 0xcc, 0xa4, 0x18, 0x81, 0xc0, 0xf3, 0xe4, 0xf7, 0x91, 0x0c, 0xab, + 0xfe, 0xb3, 0x3c, 0x00, 0x53, 0x05, 0x3e, 0x5c, 0x8f, 0x44, 0x09, 0xa7, 0x60, 0xd0, 0x17, 0xb8, + 0x50, 0xc3, 0xe0, 0x95, 0x40, 0xbc, 0x23, 0xe2, 0x75, 0x07, 0x2f, 0x42, 0x26, 0x7c, 0x47, 0x72, + 0x7e, 0x0f, 0x80, 0x3b, 0x1b, 0x74, 0x24, 0xf7, 0xdd, 0xc7, 0x3f, 0x09, 0x43, 0x62, 0xc6, 0xb3, + 0x23, 0xe7, 0xff, 0x0d, 0x1f, 0xa8, 0x85, 0xf8, 0xd8, 0xd4, 0x5a, 0x3a, 0xc0, 0x42, 0xec, 0x8b, + 0x97, 0xf7, 0xca, 0x89, 0x78, 0x0f, 0x59, 0xbc, 0x5f, 0x15, 0xe2, 0xe5, 0x2f, 0x86, 0x8e, 0xad, + 0x78, 0x0f, 0xed, 0xec, 0x5b, 0xfd, 0xc7, 0x39, 0x20, 0xac, 0x59, 0xcb, 0xba, 0xeb, 0x6e, 0xd8, + 0x8e, 0xc1, 0x9d, 0xd3, 0x8f, 0x44, 0x30, 0x87, 0x77, 0x5f, 0xf9, 0x3b, 0x83, 0x70, 0x26, 0xe2, + 0xf8, 0x7b, 0xcc, 0x27, 0xab, 0xeb, 0xd1, 0xd1, 0xd4, 0xeb, 0xd5, 0xcb, 0xc7, 0xe4, 0x0b, 0xd1, + 0xfe, 0xc8, 0x83, 0x37, 0xe9, 0x26, 0xf4, 0x45, 0x18, 0x11, 0x3f, 0xd8, 0x0a, 0xed, 0xdf, 0x74, + 0xe1, 0x28, 0x75, 0x19, 0x40, 0x8b, 0xa0, 0xc9, 0x2b, 0x30, 0xc4, 0x06, 0x4c, 0x13, 0x83, 0x95, + 0x0c, 0x84, 0x2f, 0x4a, 0x0c, 0x1f, 0x28, 0xaf, 0x27, 0x01, 0xa5, 0xf4, 0x6e, 0x69, 0x70, 0x17, + 0xef, 0x96, 0xbe, 0x04, 0xc3, 0x65, 0xcb, 0xb2, 0x3d, 0xdc, 0xa4, 0xbb, 0xe2, 0x6a, 0x22, 0xd3, + 0x2a, 0x7f, 0x0e, 0x1f, 0xe3, 0x87, 0xf4, 0xa9, 0x66, 0xb9, 0xcc, 0x90, 0xdc, 0xf4, 0x5f, 0xc5, + 0x50, 0x47, 0x78, 0x95, 0xe3, 0xf5, 0x8c, 0x23, 0x60, 0xc9, 0x47, 0x31, 0xd8, 0x79, 0xa3, 0xcb, + 0x8e, 0xdd, 0xb1, 0x5d, 0x6a, 0x70, 0x41, 0x0d, 0x87, 0xa1, 0x0d, 0x3a, 0x02, 0x81, 0xef, 0xe6, + 0x22, 0x81, 0x43, 0x22, 0x45, 0xc8, 0x1a, 0x9c, 0xf5, 0x2f, 0x8a, 0x83, 0x17, 0x8a, 0xd5, 0x8a, + 0xab, 0x8c, 0xe0, 0xab, 0x24, 0x12, 0x57, 0x86, 0x6a, 0x65, 0xea, 0x8a, 0x7f, 0x2d, 0xe2, 0x3f, + 0x71, 0xac, 0x9b, 0x86, 0xdc, 0xd5, 0xa9, 0xfc, 0xc8, 0x0f, 0xc2, 0xf0, 0x82, 0xfe, 0xb8, 0xd2, + 0x15, 0x67, 0x2f, 0xa3, 0xbb, 0xbf, 0x7d, 0x69, 0xeb, 0x8f, 0xeb, 0x86, 0x28, 0x17, 0xb3, 0x29, + 0x64, 0x96, 0xa4, 0x0e, 0xe7, 0x97, 0x1d, 0xbb, 0x6d, 0x7b, 0xd4, 0x88, 0x3d, 0xf6, 0x3b, 0x15, + 0xbe, 0x0e, 0xee, 0x08, 0x8a, 0x7a, 0x8f, 0x57, 0x7f, 0x19, 0x6c, 0x48, 0x1b, 0x4e, 0x95, 0x5d, + 0xb7, 0xdb, 0xa6, 0xe1, 0x0d, 0xd5, 0xf8, 0x8e, 0x9f, 0xf1, 0x09, 0xe1, 0xb5, 0xfc, 0x94, 0x8e, + 0x45, 0xf9, 0x05, 0x55, 0xdd, 0x33, 0xe5, 0x1a, 0xf1, 0x5b, 0xe2, 0xbc, 0xef, 0x14, 0x07, 0xc7, + 0xc6, 0x4f, 0x69, 0x17, 0x92, 0x8d, 0x59, 0x31, 0xbd, 0x16, 0x55, 0xbf, 0x9d, 0x03, 0x08, 0x05, + 0x4c, 0x5e, 0x8c, 0x46, 0x44, 0xca, 0x85, 0x17, 0x1d, 0x22, 0x5a, 0x42, 0x24, 0x04, 0x12, 0xb9, + 0x0c, 0x45, 0x8c, 0xa8, 0x91, 0x0f, 0x0f, 0x56, 0x1f, 0x9a, 0x96, 0xa1, 0x21, 0x94, 0x61, 0xa5, + 0xa7, 0xef, 0x88, 0xc5, 0x4b, 0x7d, 0x6e, 0x15, 0x56, 0xe0, 0x54, 0xad, 0xbb, 0xea, 0xd7, 0x2d, + 0xbd, 0xe3, 0xc3, 0xc0, 0x1e, 0x6e, 0x77, 0x35, 0x78, 0xfc, 0x1a, 0x09, 0x9b, 0x12, 0x2d, 0xa2, + 0x7e, 0x33, 0x17, 0x9b, 0x05, 0x8f, 0x70, 0xd1, 0xfb, 0x58, 0xd2, 0x4f, 0x23, 0x39, 0x2d, 0xa9, + 0x7f, 0x35, 0x0f, 0xc3, 0xcb, 0xb6, 0xe3, 0x89, 0x10, 0x25, 0xc7, 0x7b, 0x15, 0x92, 0xf6, 0x4a, + 0xc5, 0x3d, 0xec, 0x95, 0x2e, 0x43, 0x51, 0x72, 0x51, 0xe6, 0xf7, 0x22, 0x86, 0xe1, 0x68, 0x08, + 0x55, 0x7f, 0x38, 0x0f, 0xf0, 0xb9, 0x97, 0x5e, 0x7a, 0x82, 0x05, 0xa4, 0xfe, 0xe5, 0x1c, 0x9c, + 0x12, 0x17, 0x75, 0x52, 0x6c, 0xb1, 0x01, 0xff, 0x8a, 0x55, 0x1e, 0x97, 0x1c, 0xa4, 0xf9, 0x38, + 0xb6, 0x04, 0xcc, 0x3c, 0x36, 0x3d, 0xbc, 0xab, 0x90, 0x82, 0x8b, 0x51, 0x01, 0x93, 0x97, 0x00, + 0x9f, 0x8e, 0xbc, 0xe8, 0x5f, 0x41, 0x16, 0xc2, 0x75, 0x8f, 0x15, 0x98, 0x49, 0xbd, 0x86, 0x54, + 0x7f, 0xad, 0x08, 0xc5, 0x99, 0xc7, 0xb4, 0x71, 0xcc, 0xbb, 0x46, 0x3a, 0xd8, 0x2c, 0x1e, 0xf0, + 0x60, 0x73, 0x3f, 0x3e, 0x15, 0xef, 0x84, 0xfd, 0x59, 0x8a, 0x56, 0x1f, 0xeb, 0xf9, 0x78, 0xf5, + 0x7e, 0x4f, 0x1f, 0x3f, 0x97, 0x9c, 0xff, 0xb2, 0x00, 0x85, 0xda, 0xf4, 0xf2, 0x89, 0xde, 0x1c, + 0xa9, 0xde, 0xf4, 0xbe, 0xb3, 0x56, 0x83, 0x6b, 0xa8, 0xc1, 0xd0, 0x4b, 0x34, 0x76, 0xe3, 0xf4, + 0x27, 0x05, 0x18, 0xab, 0xcd, 0xae, 0x2c, 0x4b, 0x27, 0xc1, 0x77, 0xb9, 0x27, 0x1f, 0xfa, 0x94, + 0xf1, 0x2e, 0xbd, 0x9c, 0xb0, 0x67, 0xee, 0x55, 0x2d, 0xef, 0xd5, 0x5b, 0xf7, 0xf5, 0x56, 0x97, + 0xe2, 0xd1, 0x0b, 0xf7, 0xfb, 0x75, 0xcd, 0x0f, 0xe8, 0x37, 0x30, 0xd0, 0x80, 0xcf, 0x80, 0xbc, + 0x09, 0x85, 0x7b, 0xc2, 0x23, 0x23, 0x8b, 0xcf, 0xcb, 0x37, 0x39, 0x1f, 0x36, 0x09, 0x16, 0xba, + 0xa6, 0x81, 0x1c, 0x58, 0x29, 0x56, 0xf8, 0xb6, 0x58, 0x80, 0x77, 0x55, 0xb8, 0xe9, 0x17, 0xbe, + 0x5d, 0xad, 0x90, 0x1a, 0x0c, 0x2f, 0x53, 0xa7, 0x6d, 0x62, 0x47, 0xf9, 0x73, 0x76, 0x6f, 0x26, + 0x6c, 0xa7, 0x32, 0xdc, 0x09, 0x0b, 0x21, 0x33, 0x99, 0x0b, 0x79, 0x0f, 0x80, 0xdb, 0x28, 0xbb, + 0x8c, 0x57, 0xf9, 0x34, 0xda, 0xfd, 0xdc, 0xb4, 0x4c, 0xb1, 0xf1, 0x24, 0x66, 0xe4, 0x21, 0x8c, + 0x2f, 0xd8, 0x86, 0xb9, 0x66, 0x72, 0xd7, 0x4b, 0xac, 0xa0, 0xb4, 0xb3, 0xc3, 0x13, 0x33, 0x25, + 0xdb, 0x52, 0xb9, 0xb4, 0x6a, 0x12, 0x8c, 0xd5, 0xbf, 0xdf, 0x0f, 0x45, 0xd6, 0xed, 0x27, 0xe3, + 0xf7, 0x20, 0xe3, 0xb7, 0x0c, 0xe3, 0x0f, 0x6c, 0xe7, 0xa1, 0x69, 0x35, 0x03, 0xaf, 0x78, 0xb1, + 0x37, 0x45, 0x4f, 0x9e, 0x0d, 0x8e, 0xab, 0x07, 0x0e, 0xf4, 0x5a, 0x82, 0x7c, 0x87, 0x11, 0xfc, + 0x3a, 0x00, 0x7f, 0xeb, 0x8e, 0x34, 0x83, 0x61, 0x70, 0x0c, 0xfe, 0x12, 0x1e, 0x1d, 0xed, 0xe5, + 0xe0, 0x18, 0x21, 0x31, 0xdb, 0x84, 0x73, 0x5f, 0x88, 0x21, 0xf4, 0xbb, 0xc7, 0x4d, 0x38, 0xfa, + 0x42, 0xc8, 0x46, 0x00, 0xf7, 0x8a, 0x58, 0x06, 0x90, 0xee, 0x97, 0x20, 0x26, 0x88, 0xc8, 0xe4, + 0x20, 0xc2, 0xd1, 0xa5, 0x5c, 0x2f, 0x69, 0x12, 0x0f, 0xf2, 0x6a, 0xec, 0x02, 0x9c, 0x44, 0xb8, + 0x65, 0xde, 0x7f, 0x87, 0x0e, 0x54, 0x23, 0x3b, 0x39, 0x50, 0xa9, 0x7f, 0xbb, 0x00, 0xc3, 0x8c, + 0x5b, 0xad, 0xdb, 0x6e, 0xeb, 0xce, 0xe6, 0x89, 0x22, 0x1f, 0x44, 0x91, 0xeb, 0x70, 0x5a, 0x76, + 0x98, 0x67, 0xa6, 0xab, 0x1f, 0xda, 0x28, 0x38, 0xfe, 0x89, 0x13, 0x70, 0xdb, 0x12, 0xe7, 0x7d, + 0x4f, 0x80, 0xf1, 0x6c, 0xc1, 0xd5, 0x92, 0xbc, 0xd4, 0x9f, 0xc9, 0xc1, 0x78, 0x1c, 0x1a, 0xe8, + 0x7e, 0x2e, 0x55, 0xf7, 0x5f, 0x80, 0x21, 0x71, 0x85, 0xae, 0x1b, 0xc2, 0xa3, 0x6f, 0x6c, 0x7b, + 0x6b, 0x02, 0xf0, 0xfd, 0x72, 0xdd, 0xa1, 0xba, 0xa1, 0x85, 0x04, 0xe4, 0x15, 0x18, 0xc1, 0x1f, + 0x0f, 0x1c, 0xd3, 0xf3, 0x28, 0xef, 0x8c, 0x22, 0xbf, 0x15, 0xe0, 0x05, 0x36, 0x38, 0x42, 0x8b, + 0x90, 0xa9, 0xbf, 0x9b, 0x87, 0xa1, 0x5a, 0x77, 0xd5, 0xdd, 0x74, 0x3d, 0xda, 0x3e, 0xe6, 0x3a, + 0xe4, 0x6f, 0xd2, 0x8b, 0xa9, 0x9b, 0xf4, 0xe7, 0xfc, 0xa1, 0x25, 0x9d, 0x5e, 0x07, 0x1b, 0x03, + 0xdf, 0x2b, 0x31, 0xd4, 0xa2, 0xd2, 0xde, 0xb5, 0x48, 0xfd, 0xbb, 0x79, 0x18, 0xe7, 0x97, 0xb7, + 0x15, 0xd3, 0x6d, 0x1c, 0xc2, 0x83, 0x92, 0xa3, 0x97, 0xe9, 0xc1, 0x1c, 0x1e, 0x76, 0xf1, 0x4c, + 0x47, 0xfd, 0x72, 0x1e, 0x86, 0xcb, 0x5d, 0x6f, 0xbd, 0xec, 0xe1, 0xfc, 0xf6, 0x44, 0xee, 0x91, + 0xff, 0x51, 0x0e, 0x4e, 0xb1, 0x86, 0xac, 0xd8, 0x0f, 0xa9, 0x75, 0x08, 0x87, 0xdf, 0xf2, 0x21, + 0x76, 0x7e, 0x9f, 0x87, 0xd8, 0xbe, 0x2c, 0x0b, 0x7b, 0x93, 0x25, 0x5e, 0xd9, 0x68, 0x76, 0x8b, + 0x1e, 0xef, 0xcf, 0x38, 0xc4, 0x2b, 0x1b, 0x5f, 0x20, 0x87, 0x70, 0x45, 0xf8, 0xfd, 0x25, 0x90, + 0x43, 0x38, 0xdf, 0xfc, 0xfe, 0x10, 0xc8, 0xef, 0xe4, 0x60, 0x68, 0xca, 0xf6, 0x8e, 0xf9, 0xc0, + 0x17, 0x5f, 0x71, 0xbc, 0xd5, 0xdc, 0xff, 0x8a, 0xe3, 0xad, 0x9b, 0xea, 0xcf, 0xe5, 0xe1, 0xac, + 0x88, 0x87, 0x2f, 0xce, 0xc0, 0x4e, 0xa6, 0x63, 0x31, 0xd8, 0x92, 0xa2, 0x39, 0x99, 0x87, 0x84, + 0x68, 0x7e, 0xa1, 0x00, 0x67, 0x31, 0x7c, 0x2f, 0xdb, 0x51, 0x7d, 0x1f, 0xd8, 0x22, 0xa4, 0x11, + 0xbd, 0x88, 0x5f, 0x48, 0xb9, 0x88, 0xff, 0x57, 0x5b, 0x13, 0xaf, 0x36, 0x4d, 0x6f, 0xbd, 0xbb, + 0x3a, 0xd9, 0xb0, 0xdb, 0x37, 0x9a, 0x8e, 0xfe, 0xc8, 0xe4, 0x57, 0xd0, 0x7a, 0xeb, 0x46, 0x98, + 0xa6, 0xa6, 0x63, 0x8a, 0xa4, 0x33, 0x35, 0xdc, 0x29, 0x31, 0xae, 0xfe, 0x15, 0xbe, 0x0b, 0x70, + 0xc7, 0x36, 0x2d, 0xe1, 0xd7, 0xca, 0x0d, 0xdd, 0xda, 0xf6, 0xd6, 0xc4, 0xb9, 0xf7, 0x6d, 0xd3, + 0xaa, 0xc7, 0x9d, 0x5b, 0xf7, 0x5a, 0x5f, 0xc8, 0x5a, 0x93, 0xaa, 0x51, 0xff, 0xdb, 0x1c, 0x5c, + 0x8c, 0x6a, 0xf1, 0xf7, 0x83, 0xed, 0xf8, 0x17, 0xf3, 0x70, 0xee, 0x36, 0x0a, 0x27, 0x70, 0x26, + 0x3a, 0x99, 0xb7, 0xc4, 0xe0, 0x4c, 0x91, 0xcd, 0x89, 0x45, 0x99, 0x2d, 0x9b, 0x93, 0x49, 0x5d, + 0xc8, 0xe6, 0xbf, 0xc9, 0xc1, 0x99, 0xa5, 0x6a, 0x65, 0xfa, 0xfb, 0x64, 0x44, 0x25, 0xbf, 0xe7, + 0x98, 0x1b, 0x9c, 0x89, 0xef, 0x39, 0xe6, 0xa6, 0xe7, 0xd7, 0xf3, 0x70, 0xa6, 0x56, 0x5e, 0x98, + 0xff, 0x7e, 0x99, 0xc1, 0xa7, 0x65, 0xcf, 0x57, 0xff, 0x10, 0x4c, 0xd8, 0x02, 0xf2, 0x67, 0xde, + 0xbf, 0x99, 0xed, 0x11, 0x9b, 0x14, 0xca, 0x31, 0x9f, 0xba, 0x0f, 0x45, 0x28, 0x4c, 0xf3, 0x23, + 0xd4, 0xc7, 0x5c, 0xf3, 0xff, 0x8b, 0x12, 0x0c, 0xdf, 0xed, 0xae, 0x52, 0xe1, 0x20, 0xf5, 0x44, + 0x9f, 0xfc, 0xde, 0x84, 0x61, 0x21, 0x06, 0xbc, 0xe1, 0x90, 0x02, 0x38, 0x8a, 0x80, 0x3c, 0x3c, + 0x46, 0x96, 0x4c, 0x44, 0x2e, 0x43, 0xf1, 0x3e, 0x75, 0x56, 0xe5, 0xb7, 0xcd, 0x8f, 0xa8, 0xb3, + 0xaa, 0x21, 0x94, 0xcc, 0x87, 0xcf, 0x36, 0xca, 0xcb, 0x55, 0x4c, 0x1e, 0x24, 0x2e, 0x0d, 0x31, + 0x1b, 0x52, 0xe0, 0x7b, 0xa9, 0x77, 0x4c, 0x9e, 0x76, 0x48, 0x8e, 0xab, 0x10, 0x2f, 0x49, 0x16, + 0xe1, 0xb4, 0xec, 0x7c, 0xc7, 0x33, 0xe7, 0x0c, 0xa6, 0xb0, 0x4b, 0xcb, 0x99, 0x93, 0x2c, 0x4a, + 0xde, 0x81, 0x11, 0x1f, 0x88, 0x6e, 0x84, 0x43, 0x61, 0xba, 0x86, 0x80, 0x55, 0x2c, 0xba, 0x7e, + 0xa4, 0x80, 0xcc, 0x00, 0x2f, 0x31, 0x20, 0x85, 0x41, 0xcc, 0x2d, 0x33, 0x52, 0x80, 0xbc, 0x82, + 0x0c, 0xf0, 0xa9, 0x11, 0x3a, 0x4c, 0x0d, 0xe3, 0xc3, 0x5f, 0xbc, 0x00, 0x72, 0x04, 0x9c, 0x3f, + 0xef, 0x8e, 0x90, 0x91, 0x25, 0x80, 0xd0, 0xb1, 0x45, 0x04, 0xd1, 0xd8, 0xb3, 0xcb, 0x8d, 0xc4, + 0x42, 0xbe, 0xc9, 0x1b, 0xdd, 0xcf, 0x4d, 0x9e, 0xfa, 0x87, 0x79, 0x18, 0x2e, 0x77, 0x3a, 0xc1, + 0x50, 0x78, 0x11, 0x4a, 0xe5, 0x4e, 0xe7, 0x9e, 0x56, 0x95, 0xc3, 0xe9, 0xeb, 0x9d, 0x4e, 0xbd, + 0xeb, 0x98, 0xb2, 0x5f, 0x32, 0x27, 0x22, 0xd3, 0x30, 0x5a, 0xee, 0x74, 0x96, 0xbb, 0xab, 0x2d, + 0xb3, 0x21, 0x65, 0x03, 0xe3, 0xf9, 0x12, 0x3b, 0x9d, 0x7a, 0x07, 0x31, 0xf1, 0x94, 0x70, 0xd1, + 0x32, 0xe4, 0x4b, 0x18, 0x7a, 0x4a, 0x24, 0xa3, 0xe2, 0xe9, 0x6e, 0xd4, 0x20, 0x90, 0x7e, 0xd8, + 0xb6, 0xc9, 0x80, 0x88, 0x27, 0x1c, 0xb8, 0xec, 0xa7, 0x89, 0x60, 0x15, 0x25, 0x92, 0x4e, 0x85, + 0x2c, 0xc9, 0xa7, 0x60, 0xa0, 0xdc, 0xe9, 0x48, 0xb7, 0x55, 0xe8, 0xd8, 0xc6, 0x4a, 0xc5, 0xf3, + 0xfd, 0x09, 0xb2, 0x4b, 0x6f, 0xc1, 0x58, 0xb4, 0xb2, 0x3d, 0x25, 0x2c, 0xf8, 0x5e, 0x0e, 0x3f, + 0xe8, 0x98, 0xfb, 0xd5, 0xbf, 0x0c, 0x85, 0x72, 0xa7, 0x23, 0xe6, 0xa3, 0x33, 0x29, 0xfd, 0x11, + 0x7f, 0x86, 0x5f, 0xee, 0x74, 0xfc, 0x4f, 0x3f, 0xe6, 0x0f, 0x74, 0xf6, 0xf5, 0xe9, 0xbf, 0xc3, + 0x3f, 0xfd, 0x78, 0x3f, 0x9e, 0x51, 0x7f, 0xad, 0x00, 0xa7, 0xca, 0x9d, 0xce, 0x49, 0xa2, 0x83, + 0xc3, 0x7a, 0xec, 0xff, 0x12, 0x80, 0x34, 0x3d, 0x0e, 0x04, 0xcf, 0x07, 0x87, 0xa5, 0xa9, 0x51, + 0xc9, 0x69, 0x12, 0x91, 0xaf, 0x7e, 0x83, 0x7b, 0x52, 0xbf, 0x2f, 0x17, 0x70, 0x2a, 0x3e, 0xee, + 0x81, 0xcb, 0x3e, 0x2a, 0xdd, 0x26, 0xfa, 0xa0, 0xb4, 0xa7, 0x3e, 0xf8, 0x87, 0x91, 0xc1, 0x83, + 0x81, 0xf3, 0x4f, 0x7a, 0xa1, 0xff, 0x40, 0x66, 0xf1, 0x98, 0x2c, 0x4c, 0x11, 0x4d, 0xc9, 0x4f, + 0x1e, 0x26, 0x62, 0x7b, 0x35, 0x18, 0xaa, 0x6e, 0x1a, 0x5a, 0x8c, 0xd6, 0xef, 0xc3, 0x81, 0x3d, + 0xf5, 0xe1, 0x56, 0x1e, 0xdf, 0xef, 0x07, 0xb1, 0xc1, 0x0e, 0xbe, 0xbb, 0xb8, 0x01, 0xc0, 0x3d, + 0x0f, 0x02, 0xd7, 0xfa, 0x51, 0x1e, 0x06, 0x88, 0xe7, 0x14, 0x13, 0x61, 0x80, 0x42, 0x92, 0xc0, + 0x53, 0xa9, 0x90, 0xea, 0xa9, 0x74, 0x1d, 0x06, 0x35, 0x7d, 0xe3, 0xdd, 0x2e, 0x75, 0x36, 0x85, + 0x39, 0xc3, 0x43, 0x6f, 0xea, 0x1b, 0xf5, 0x1f, 0x62, 0x40, 0x2d, 0x40, 0x13, 0x35, 0x08, 0x00, + 0x21, 0x79, 0x84, 0xf0, 0x33, 0xf2, 0x20, 0xec, 0xc3, 0x7e, 0x14, 0x9d, 0xbc, 0x01, 0x85, 0xf2, + 0x83, 0x9a, 0x90, 0x6c, 0xd0, 0xb5, 0xe5, 0x07, 0x35, 0x21, 0xaf, 0xcc, 0xb2, 0x0f, 0x6a, 0xea, + 0x97, 0xf3, 0x40, 0x92, 0x94, 0xe4, 0x55, 0x18, 0x42, 0x68, 0x93, 0xe9, 0x8c, 0x9c, 0x8c, 0x76, + 0xc3, 0xad, 0x3b, 0x08, 0x8d, 0x18, 0x77, 0x3e, 0x29, 0x79, 0x1d, 0xd3, 0x7d, 0x8b, 0x74, 0x88, + 0x91, 0x64, 0xb4, 0x1b, 0xae, 0x9f, 0x20, 0x3b, 0x96, 0xed, 0x5b, 0x10, 0xa3, 0x5d, 0xf8, 0xa0, + 0x36, 0x67, 0xbb, 0x9e, 0x10, 0x35, 0xb7, 0x0b, 0x37, 0x5c, 0xcc, 0x82, 0x1c, 0xb1, 0x0b, 0x39, + 0x19, 0x66, 0x72, 0x7b, 0x50, 0xe3, 0x4f, 0xa5, 0x0c, 0xcd, 0x6e, 0xf9, 0x06, 0x25, 0xcf, 0xe4, + 0xb6, 0xe1, 0xd6, 0xf9, 0x33, 0x2b, 0x03, 0xf3, 0x8c, 0x47, 0x32, 0xb9, 0x45, 0x4a, 0xa9, 0x3f, + 0x35, 0x08, 0xe3, 0x15, 0xdd, 0xd3, 0x57, 0x75, 0x97, 0x4a, 0xbb, 0xe9, 0x53, 0x3e, 0xcc, 0xff, + 0x1c, 0x49, 0x0e, 0xc6, 0x6a, 0xca, 0xd7, 0xc4, 0x0b, 0x90, 0x37, 0x43, 0xbe, 0x41, 0x9e, 0x5d, + 0x39, 0x71, 0xdf, 0x6a, 0xbd, 0x23, 0xc0, 0x5a, 0x82, 0x90, 0xbc, 0x00, 0xc3, 0x3e, 0x8c, 0x6d, + 0x00, 0x0a, 0xa1, 0xce, 0x18, 0xab, 0xcc, 0xfe, 0xd7, 0x64, 0x34, 0x79, 0x1d, 0x46, 0xfc, 0x9f, + 0x92, 0x69, 0xcd, 0xb3, 0x10, 0xae, 0x26, 0x76, 0x4f, 0x32, 0xa9, 0x5c, 0x14, 0xe7, 0xb7, 0xfe, + 0x48, 0xd1, 0x58, 0xa2, 0xbf, 0x08, 0x29, 0xf9, 0x21, 0x18, 0xf3, 0x7f, 0x8b, 0x0d, 0x03, 0x77, + 0x1c, 0x7c, 0x21, 0x48, 0x63, 0x1e, 0x13, 0xeb, 0x64, 0x94, 0x9c, 0x6f, 0x1d, 0x9e, 0xf2, 0x73, + 0xd7, 0x19, 0xab, 0xc9, 0x9d, 0x43, 0xac, 0x02, 0x52, 0x85, 0xd3, 0x3e, 0x24, 0xd4, 0xd0, 0x81, + 0x70, 0xc7, 0x68, 0xac, 0xd6, 0x53, 0x95, 0x34, 0x59, 0x8a, 0xb4, 0xe0, 0x72, 0x04, 0x68, 0xb8, + 0xeb, 0xe6, 0x9a, 0x27, 0xb6, 0x7b, 0x22, 0x0e, 0xb6, 0x48, 0x56, 0x1a, 0x70, 0xe5, 0x34, 0x7e, + 0xd6, 0xe1, 0x68, 0x86, 0xb2, 0x9e, 0xdc, 0x48, 0x0d, 0xce, 0xfa, 0xf8, 0xdb, 0xd3, 0xcb, 0xcb, + 0x8e, 0xfd, 0x3e, 0x6d, 0x78, 0xd5, 0x8a, 0xd8, 0x2e, 0x63, 0x7c, 0x44, 0x63, 0xb5, 0xde, 0x6c, + 0x74, 0x98, 0x52, 0x30, 0x5c, 0x94, 0x79, 0x6a, 0x61, 0x72, 0x1f, 0xce, 0x49, 0x70, 0x29, 0x25, + 0x3a, 0x84, 0xfb, 0x79, 0xc1, 0x35, 0x3d, 0x2b, 0x7a, 0x7a, 0x71, 0xf2, 0x16, 0x8c, 0xfa, 0x08, + 0x7e, 0x8b, 0x38, 0x8c, 0xb7, 0x88, 0x38, 0x24, 0x8d, 0xd5, 0x7a, 0xfc, 0x45, 0x6f, 0x94, 0x58, + 0xd6, 0xa8, 0x95, 0xcd, 0x0e, 0x15, 0x1e, 0xbd, 0xbe, 0x46, 0x79, 0x9b, 0x9d, 0x54, 0x65, 0x64, + 0xa4, 0xe4, 0x9d, 0x50, 0xa3, 0x96, 0x1c, 0xb3, 0x69, 0xf2, 0x9d, 0xb4, 0xff, 0x88, 0x77, 0xb5, + 0x6e, 0x23, 0x30, 0x4d, 0x3f, 0x38, 0xf9, 0xa5, 0x32, 0x9c, 0x49, 0xd1, 0xb1, 0x3d, 0xed, 0x18, + 0xbf, 0x92, 0x0f, 0x1b, 0x71, 0xcc, 0xb7, 0x8d, 0x53, 0x30, 0xe8, 0x7f, 0x89, 0x30, 0x1e, 0x94, + 0xac, 0xa1, 0x19, 0xe7, 0xe1, 0xe3, 0x23, 0xe2, 0x38, 0xe6, 0x5b, 0xc9, 0xc3, 0x10, 0xc7, 0x77, + 0x72, 0xa1, 0x38, 0x8e, 0xf9, 0xf6, 0xf2, 0x27, 0x8b, 0xe1, 0x9c, 0x74, 0xb2, 0xc7, 0x3c, 0x2c, + 0x33, 0x39, 0xf4, 0x83, 0x2d, 0xed, 0xe1, 0x31, 0xad, 0xac, 0x9a, 0x03, 0xfb, 0x53, 0x4d, 0xf2, + 0x16, 0x0c, 0x2f, 0xdb, 0xae, 0xd7, 0x74, 0xa8, 0xbb, 0x1c, 0xe4, 0x71, 0xc0, 0x87, 0xd8, 0x1d, + 0x01, 0xae, 0x77, 0x22, 0xb3, 0xbf, 0x4c, 0xae, 0xfe, 0x93, 0x42, 0x42, 0x1b, 0xb8, 0xe1, 0x7a, + 0x2c, 0xb5, 0xe1, 0x10, 0x86, 0x3a, 0xb9, 0x19, 0xae, 0x82, 0xdc, 0xc2, 0xef, 0x97, 0x82, 0x54, + 0xae, 0x0a, 0x03, 0x3f, 0x4a, 0x42, 0xbe, 0x00, 0x17, 0x22, 0x80, 0x65, 0xdd, 0xd1, 0xdb, 0xd4, + 0x0b, 0x73, 0x66, 0x62, 0xd8, 0x31, 0xbf, 0x74, 0xbd, 0x13, 0xa0, 0xe5, 0x3c, 0x9c, 0x19, 0x1c, + 0x24, 0xd5, 0x1a, 0xd8, 0x83, 0x8b, 0xf5, 0xcf, 0x16, 0x42, 0x43, 0x27, 0x1a, 0x3e, 0x58, 0xa3, + 0x6e, 0xb7, 0xe5, 0x3d, 0xb9, 0x1d, 0xbc, 0xbf, 0xe4, 0x2c, 0x73, 0x70, 0xaa, 0xbc, 0xb6, 0x46, + 0x1b, 0x9e, 0x1f, 0x15, 0xdd, 0x15, 0x01, 0x23, 0xf9, 0xc6, 0x43, 0xa0, 0x44, 0x94, 0x6b, 0xb9, + 0x5f, 0xe3, 0xc5, 0xd4, 0x7f, 0x5a, 0x04, 0x25, 0x30, 0xfc, 0x83, 0xa7, 0x86, 0x47, 0xb8, 0xc8, + 0x7e, 0x24, 0x7a, 0xc5, 0x84, 0xd3, 0xa1, 0x30, 0xc4, 0x1b, 0x2f, 0x91, 0xc5, 0x7d, 0x22, 0xce, + 0x2c, 0x24, 0xe4, 0x7b, 0x89, 0x4b, 0x62, 0x2f, 0x41, 0xc2, 0xa7, 0x9c, 0x75, 0x97, 0xb3, 0xd0, + 0x92, 0x5c, 0xc9, 0x57, 0x73, 0x70, 0xd6, 0xef, 0x94, 0xa5, 0x55, 0x66, 0x54, 0x4f, 0xdb, 0x5d, + 0x2b, 0x78, 0x00, 0xf5, 0x46, 0x76, 0x75, 0xbc, 0x93, 0x26, 0xd3, 0x0a, 0xf3, 0x96, 0x04, 0xa1, + 0x51, 0x02, 0x85, 0xb0, 0x91, 0xa6, 0xde, 0x40, 0x22, 0x2d, 0xb5, 0xde, 0x4b, 0xb7, 0xe1, 0x62, + 0x26, 0xcb, 0x9d, 0x8c, 0xd8, 0x7e, 0xd9, 0x88, 0xfd, 0xef, 0x73, 0xe1, 0x44, 0x14, 0x13, 0x12, + 0x99, 0x04, 0x08, 0x41, 0x62, 0x5b, 0x8b, 0xef, 0xab, 0x42, 0xa1, 0x69, 0x12, 0x05, 0x59, 0x82, + 0x92, 0x10, 0x0b, 0xcf, 0x4f, 0xfd, 0xc9, 0x1d, 0x7a, 0x61, 0x52, 0x96, 0x03, 0x6e, 0x59, 0xc5, + 0x37, 0x0b, 0x36, 0x97, 0x5e, 0x87, 0xe1, 0xfd, 0x7e, 0xd7, 0x57, 0x0b, 0x40, 0xe4, 0x3d, 0xe8, + 0x11, 0x1a, 0xe8, 0xc7, 0x78, 0x0a, 0xbb, 0x06, 0x83, 0xec, 0x13, 0x30, 0x63, 0x8b, 0x14, 0xa1, + 0xb9, 0x2b, 0x60, 0x5a, 0x80, 0x0d, 0xc3, 0xa3, 0x0d, 0xa4, 0x87, 0x47, 0x53, 0x7f, 0xa6, 0x00, + 0xe7, 0xe5, 0x0e, 0xa9, 0x50, 0x4c, 0xfa, 0x70, 0xd2, 0x29, 0x1f, 0x62, 0xa7, 0xa8, 0x50, 0xe2, + 0x5b, 0x0f, 0x91, 0x7d, 0x83, 0x1f, 0x0b, 0x21, 0x44, 0x13, 0x18, 0xf5, 0x7f, 0xc9, 0xc3, 0x68, + 0x60, 0xde, 0xe9, 0x8e, 0xfb, 0x04, 0x77, 0xc7, 0xa7, 0x61, 0x14, 0x03, 0x5c, 0xb5, 0xa9, 0xc5, + 0x83, 0x40, 0xf5, 0x4b, 0xe9, 0x72, 0x7c, 0x84, 0xc8, 0x8c, 0x16, 0x21, 0x64, 0xda, 0xcf, 0x2d, + 0x3f, 0x29, 0xec, 0x18, 0x37, 0xfb, 0x38, 0x5c, 0xfd, 0x6b, 0x05, 0x18, 0xf1, 0xa5, 0x3c, 0x65, + 0x1e, 0xd7, 0x7b, 0x9e, 0xa3, 0x15, 0xf2, 0x0d, 0x80, 0x65, 0xdb, 0xf1, 0xf4, 0xd6, 0x62, 0xa8, + 0xf9, 0x78, 0x40, 0xda, 0x41, 0x28, 0x2f, 0x23, 0x91, 0xe0, 0xfa, 0x15, 0x9a, 0xd5, 0x7c, 0x62, + 0xe2, 0xeb, 0x57, 0x00, 0xd5, 0x24, 0x0a, 0xf5, 0xb7, 0xf2, 0x70, 0xca, 0xef, 0xa4, 0x99, 0xc7, + 0xb4, 0xd1, 0x7d, 0x92, 0xe7, 0xa6, 0xa8, 0xb4, 0xfb, 0x77, 0x94, 0xb6, 0xfa, 0x7f, 0x4a, 0x13, + 0xc9, 0x74, 0xcb, 0x3e, 0x99, 0x48, 0xfe, 0x34, 0x74, 0x5c, 0xfd, 0xd1, 0x02, 0x9c, 0xf5, 0xa5, + 0x3e, 0xdb, 0xb5, 0xf0, 0x68, 0x61, 0x5a, 0x6f, 0xb5, 0x9e, 0xe4, 0xdd, 0xf8, 0xb0, 0x2f, 0x88, + 0x25, 0x11, 0x31, 0x52, 0x64, 0xa9, 0x5c, 0x13, 0xe0, 0xba, 0x6d, 0x1a, 0x9a, 0x4c, 0x44, 0xde, + 0x81, 0x11, 0xff, 0x67, 0xd9, 0x69, 0xfa, 0x5b, 0x70, 0xbc, 0x28, 0x08, 0x0a, 0xe9, 0x4e, 0x24, + 0x30, 0x46, 0xa4, 0x80, 0xfa, 0xe5, 0x01, 0xb8, 0xf4, 0xc0, 0xb4, 0x0c, 0x7b, 0xc3, 0xf5, 0x93, + 0x9c, 0x1e, 0xfb, 0x83, 0xb2, 0xa3, 0x4e, 0x6e, 0xfa, 0x2e, 0x9c, 0x8b, 0x8b, 0xd4, 0x09, 0x42, + 0xcf, 0x8b, 0xde, 0xd9, 0xe0, 0x04, 0x75, 0x3f, 0xdd, 0xa9, 0xb8, 0x6d, 0xd3, 0xd2, 0x4b, 0xc6, + 0xf3, 0xa5, 0x0e, 0xec, 0x26, 0x5f, 0xea, 0xf3, 0x50, 0xaa, 0xd8, 0x6d, 0xdd, 0xf4, 0x43, 0x24, + 0xe1, 0x28, 0x0e, 0xea, 0x45, 0x8c, 0x26, 0x28, 0x18, 0x7f, 0x51, 0x31, 0x76, 0xd9, 0x50, 0xc8, + 0xdf, 0x2f, 0xc0, 0xac, 0x34, 0x4d, 0x26, 0x22, 0x36, 0x8c, 0x8a, 0xea, 0xc4, 0xdd, 0x18, 0xe0, + 0xe6, 0xe9, 0x15, 0x5f, 0x46, 0xd9, 0x6a, 0x35, 0x19, 0x29, 0xc7, 0xb7, 0x51, 0x3c, 0x8d, 0xab, + 0xf8, 0x18, 0x7e, 0x4b, 0xa6, 0x45, 0xf9, 0x4b, 0x42, 0xc0, 0x49, 0x66, 0x38, 0x29, 0x04, 0x9c, + 0x65, 0x64, 0x22, 0x32, 0x03, 0xa7, 0x31, 0x40, 0x78, 0xb0, 0x95, 0x62, 0x2a, 0x31, 0x82, 0x46, + 0x25, 0x5e, 0xb9, 0xf0, 0x98, 0xe2, 0xec, 0xe3, 0xea, 0x0d, 0x81, 0xd6, 0x92, 0x25, 0xc8, 0x45, + 0x28, 0x2c, 0xce, 0x97, 0xf1, 0xae, 0x66, 0x90, 0x27, 0xe7, 0xb2, 0x5a, 0xba, 0xc6, 0x60, 0x97, + 0x3e, 0x0b, 0x24, 0xf9, 0x39, 0x7b, 0xba, 0x8f, 0xf9, 0xaf, 0xa4, 0x2d, 0xdf, 0x71, 0xf7, 0xa8, + 0x39, 0x8c, 0x89, 0x30, 0x92, 0x17, 0xaf, 0xff, 0xc3, 0xcc, 0x8b, 0x57, 0x3a, 0xd4, 0xbc, 0x78, + 0xea, 0x2f, 0xe7, 0xe0, 0x74, 0x22, 0x88, 0x3e, 0x79, 0x19, 0x80, 0x43, 0xa4, 0x60, 0xa5, 0x18, + 0xfd, 0x27, 0x0c, 0xac, 0x2f, 0x96, 0xc7, 0x90, 0x8c, 0xdc, 0x80, 0x41, 0xfe, 0x4b, 0x04, 0x18, + 0x4b, 0x16, 0xe9, 0x76, 0x4d, 0x43, 0x0b, 0x88, 0xc2, 0x5a, 0xf0, 0x46, 0xb2, 0x90, 0x5a, 0xc4, + 0xdb, 0xec, 0x04, 0xb5, 0x30, 0x32, 0xf5, 0xa7, 0xf2, 0x30, 0x12, 0x34, 0xb8, 0x6c, 0x1c, 0x95, + 0xce, 0x95, 0x44, 0x3e, 0x82, 0xc2, 0x4e, 0xf9, 0x08, 0x62, 0xf3, 0xad, 0x48, 0x40, 0x70, 0x78, + 0x0f, 0xaa, 0xbe, 0x96, 0x87, 0x53, 0x41, 0xad, 0x47, 0x78, 0xf9, 0xf5, 0x11, 0x12, 0xc9, 0x57, + 0x73, 0xa0, 0x4c, 0x99, 0xad, 0x96, 0x69, 0x35, 0xab, 0xd6, 0x9a, 0xed, 0xb4, 0x71, 0x42, 0x3c, + 0xba, 0x23, 0x5c, 0xf5, 0xcf, 0xe6, 0xe0, 0xb4, 0x68, 0xd0, 0xb4, 0xee, 0x18, 0x47, 0x77, 0x3e, + 0x16, 0x6f, 0xc9, 0xd1, 0xe9, 0x8b, 0xfa, 0xad, 0x3c, 0xc0, 0xbc, 0xdd, 0x78, 0x78, 0xcc, 0xdf, + 0x63, 0xbd, 0x09, 0x25, 0x1e, 0xe5, 0x4d, 0x68, 0xec, 0x69, 0xf1, 0xee, 0x88, 0x7d, 0x1a, 0x47, + 0x4c, 0x8d, 0x8b, 0xf9, 0xb8, 0xc4, 0xa3, 0xc4, 0x29, 0x39, 0x4d, 0x14, 0x61, 0x95, 0x32, 0x3a, + 0xb1, 0x60, 0x04, 0x95, 0x32, 0x58, 0xb4, 0xd2, 0xed, 0xad, 0x89, 0x62, 0xcb, 0x6e, 0x3c, 0xd4, + 0x90, 0x5e, 0xfd, 0xd7, 0x39, 0x2e, 0xbb, 0x63, 0xfe, 0xaa, 0xd4, 0xff, 0xfc, 0xe2, 0x1e, 0x3f, + 0xff, 0xcf, 0xe5, 0xe0, 0xac, 0x46, 0x1b, 0xf6, 0x23, 0xea, 0x6c, 0x4e, 0xdb, 0x06, 0xbd, 0x4d, + 0x2d, 0xea, 0x1c, 0xd5, 0x88, 0xfa, 0x6d, 0x4c, 0xe0, 0x12, 0x36, 0xe6, 0x9e, 0x4b, 0x8d, 0xe3, + 0x93, 0x5c, 0x47, 0xfd, 0xd5, 0x01, 0x50, 0x52, 0xad, 0xde, 0x63, 0x6b, 0xce, 0x65, 0x6e, 0x65, + 0x8a, 0x87, 0xb5, 0x95, 0xe9, 0xdf, 0xdb, 0x56, 0xa6, 0xb4, 0xd7, 0xad, 0xcc, 0xc0, 0x6e, 0xb6, + 0x32, 0xed, 0xf8, 0x56, 0x66, 0x10, 0xb7, 0x32, 0x2f, 0xf7, 0xdc, 0xca, 0xcc, 0x58, 0xc6, 0x3e, + 0x37, 0x32, 0xc7, 0x36, 0xf1, 0xf3, 0x7e, 0x76, 0x60, 0xd7, 0xd8, 0xa4, 0xd8, 0xb0, 0x1d, 0x83, + 0x1a, 0x62, 0xe3, 0x85, 0xa7, 0xfe, 0x8e, 0x80, 0x69, 0x01, 0x36, 0x91, 0x45, 0x7b, 0x74, 0x37, + 0x59, 0xb4, 0x0f, 0x61, 0xff, 0xf5, 0x95, 0x3c, 0x9c, 0x9e, 0xa6, 0x8e, 0xc7, 0xc3, 0xc8, 0x1e, + 0x86, 0x4b, 0x5c, 0x19, 0x4e, 0x49, 0x0c, 0xd1, 0x22, 0xcf, 0x87, 0x6e, 0x7e, 0x0d, 0xea, 0x78, + 0x71, 0x2f, 0xc1, 0x38, 0x3d, 0xab, 0xde, 0xcf, 0x64, 0x27, 0xc6, 0x6e, 0x50, 0xbd, 0x0f, 0xe7, + 0x82, 0x34, 0xc5, 0x2f, 0x2d, 0xa0, 0x97, 0x92, 0xd3, 0x15, 0xf7, 0x9e, 0x9c, 0x4e, 0xfd, 0xa5, + 0x1c, 0x5c, 0xd5, 0xa8, 0x45, 0x37, 0xf4, 0xd5, 0x16, 0x95, 0x9a, 0x25, 0x56, 0x06, 0x36, 0x6b, + 0x98, 0x6e, 0x5b, 0xf7, 0x1a, 0xeb, 0x07, 0x92, 0xd1, 0x2c, 0x8c, 0xc8, 0xf3, 0xd7, 0x1e, 0xe6, + 0xb6, 0x48, 0x39, 0xf5, 0x57, 0x8b, 0x30, 0x30, 0x65, 0x7b, 0x77, 0xec, 0x03, 0x66, 0x4b, 0x0c, + 0xa7, 0xfc, 0xfc, 0x1e, 0xce, 0x7a, 0x3e, 0x85, 0x95, 0x4b, 0x09, 0x24, 0xd0, 0x85, 0x74, 0xd5, + 0x4e, 0x24, 0xda, 0xf0, 0xc9, 0xf6, 0x98, 0x27, 0xf1, 0x55, 0x18, 0xc2, 0xe8, 0x2f, 0xd2, 0x69, + 0x2c, 0x3a, 0x68, 0x7b, 0x0c, 0x18, 0xaf, 0x23, 0x24, 0x25, 0x5f, 0x88, 0xc4, 0xbd, 0x2d, 0x1d, + 0x3c, 0xaf, 0xa2, 0x1c, 0x02, 0xf7, 0x65, 0x7e, 0x91, 0x87, 0x6d, 0x92, 0x72, 0xd0, 0xe0, 0x29, + 0x4a, 0xac, 0x49, 0x01, 0xe1, 0x21, 0xe6, 0x3c, 0x9c, 0x86, 0xd1, 0x29, 0xdb, 0x93, 0x9c, 0x81, + 0x87, 0xc2, 0x67, 0xa0, 0x4c, 0xf2, 0xe9, 0x9e, 0xc0, 0xd1, 0x32, 0xea, 0x9f, 0x14, 0x61, 0xc4, + 0xff, 0x79, 0x44, 0xba, 0xf3, 0x22, 0x94, 0xe6, 0x6c, 0x29, 0x0d, 0x07, 0x3a, 0x10, 0xaf, 0xdb, + 0x6e, 0xcc, 0x33, 0x5a, 0x10, 0x31, 0xa9, 0x2f, 0xda, 0x86, 0xec, 0xfe, 0x8e, 0x52, 0xb7, 0x6c, + 0x23, 0xf1, 0x7c, 0x38, 0x20, 0x24, 0x57, 0xa1, 0x88, 0x2f, 0x07, 0xa4, 0x83, 0xfc, 0xd8, 0x6b, + 0x01, 0xc4, 0x4b, 0x5a, 0x59, 0xda, 0xab, 0x56, 0x0e, 0xec, 0x57, 0x2b, 0x07, 0x0f, 0x57, 0x2b, + 0xdf, 0x83, 0x11, 0xac, 0xc9, 0xcf, 0xe2, 0xb7, 0xf3, 0xc2, 0x7a, 0x51, 0xac, 0x7d, 0xa3, 0xbc, + 0xdd, 0x22, 0x97, 0x1f, 0x2e, 0x79, 0x11, 0x56, 0x31, 0xdd, 0x85, 0x03, 0x6c, 0xa7, 0xff, 0x49, + 0x0e, 0x06, 0xee, 0x59, 0x0f, 0x2d, 0x7b, 0xe3, 0x60, 0x1a, 0xf7, 0x32, 0x0c, 0x0b, 0x36, 0xd2, + 0xea, 0x82, 0x2f, 0xc2, 0xbb, 0x1c, 0x5c, 0x47, 0x4e, 0x9a, 0x4c, 0x45, 0xde, 0x0a, 0x0a, 0xe1, + 0xe3, 0xa0, 0x42, 0x98, 0xc8, 0xc6, 0x2f, 0xd4, 0x88, 0xe6, 0xde, 0x90, 0xc9, 0xc9, 0x65, 0x28, + 0x56, 0x58, 0x53, 0xa5, 0x18, 0xbc, 0xac, 0x29, 0x1a, 0x42, 0xd5, 0xaf, 0x14, 0x61, 0x2c, 0x76, + 0xf0, 0xf5, 0x3c, 0x0c, 0x89, 0x83, 0x27, 0xd3, 0x4f, 0x06, 0x82, 0x8f, 0x87, 0x02, 0xa0, 0x36, + 0xc8, 0xff, 0xac, 0x1a, 0xe4, 0x33, 0x30, 0x60, 0xbb, 0xb8, 0x28, 0xe2, 0xb7, 0x8c, 0x85, 0x43, + 0x68, 0xa9, 0xc6, 0xda, 0xce, 0x07, 0x87, 0x20, 0x91, 0x35, 0xd2, 0x76, 0xf1, 0xd3, 0x6e, 0xc1, + 0x90, 0xee, 0xba, 0xd4, 0xab, 0x7b, 0x7a, 0x53, 0xce, 0x0f, 0x12, 0x00, 0xe5, 0xd1, 0x81, 0xc0, + 0x15, 0xbd, 0x49, 0x3e, 0x0b, 0xa3, 0x0d, 0x87, 0xe2, 0xb2, 0xa9, 0xb7, 0x58, 0x2b, 0x25, 0xb3, + 0x36, 0x82, 0x90, 0xef, 0x4f, 0x42, 0x44, 0xd5, 0x20, 0xf7, 0x61, 0x54, 0x7c, 0x0e, 0xf7, 0xdc, + 0xc7, 0x81, 0x36, 0x16, 0x2e, 0x63, 0x5c, 0x24, 0xdc, 0x77, 0x5f, 0x3c, 0xe0, 0x90, 0xc9, 0x65, + 0xbe, 0x86, 0x44, 0x4a, 0x96, 0x80, 0x6c, 0xd0, 0xd5, 0xba, 0xde, 0xf5, 0xd6, 0x59, 0x5d, 0x3c, + 0xbc, 0xbd, 0x48, 0x8b, 0x89, 0xaf, 0x1e, 0x92, 0x58, 0xf9, 0x31, 0xc8, 0x06, 0x5d, 0x2d, 0x47, + 0x90, 0xe4, 0x01, 0x9c, 0x4b, 0x16, 0x61, 0x9f, 0xcc, 0x2f, 0x07, 0x9e, 0xdb, 0xde, 0x9a, 0x98, + 0x48, 0x25, 0x90, 0xd8, 0x9e, 0x49, 0xb0, 0xad, 0x1a, 0x77, 0x8a, 0x83, 0x03, 0xe3, 0x83, 0xda, + 0x18, 0x2b, 0xeb, 0x9b, 0x90, 0xa6, 0xa1, 0xfe, 0x5e, 0x8e, 0x99, 0x8a, 0xec, 0x83, 0x30, 0x2f, + 0x38, 0xd3, 0xf5, 0xf6, 0x1e, 0x75, 0xbd, 0x1d, 0x66, 0xf0, 0x2c, 0xb9, 0x3d, 0x66, 0x57, 0x4d, + 0x60, 0xc9, 0x24, 0x94, 0x0c, 0xf9, 0xd4, 0xec, 0x7c, 0xb4, 0x13, 0xfc, 0x7a, 0x34, 0x41, 0x45, + 0xae, 0x41, 0x91, 0x2d, 0x59, 0xf1, 0x2d, 0xb3, 0x6c, 0x5d, 0x68, 0x48, 0xa1, 0xfe, 0x70, 0x1e, + 0x46, 0xa4, 0xaf, 0xb9, 0x79, 0xa0, 0xcf, 0x79, 0x63, 0x77, 0xcd, 0xf4, 0x9d, 0x5e, 0x70, 0x2f, + 0xe5, 0x37, 0xf9, 0x56, 0x20, 0x8a, 0x5d, 0x5d, 0x48, 0x09, 0xc1, 0xbc, 0x2a, 0x3e, 0xb4, 0xb4, + 0xfb, 0xed, 0x23, 0xa3, 0xbf, 0x53, 0x1c, 0xcc, 0x8f, 0x17, 0xee, 0x14, 0x07, 0x8b, 0xe3, 0xfd, + 0x18, 0x87, 0x0b, 0x43, 0x5f, 0xf3, 0xbd, 0xb9, 0xb5, 0x66, 0x36, 0x8f, 0xf9, 0xdb, 0x91, 0xc3, + 0x8d, 0x51, 0x16, 0x93, 0xcd, 0x31, 0x7f, 0x48, 0xf2, 0xa1, 0xca, 0xe6, 0x24, 0xe3, 0xa7, 0x90, + 0xcd, 0x3f, 0xcd, 0x81, 0x92, 0x2a, 0x9b, 0xf2, 0x11, 0xf9, 0x41, 0x1c, 0x5e, 0xde, 0xcf, 0x3f, + 0xca, 0xc3, 0xe9, 0xaa, 0xe5, 0xd1, 0x26, 0xdf, 0x31, 0x1e, 0xf3, 0xa9, 0xe2, 0x2e, 0x0c, 0x4b, + 0x1f, 0x23, 0xfa, 0xfc, 0xa9, 0x60, 0x3f, 0x1e, 0xa2, 0x32, 0x38, 0xc9, 0xa5, 0x0f, 0xef, 0x25, + 0x4e, 0x5c, 0xc8, 0xc7, 0x7c, 0xce, 0x39, 0x1e, 0x42, 0x3e, 0xe6, 0x93, 0xd7, 0x47, 0x54, 0xc8, + 0xff, 0x79, 0x1e, 0xce, 0xa4, 0x54, 0x4e, 0xae, 0xc2, 0x40, 0xad, 0xbb, 0x8a, 0x61, 0xb7, 0x72, + 0xa1, 0xc7, 0xb0, 0xdb, 0x5d, 0xc5, 0x88, 0x5b, 0x9a, 0x8f, 0x24, 0x2b, 0xf8, 0xb8, 0x7e, 0xa9, + 0x5a, 0x99, 0x16, 0x52, 0x55, 0xa5, 0x30, 0x01, 0x0c, 0x9c, 0xf6, 0x65, 0xc1, 0x03, 0x7c, 0xdb, + 0x34, 0x1a, 0xb1, 0x07, 0xf8, 0xac, 0x0c, 0xf9, 0x01, 0x18, 0x2a, 0x7f, 0xd0, 0x75, 0x28, 0xf2, + 0xe5, 0x12, 0xff, 0x58, 0xc0, 0xd7, 0x47, 0xa4, 0x71, 0xe6, 0xb1, 0x04, 0x18, 0x45, 0x9c, 0x77, + 0xc8, 0x90, 0x2c, 0x41, 0xe9, 0xb6, 0xe9, 0xcd, 0x75, 0x57, 0x45, 0x2f, 0x04, 0xa1, 0xb9, 0x38, + 0x34, 0x8d, 0x2f, 0xee, 0xca, 0x79, 0x88, 0x61, 0x79, 0x0f, 0xc4, 0x0b, 0xa8, 0x3f, 0x95, 0x83, + 0x4b, 0xd9, 0x9f, 0x4b, 0x3e, 0x05, 0x03, 0x6c, 0xab, 0x5f, 0xd6, 0x16, 0x85, 0x2c, 0x79, 0xd2, + 0x5d, 0xbb, 0x45, 0xeb, 0xba, 0x23, 0xef, 0x1e, 0x7c, 0x32, 0xf2, 0x36, 0x0c, 0x57, 0x5d, 0xb7, + 0x4b, 0x9d, 0xda, 0xcb, 0xf7, 0xb4, 0xaa, 0xd8, 0x64, 0xe2, 0x26, 0xc6, 0x44, 0x70, 0xdd, 0x7d, + 0x39, 0x16, 0xa9, 0x4b, 0xa6, 0x57, 0x7f, 0x3c, 0x07, 0x97, 0x7b, 0x89, 0x89, 0xbc, 0x0c, 0x83, + 0x2b, 0xd4, 0xd2, 0x2d, 0xaf, 0x5a, 0x11, 0x4d, 0xc2, 0x3d, 0x9b, 0x87, 0xb0, 0xe8, 0xd6, 0x23, + 0x20, 0x64, 0x85, 0xf8, 0x41, 0x65, 0xe0, 0x19, 0xc1, 0x0f, 0x55, 0x11, 0x16, 0x2b, 0xe4, 0x13, + 0xaa, 0x5f, 0x80, 0x8b, 0x99, 0x52, 0x25, 0x9f, 0x81, 0x91, 0x25, 0xa7, 0xa9, 0x5b, 0xe6, 0x07, + 0x7c, 0x50, 0xe4, 0xc2, 0x7d, 0xb1, 0x2d, 0xc1, 0xe5, 0xbd, 0x9a, 0x4c, 0xaf, 0xfe, 0x7e, 0x1e, + 0x46, 0x96, 0x5b, 0xdd, 0xa6, 0x29, 0x2d, 0x73, 0xfb, 0xde, 0x1d, 0xf8, 0xb6, 0x7a, 0x7e, 0x6f, + 0xb6, 0x3a, 0x9b, 0x1c, 0x9c, 0x7d, 0x4e, 0x0e, 0x7e, 0x39, 0xf2, 0x16, 0x94, 0x3a, 0xf8, 0x1d, + 0xf1, 0x73, 0x63, 0xfe, 0x75, 0x59, 0xe7, 0xc6, 0xbc, 0x0c, 0x9b, 0x0d, 0x1a, 0x07, 0x98, 0x0d, + 0xc2, 0xb2, 0x92, 0x40, 0xc3, 0x25, 0xed, 0x44, 0xa0, 0x87, 0x22, 0xd0, 0x70, 0xf9, 0x3a, 0x11, + 0xe8, 0x01, 0x04, 0xfa, 0xab, 0x79, 0x18, 0x8b, 0x56, 0x49, 0x3e, 0x05, 0xc3, 0xbc, 0x1a, 0x7e, + 0x8a, 0x95, 0x93, 0x5c, 0xa0, 0x43, 0xb0, 0x06, 0xfc, 0x87, 0x38, 0x8e, 0x3b, 0xb5, 0xae, 0xbb, + 0xf5, 0xf0, 0x3c, 0x89, 0xdf, 0x36, 0x0f, 0x72, 0xbf, 0xad, 0x18, 0x4a, 0x1b, 0x5b, 0xd7, 0xdd, + 0xe9, 0xf0, 0x37, 0x99, 0x01, 0xe2, 0xd0, 0xae, 0x4b, 0xa3, 0x0c, 0x8a, 0xc8, 0x40, 0xa4, 0x53, + 0x8f, 0x63, 0xb5, 0xd3, 0x1c, 0x26, 0xb3, 0xf9, 0x62, 0xd0, 0x6c, 0x54, 0x86, 0xfe, 0x5d, 0xe4, + 0x7a, 0x97, 0xe8, 0xd3, 0x0f, 0x65, 0x39, 0x41, 0x45, 0xf7, 0x74, 0x7e, 0x84, 0xe0, 0x77, 0x80, + 0xfa, 0x23, 0x1d, 0xe8, 0x5f, 0xb2, 0xe8, 0xd2, 0x1a, 0x79, 0x09, 0x86, 0x98, 0xc2, 0xcc, 0xdb, + 0xac, 0x2f, 0x73, 0xc2, 0xdb, 0x43, 0xd2, 0x24, 0x44, 0xcc, 0xf5, 0x69, 0x21, 0x15, 0xb9, 0x05, + 0x10, 0x3e, 0x88, 0x13, 0xda, 0x47, 0xe4, 0x32, 0x1c, 0x33, 0xd7, 0xa7, 0x49, 0x74, 0x7e, 0x29, + 0xf1, 0x9c, 0xa8, 0x90, 0x2c, 0xc5, 0x31, 0x7e, 0x29, 0x31, 0x3e, 0xe6, 0x81, 0xb0, 0x5f, 0xcb, + 0xba, 0xeb, 0x6e, 0xd8, 0x8e, 0x31, 0xbd, 0xae, 0x5b, 0x4d, 0x1a, 0xdf, 0xeb, 0x25, 0x29, 0xe6, + 0xfa, 0xb4, 0x94, 0x72, 0xe4, 0x0d, 0x18, 0x91, 0xdd, 0x5f, 0xe3, 0x2e, 0x2a, 0x32, 0x6e, 0xae, + 0x4f, 0x8b, 0xd0, 0x92, 0xd7, 0x60, 0x58, 0xfc, 0xbe, 0x63, 0x8b, 0xfb, 0x6f, 0x29, 0x72, 0x92, + 0x84, 0x9a, 0xeb, 0xd3, 0x64, 0x4a, 0xa9, 0xd2, 0x65, 0xc7, 0xb4, 0x3c, 0xf1, 0xa2, 0x3a, 0x5e, + 0x29, 0xe2, 0xa4, 0x4a, 0xf1, 0x37, 0x79, 0x1b, 0x46, 0x83, 0x90, 0x54, 0xef, 0xd3, 0x86, 0x27, + 0x8e, 0xea, 0xcf, 0xc5, 0x0a, 0x73, 0xe4, 0x5c, 0x9f, 0x16, 0xa5, 0x26, 0xd7, 0xa0, 0xa4, 0x51, + 0xd7, 0xfc, 0xc0, 0xbf, 0xdc, 0x1e, 0x93, 0xc6, 0xb9, 0xf9, 0x01, 0x93, 0x92, 0xc0, 0xb3, 0xde, + 0x09, 0x6f, 0xd3, 0xc5, 0xc1, 0x3a, 0x89, 0xd5, 0x32, 0x63, 0x19, 0xac, 0x77, 0x24, 0x57, 0x8a, + 0xcf, 0x86, 0x81, 0xba, 0x44, 0x8a, 0xd9, 0xe1, 0x78, 0x44, 0x04, 0x19, 0x3b, 0xd7, 0xa7, 0xc5, + 0xe8, 0x25, 0xa9, 0x56, 0x4c, 0xf7, 0xa1, 0x88, 0x8d, 0x1a, 0x97, 0x2a, 0x43, 0x49, 0x52, 0x65, + 0x3f, 0xa5, 0xaa, 0x17, 0xa9, 0xb7, 0x61, 0x3b, 0x0f, 0x45, 0x24, 0xd4, 0x78, 0xd5, 0x02, 0x2b, + 0x55, 0x2d, 0x20, 0x72, 0xd5, 0x6c, 0xc0, 0x8d, 0xa5, 0x57, 0xad, 0x7b, 0xba, 0x5c, 0x35, 0x3f, + 0x37, 0xf4, 0x3b, 0x69, 0x9e, 0xea, 0x8f, 0x78, 0xa6, 0xff, 0x64, 0x87, 0x22, 0x4e, 0xea, 0x50, + 0xfc, 0xcd, 0x2a, 0x95, 0xb2, 0xb9, 0x8b, 0x54, 0xfe, 0x41, 0xa5, 0x12, 0x8a, 0x55, 0x2a, 0xe7, + 0x7d, 0xbf, 0x25, 0x27, 0x39, 0x57, 0x4e, 0x47, 0x3b, 0x28, 0xc4, 0xb0, 0x0e, 0x92, 0x92, 0xa1, + 0x4f, 0x60, 0x02, 0x65, 0x85, 0x20, 0xf9, 0x70, 0xd0, 0xc2, 0xe9, 0xe5, 0xb9, 0x3e, 0x0d, 0x53, + 0x2b, 0xab, 0x3c, 0x35, 0xb7, 0x72, 0x06, 0x29, 0x46, 0x7c, 0x0a, 0x06, 0x9b, 0xeb, 0xd3, 0x78, + 0xda, 0xee, 0x97, 0xa4, 0xf4, 0x85, 0xca, 0xd9, 0xe8, 0x14, 0x11, 0x20, 0xd8, 0x14, 0x11, 0x26, + 0x39, 0x9c, 0x4d, 0x26, 0xe9, 0x53, 0xce, 0x45, 0x97, 0x9a, 0x38, 0x7e, 0xae, 0x4f, 0x4b, 0x26, + 0xf6, 0x7b, 0x2d, 0x92, 0xb7, 0x4e, 0x39, 0x1f, 0x0b, 0x57, 0x16, 0xa2, 0x98, 0xb8, 0xe4, 0x0c, + 0x77, 0x4b, 0xb1, 0x3c, 0xff, 0x62, 0xb2, 0xba, 0x10, 0xdd, 0x66, 0xa5, 0x90, 0xcc, 0xf5, 0x69, + 0x69, 0x25, 0xc9, 0x74, 0x22, 0x7b, 0x9c, 0xa2, 0x44, 0x3d, 0x79, 0x62, 0xe8, 0xb9, 0x3e, 0x2d, + 0x91, 0x6f, 0xee, 0x96, 0x9c, 0xb6, 0x4d, 0xb9, 0x18, 0xed, 0xc4, 0x10, 0xc3, 0x3a, 0x51, 0x4a, + 0xef, 0x76, 0x4b, 0x4e, 0xe5, 0xa5, 0x5c, 0x4a, 0x96, 0x0a, 0x67, 0x4e, 0x29, 0xe5, 0x97, 0x96, + 0x9e, 0x9d, 0x48, 0x79, 0x4a, 0xe4, 0x28, 0x16, 0xe5, 0xd3, 0x68, 0xe6, 0xfa, 0xb4, 0xf4, 0xcc, + 0x46, 0x5a, 0x7a, 0x5a, 0x1f, 0xe5, 0x72, 0x2f, 0x9e, 0x41, 0xeb, 0xd2, 0x53, 0x02, 0xe9, 0x3d, + 0x92, 0xac, 0x28, 0x4f, 0x47, 0x37, 0x64, 0x99, 0x84, 0x73, 0x7d, 0x5a, 0x8f, 0x54, 0x2d, 0xf7, + 0x32, 0x32, 0x9e, 0x28, 0x57, 0xa2, 0x29, 0xca, 0x53, 0x89, 0xe6, 0xfa, 0xb4, 0x8c, 0x7c, 0x29, + 0xf7, 0x32, 0x12, 0x62, 0x28, 0x13, 0x3d, 0xd9, 0x06, 0xf2, 0xc8, 0x48, 0xa7, 0xb1, 0x94, 0x9a, + 0x4b, 0x42, 0x79, 0x26, 0xaa, 0xba, 0x29, 0x24, 0x4c, 0x75, 0xd3, 0xb2, 0x50, 0x2c, 0xa5, 0x26, + 0x3f, 0x50, 0x9e, 0xed, 0xc1, 0x30, 0x68, 0x63, 0x6a, 0xda, 0x84, 0xa5, 0xd4, 0xec, 0x03, 0x8a, + 0x1a, 0x65, 0x98, 0x42, 0xc2, 0x18, 0xa6, 0xe5, 0x2d, 0x58, 0x4a, 0x0d, 0x52, 0xaf, 0x3c, 0xd7, + 0x83, 0x61, 0xd8, 0xc2, 0xb4, 0xf0, 0xf6, 0xaf, 0x45, 0xa2, 0xc4, 0x2b, 0x1f, 0x8b, 0xce, 0x1b, + 0x12, 0x8a, 0xcd, 0x1b, 0x72, 0x3c, 0xf9, 0xe9, 0x44, 0x1c, 0x5c, 0xe5, 0xe3, 0xd1, 0x61, 0x1e, + 0x43, 0xb3, 0x61, 0x1e, 0x8f, 0x9c, 0x3b, 0x9d, 0x88, 0x07, 0xaa, 0x5c, 0xcd, 0x62, 0x82, 0xe8, + 0x28, 0x13, 0x1e, 0x41, 0xb4, 0x9a, 0x12, 0x90, 0x52, 0xf9, 0x44, 0xd4, 0x0b, 0x3d, 0x41, 0x30, + 0xd7, 0xa7, 0xa5, 0x84, 0xb1, 0xd4, 0xd2, 0xa3, 0x2f, 0x29, 0xd7, 0xa2, 0xc3, 0x36, 0x8d, 0x86, + 0x0d, 0xdb, 0xd4, 0xc8, 0x4d, 0xf3, 0x69, 0x4f, 0x65, 0x94, 0xeb, 0x51, 0xc3, 0x2c, 0x49, 0xc1, + 0x0c, 0xb3, 0x94, 0x27, 0x36, 0x5a, 0x7a, 0x44, 0x20, 0xe5, 0xf9, 0x9e, 0x2d, 0x44, 0x9a, 0x94, + 0x16, 0xf2, 0x00, 0x39, 0xa1, 0xed, 0x74, 0xaf, 0xd3, 0xb2, 0x75, 0x43, 0xf9, 0x64, 0xaa, 0xed, + 0xc4, 0x91, 0x92, 0xed, 0xc4, 0x01, 0x6c, 0x95, 0x97, 0x5f, 0x64, 0x28, 0x2f, 0x44, 0x57, 0x79, + 0x19, 0xc7, 0x56, 0xf9, 0xc8, 0xeb, 0x8d, 0xe9, 0xc4, 0xeb, 0x05, 0xe5, 0xc5, 0xa8, 0x02, 0xc4, + 0xd0, 0x4c, 0x01, 0xe2, 0xef, 0x1d, 0xbe, 0x94, 0xed, 0xef, 0xaf, 0x4c, 0x22, 0xb7, 0x67, 0x7c, + 0x6e, 0x59, 0x74, 0x73, 0x7d, 0x5a, 0xf6, 0x9b, 0x81, 0x6a, 0x8a, 0xfb, 0xbe, 0x72, 0x23, 0xaa, + 0x60, 0x09, 0x02, 0xa6, 0x60, 0x49, 0xa7, 0xff, 0x6a, 0x8a, 0xff, 0xbd, 0xf2, 0xa9, 0x4c, 0x56, + 0xc1, 0x37, 0xa7, 0x78, 0xed, 0xdf, 0x92, 0x1d, 0xe8, 0x95, 0x97, 0xa2, 0x8b, 0x5d, 0x88, 0x61, + 0x8b, 0x9d, 0xe4, 0x68, 0x7f, 0x4b, 0x76, 0x1d, 0x57, 0x6e, 0x26, 0x4b, 0x85, 0x4b, 0xa4, 0xe4, + 0x62, 0xae, 0xa5, 0x7b, 0x5c, 0x2b, 0x2f, 0x47, 0xb5, 0x2e, 0x8d, 0x86, 0x69, 0x5d, 0xaa, 0xb7, + 0xf6, 0x6c, 0xd2, 0x71, 0x5a, 0xb9, 0x15, 0xdf, 0x64, 0x47, 0xf1, 0xcc, 0xf2, 0x49, 0x38, 0x5b, + 0x7f, 0x36, 0x1e, 0x1a, 0x50, 0x79, 0x25, 0x76, 0x49, 0x1d, 0xc1, 0x32, 0xfb, 0x36, 0x16, 0x4a, + 0xf0, 0xb3, 0xf1, 0x68, 0x7a, 0xca, 0xab, 0xe9, 0x1c, 0x02, 0x5d, 0x89, 0x47, 0xdf, 0xfb, 0x6c, + 0x3c, 0x00, 0x9d, 0xf2, 0x5a, 0x3a, 0x87, 0x40, 0xba, 0xf1, 0x80, 0x75, 0x2f, 0x49, 0x21, 0xf1, + 0x95, 0x4f, 0x47, 0x4d, 0xc7, 0x00, 0xc1, 0x4c, 0xc7, 0x30, 0x70, 0xfe, 0x4b, 0x52, 0x28, 0x79, + 0xe5, 0xf5, 0x44, 0x91, 0xa0, 0xb1, 0x52, 0xc0, 0xf9, 0x97, 0xa4, 0x10, 0xec, 0xca, 0x1b, 0x89, + 0x22, 0x41, 0xeb, 0xa4, 0x40, 0xed, 0x46, 0xaf, 0xd7, 0xb6, 0xca, 0x9b, 0xd1, 0xa3, 0xeb, 0x6c, + 0xca, 0xb9, 0x3e, 0xad, 0xd7, 0xab, 0xdd, 0x2f, 0x65, 0xbb, 0xa1, 0x2b, 0x6f, 0x45, 0x87, 0x70, + 0x16, 0x1d, 0x1b, 0xc2, 0x99, 0xae, 0xec, 0x6f, 0xc7, 0x22, 0x6f, 0x28, 0x6f, 0x47, 0xa7, 0xb8, + 0x08, 0x92, 0x4d, 0x71, 0xf1, 0x38, 0x1d, 0x91, 0x90, 0x12, 0xca, 0x67, 0xa2, 0x53, 0x9c, 0x8c, + 0x63, 0x53, 0x5c, 0x24, 0xfc, 0xc4, 0x74, 0x22, 0xd2, 0x81, 0xf2, 0x4e, 0x74, 0x8a, 0x8b, 0xa1, + 0xd9, 0x14, 0x17, 0x8f, 0x8d, 0xf0, 0x76, 0xec, 0xc1, 0xbf, 0xf2, 0xd9, 0xf4, 0xf6, 0x23, 0x52, + 0x6e, 0x3f, 0x0f, 0x0f, 0xa0, 0xa5, 0xbf, 0x5c, 0x57, 0xca, 0xd1, 0xf1, 0x9b, 0x46, 0xc3, 0xc6, + 0x6f, 0xea, 0xab, 0xf7, 0xf8, 0xc6, 0x41, 0x68, 0xd5, 0x54, 0x8f, 0x8d, 0x43, 0x68, 0x8a, 0xa4, + 0x80, 0x23, 0x7b, 0x64, 0xbe, 0x11, 0x9a, 0xce, 0xd8, 0x23, 0xfb, 0xdb, 0xa0, 0x18, 0x3d, 0x9b, + 0x5d, 0x13, 0x5e, 0xd1, 0x4a, 0x25, 0x3a, 0xbb, 0x26, 0x08, 0xd8, 0xec, 0x9a, 0xf4, 0xa5, 0x9e, + 0x85, 0x71, 0xa1, 0x45, 0xdc, 0xd9, 0xdb, 0xb4, 0x9a, 0xca, 0x4c, 0xec, 0x75, 0x68, 0x0c, 0xcf, + 0x66, 0xa7, 0x38, 0x0c, 0xd7, 0x6b, 0x0e, 0x9b, 0x6e, 0x99, 0x9d, 0x55, 0x5b, 0x77, 0x8c, 0x1a, + 0xb5, 0x0c, 0x65, 0x36, 0xb6, 0x5e, 0xa7, 0xd0, 0xe0, 0x7a, 0x9d, 0x02, 0xc7, 0x80, 0x76, 0x31, + 0xb8, 0x46, 0x1b, 0xd4, 0x7c, 0x44, 0x95, 0xdb, 0xc8, 0x76, 0x22, 0x8b, 0xad, 0x20, 0x9b, 0xeb, + 0xd3, 0xb2, 0x38, 0x30, 0x5b, 0x7d, 0x61, 0xb3, 0xf6, 0xee, 0x7c, 0x10, 0x2c, 0x61, 0xd9, 0xa1, + 0x1d, 0xdd, 0xa1, 0xca, 0x5c, 0xd4, 0x56, 0x4f, 0x25, 0x62, 0xb6, 0x7a, 0x2a, 0x22, 0xc9, 0xd6, + 0x1f, 0x0b, 0xd5, 0x5e, 0x6c, 0xc3, 0x11, 0x91, 0x5e, 0x9a, 0xcd, 0x4e, 0x51, 0x04, 0x13, 0xd0, + 0xbc, 0x6d, 0x35, 0xf1, 0xa4, 0xe2, 0x4e, 0x74, 0x76, 0xca, 0xa6, 0x64, 0xb3, 0x53, 0x36, 0x96, + 0xa9, 0x7a, 0x14, 0xcb, 0xc7, 0xe0, 0xdd, 0xa8, 0xaa, 0xa7, 0x90, 0x30, 0x55, 0x4f, 0x01, 0x27, + 0x19, 0x6a, 0xd4, 0xa5, 0x9e, 0x32, 0xdf, 0x8b, 0x21, 0x92, 0x24, 0x19, 0x22, 0x38, 0xc9, 0x70, + 0x96, 0x7a, 0x8d, 0x75, 0x65, 0xa1, 0x17, 0x43, 0x24, 0x49, 0x32, 0x44, 0x30, 0xdb, 0x6c, 0x46, + 0xc1, 0x53, 0xdd, 0xd6, 0x43, 0xbf, 0xcf, 0x16, 0xa3, 0x9b, 0xcd, 0x4c, 0x42, 0xb6, 0xd9, 0xcc, + 0x44, 0x92, 0x1f, 0xdf, 0xb5, 0xd7, 0xbe, 0xb2, 0x84, 0x15, 0x4e, 0x86, 0x76, 0xc1, 0x6e, 0x4a, + 0xcd, 0xf5, 0x69, 0xbb, 0x7d, 0x15, 0xf0, 0xc9, 0xc0, 0xc5, 0x55, 0x59, 0xc6, 0xaa, 0x4e, 0x05, + 0x67, 0x15, 0x1c, 0x3c, 0xd7, 0xa7, 0x05, 0x4e, 0xb0, 0xaf, 0xc1, 0x30, 0x7e, 0x54, 0xd5, 0x32, + 0xbd, 0xca, 0x94, 0xf2, 0x6e, 0x74, 0xcb, 0x24, 0xa1, 0xd8, 0x96, 0x49, 0xfa, 0xc9, 0x26, 0x71, + 0xfc, 0xc9, 0xa7, 0x98, 0xca, 0x94, 0xa2, 0x45, 0x27, 0xf1, 0x08, 0x92, 0x4d, 0xe2, 0x11, 0x40, + 0x50, 0x6f, 0xc5, 0xb1, 0x3b, 0x95, 0x29, 0xa5, 0x96, 0x52, 0x2f, 0x47, 0x05, 0xf5, 0xf2, 0x9f, + 0x41, 0xbd, 0xb5, 0xf5, 0xae, 0x57, 0x61, 0xdf, 0xb8, 0x92, 0x52, 0xaf, 0x8f, 0x0c, 0xea, 0xf5, + 0x01, 0x6c, 0x2a, 0x44, 0xc0, 0xb2, 0x63, 0xb3, 0x49, 0xfb, 0xae, 0xd9, 0x6a, 0x29, 0xf7, 0xa2, + 0x53, 0x61, 0x1c, 0xcf, 0xa6, 0xc2, 0x38, 0x8c, 0x99, 0x9e, 0xbc, 0x55, 0x74, 0xb5, 0xdb, 0x54, + 0xee, 0x47, 0x4d, 0xcf, 0x10, 0xc3, 0x4c, 0xcf, 0xf0, 0x17, 0xee, 0x2e, 0xd8, 0x2f, 0x8d, 0xae, + 0x39, 0xd4, 0x5d, 0x57, 0x1e, 0xc4, 0x76, 0x17, 0x12, 0x0e, 0x77, 0x17, 0xd2, 0x6f, 0xd2, 0x84, + 0xa7, 0x22, 0x0b, 0x8d, 0x7f, 0x69, 0x53, 0xa3, 0xba, 0xd3, 0x58, 0x57, 0x3e, 0x87, 0xac, 0x9e, + 0x4b, 0x5d, 0xaa, 0xa2, 0xa4, 0x73, 0x7d, 0x5a, 0x2f, 0x4e, 0xb8, 0x2d, 0x7f, 0x77, 0x9e, 0xc7, + 0xad, 0xd5, 0x96, 0xa7, 0xfd, 0x4d, 0xe8, 0x7b, 0xb1, 0x6d, 0x79, 0x92, 0x04, 0xb7, 0xe5, 0x49, + 0x30, 0xe9, 0xc0, 0x95, 0xd8, 0x56, 0x6d, 0x41, 0x6f, 0xb1, 0x7d, 0x09, 0x35, 0x96, 0xf5, 0xc6, + 0x43, 0xea, 0x29, 0x9f, 0x47, 0xde, 0x57, 0x33, 0x36, 0x7c, 0x31, 0xea, 0xb9, 0x3e, 0x6d, 0x07, + 0x7e, 0x44, 0x85, 0x62, 0x6d, 0x76, 0x65, 0x59, 0xf9, 0x42, 0xf4, 0x7c, 0x93, 0xc1, 0xe6, 0xfa, + 0x34, 0xc4, 0x31, 0x2b, 0xed, 0x5e, 0xa7, 0xe9, 0xe8, 0x06, 0xe5, 0x86, 0x16, 0xda, 0x6e, 0xc2, + 0x00, 0xfd, 0x81, 0xa8, 0x95, 0x96, 0x45, 0xc7, 0xac, 0xb4, 0x2c, 0x1c, 0x53, 0xd4, 0x48, 0x8a, + 0x16, 0xe5, 0x8b, 0x51, 0x45, 0x8d, 0x20, 0x99, 0xa2, 0x46, 0x13, 0xba, 0x7c, 0x0e, 0xce, 0x07, + 0xfb, 0x79, 0xb1, 0xfe, 0xf2, 0x4e, 0x53, 0xbe, 0x84, 0x7c, 0xae, 0x24, 0x2e, 0x03, 0x22, 0x54, + 0x73, 0x7d, 0x5a, 0x46, 0x79, 0xb6, 0xe2, 0x26, 0xb2, 0x8f, 0x09, 0xf3, 0xe2, 0x07, 0xa3, 0x2b, + 0x6e, 0x06, 0x19, 0x5b, 0x71, 0x33, 0x50, 0xa9, 0xcc, 0x85, 0x50, 0xf5, 0x1d, 0x98, 0x07, 0x32, + 0xcd, 0xe2, 0x90, 0xca, 0x5c, 0x58, 0x6a, 0xab, 0x3b, 0x30, 0x0f, 0xac, 0xb5, 0x2c, 0x0e, 0xe4, + 0x1a, 0x94, 0x6a, 0xb5, 0x05, 0xad, 0x6b, 0x29, 0x8d, 0x98, 0x6f, 0x2f, 0x42, 0xe7, 0xfa, 0x34, + 0x81, 0x67, 0x66, 0xd0, 0x4c, 0x4b, 0x77, 0x3d, 0xb3, 0xe1, 0xe2, 0x88, 0xf1, 0x47, 0x88, 0x11, + 0x35, 0x83, 0xd2, 0x68, 0x98, 0x19, 0x94, 0x06, 0x67, 0xf6, 0xe2, 0xb4, 0xee, 0xba, 0xba, 0x65, + 0x38, 0xfa, 0x14, 0x2e, 0x13, 0x34, 0xf6, 0x76, 0x2c, 0x82, 0x65, 0xf6, 0x62, 0x14, 0x82, 0x87, + 0xef, 0x3e, 0xc4, 0x37, 0x73, 0xd6, 0x62, 0x87, 0xef, 0x31, 0x3c, 0x1e, 0xbe, 0xc7, 0x60, 0x68, + 0x77, 0xfa, 0x30, 0x8d, 0x36, 0x4d, 0x26, 0x22, 0xa5, 0x19, 0xb3, 0x3b, 0xe3, 0x04, 0x68, 0x77, + 0xc6, 0x81, 0x91, 0x26, 0xf9, 0xcb, 0xed, 0x7a, 0x46, 0x93, 0xc2, 0x55, 0x36, 0x51, 0x86, 0xad, + 0xdf, 0xe1, 0xe0, 0xa8, 0x6c, 0x5a, 0x7a, 0xdb, 0xae, 0x4c, 0xf9, 0x52, 0x37, 0xa3, 0xeb, 0x77, + 0x26, 0x21, 0x5b, 0xbf, 0x33, 0x91, 0x6c, 0x76, 0xf5, 0x37, 0x5a, 0xeb, 0xba, 0x43, 0x8d, 0x8a, + 0xe9, 0xe0, 0xc9, 0xe2, 0x26, 0xdf, 0x1a, 0xbe, 0x1f, 0x9d, 0x5d, 0x7b, 0x90, 0xb2, 0xd9, 0xb5, + 0x07, 0x9a, 0x19, 0x79, 0xe9, 0x68, 0x8d, 0xea, 0x86, 0xf2, 0x30, 0x6a, 0xe4, 0x65, 0x53, 0x32, + 0x23, 0x2f, 0x1b, 0x9b, 0xfd, 0x39, 0x0f, 0x1c, 0xd3, 0xa3, 0x4a, 0x6b, 0x37, 0x9f, 0x83, 0xa4, + 0xd9, 0x9f, 0x83, 0x68, 0xb6, 0x21, 0x8c, 0x77, 0x48, 0x3b, 0xba, 0x21, 0x4c, 0x76, 0x43, 0xbc, + 0x04, 0xb3, 0x58, 0xc4, 0x13, 0x42, 0xc5, 0x8a, 0x5a, 0x2c, 0x02, 0xcc, 0x2c, 0x96, 0xf0, 0x91, + 0x61, 0xe4, 0xe1, 0x98, 0x62, 0x47, 0xd7, 0x50, 0x19, 0xc7, 0xd6, 0xd0, 0xc8, 0x23, 0xb3, 0xd7, + 0x22, 0xaf, 0x22, 0x94, 0x4e, 0xd4, 0xea, 0x90, 0x50, 0xcc, 0xea, 0x90, 0xdf, 0x4f, 0x4c, 0xc3, + 0x29, 0xbc, 0x05, 0xd7, 0xba, 0xc1, 0x3d, 0xce, 0x0f, 0x45, 0x3f, 0x33, 0x86, 0x66, 0x9f, 0x19, + 0x03, 0x45, 0x98, 0x88, 0x69, 0xcb, 0xc9, 0x60, 0x12, 0x9e, 0x0f, 0xc6, 0x40, 0x64, 0x1e, 0x48, + 0xad, 0xbc, 0x30, 0x5f, 0x35, 0x96, 0xe5, 0x2b, 0x32, 0x37, 0x7a, 0x02, 0x9b, 0xa4, 0x98, 0xeb, + 0xd3, 0x52, 0xca, 0x91, 0xf7, 0xe1, 0xb2, 0x80, 0x8a, 0xf7, 0xe1, 0xcb, 0x8e, 0xfd, 0xc8, 0x34, + 0x82, 0x05, 0xc1, 0x8b, 0x7a, 0xdd, 0xf5, 0xa2, 0x9d, 0xeb, 0xd3, 0x7a, 0xf2, 0xca, 0xae, 0x4b, + 0xac, 0x0f, 0xdd, 0xdd, 0xd4, 0x15, 0x2c, 0x12, 0x3d, 0x79, 0x65, 0xd7, 0x25, 0xe4, 0xfe, 0x68, + 0x37, 0x75, 0x05, 0x9d, 0xd0, 0x93, 0x17, 0x71, 0x61, 0xa2, 0x17, 0xbe, 0xdc, 0x6a, 0x29, 0x1b, + 0x58, 0xdd, 0x27, 0x76, 0x53, 0x5d, 0x19, 0x0d, 0xce, 0x9d, 0x38, 0xb2, 0x59, 0x7a, 0xa9, 0x43, + 0xad, 0x5a, 0x64, 0x01, 0x7a, 0x1c, 0x9d, 0xa5, 0x13, 0x04, 0x6c, 0x96, 0x4e, 0x00, 0xd9, 0x80, + 0x92, 0x1f, 0xd7, 0x28, 0x9b, 0xd1, 0x01, 0x25, 0xe3, 0xd8, 0x80, 0x8a, 0x3c, 0xc4, 0x59, 0x82, + 0x33, 0x4b, 0x0f, 0x3d, 0xdd, 0xb7, 0x20, 0x5d, 0xd1, 0x95, 0x1f, 0xc4, 0x2e, 0x99, 0x92, 0x24, + 0x78, 0xc9, 0x94, 0x04, 0xb3, 0x31, 0xc2, 0xc0, 0xb5, 0x4d, 0xab, 0x31, 0xab, 0x9b, 0xad, 0xae, + 0x43, 0x95, 0x7f, 0x23, 0x3a, 0x46, 0x62, 0x68, 0x36, 0x46, 0x62, 0x20, 0xb6, 0x40, 0x33, 0x50, + 0xd9, 0x75, 0xcd, 0xa6, 0x25, 0xf6, 0x95, 0xdd, 0x96, 0xa7, 0xfc, 0x9b, 0xd1, 0x05, 0x3a, 0x8d, + 0x86, 0x2d, 0xd0, 0x69, 0x70, 0x3c, 0x75, 0x62, 0xbd, 0xc0, 0x16, 0x0f, 0xf9, 0xae, 0xf2, 0xdf, + 0x8a, 0x9d, 0x3a, 0xa5, 0xd0, 0xe0, 0xa9, 0x53, 0x0a, 0x9c, 0xad, 0x8f, 0xdc, 0x26, 0x9b, 0x37, + 0x83, 0xbb, 0xea, 0x7f, 0x3b, 0xba, 0x3e, 0xc6, 0xf1, 0x6c, 0x7d, 0x8c, 0xc3, 0xa2, 0x7c, 0x44, + 0x17, 0xfc, 0x3b, 0x59, 0x7c, 0x02, 0xf9, 0x27, 0xca, 0x90, 0xdb, 0x32, 0x1f, 0x31, 0x52, 0x7e, + 0x38, 0x97, 0xc5, 0x28, 0x18, 0x1e, 0x89, 0x42, 0x51, 0x46, 0x1a, 0x7d, 0x64, 0xd2, 0x0d, 0xe5, + 0xcb, 0x99, 0x8c, 0x38, 0x41, 0x94, 0x11, 0x87, 0x91, 0xf7, 0xe0, 0x7c, 0x08, 0x5b, 0xa0, 0xed, + 0xd5, 0x60, 0x66, 0xfa, 0x91, 0x5c, 0xd4, 0x0c, 0x4e, 0x27, 0x63, 0x66, 0x70, 0x3a, 0x26, 0x8d, + 0xb5, 0x10, 0xdd, 0xbf, 0xbb, 0x03, 0xeb, 0x40, 0x82, 0x19, 0x0c, 0xd2, 0x58, 0x0b, 0x69, 0xfe, + 0xe8, 0x0e, 0xac, 0x03, 0x99, 0x66, 0x30, 0x20, 0x3f, 0x91, 0x83, 0xab, 0xe9, 0xa8, 0x72, 0xab, + 0x35, 0x6b, 0x3b, 0x21, 0x4e, 0xf9, 0x33, 0xb9, 0xe8, 0x41, 0xc3, 0xee, 0x8a, 0xcd, 0xf5, 0x69, + 0xbb, 0xac, 0x80, 0x7c, 0x06, 0x46, 0xcb, 0x5d, 0xc3, 0xf4, 0xf0, 0xe2, 0x8d, 0x19, 0xce, 0x3f, + 0x96, 0x8b, 0x6d, 0x71, 0x64, 0x2c, 0x6e, 0x71, 0x64, 0x00, 0xb9, 0x03, 0xa7, 0x6b, 0xb4, 0xd1, + 0x75, 0x4c, 0x6f, 0x53, 0xa3, 0x1d, 0xdb, 0xf1, 0x18, 0x8f, 0x3f, 0x9b, 0x8b, 0x4e, 0x62, 0x09, + 0x0a, 0x36, 0x89, 0x25, 0x80, 0xe4, 0x7e, 0xe2, 0x56, 0x5e, 0x74, 0xe6, 0x8f, 0xe7, 0x7a, 0x5e, + 0xcb, 0x07, 0x7d, 0x99, 0x5e, 0x9c, 0x2c, 0xc7, 0x6e, 0xd1, 0x05, 0xd7, 0x9f, 0xc8, 0xf5, 0xb8, + 0x46, 0x97, 0x66, 0xb8, 0x24, 0x98, 0x71, 0x4c, 0xc9, 0x57, 0xaf, 0xfc, 0xb9, 0x5c, 0x8f, 0x6b, + 0xef, 0x90, 0x63, 0x5a, 0xaa, 0xfb, 0x57, 0xb8, 0xa7, 0x88, 0x60, 0xf4, 0x93, 0xb9, 0xa4, 0xab, + 0x48, 0x50, 0x5e, 0x22, 0x64, 0xc5, 0xee, 0xb9, 0x81, 0xd2, 0x7f, 0x25, 0x97, 0xf4, 0xcd, 0x0b, + 0x8b, 0x85, 0xbf, 0x08, 0x85, 0x4b, 0x33, 0x8f, 0x3d, 0xea, 0x58, 0x7a, 0x0b, 0xbb, 0xb3, 0xe6, + 0xd9, 0x8e, 0xde, 0xa4, 0x33, 0x96, 0xbe, 0xda, 0xa2, 0xca, 0x4f, 0xe5, 0xa2, 0x16, 0x6c, 0x36, + 0x29, 0xb3, 0x60, 0xb3, 0xb1, 0x64, 0x1d, 0x9e, 0x4a, 0xc3, 0x56, 0x4c, 0x17, 0xeb, 0xf9, 0x6a, + 0x2e, 0x6a, 0xc2, 0xf6, 0xa0, 0x65, 0x26, 0x6c, 0x0f, 0x34, 0xb9, 0x09, 0x43, 0x53, 0xb6, 0x3f, + 0xfd, 0xfe, 0xf9, 0x98, 0x33, 0x64, 0x80, 0x99, 0xeb, 0xd3, 0x42, 0x32, 0x51, 0x46, 0x0c, 0xea, + 0xaf, 0x25, 0xcb, 0x84, 0x97, 0x4f, 0xc1, 0x0f, 0x51, 0x46, 0x88, 0xfb, 0xdf, 0x4b, 0x96, 0x09, + 0xef, 0xb8, 0x82, 0x1f, 0x6c, 0x26, 0xe1, 0x35, 0x2e, 0xcc, 0x96, 0x99, 0xdd, 0x36, 0xbd, 0xae, + 0xb7, 0x5a, 0xd4, 0x6a, 0x52, 0xe5, 0xeb, 0xb1, 0x99, 0x24, 0x9d, 0x8c, 0xcd, 0x24, 0xe9, 0x18, + 0xf2, 0x03, 0x70, 0xe1, 0xbe, 0xde, 0x32, 0x8d, 0x10, 0xe7, 0x67, 0x2f, 0x57, 0x7e, 0x3a, 0x17, + 0xdd, 0x4d, 0x67, 0xd0, 0xb1, 0xdd, 0x74, 0x06, 0x8a, 0x2c, 0x00, 0xc1, 0x65, 0x34, 0x98, 0x2d, + 0xd8, 0xfa, 0xac, 0xfc, 0xfb, 0xb9, 0xa8, 0x9d, 0x9a, 0x24, 0x61, 0x76, 0x6a, 0x12, 0x4a, 0xea, + 0xd9, 0x89, 0x4c, 0x94, 0x9f, 0xc9, 0x45, 0x4f, 0x6b, 0xb2, 0x08, 0xe7, 0xfa, 0xb4, 0xec, 0x6c, + 0x28, 0xb7, 0x61, 0xbc, 0xb6, 0x5c, 0x9d, 0x9d, 0x9d, 0xa9, 0xdd, 0xaf, 0x56, 0xf0, 0x15, 0x85, + 0xa1, 0xfc, 0x85, 0xd8, 0x8a, 0x15, 0x27, 0x60, 0x2b, 0x56, 0x1c, 0x46, 0xde, 0x84, 0x11, 0xd6, + 0x7e, 0x36, 0x60, 0xf0, 0x93, 0x7f, 0x36, 0x17, 0x35, 0xa7, 0x64, 0x24, 0x33, 0xa7, 0xe4, 0xdf, + 0xa4, 0x06, 0x67, 0x99, 0x14, 0x97, 0x1d, 0xba, 0x46, 0x1d, 0x6a, 0x35, 0xfc, 0x31, 0xfd, 0x73, + 0xb9, 0xa8, 0x95, 0x91, 0x46, 0xc4, 0xac, 0x8c, 0x34, 0x38, 0x79, 0x08, 0x97, 0xe3, 0x27, 0x41, + 0xf2, 0x23, 0x59, 0xe5, 0x2f, 0xe6, 0x62, 0xc6, 0x70, 0x0f, 0x62, 0x34, 0x86, 0x7b, 0xe0, 0x89, + 0x05, 0x4f, 0x8b, 0x63, 0x15, 0xe1, 0x70, 0x19, 0xaf, 0xed, 0x2f, 0xf1, 0xda, 0x3e, 0x1e, 0x3a, + 0x04, 0xf6, 0xa0, 0x9e, 0xeb, 0xd3, 0x7a, 0xb3, 0x63, 0x7a, 0x96, 0x4c, 0xd7, 0xa1, 0xfc, 0xe5, + 0x5c, 0xba, 0x47, 0x4a, 0xc4, 0x4d, 0x39, 0x2d, 0xcf, 0xc7, 0x7b, 0x59, 0xc9, 0x26, 0x94, 0xbf, + 0x12, 0x1b, 0x6f, 0xe9, 0x64, 0x6c, 0xbc, 0x65, 0x64, 0xab, 0xb8, 0x03, 0xa7, 0xb9, 0x52, 0x2f, + 0xeb, 0x38, 0x0c, 0xad, 0x26, 0x35, 0x94, 0xff, 0x20, 0xb6, 0xda, 0x25, 0x28, 0xd0, 0xb5, 0x27, + 0x0e, 0x64, 0x53, 0x77, 0xad, 0xa3, 0x5b, 0x16, 0x1e, 0xb3, 0x2a, 0xff, 0x61, 0x6c, 0xea, 0x0e, + 0x51, 0xe8, 0xb8, 0x1b, 0xfc, 0x62, 0x9a, 0xd0, 0x2b, 0x51, 0x93, 0xf2, 0x57, 0x63, 0x9a, 0xd0, + 0x8b, 0x98, 0x69, 0x42, 0xcf, 0xac, 0x4f, 0xf7, 0x33, 0x1e, 0xac, 0x2b, 0xdf, 0x88, 0xad, 0xc8, + 0xa9, 0x54, 0x6c, 0x45, 0x4e, 0x7f, 0xef, 0x7e, 0x3f, 0xe3, 0xb1, 0xb7, 0xf2, 0xf3, 0xbd, 0xf9, + 0x86, 0x2b, 0x7d, 0xfa, 0x5b, 0xf1, 0xfb, 0x19, 0x0f, 0xa5, 0x95, 0xbf, 0xd6, 0x9b, 0x6f, 0xe8, + 0xd8, 0x97, 0xfe, 0xce, 0xba, 0x9e, 0xfd, 0xc8, 0x58, 0xf9, 0xeb, 0xf1, 0xa9, 0x2b, 0x83, 0x10, + 0xa7, 0xae, 0xac, 0x97, 0xca, 0xab, 0x70, 0x91, 0x6b, 0xc8, 0x6d, 0x47, 0xef, 0xac, 0xd7, 0xa8, + 0xe7, 0x99, 0x56, 0xd3, 0xdf, 0x89, 0xfd, 0x8d, 0x5c, 0xec, 0x78, 0x2c, 0x8b, 0x12, 0x8f, 0xc7, + 0xb2, 0x90, 0x4c, 0x79, 0x13, 0xcf, 0x89, 0x95, 0xbf, 0x19, 0x53, 0xde, 0x04, 0x05, 0x53, 0xde, + 0xe4, 0x2b, 0xe4, 0x3b, 0x29, 0xaf, 0x66, 0x95, 0xff, 0x28, 0x9b, 0x57, 0xd0, 0xbe, 0x94, 0xc7, + 0xb6, 0x77, 0x52, 0x1e, 0x87, 0x2a, 0xff, 0x71, 0x36, 0xaf, 0xd0, 0x07, 0x29, 0xf9, 0xa6, 0xf4, + 0x3d, 0x38, 0xcf, 0x67, 0xf3, 0x59, 0x6a, 0xd0, 0xc8, 0x87, 0xfe, 0x42, 0x6c, 0xec, 0xa7, 0x93, + 0xe1, 0x91, 0x7b, 0x2a, 0x26, 0x8d, 0xb5, 0x68, 0xeb, 0xdf, 0xda, 0x81, 0x75, 0xb8, 0x21, 0x48, + 0xc7, 0xb0, 0xf5, 0x46, 0x7e, 0xfc, 0xa6, 0xfc, 0x62, 0x6c, 0xbd, 0x91, 0x91, 0xe8, 0xce, 0x21, + 0xbf, 0x94, 0x7b, 0x33, 0xfa, 0xd0, 0x4b, 0xf9, 0xdb, 0xa9, 0x85, 0x83, 0x0e, 0x88, 0xbe, 0x0a, + 0x7b, 0x33, 0xfa, 0xa8, 0x49, 0xf9, 0xa5, 0xd4, 0xc2, 0xc1, 0x07, 0x44, 0x5f, 0x40, 0xb1, 0x2d, + 0x52, 0xd7, 0xb3, 0x39, 0xab, 0xc8, 0xf4, 0xf0, 0x77, 0xe2, 0x5b, 0xa4, 0x54, 0x32, 0xdc, 0x22, + 0xa5, 0x62, 0xd2, 0x58, 0x8b, 0xcf, 0xfb, 0xe5, 0x1d, 0x58, 0x4b, 0x1b, 0xbb, 0x54, 0x4c, 0x1a, + 0x6b, 0xf1, 0xf1, 0xdf, 0xdc, 0x81, 0xb5, 0xb4, 0xb1, 0x4b, 0xc5, 0x30, 0x73, 0x2c, 0xc4, 0xdc, + 0xa7, 0x8e, 0x1b, 0xaa, 0xdf, 0x7f, 0x12, 0x33, 0xc7, 0x32, 0xe8, 0x98, 0x39, 0x96, 0x81, 0x4a, + 0xe5, 0x2e, 0x84, 0xf2, 0x2b, 0x3b, 0x71, 0x0f, 0xef, 0x65, 0x32, 0x50, 0xa9, 0xdc, 0x85, 0x5c, + 0xfe, 0xee, 0x4e, 0xdc, 0xc3, 0x8b, 0x99, 0x0c, 0x14, 0x33, 0x8a, 0x6a, 0x9e, 0xee, 0x99, 0x8d, + 0x39, 0xdb, 0xf5, 0xa4, 0x45, 0xfe, 0xef, 0xc5, 0x8c, 0xa2, 0x34, 0x22, 0x66, 0x14, 0xa5, 0xc1, + 0x93, 0x4c, 0x85, 0x34, 0x7e, 0xb5, 0x27, 0xd3, 0xd0, 0xd2, 0x4a, 0x83, 0x27, 0x99, 0x0a, 0x21, + 0xfc, 0xa7, 0x3d, 0x99, 0x86, 0x9e, 0xf2, 0x69, 0x70, 0x66, 0x99, 0x4e, 0x3b, 0xf6, 0x86, 0x75, + 0x87, 0x6e, 0xd0, 0x96, 0xf8, 0xf4, 0x5f, 0x8b, 0x59, 0xa6, 0x71, 0x02, 0xbc, 0x45, 0x89, 0xc1, + 0xa2, 0x8c, 0xc4, 0xe7, 0xfe, 0x7a, 0x26, 0xa3, 0xf0, 0x98, 0x28, 0x0e, 0x8b, 0x32, 0x12, 0x9f, + 0xf8, 0x1b, 0x99, 0x8c, 0xc2, 0x63, 0xa2, 0x38, 0x8c, 0x94, 0x61, 0x0c, 0xdf, 0x4a, 0xe8, 0xae, + 0xef, 0xf9, 0xf9, 0xdb, 0xb9, 0xe8, 0xad, 0x57, 0x14, 0x3d, 0xd7, 0xa7, 0xc5, 0x0a, 0xc8, 0x2c, + 0xc4, 0x27, 0x7d, 0x3b, 0x83, 0x45, 0xe8, 0xef, 0x18, 0x85, 0xc8, 0x2c, 0xc4, 0xc7, 0xfc, 0x67, + 0x19, 0x2c, 0x42, 0x87, 0xc7, 0x28, 0x84, 0x7c, 0x1a, 0x86, 0x6b, 0xb3, 0x2b, 0xcb, 0x7e, 0x32, + 0xc1, 0xbf, 0x9f, 0x8b, 0xbd, 0x2a, 0x0a, 0x71, 0xf8, 0xaa, 0x28, 0xfc, 0x39, 0x35, 0x00, 0xfd, + 0x78, 0x94, 0x7a, 0xa7, 0x34, 0xf8, 0xad, 0xdc, 0xf8, 0x6f, 0xe6, 0xee, 0x94, 0x06, 0x7f, 0x33, + 0x37, 0xfe, 0x5b, 0xec, 0xff, 0xdf, 0xca, 0x8d, 0xff, 0x76, 0x4e, 0xbb, 0x18, 0x0e, 0x8b, 0x72, + 0x93, 0x5a, 0xde, 0x72, 0x4b, 0x17, 0x83, 0x3a, 0x15, 0xc5, 0x7f, 0xa6, 0xa2, 0x44, 0xe2, 0xae, + 0x6f, 0xe4, 0x60, 0xa4, 0xe6, 0x39, 0x54, 0x6f, 0x8b, 0x38, 0x78, 0x97, 0x60, 0x90, 0x3b, 0x3f, + 0xfb, 0xcf, 0xc0, 0xb5, 0xe0, 0x37, 0xb9, 0x0a, 0x63, 0xf3, 0xba, 0xeb, 0x61, 0x13, 0xab, 0x96, + 0x41, 0x1f, 0xe3, 0xc3, 0xbf, 0x82, 0x16, 0x83, 0x92, 0x79, 0x4e, 0xc7, 0xcb, 0x61, 0xe8, 0xd3, + 0xc2, 0x8e, 0xe1, 0xdf, 0x06, 0xbf, 0xb3, 0x35, 0xd1, 0x87, 0xd1, 0xde, 0x62, 0x65, 0xd5, 0xdf, + 0xcb, 0x41, 0xc2, 0x2d, 0x7b, 0xff, 0xf1, 0x1e, 0x96, 0xe0, 0x54, 0x2c, 0xdc, 0xae, 0x78, 0xbd, + 0xb8, 0xcb, 0x68, 0xbc, 0xf1, 0xd2, 0xe4, 0x13, 0xc1, 0xab, 0xb9, 0x7b, 0xda, 0xbc, 0x08, 0xed, + 0x87, 0x49, 0x29, 0xba, 0x4e, 0x4b, 0x93, 0x50, 0x22, 0x74, 0xd3, 0xf7, 0xc6, 0xc3, 0x58, 0xa2, + 0xe4, 0xaa, 0x08, 0x3e, 0x91, 0x0b, 0x03, 0x02, 0xc6, 0x52, 0xe0, 0xf3, 0x60, 0x13, 0x9f, 0x81, + 0x91, 0x6a, 0xbb, 0x43, 0x1d, 0xd7, 0xb6, 0x74, 0xcf, 0x76, 0xc4, 0x53, 0x7b, 0x7c, 0x14, 0x6f, + 0x4a, 0x70, 0xf9, 0x51, 0xbc, 0x4c, 0x4f, 0xae, 0xfb, 0x79, 0xf5, 0x0a, 0x18, 0xc5, 0x15, 0x9f, + 0xb4, 0xc6, 0xd3, 0xaa, 0x73, 0x0a, 0x46, 0x7a, 0xcf, 0xd5, 0xf1, 0x7d, 0x65, 0x40, 0xda, 0x65, + 0x00, 0x99, 0x14, 0x29, 0xc8, 0x0b, 0x50, 0xc2, 0xfb, 0x28, 0x17, 0xf3, 0x65, 0x8a, 0x30, 0x85, + 0x2d, 0x84, 0xc8, 0x01, 0x11, 0x38, 0x0d, 0xb9, 0x0b, 0xe3, 0xe1, 0x65, 0xfb, 0x6d, 0xc7, 0xee, + 0x76, 0xfc, 0x0c, 0x39, 0x98, 0x8e, 0xfe, 0x61, 0x80, 0xab, 0x37, 0x11, 0x29, 0xb1, 0x48, 0x14, + 0x24, 0x73, 0x70, 0x2a, 0x84, 0x31, 0x11, 0xf9, 0x99, 0xb9, 0x30, 0x2b, 0xaa, 0xc4, 0x8b, 0x89, + 0x33, 0x92, 0x15, 0x35, 0x56, 0x8c, 0x54, 0x61, 0xc0, 0x8f, 0x51, 0x38, 0xb8, 0xa3, 0x92, 0x9e, + 0x11, 0x31, 0x0a, 0x07, 0xe4, 0xe8, 0x84, 0x7e, 0x79, 0x32, 0x0b, 0x63, 0x9a, 0xdd, 0xf5, 0xe8, + 0x8a, 0x2d, 0x76, 0xa9, 0x22, 0x16, 0x26, 0xb6, 0xc9, 0x61, 0x98, 0xba, 0x67, 0xfb, 0xd9, 0xfc, + 0xe5, 0xac, 0xf2, 0xd1, 0x52, 0x64, 0x11, 0x4e, 0x27, 0xdc, 0x12, 0xe4, 0x1c, 0xfb, 0xd2, 0xe7, + 0x25, 0x99, 0x25, 0x8b, 0x92, 0x1f, 0xcb, 0x41, 0x69, 0xc5, 0xd1, 0x4d, 0xcf, 0x15, 0x4f, 0x33, + 0xcf, 0x4d, 0x6e, 0x38, 0x7a, 0x87, 0xe9, 0xc7, 0x24, 0x86, 0xe9, 0xbd, 0xaf, 0xb7, 0xba, 0xd4, + 0x9d, 0x7a, 0xc0, 0xbe, 0xee, 0x7f, 0xd8, 0x9a, 0x78, 0x93, 0x07, 0xb5, 0x98, 0x6c, 0xd8, 0xed, + 0x1b, 0x4d, 0x47, 0x7f, 0x64, 0x7a, 0x68, 0x62, 0xea, 0xad, 0x1b, 0x1e, 0x6d, 0xe1, 0x19, 0xeb, + 0x0d, 0xbd, 0x63, 0xde, 0xc0, 0x70, 0xf0, 0x37, 0x02, 0x4e, 0xbc, 0x06, 0xa6, 0x02, 0x1e, 0xfe, + 0x25, 0xab, 0x00, 0xc7, 0x91, 0x45, 0x00, 0xf1, 0xa9, 0xe5, 0x4e, 0x47, 0xbc, 0xf3, 0x94, 0x4e, + 0x26, 0x7d, 0x0c, 0x57, 0xec, 0x40, 0x60, 0x7a, 0x47, 0x0a, 0x81, 0xac, 0x49, 0x1c, 0x98, 0x16, + 0xac, 0x88, 0x16, 0xf9, 0x62, 0x1a, 0x0d, 0x25, 0xee, 0x37, 0x36, 0x45, 0x48, 0xf1, 0x62, 0x64, + 0x15, 0x4e, 0x09, 0xbe, 0x41, 0xc2, 0x94, 0xb1, 0xe8, 0xac, 0x10, 0x43, 0x73, 0xa5, 0x0d, 0xda, + 0x68, 0x08, 0xb0, 0x5c, 0x47, 0xac, 0x04, 0x99, 0x0a, 0x13, 0x3c, 0x2f, 0xea, 0x6d, 0xea, 0x2a, + 0xa7, 0x50, 0x63, 0x2f, 0x6f, 0x6f, 0x4d, 0x28, 0x7e, 0x79, 0x0c, 0xd7, 0x29, 0x8b, 0x2e, 0x5a, + 0x44, 0xe6, 0xc1, 0xb5, 0x7e, 0x3c, 0x85, 0x47, 0x5c, 0xe7, 0xa3, 0x45, 0xc8, 0x34, 0x8c, 0x06, + 0xcf, 0x4c, 0xee, 0xdd, 0xab, 0x56, 0xf0, 0x21, 0xa9, 0x88, 0xd8, 0x1a, 0x4b, 0x69, 0x22, 0x33, + 0x89, 0x94, 0x91, 0x02, 0x7f, 0xf0, 0x97, 0xa5, 0xb1, 0xc0, 0x1f, 0x9d, 0x94, 0xc0, 0x1f, 0xcb, + 0xe4, 0x6d, 0x18, 0x2e, 0x3f, 0xa8, 0x89, 0x80, 0x26, 0xae, 0x72, 0x26, 0xcc, 0x8f, 0xa5, 0x6f, + 0xb8, 0x75, 0x3f, 0xf8, 0x89, 0xdc, 0x74, 0x99, 0x9e, 0xcc, 0xc0, 0x58, 0xc4, 0x53, 0xcd, 0x55, + 0xce, 0x22, 0x07, 0x6c, 0xb9, 0x8e, 0x98, 0xba, 0x23, 0x50, 0xf2, 0xf0, 0x8a, 0x16, 0x62, 0x5a, + 0x53, 0x31, 0x5d, 0xcc, 0x35, 0xa4, 0x51, 0x8c, 0x9d, 0x82, 0xcf, 0x52, 0x07, 0xb9, 0xd6, 0x18, + 0x02, 0x55, 0x77, 0x38, 0x4e, 0xee, 0xd1, 0x58, 0x31, 0xf2, 0x3e, 0x10, 0xcc, 0x4e, 0x44, 0x0d, + 0xff, 0xe2, 0xb2, 0x5a, 0x71, 0x95, 0xf3, 0x18, 0xae, 0x9c, 0xc4, 0xc3, 0x29, 0x54, 0x2b, 0x53, + 0x57, 0xc5, 0xf4, 0x71, 0x45, 0xe7, 0xa5, 0xea, 0x7e, 0x28, 0x85, 0xba, 0x19, 0x49, 0xdd, 0x9c, + 0xc2, 0x95, 0x6c, 0xc0, 0x85, 0x65, 0x87, 0x3e, 0x32, 0xed, 0xae, 0xeb, 0x2f, 0x1f, 0xfe, 0xbc, + 0x75, 0x61, 0xc7, 0x79, 0xeb, 0x59, 0x51, 0xf1, 0xb9, 0x8e, 0x43, 0x1f, 0xd5, 0xfd, 0x20, 0xd5, + 0x91, 0x18, 0xab, 0x59, 0xdc, 0x31, 0x01, 0xf5, 0x07, 0x5d, 0x87, 0x0a, 0xb8, 0x49, 0x5d, 0x45, + 0x09, 0xa7, 0x5a, 0x1e, 0x57, 0xc7, 0x0c, 0x70, 0x91, 0x04, 0xd4, 0xd1, 0x62, 0x44, 0x03, 0x72, + 0x7b, 0xda, 0xbf, 0xc4, 0x2e, 0x37, 0x78, 0x9a, 0x5e, 0xe5, 0x22, 0x32, 0x53, 0x99, 0x58, 0x9a, + 0x8d, 0x20, 0x60, 0x7d, 0x5d, 0x17, 0x78, 0x59, 0x2c, 0xc9, 0xd2, 0x64, 0x1e, 0xc6, 0x97, 0x1d, + 0x3c, 0x52, 0xbb, 0x4b, 0x37, 0x97, 0xed, 0x96, 0xd9, 0xd8, 0xc4, 0xd7, 0xb1, 0x62, 0xaa, 0xec, + 0x70, 0x5c, 0xfd, 0x21, 0xdd, 0xac, 0x77, 0x10, 0x2b, 0x2f, 0x2b, 0xf1, 0x92, 0x72, 0x00, 0xe9, + 0xa7, 0x76, 0x17, 0x40, 0x9a, 0xc2, 0xb8, 0xb8, 0x02, 0x7f, 0xec, 0x51, 0x8b, 0x2d, 0xf5, 0xae, + 0x78, 0x09, 0xab, 0xc4, 0xae, 0xcc, 0x03, 0x3c, 0x9f, 0x3a, 0xc4, 0x28, 0xa3, 0x01, 0x58, 0x6e, + 0x58, 0xbc, 0x48, 0x32, 0xca, 0xf2, 0xd3, 0xfb, 0x88, 0xb2, 0xfc, 0xf7, 0x0a, 0xf2, 0xfc, 0x4b, + 0x2e, 0x43, 0x51, 0x4a, 0x82, 0x84, 0x21, 0x64, 0x31, 0x60, 0x7c, 0x51, 0x44, 0xc6, 0x1e, 0x12, + 0xb6, 0x4b, 0x10, 0xda, 0x07, 0xb3, 0x5e, 0x86, 0x61, 0x45, 0xb5, 0x90, 0x00, 0x33, 0x0e, 0x76, + 0x57, 0x5b, 0x66, 0x03, 0xd3, 0x08, 0x14, 0xa4, 0x70, 0x1b, 0x08, 0xe5, 0x59, 0x04, 0x24, 0x12, + 0x72, 0x13, 0x86, 0xfd, 0xa3, 0xdc, 0x30, 0x84, 0x32, 0x46, 0x97, 0x17, 0xb3, 0xb5, 0x08, 0x5e, + 0x2f, 0x11, 0x91, 0x37, 0x00, 0xc2, 0xe9, 0x40, 0x58, 0x5a, 0xb8, 0x54, 0xc8, 0xb3, 0x87, 0xbc, + 0x54, 0x84, 0xd4, 0x6c, 0xe2, 0x94, 0xd5, 0xd1, 0xcf, 0xb1, 0x8a, 0x13, 0x67, 0x44, 0x87, 0x65, + 0x05, 0x89, 0x16, 0x21, 0x4b, 0x70, 0x3a, 0xa1, 0x81, 0x22, 0xe0, 0x32, 0xe6, 0xd9, 0x4f, 0x51, + 0x5f, 0x79, 0x61, 0x4e, 0x94, 0x25, 0xcf, 0x41, 0xe1, 0x9e, 0x56, 0x15, 0x41, 0x5f, 0x79, 0xbc, + 0xe0, 0x48, 0x00, 0x27, 0x86, 0x55, 0x7f, 0x24, 0x9f, 0x58, 0x9b, 0x98, 0xf4, 0x04, 0x2b, 0xa9, + 0x07, 0x51, 0x7a, 0x7e, 0xfd, 0x5c, 0x7a, 0x12, 0x11, 0xb9, 0x06, 0x83, 0xcb, 0x6c, 0x66, 0x68, + 0xd8, 0x2d, 0xd1, 0x9f, 0x18, 0xbe, 0xab, 0x23, 0x60, 0x5a, 0x80, 0x25, 0x37, 0xa5, 0xd4, 0xc0, + 0x52, 0x1c, 0x75, 0x3f, 0x35, 0x70, 0x3c, 0xa0, 0x38, 0x26, 0x09, 0xbe, 0x19, 0x4b, 0x35, 0x26, + 0xca, 0xa4, 0xac, 0x8b, 0x61, 0x6a, 0xb1, 0xc0, 0x2a, 0xed, 0xdf, 0xc9, 0x2a, 0x55, 0xff, 0x41, + 0x2e, 0x39, 0xce, 0xc8, 0xad, 0x64, 0x48, 0x63, 0x5c, 0x84, 0x02, 0xa0, 0x5c, 0x6b, 0x10, 0xdc, + 0x38, 0x12, 0x9c, 0x38, 0xbf, 0xef, 0xe0, 0xc4, 0x85, 0x3d, 0x06, 0x27, 0x56, 0xff, 0x9f, 0x62, + 0x4f, 0x97, 0xed, 0x23, 0x09, 0x62, 0xf7, 0x3a, 0xdb, 0x59, 0xb1, 0xda, 0xcb, 0x6e, 0x62, 0x7f, + 0xc0, 0x3d, 0x52, 0xeb, 0x3a, 0x1f, 0x5a, 0xae, 0x16, 0xa5, 0x24, 0xef, 0xc0, 0x88, 0xff, 0x01, + 0x18, 0xf4, 0x5a, 0x0a, 0xd6, 0x1c, 0xac, 0x6a, 0xb1, 0xf0, 0xd0, 0x91, 0x02, 0xe4, 0x15, 0x18, + 0x42, 0x9b, 0xa6, 0xa3, 0x37, 0xfc, 0x88, 0xe8, 0x3c, 0x84, 0xba, 0x0f, 0x94, 0x03, 0xb5, 0x05, + 0x94, 0xe4, 0x8b, 0x50, 0x12, 0x69, 0x41, 0x78, 0xd6, 0xfc, 0x1b, 0xbb, 0xf0, 0x71, 0x9f, 0x94, + 0x53, 0x82, 0xf0, 0x5d, 0x0a, 0x02, 0x22, 0xbb, 0x14, 0x9e, 0x0d, 0x64, 0x05, 0xce, 0x2c, 0x3b, + 0xd4, 0xc0, 0xd7, 0x14, 0x33, 0x8f, 0x3b, 0x8e, 0x48, 0xd8, 0xc2, 0x47, 0x39, 0x2e, 0x52, 0x1d, + 0x1f, 0xcd, 0x96, 0x4f, 0x81, 0x97, 0xc3, 0x32, 0xa7, 0x14, 0x67, 0x96, 0x0b, 0x6f, 0xc9, 0x5d, + 0xba, 0xb9, 0x61, 0x3b, 0x06, 0xcf, 0x69, 0x22, 0xe6, 0x6f, 0x21, 0xe8, 0x87, 0x02, 0x25, 0x5b, + 0x2e, 0xd1, 0x42, 0x97, 0x5e, 0x87, 0xe1, 0xfd, 0xa6, 0xd5, 0xf8, 0x95, 0x7c, 0xc6, 0xe3, 0xa7, + 0x27, 0x37, 0xb3, 0x61, 0x90, 0x6e, 0xbb, 0x3f, 0x23, 0xdd, 0xf6, 0x9f, 0xe4, 0x33, 0x5e, 0x76, + 0x3d, 0xd1, 0x69, 0x71, 0x03, 0x61, 0x44, 0xd3, 0xe2, 0x86, 0x19, 0x89, 0x4d, 0x43, 0x93, 0x89, + 0x62, 0x09, 0xb4, 0x4b, 0x3b, 0x26, 0xd0, 0xfe, 0x85, 0x42, 0xaf, 0x97, 0x6f, 0x27, 0xb2, 0xdf, + 0x8b, 0xec, 0x6f, 0xc2, 0x70, 0x20, 0xd9, 0x6a, 0x05, 0x8d, 0x9e, 0xd1, 0x20, 0x89, 0x0f, 0x07, + 0x63, 0x19, 0x89, 0x88, 0x5c, 0xe7, 0x6d, 0xad, 0x99, 0x1f, 0xf0, 0x74, 0x12, 0xa3, 0x22, 0x51, + 0x80, 0xee, 0xe9, 0x75, 0xd7, 0xfc, 0x80, 0x6a, 0x01, 0x1a, 0x23, 0x85, 0xa6, 0x3d, 0x02, 0x3c, + 0xe9, 0xa3, 0xdd, 0xf7, 0x51, 0x8a, 0x10, 0xf9, 0xc3, 0xc7, 0x13, 0x21, 0xee, 0x41, 0x88, 0x7f, + 0x9c, 0x4f, 0x7d, 0x26, 0x7a, 0x22, 0xc4, 0xbd, 0xcc, 0x16, 0x2f, 0xc0, 0x90, 0x66, 0x6f, 0xb8, + 0xd3, 0xb8, 0xb1, 0xe1, 0x73, 0x05, 0x4e, 0xd4, 0x8e, 0xbd, 0xe1, 0xd6, 0x71, 0xcb, 0xa2, 0x85, + 0x04, 0xea, 0xf7, 0xf2, 0x3d, 0x1e, 0xd2, 0x9e, 0x08, 0xfe, 0xc3, 0x5c, 0x22, 0x7f, 0x3d, 0x1f, + 0x79, 0xa8, 0xfb, 0xe4, 0x0a, 0xfb, 0x06, 0x40, 0xad, 0xb1, 0x4e, 0xdb, 0xba, 0x94, 0x92, 0x0b, + 0xcf, 0x1d, 0x5c, 0x84, 0x8a, 0x54, 0xce, 0x21, 0x89, 0xfa, 0xad, 0x7c, 0xec, 0xa5, 0xf2, 0x89, + 0xec, 0x76, 0x2d, 0xbb, 0x40, 0xeb, 0xc4, 0xe3, 0xeb, 0x13, 0xc9, 0xed, 0x56, 0x72, 0x3f, 0x9e, + 0x8f, 0xbd, 0x53, 0x7f, 0x62, 0x65, 0xc7, 0x06, 0x60, 0xf2, 0xfd, 0xfc, 0x13, 0xab, 0x49, 0x2f, + 0xc0, 0x90, 0x90, 0x43, 0xb0, 0x54, 0xf0, 0x79, 0x9f, 0x03, 0xf1, 0x94, 0x35, 0x20, 0x50, 0xff, + 0x4c, 0x1e, 0xa2, 0xf1, 0x03, 0x9e, 0x50, 0x1d, 0xfa, 0xf5, 0x7c, 0x34, 0x72, 0xc2, 0x93, 0xab, + 0x3f, 0x93, 0x00, 0xb5, 0xee, 0x6a, 0x43, 0x04, 0xde, 0xed, 0x97, 0x8e, 0xe9, 0x03, 0xa8, 0x26, + 0x51, 0xa8, 0xff, 0x6f, 0x3e, 0x35, 0x9c, 0xc3, 0x93, 0x2b, 0xc0, 0x97, 0xf1, 0x54, 0xbc, 0x61, + 0x85, 0x13, 0x39, 0x1e, 0x42, 0xb2, 0xf1, 0x97, 0xc8, 0xe3, 0xe8, 0x13, 0x92, 0x4f, 0xa7, 0x98, + 0x6b, 0x98, 0x65, 0x22, 0x34, 0xd7, 0xe4, 0x6b, 0x08, 0xc9, 0x70, 0xfb, 0xdd, 0xfc, 0x4e, 0xd1, + 0x2f, 0x9e, 0xe4, 0x55, 0x75, 0x60, 0x59, 0xdf, 0xc4, 0x28, 0x8d, 0xac, 0x27, 0x46, 0x78, 0x96, + 0xc1, 0x0e, 0x07, 0xc9, 0x77, 0x6f, 0x82, 0x4a, 0xfd, 0x17, 0xfd, 0xe9, 0xa1, 0x17, 0x9e, 0x5c, + 0x11, 0x5e, 0x86, 0xe2, 0xb2, 0xee, 0xad, 0x0b, 0x4d, 0xc6, 0x2b, 0xbd, 0x8e, 0xee, 0xad, 0x6b, + 0x08, 0x25, 0xd7, 0x61, 0x50, 0xd3, 0x37, 0xf8, 0x99, 0x67, 0x29, 0xcc, 0x00, 0xe9, 0xe8, 0x1b, + 0x75, 0x7e, 0xee, 0x19, 0xa0, 0x89, 0x1a, 0x64, 0x20, 0xe5, 0x27, 0xdf, 0x98, 0xfe, 0x8e, 0x67, + 0x20, 0x0d, 0xf2, 0x8e, 0x5e, 0x86, 0xe2, 0x94, 0x6d, 0x6c, 0xe2, 0xf5, 0xd5, 0x08, 0xaf, 0x6c, + 0xd5, 0x36, 0x36, 0x35, 0x84, 0x92, 0x9f, 0xc8, 0xc1, 0xc0, 0x1c, 0xd5, 0x0d, 0x36, 0x42, 0x86, + 0x7a, 0x79, 0x9d, 0x7c, 0xee, 0x70, 0xbc, 0x4e, 0x4e, 0xaf, 0xf3, 0xca, 0x64, 0x45, 0x11, 0xf5, + 0x93, 0xdb, 0x30, 0x38, 0xad, 0x7b, 0xb4, 0x69, 0x3b, 0x9b, 0xe8, 0x47, 0x33, 0x16, 0xba, 0xef, + 0x47, 0xf4, 0xc7, 0x27, 0xe2, 0x37, 0x63, 0x0d, 0xf1, 0x4b, 0x0b, 0x0a, 0x33, 0xb1, 0xac, 0xe8, + 0x4e, 0x93, 0x7a, 0x22, 0xdb, 0x36, 0x8a, 0xc5, 0x43, 0x88, 0x26, 0x30, 0xe1, 0xb1, 0xf2, 0x48, + 0xfa, 0xb1, 0x32, 0x5a, 0x8f, 0xe8, 0x6b, 0x87, 0x79, 0x3f, 0x47, 0x71, 0xd1, 0xe7, 0xd6, 0x23, + 0x42, 0x31, 0xed, 0xa7, 0x26, 0x91, 0xa8, 0xdf, 0xed, 0x87, 0xd4, 0x87, 0xda, 0x27, 0x4a, 0x7e, + 0xa2, 0xe4, 0xa1, 0x92, 0x57, 0x12, 0x4a, 0x7e, 0x29, 0xf9, 0xf4, 0xff, 0x23, 0xaa, 0xe1, 0x3f, + 0x5b, 0x4c, 0x04, 0x0e, 0x79, 0xb2, 0x77, 0x97, 0xa1, 0xf4, 0xfa, 0x77, 0x94, 0x5e, 0x30, 0x20, + 0x4a, 0x3b, 0x0e, 0x88, 0x81, 0xdd, 0x0e, 0x88, 0xc1, 0xcc, 0x01, 0x11, 0x2a, 0xc8, 0x50, 0xa6, + 0x82, 0x54, 0xc5, 0xa0, 0x81, 0xde, 0xf9, 0x4b, 0x2e, 0x6f, 0x6f, 0x4d, 0x8c, 0xb1, 0xd1, 0x94, + 0x9a, 0xb8, 0x04, 0x59, 0xa8, 0xbf, 0x57, 0xec, 0x11, 0xed, 0xe7, 0x48, 0x74, 0xe4, 0x65, 0x28, + 0x94, 0x3b, 0x1d, 0xa1, 0x1f, 0x67, 0xa4, 0x40, 0x43, 0x19, 0xa5, 0x18, 0x35, 0x79, 0x03, 0x0a, + 0xe5, 0x07, 0xb5, 0x78, 0xce, 0x92, 0xf2, 0x83, 0x9a, 0xf8, 0x92, 0xcc, 0xb2, 0x0f, 0x6a, 0xe4, + 0xad, 0x30, 0x78, 0xe8, 0x7a, 0xd7, 0x7a, 0x28, 0x36, 0x8a, 0xc2, 0xdd, 0xd6, 0x77, 0xc7, 0x69, + 0x30, 0x14, 0xdb, 0x2e, 0xc6, 0x68, 0x63, 0xda, 0x54, 0xda, 0xbd, 0x36, 0x0d, 0xec, 0xa8, 0x4d, + 0x83, 0xbb, 0xd5, 0xa6, 0xa1, 0x5d, 0x68, 0x13, 0xec, 0xa8, 0x4d, 0xc3, 0x07, 0xd7, 0xa6, 0x0e, + 0x5c, 0x4a, 0x46, 0x68, 0x0b, 0x34, 0x42, 0x03, 0x92, 0xc4, 0x0a, 0xc7, 0x12, 0xbc, 0xfa, 0xef, + 0x72, 0x6c, 0x7d, 0x03, 0xd1, 0x75, 0x97, 0xe1, 0x65, 0xff, 0xb4, 0x64, 0x69, 0xf5, 0x57, 0xf2, + 0xd9, 0x81, 0xe5, 0x8e, 0xe7, 0x14, 0xf7, 0x83, 0xa9, 0x52, 0x2a, 0x46, 0x1f, 0xfa, 0x67, 0x4b, + 0x39, 0xc6, 0x36, 0x4d, 0x66, 0xdf, 0xcc, 0x67, 0x45, 0xbb, 0x3b, 0x90, 0xc4, 0x3e, 0x9e, 0xf4, + 0x68, 0x43, 0x3f, 0x7d, 0x37, 0xea, 0xca, 0x36, 0x0b, 0x23, 0xb2, 0x10, 0x85, 0x94, 0x76, 0x23, + 0xe0, 0x48, 0x39, 0xf2, 0x56, 0x90, 0x5a, 0x46, 0xf2, 0x8f, 0x41, 0x77, 0x35, 0x7f, 0xcc, 0xc6, + 0xdc, 0x63, 0x64, 0x72, 0xf2, 0x02, 0x94, 0x66, 0x31, 0x56, 0xbb, 0x3c, 0xd8, 0x79, 0xf4, 0x76, + 0xd9, 0x6b, 0x85, 0xd3, 0xa8, 0xff, 0x20, 0x07, 0x67, 0xee, 0x76, 0x57, 0xa9, 0xf0, 0x96, 0x0b, + 0xda, 0xf0, 0x3e, 0x00, 0x03, 0x0b, 0x87, 0x99, 0x1c, 0x3a, 0xcc, 0x7c, 0x52, 0x8e, 0x8a, 0x17, + 0x2b, 0x30, 0x19, 0x52, 0x73, 0x67, 0x99, 0xa7, 0x7d, 0xc7, 0xd1, 0x87, 0xdd, 0x55, 0x5a, 0x4f, + 0x78, 0xcd, 0x48, 0xdc, 0x2f, 0xbd, 0xcd, 0x5d, 0xf2, 0xf7, 0xeb, 0xa0, 0xf2, 0xcb, 0xf9, 0xcc, + 0x40, 0x84, 0xc7, 0x36, 0xbf, 0xe7, 0x17, 0x52, 0x7b, 0x25, 0x9e, 0xe7, 0x33, 0x85, 0x24, 0xc6, + 0x31, 0x8d, 0x4b, 0xba, 0xc0, 0x8e, 0x79, 0xd6, 0xd9, 0x0f, 0x55, 0x60, 0x7f, 0x98, 0xcb, 0x0c, + 0x18, 0x79, 0x5c, 0x05, 0xa6, 0xfe, 0xaf, 0x05, 0x3f, 0x4e, 0xe5, 0x81, 0x3e, 0xe1, 0x05, 0x18, + 0x12, 0xcf, 0xf5, 0xa3, 0xce, 0xbe, 0xe2, 0xd8, 0x10, 0x8f, 0xa1, 0x03, 0x02, 0x66, 0x52, 0x48, + 0x9e, 0xc8, 0x92, 0xb3, 0xaf, 0xe4, 0x85, 0xac, 0x49, 0x24, 0xcc, 0x68, 0x98, 0x79, 0x6c, 0x7a, + 0x68, 0x81, 0xb0, 0xbe, 0x2c, 0x70, 0xa3, 0x81, 0x3e, 0x36, 0x3d, 0x6e, 0x7f, 0x04, 0x68, 0x66, + 0x10, 0xd4, 0xc2, 0x9c, 0xfa, 0xc2, 0x20, 0xe0, 0xa6, 0x8a, 0x26, 0x30, 0xac, 0xb5, 0xc2, 0x83, + 0x56, 0xb8, 0xb4, 0x88, 0xd6, 0x0a, 0x9f, 0x5b, 0x6c, 0x6d, 0x40, 0xc0, 0x38, 0x6a, 0xb4, 0x19, + 0x3a, 0xf1, 0x21, 0x47, 0x07, 0x21, 0x9a, 0xc0, 0x90, 0x9b, 0x30, 0x56, 0xf3, 0x74, 0xcb, 0xd0, + 0x1d, 0x63, 0xa9, 0xeb, 0x75, 0xba, 0x9e, 0x6c, 0x00, 0xbb, 0x9e, 0x61, 0x77, 0x3d, 0x2d, 0x46, + 0x41, 0x3e, 0x05, 0xa3, 0x3e, 0x64, 0xc6, 0x71, 0x6c, 0x47, 0xb6, 0x72, 0x5c, 0xcf, 0xa0, 0x8e, + 0xa3, 0x45, 0x09, 0xc8, 0xa7, 0x61, 0xb4, 0x6a, 0x3d, 0xb2, 0x1b, 0xfc, 0xc9, 0xba, 0x36, 0x2f, + 0x6c, 0x1e, 0x7c, 0xf6, 0x65, 0x06, 0x88, 0x7a, 0xd7, 0x69, 0x69, 0x51, 0x42, 0x75, 0x3b, 0x9f, + 0x0c, 0xe7, 0xf9, 0xe4, 0x6e, 0x90, 0xae, 0x47, 0x1d, 0xf7, 0xd0, 0x5b, 0x15, 0x8d, 0x4f, 0xd9, + 0x6f, 0x98, 0xdb, 0xa0, 0x37, 0x61, 0xf0, 0x2e, 0xdd, 0xe4, 0x3e, 0xa6, 0xa5, 0xd0, 0x2d, 0xf9, + 0xa1, 0x80, 0xc9, 0xa7, 0xbb, 0x3e, 0x9d, 0xfa, 0xed, 0x7c, 0x32, 0x50, 0xe9, 0x93, 0x2b, 0xec, + 0x4f, 0xc1, 0x00, 0x8a, 0xb2, 0xea, 0x5f, 0x2f, 0xa0, 0x00, 0x51, 0xdc, 0x51, 0x6f, 0x67, 0x9f, + 0x4c, 0xfd, 0xf9, 0x52, 0x3c, 0x7a, 0xed, 0x93, 0x2b, 0xbd, 0x37, 0x61, 0x78, 0xda, 0xb6, 0x5c, + 0xd3, 0xf5, 0xa8, 0xd5, 0xf0, 0x15, 0xf6, 0x22, 0x33, 0xa8, 0x1a, 0x21, 0x58, 0xb6, 0x01, 0x25, + 0xea, 0xfd, 0x28, 0x2f, 0x79, 0x15, 0x86, 0x50, 0xe4, 0x68, 0x73, 0xf2, 0x09, 0x0f, 0x6f, 0x26, + 0x56, 0x19, 0x30, 0x6e, 0x71, 0x86, 0xa4, 0xe4, 0x1e, 0x0c, 0x4e, 0xaf, 0x9b, 0x2d, 0xc3, 0xa1, + 0x16, 0xfa, 0x26, 0x4b, 0x41, 0x42, 0xa2, 0x7d, 0x39, 0x89, 0xff, 0x22, 0x2d, 0x6f, 0x4e, 0x43, + 0x14, 0x8b, 0xbc, 0xf8, 0x12, 0xb0, 0x4b, 0x3f, 0x93, 0x07, 0x08, 0x0b, 0x90, 0x67, 0x20, 0x1f, + 0x64, 0x97, 0x46, 0x97, 0x98, 0x88, 0x06, 0xe5, 0x71, 0xa9, 0x10, 0x63, 0x3b, 0xbf, 0xe3, 0xd8, + 0xbe, 0x07, 0x25, 0x7e, 0xba, 0x86, 0x5e, 0xeb, 0x52, 0x40, 0xcd, 0xcc, 0x06, 0x4f, 0x22, 0x3d, + 0xb7, 0xa5, 0xd1, 0xf2, 0x8c, 0x78, 0x80, 0x73, 0x66, 0x97, 0x1a, 0xd0, 0x8f, 0x7f, 0x91, 0xab, + 0x50, 0x5c, 0xf1, 0x93, 0xc7, 0x8e, 0xf2, 0x59, 0x3a, 0x26, 0x3f, 0xc4, 0xb3, 0x6e, 0x9a, 0xb6, + 0x2d, 0x8f, 0x55, 0x8d, 0xad, 0x1e, 0x11, 0x72, 0x11, 0xb0, 0x88, 0x5c, 0x04, 0x4c, 0xfd, 0xaf, + 0xf3, 0x29, 0x71, 0x95, 0x9f, 0xdc, 0x61, 0xf2, 0x3a, 0x00, 0x3e, 0x1f, 0x67, 0xf2, 0xf4, 0x9f, + 0x83, 0xe0, 0x28, 0x41, 0x46, 0xa8, 0xb6, 0x91, 0x6d, 0x47, 0x48, 0xac, 0xfe, 0xa3, 0x5c, 0x22, + 0x18, 0xef, 0x81, 0xe4, 0x28, 0x5b, 0x65, 0xf9, 0x7d, 0x9a, 0xb1, 0x7e, 0x5f, 0x14, 0xf6, 0xd6, + 0x17, 0xd1, 0x6f, 0x39, 0x04, 0xcb, 0xf4, 0x28, 0xbf, 0xe5, 0xbb, 0xf9, 0xb4, 0xd0, 0xc4, 0xc7, + 0x53, 0xc5, 0x6f, 0x05, 0x46, 0x69, 0x31, 0x16, 0x0c, 0x1e, 0xa1, 0xf1, 0x04, 0xd7, 0xc2, 0x4c, + 0xfd, 0x12, 0x9c, 0x8a, 0x05, 0xec, 0x15, 0xb9, 0x86, 0xaf, 0xf6, 0x8e, 0xfc, 0x9b, 0x1d, 0x78, + 0x20, 0x42, 0xa6, 0xfe, 0x7f, 0xb9, 0xde, 0xe1, 0x9a, 0x8f, 0x5c, 0x75, 0x52, 0x04, 0x50, 0xf8, + 0xd3, 0x11, 0xc0, 0x21, 0x6c, 0x83, 0x8f, 0xb7, 0x00, 0x3e, 0x22, 0x93, 0xc7, 0x87, 0x2d, 0x80, + 0x9f, 0xcf, 0xed, 0x18, 0x6d, 0xfb, 0xa8, 0x65, 0xa0, 0xfe, 0x4f, 0xb9, 0xd4, 0xa8, 0xd8, 0x07, + 0x6a, 0xd7, 0x5b, 0x50, 0xe2, 0x2e, 0x3c, 0xa2, 0x55, 0x52, 0x1e, 0x31, 0x06, 0xcd, 0xca, 0xbc, + 0xcf, 0xb1, 0x64, 0x1e, 0x06, 0x78, 0x1b, 0x0c, 0xd1, 0x1b, 0x1f, 0xeb, 0x11, 0x9a, 0xdb, 0xc8, + 0x9a, 0x1c, 0x05, 0x5a, 0xfd, 0x87, 0xb9, 0x44, 0x90, 0xee, 0x23, 0xfc, 0xb6, 0x70, 0xaa, 0x2e, + 0xec, 0x7e, 0xaa, 0x56, 0xff, 0x79, 0x3e, 0x3d, 0x46, 0xf8, 0x11, 0x7e, 0xc8, 0x61, 0x1c, 0xa7, + 0xed, 0x6f, 0xdd, 0x5a, 0x81, 0xb1, 0xa8, 0x2c, 0xc4, 0xb2, 0x75, 0x25, 0x3d, 0x52, 0x7a, 0x46, + 0x2b, 0x62, 0x3c, 0xd4, 0xef, 0xe4, 0x92, 0xe1, 0xcd, 0x8f, 0x7c, 0x7e, 0xda, 0x9f, 0xb6, 0x44, + 0x3f, 0xe5, 0x23, 0xb2, 0xd6, 0x1c, 0xc6, 0xa7, 0x7c, 0x44, 0x56, 0x8d, 0xfd, 0x7d, 0xca, 0x2f, + 0xe6, 0xb3, 0xa2, 0xc3, 0x1f, 0xf9, 0x07, 0x7d, 0x5e, 0x16, 0x32, 0x6f, 0x99, 0xf8, 0xb4, 0x67, + 0xb2, 0xc2, 0xb1, 0x67, 0xf0, 0x4c, 0xf0, 0xd9, 0xdf, 0x18, 0x4f, 0x15, 0xd6, 0x47, 0x44, 0x91, + 0x8f, 0x87, 0xb0, 0x3e, 0x22, 0x43, 0xe5, 0xa3, 0x27, 0xac, 0xdf, 0xcc, 0xef, 0x36, 0x25, 0xc1, + 0x89, 0xf0, 0x12, 0xc2, 0xfb, 0x5a, 0x3e, 0x99, 0x2a, 0xe3, 0xc8, 0xc5, 0x34, 0x0b, 0x25, 0x91, + 0xb4, 0x23, 0x53, 0x38, 0x1c, 0x9f, 0x65, 0xd1, 0x88, 0xef, 0xb8, 0x05, 0xe2, 0x22, 0x67, 0x77, + 0x22, 0xe1, 0xb4, 0xea, 0xf7, 0x72, 0xb1, 0xbc, 0x12, 0x47, 0x72, 0x84, 0xb0, 0xaf, 0x25, 0x89, + 0xbc, 0xed, 0x1f, 0x66, 0x16, 0x63, 0x71, 0xbd, 0x83, 0xef, 0xa9, 0x50, 0x4f, 0x37, 0x5b, 0xf1, + 0xf2, 0x22, 0xfe, 0xc0, 0xb7, 0xf3, 0x70, 0x3a, 0x41, 0x4a, 0xae, 0x46, 0xc2, 0xf6, 0xe0, 0xb1, + 0x64, 0xcc, 0x51, 0x9d, 0x07, 0xf0, 0xd9, 0xc3, 0x49, 0xea, 0x55, 0x28, 0x56, 0xf4, 0x4d, 0xfe, + 0x6d, 0xfd, 0x9c, 0xa5, 0xa1, 0x6f, 0xca, 0x27, 0x6e, 0x88, 0x27, 0xab, 0x70, 0x8e, 0xdf, 0x87, + 0x98, 0xb6, 0xb5, 0x62, 0xb6, 0x69, 0xd5, 0x5a, 0x30, 0x5b, 0x2d, 0xd3, 0x15, 0x97, 0x7a, 0x2f, + 0x6c, 0x6f, 0x4d, 0x5c, 0xf3, 0x6c, 0x4f, 0x6f, 0xd5, 0xa9, 0x4f, 0x56, 0xf7, 0xcc, 0x36, 0xad, + 0x9b, 0x56, 0xbd, 0x8d, 0x94, 0x12, 0xcb, 0x74, 0x56, 0xa4, 0xca, 0x43, 0xb8, 0xd7, 0x1a, 0xba, + 0x65, 0x51, 0xa3, 0x6a, 0x4d, 0x6d, 0x7a, 0x94, 0x5f, 0x06, 0x16, 0xf8, 0x91, 0x20, 0x7f, 0x87, + 0xce, 0xd1, 0x8c, 0xf1, 0x2a, 0x23, 0xd0, 0x52, 0x0a, 0xa9, 0xbf, 0x55, 0x4c, 0x49, 0x29, 0x72, + 0x8c, 0xd4, 0xc7, 0xef, 0xe9, 0xe2, 0x0e, 0x3d, 0x7d, 0x03, 0x06, 0x44, 0x8c, 0x5c, 0x71, 0xc1, + 0x80, 0x8e, 0xf3, 0x8f, 0x38, 0x48, 0xbe, 0xa1, 0x11, 0x54, 0xa4, 0x05, 0x97, 0x56, 0x58, 0x37, + 0xa5, 0x77, 0x66, 0x69, 0x1f, 0x9d, 0xd9, 0x83, 0x1f, 0x79, 0x0f, 0x2e, 0x20, 0x36, 0xa5, 0x5b, + 0x07, 0xb0, 0x2a, 0x8c, 0x87, 0xc5, 0xab, 0x4a, 0xef, 0xdc, 0xac, 0xf2, 0xe4, 0xf3, 0x30, 0x12, + 0x0c, 0x10, 0x93, 0xba, 0xe2, 0xe6, 0xa2, 0xc7, 0x38, 0xe3, 0xc1, 0xe6, 0x18, 0x18, 0xdd, 0xd5, + 0xa2, 0x01, 0xcb, 0x22, 0xbc, 0xd4, 0xff, 0x31, 0xd7, 0x2b, 0xb5, 0xc9, 0x91, 0xcf, 0xca, 0x6f, + 0xc3, 0x80, 0xc1, 0x3f, 0x4a, 0xe8, 0x54, 0xef, 0xe4, 0x27, 0x9c, 0x54, 0xf3, 0xcb, 0xa8, 0xff, + 0x2c, 0xd7, 0x33, 0xa3, 0xca, 0x71, 0xff, 0xbc, 0xaf, 0x15, 0x32, 0x3e, 0x4f, 0x4c, 0xa2, 0xd7, + 0x61, 0xdc, 0x0c, 0x43, 0xbe, 0xd7, 0xc3, 0x50, 0x57, 0xda, 0x29, 0x09, 0x8e, 0xa3, 0xeb, 0x16, + 0x04, 0x0e, 0x5b, 0x8e, 0xef, 0x8d, 0xe6, 0xd6, 0xbb, 0x8e, 0xc9, 0xc7, 0xa5, 0x76, 0xd6, 0x8d, + 0xb9, 0xaa, 0xb9, 0xf7, 0x1c, 0x93, 0x55, 0xa0, 0x7b, 0xeb, 0xd4, 0xd2, 0xeb, 0x1b, 0xb6, 0xf3, + 0x10, 0x23, 0x9a, 0xf2, 0xc1, 0xa9, 0x9d, 0xe2, 0xf0, 0x07, 0x3e, 0x98, 0x3c, 0x07, 0xa3, 0xcd, + 0x56, 0x97, 0x06, 0x31, 0x24, 0xf9, 0x5d, 0x9f, 0x36, 0xc2, 0x80, 0xc1, 0x0d, 0xc9, 0xd3, 0x00, + 0x48, 0xe4, 0x61, 0xbe, 0x1b, 0xbc, 0xd8, 0xd3, 0x86, 0x18, 0x64, 0x45, 0x74, 0xd7, 0x25, 0xae, + 0xd5, 0x5c, 0x48, 0xf5, 0x96, 0x6d, 0x35, 0xeb, 0x1e, 0x75, 0xda, 0xd8, 0x50, 0x74, 0x66, 0xd0, + 0xce, 0x23, 0x05, 0x5e, 0x9d, 0xb8, 0xf3, 0xb6, 0xd5, 0x5c, 0xa1, 0x4e, 0x9b, 0x35, 0xf5, 0x05, + 0x20, 0xa2, 0xa9, 0x0e, 0x1e, 0x7a, 0xf0, 0x8f, 0x43, 0x6f, 0x06, 0x4d, 0x7c, 0x04, 0x3f, 0x0d, + 0xc1, 0x0f, 0x9b, 0x80, 0x61, 0x1e, 0x48, 0x8f, 0x0b, 0x0d, 0x5d, 0x18, 0x34, 0xe0, 0x20, 0x94, + 0xd7, 0x79, 0x10, 0xde, 0x15, 0xdc, 0x83, 0x5c, 0x13, 0xbf, 0xd4, 0xaf, 0x14, 0xd2, 0x92, 0xc0, + 0x1c, 0x48, 0xd1, 0xc2, 0x69, 0x35, 0xbf, 0xa7, 0x69, 0xf5, 0x94, 0xd5, 0x6d, 0xd7, 0xf5, 0x4e, + 0xa7, 0xbe, 0x66, 0xb6, 0xf0, 0x09, 0x17, 0x2e, 0x7c, 0xda, 0xa8, 0xd5, 0x6d, 0x97, 0x3b, 0x9d, + 0x59, 0x0e, 0x24, 0xcf, 0xc3, 0x69, 0x46, 0x87, 0x9d, 0x14, 0x50, 0x16, 0x91, 0x92, 0x31, 0xc0, + 0x48, 0xb4, 0x3e, 0xed, 0x45, 0x18, 0x14, 0x3c, 0xf9, 0x5a, 0xd5, 0xaf, 0x0d, 0x70, 0x66, 0x2e, + 0xeb, 0xb9, 0x80, 0x0d, 0x9f, 0x5c, 0xfb, 0xb5, 0x21, 0xbf, 0x3c, 0xc6, 0x5b, 0xb6, 0xba, 0x6d, + 0x1e, 0x7d, 0x6b, 0x00, 0x91, 0xc1, 0x6f, 0x72, 0x15, 0xc6, 0x18, 0x97, 0x40, 0x60, 0x3c, 0x44, + 0x6d, 0xbf, 0x16, 0x83, 0x92, 0x9b, 0x70, 0x36, 0x02, 0xe1, 0x36, 0x28, 0x7f, 0x92, 0xd0, 0xaf, + 0xa5, 0xe2, 0xd4, 0x6f, 0x15, 0xa2, 0xa9, 0x69, 0x8e, 0xa0, 0x23, 0x2e, 0xc0, 0x80, 0xed, 0x34, + 0xeb, 0x5d, 0xa7, 0x25, 0xc6, 0x5e, 0xc9, 0x76, 0x9a, 0xf7, 0x9c, 0x16, 0x39, 0x07, 0x25, 0xd6, + 0x3b, 0xa6, 0x21, 0x86, 0x58, 0xbf, 0xde, 0xe9, 0x54, 0x0d, 0x52, 0xe6, 0x1d, 0x82, 0xe1, 0x4d, + 0xeb, 0x0d, 0xdc, 0xda, 0x73, 0xa7, 0x84, 0x7e, 0xbe, 0xe2, 0x25, 0x90, 0xd8, 0x4f, 0x18, 0xf4, + 0x94, 0x1f, 0x04, 0xc4, 0x58, 0x18, 0xb8, 0x2d, 0x31, 0x78, 0x9f, 0xc4, 0x59, 0x08, 0x64, 0xc8, + 0x82, 0x6f, 0x62, 0x0c, 0x52, 0x01, 0x12, 0x52, 0xb5, 0x6d, 0xc3, 0x5c, 0x33, 0x29, 0x7f, 0x41, + 0xd2, 0xcf, 0x2f, 0x7e, 0x93, 0x58, 0x6d, 0xdc, 0x67, 0xb2, 0x20, 0x20, 0xe4, 0x4d, 0xae, 0x84, + 0x9c, 0x0e, 0xd7, 0x3e, 0xde, 0xb7, 0xdc, 0x4e, 0x8b, 0xa1, 0x50, 0x33, 0xb1, 0x3c, 0x2e, 0x84, + 0xea, 0xdf, 0x28, 0x26, 0xf3, 0x13, 0x1d, 0x89, 0x5d, 0x33, 0x07, 0x20, 0xd2, 0x8f, 0x85, 0x97, + 0x6b, 0x81, 0x77, 0x7b, 0x88, 0xc9, 0xe0, 0x21, 0x95, 0x25, 0xd7, 0x61, 0x90, 0x7f, 0x51, 0xb5, + 0x22, 0xec, 0x1d, 0x74, 0x11, 0x73, 0x3b, 0xe6, 0xda, 0x1a, 0xfa, 0x93, 0x05, 0x68, 0x72, 0x15, + 0x06, 0x2a, 0x8b, 0xb5, 0x5a, 0x79, 0xd1, 0xbf, 0x29, 0xc6, 0xb7, 0x2c, 0x86, 0xe5, 0xd6, 0x5d, + 0xdd, 0x72, 0x35, 0x1f, 0x49, 0x9e, 0x83, 0x52, 0x75, 0x19, 0xc9, 0xf8, 0x0b, 0xcd, 0xe1, 0xed, + 0xad, 0x89, 0x01, 0xb3, 0xc3, 0xa9, 0x04, 0x0a, 0xeb, 0xbd, 0x5f, 0xad, 0x48, 0xee, 0x12, 0xbc, + 0xde, 0x47, 0xa6, 0x81, 0xd7, 0xce, 0x5a, 0x80, 0x26, 0xaf, 0xc0, 0x48, 0x8d, 0x3a, 0xa6, 0xde, + 0x5a, 0xec, 0xe2, 0x56, 0x51, 0x0a, 0xdb, 0xe8, 0x22, 0xbc, 0x6e, 0x21, 0x42, 0x8b, 0x90, 0x91, + 0xcb, 0x50, 0x9c, 0x33, 0x2d, 0xff, 0xb9, 0x04, 0xfa, 0xd3, 0xaf, 0x9b, 0x96, 0xa7, 0x21, 0x94, + 0x3c, 0x07, 0x85, 0x3b, 0x2b, 0x55, 0xe1, 0x09, 0x86, 0xbc, 0xde, 0xf7, 0x22, 0x21, 0x20, 0xef, + 0xac, 0x54, 0xc9, 0x2b, 0x30, 0xc4, 0x16, 0x31, 0x6a, 0x35, 0xa8, 0xab, 0x0c, 0xe3, 0xc7, 0xf0, + 0x90, 0x85, 0x3e, 0x50, 0xf6, 0xe9, 0x08, 0x28, 0xd5, 0xff, 0x23, 0x9f, 0x9e, 0x40, 0xea, 0x08, + 0x86, 0xfa, 0x3e, 0x6f, 0x91, 0x63, 0x0a, 0x56, 0x3c, 0x80, 0x82, 0xad, 0xc1, 0xa9, 0xb2, 0xd1, + 0x36, 0xad, 0x32, 0xfe, 0x74, 0x17, 0x66, 0xcb, 0x38, 0x75, 0x48, 0x4f, 0x01, 0x63, 0x68, 0xf1, + 0x3d, 0x3c, 0xb8, 0x30, 0x43, 0xd5, 0x75, 0x8e, 0xab, 0xb7, 0xd7, 0xf4, 0x7a, 0x83, 0xe7, 0x5e, + 0xd2, 0xe2, 0x4c, 0xd5, 0x9f, 0xce, 0xef, 0x90, 0xf3, 0xea, 0x49, 0x94, 0xbe, 0xfa, 0xf5, 0x7c, + 0xef, 0xb4, 0x63, 0x4f, 0xa4, 0x50, 0xfe, 0x38, 0x9f, 0x92, 0x04, 0xec, 0x40, 0x92, 0xb8, 0x0e, + 0x83, 0x9c, 0x4d, 0xe0, 0xc6, 0x8b, 0xb3, 0x19, 0x57, 0x56, 0x9c, 0x45, 0x7d, 0x34, 0x59, 0x84, + 0xb3, 0xe5, 0xb5, 0x35, 0xda, 0xf0, 0xc2, 0x30, 0xd3, 0x8b, 0x61, 0xc0, 0x57, 0x1e, 0x56, 0x57, + 0xe0, 0xc3, 0x30, 0xd5, 0x18, 0xd8, 0x24, 0xb5, 0x1c, 0x59, 0x81, 0xf3, 0x71, 0x78, 0x8d, 0x6f, + 0x01, 0x8a, 0x52, 0xa4, 0xdd, 0x04, 0x47, 0xfe, 0x9f, 0x96, 0x51, 0x36, 0xad, 0x95, 0x38, 0x55, + 0xf7, 0xf7, 0x6a, 0x25, 0xce, 0xdb, 0xa9, 0xe5, 0xd4, 0x6f, 0x17, 0xe4, 0x5c, 0x69, 0x4f, 0xae, + 0xc3, 0xd5, 0xad, 0x88, 0x9b, 0xf5, 0x6e, 0x87, 0xcc, 0x2b, 0x22, 0x5a, 0x89, 0xd1, 0x75, 0x7c, + 0x8f, 0xc4, 0x20, 0x5a, 0x02, 0x02, 0xe5, 0x75, 0x28, 0xa0, 0x24, 0x55, 0x28, 0x96, 0x9d, 0x26, + 0x37, 0x6f, 0x77, 0x7a, 0xc0, 0xa5, 0x3b, 0x4d, 0x37, 0xfd, 0x01, 0x17, 0x63, 0xa1, 0xfe, 0xf9, + 0x7c, 0x8f, 0xf4, 0x66, 0x4f, 0xe4, 0x24, 0xf2, 0x97, 0xf2, 0x59, 0x89, 0xca, 0x8e, 0xab, 0xeb, + 0xd8, 0x87, 0x2c, 0x9c, 0xe3, 0xed, 0x57, 0x77, 0x88, 0xc2, 0xf9, 0x83, 0x7c, 0x56, 0xd6, 0xb5, + 0x13, 0xe1, 0xec, 0x6f, 0x82, 0x4c, 0x15, 0xe9, 0x13, 0x6c, 0x73, 0xcb, 0xaa, 0xd0, 0xbf, 0x4f, + 0xf7, 0xa9, 0x34, 0x91, 0x9e, 0x0c, 0xe1, 0x03, 0x69, 0xe9, 0x1f, 0xe6, 0x33, 0xb3, 0x0b, 0x9e, + 0xc8, 0xf4, 0x30, 0x65, 0x7a, 0x32, 0xf4, 0x0f, 0x34, 0xf4, 0x53, 0x65, 0x7a, 0x32, 0xf6, 0x0f, + 0xa4, 0xa7, 0xbf, 0x9f, 0x4f, 0xcf, 0x9f, 0x79, 0x04, 0x4a, 0x7a, 0x18, 0x1e, 0x8e, 0x7e, 0x37, + 0x14, 0x0f, 0xd4, 0x0d, 0xfd, 0x07, 0xb0, 0xa2, 0x92, 0x02, 0x3d, 0xb2, 0x51, 0xff, 0xfd, 0x2a, + 0xd0, 0x43, 0x18, 0xf2, 0x4f, 0xb2, 0x40, 0x7f, 0xb2, 0x90, 0xcc, 0x19, 0xfb, 0xa4, 0xae, 0x49, + 0xce, 0x3e, 0xd7, 0x24, 0xbf, 0x1c, 0x79, 0x07, 0x4e, 0x85, 0xb2, 0x94, 0xa3, 0x8c, 0xe1, 0xf5, + 0x51, 0x83, 0xa1, 0xea, 0xef, 0x33, 0x9c, 0x08, 0x87, 0x13, 0xa7, 0x56, 0xbf, 0x57, 0x48, 0x26, + 0xde, 0x3d, 0xe9, 0x8d, 0x7d, 0xf6, 0xc6, 0x3d, 0x38, 0x3f, 0xdd, 0x75, 0x1c, 0x6a, 0x79, 0xe9, + 0x9d, 0x82, 0x87, 0xf7, 0x0d, 0x4e, 0x51, 0x4f, 0x76, 0x4e, 0x46, 0x61, 0xc6, 0x56, 0xbc, 0x6e, + 0x88, 0xb3, 0x1d, 0x08, 0xd9, 0x76, 0x39, 0x45, 0x1a, 0xdb, 0xf4, 0xc2, 0xea, 0xef, 0xe6, 0x93, + 0xa9, 0x92, 0x4f, 0xba, 0x7e, 0x7f, 0x5d, 0xaf, 0x7e, 0xa5, 0x10, 0x4f, 0x17, 0x7d, 0xb2, 0x40, + 0xec, 0xbf, 0x3b, 0x7c, 0x49, 0xe2, 0xb8, 0x91, 0xbe, 0xc2, 0x87, 0x67, 0x7d, 0x85, 0x8f, 0x57, + 0x7f, 0xb9, 0x18, 0x4f, 0xbd, 0x7d, 0xd2, 0x1d, 0x47, 0xd7, 0x1d, 0x64, 0x09, 0xce, 0x8a, 0xb9, + 0xcd, 0x07, 0x61, 0xba, 0x09, 0x31, 0x7f, 0xf1, 0xac, 0x75, 0x62, 0x5a, 0xec, 0xba, 0xd4, 0xa9, + 0x7b, 0xba, 0xfb, 0xb0, 0x8e, 0xf9, 0x29, 0xb4, 0xd4, 0x82, 0x8c, 0xa1, 0x98, 0xd5, 0xa2, 0x0c, + 0x07, 0x43, 0x86, 0xfe, 0x84, 0x98, 0x60, 0x98, 0x56, 0x50, 0xfd, 0xf5, 0x1c, 0x8c, 0xc7, 0x3f, + 0x87, 0x4c, 0xc2, 0x20, 0xfb, 0x1d, 0x3c, 0xbb, 0x97, 0x72, 0x62, 0x73, 0x8e, 0xfc, 0x4a, 0xde, + 0xa7, 0x21, 0xaf, 0xc2, 0x10, 0x7a, 0x3f, 0x60, 0x81, 0x7c, 0x18, 0xed, 0x20, 0x2c, 0x80, 0x89, + 0x5a, 0x79, 0xb1, 0x90, 0x94, 0xbc, 0x09, 0xc3, 0xd5, 0xd0, 0xcd, 0x4b, 0xdc, 0x79, 0xa1, 0x77, + 0xa9, 0x54, 0x32, 0x24, 0xd0, 0x64, 0x6a, 0xf5, 0x3b, 0xf9, 0x78, 0x8a, 0xf8, 0x13, 0x55, 0xdf, + 0x9f, 0xaa, 0x3f, 0xbf, 0xc0, 0x55, 0xfd, 0xae, 0x69, 0x19, 0xe4, 0x22, 0x9c, 0xbb, 0x57, 0x9b, + 0xd1, 0xea, 0x77, 0xab, 0x8b, 0x95, 0xfa, 0xbd, 0xc5, 0xda, 0xf2, 0xcc, 0x74, 0x75, 0xb6, 0x3a, + 0x53, 0x19, 0xef, 0x23, 0x67, 0xe0, 0x54, 0x88, 0x9a, 0xbb, 0xb7, 0x50, 0x5e, 0x1c, 0xcf, 0x91, + 0xd3, 0x30, 0x1a, 0x02, 0xa7, 0x96, 0x56, 0xc6, 0xf3, 0xcf, 0x7f, 0x02, 0x86, 0xd1, 0xbd, 0x8d, + 0x5f, 0xc7, 0x93, 0x11, 0x18, 0x5c, 0x9a, 0xaa, 0xcd, 0x68, 0xf7, 0x91, 0x09, 0x40, 0xa9, 0x32, + 0xb3, 0xc8, 0x18, 0xe6, 0x9e, 0xff, 0xbf, 0x73, 0x00, 0xb5, 0xd9, 0x95, 0x65, 0x41, 0x38, 0x0c, + 0x03, 0xd5, 0xc5, 0xfb, 0xe5, 0xf9, 0x2a, 0xa3, 0x1b, 0x84, 0xe2, 0xd2, 0xf2, 0x0c, 0xab, 0x61, + 0x08, 0xfa, 0xa7, 0xe7, 0x97, 0x6a, 0x33, 0xe3, 0x79, 0x06, 0xd4, 0x66, 0xca, 0x95, 0xf1, 0x02, + 0x03, 0x3e, 0xd0, 0xaa, 0x2b, 0x33, 0xe3, 0x45, 0xf6, 0xe7, 0x7c, 0x6d, 0xa5, 0xbc, 0x32, 0xde, + 0xcf, 0xfe, 0x9c, 0xc5, 0x3f, 0x4b, 0x8c, 0x59, 0x6d, 0x66, 0x05, 0x7f, 0x0c, 0xb0, 0x26, 0xcc, + 0xfa, 0xbf, 0x06, 0x19, 0x8a, 0xb1, 0xae, 0x54, 0xb5, 0xf1, 0x21, 0xf6, 0x83, 0xb1, 0x64, 0x3f, + 0x80, 0x35, 0x4e, 0x9b, 0x59, 0x58, 0xba, 0x3f, 0x33, 0x3e, 0xcc, 0x78, 0x2d, 0xdc, 0x65, 0xe0, + 0x11, 0xf6, 0xa7, 0xb6, 0xc0, 0xfe, 0x1c, 0x65, 0x9c, 0xb4, 0x99, 0xf2, 0xfc, 0x72, 0x79, 0x65, + 0x6e, 0x7c, 0x8c, 0xb5, 0x07, 0x79, 0x9e, 0xe2, 0x25, 0x17, 0xcb, 0x0b, 0x33, 0xe3, 0xe3, 0x82, + 0xa6, 0x32, 0x5f, 0x5d, 0xbc, 0x3b, 0x7e, 0x1a, 0x1b, 0xf2, 0xde, 0x02, 0xfe, 0x20, 0xac, 0x00, + 0xfe, 0x75, 0xe6, 0xf9, 0x1f, 0x80, 0xd2, 0x52, 0x0d, 0x47, 0xc1, 0x05, 0x38, 0xb3, 0x54, 0xab, + 0xaf, 0xbc, 0xb7, 0x3c, 0x13, 0x93, 0xf7, 0x69, 0x18, 0xf5, 0x11, 0xf3, 0xd5, 0xc5, 0x7b, 0x9f, + 0xe3, 0xd2, 0xf6, 0x41, 0x0b, 0xe5, 0xe9, 0xa5, 0xda, 0x78, 0x9e, 0xf5, 0x8a, 0x0f, 0x7a, 0x50, + 0x5d, 0xac, 0x2c, 0x3d, 0xa8, 0x8d, 0x17, 0x9e, 0x7f, 0x04, 0x23, 0x3c, 0x4f, 0xe7, 0x92, 0x63, + 0x36, 0x4d, 0x8b, 0x3c, 0x0d, 0x17, 0x2b, 0x33, 0xf7, 0xab, 0xd3, 0x33, 0xf5, 0x25, 0xad, 0x7a, + 0xbb, 0xba, 0x18, 0xab, 0xe9, 0x1c, 0x9c, 0x8e, 0xa2, 0xcb, 0xcb, 0xd5, 0xf1, 0x1c, 0x39, 0x0f, + 0x24, 0x0a, 0xbe, 0x53, 0x5e, 0x98, 0x1d, 0xcf, 0x13, 0x05, 0xce, 0x46, 0xe1, 0xd5, 0xc5, 0x95, + 0x7b, 0x8b, 0x33, 0xe3, 0x85, 0xe7, 0xff, 0x7a, 0x0e, 0xce, 0xa5, 0xc6, 0x72, 0x26, 0x2a, 0x5c, + 0x99, 0x99, 0x2f, 0xd7, 0x56, 0xaa, 0xd3, 0xb5, 0x99, 0xb2, 0x36, 0x3d, 0x57, 0x9f, 0x2e, 0xaf, + 0xcc, 0xdc, 0x5e, 0xd2, 0xde, 0xab, 0xdf, 0x9e, 0x59, 0x9c, 0xd1, 0xca, 0xf3, 0xe3, 0x7d, 0xe4, + 0x39, 0x98, 0xc8, 0xa0, 0xa9, 0xcd, 0x4c, 0xdf, 0xd3, 0xaa, 0x2b, 0xef, 0x8d, 0xe7, 0xc8, 0xb3, + 0xf0, 0x74, 0x26, 0x11, 0xfb, 0x3d, 0x9e, 0x27, 0x57, 0xe0, 0x52, 0x16, 0xc9, 0xbb, 0xf3, 0xe3, + 0x85, 0xe7, 0x7f, 0x2e, 0x07, 0x24, 0x19, 0x8c, 0x97, 0x3c, 0x03, 0x97, 0x99, 0x5e, 0xd4, 0xb3, + 0x1b, 0xf8, 0x2c, 0x3c, 0x9d, 0x4a, 0x21, 0x35, 0x6f, 0x02, 0x9e, 0xca, 0x20, 0x11, 0x8d, 0xbb, + 0x0c, 0x4a, 0x3a, 0x01, 0x36, 0xed, 0xd7, 0x72, 0x70, 0x2e, 0xd5, 0x03, 0x86, 0x5c, 0x83, 0x8f, + 0x95, 0x2b, 0x0b, 0xac, 0x6f, 0xa6, 0x57, 0xaa, 0x4b, 0x8b, 0xb5, 0xfa, 0xc2, 0x6c, 0xb9, 0xce, + 0xb4, 0xef, 0x5e, 0x2d, 0xd6, 0x9b, 0x57, 0x41, 0xed, 0x41, 0x39, 0x3d, 0x57, 0x5e, 0xbc, 0xcd, + 0x86, 0x1f, 0xf9, 0x18, 0x3c, 0x93, 0x49, 0x37, 0xb3, 0x58, 0x9e, 0x9a, 0x9f, 0xa9, 0x8c, 0xe7, + 0xc9, 0xc7, 0xe1, 0xd9, 0x4c, 0xaa, 0x4a, 0xb5, 0xc6, 0xc9, 0x0a, 0x53, 0x95, 0xef, 0xfc, 0xcf, + 0x57, 0xfa, 0xbe, 0xf3, 0x47, 0x57, 0x72, 0x7f, 0xf0, 0x47, 0x57, 0x72, 0xff, 0xfc, 0x8f, 0xae, + 0xe4, 0x3e, 0x7f, 0x73, 0x2f, 0x41, 0x96, 0xf9, 0xb4, 0xb5, 0x5a, 0xc2, 0xdb, 0xe8, 0x97, 0xff, + 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x11, 0x0e, 0x6f, 0x15, 0xda, 0x81, 0x01, 0x00, } func (m *Metadata) Marshal() (dAtA []byte, err error) { @@ -26444,6 +26492,18 @@ func (m *IntegrationMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if m.GitHub != nil { + { + size, err := m.GitHub.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } if m.AzureOIDC != nil { { size, err := m.AzureOIDC.MarshalToSizedBuffer(dAtA[:i]) @@ -26560,6 +26620,40 @@ func (m *AzureOIDCIntegrationMetadata) MarshalToSizedBuffer(dAtA []byte) (int, e return len(dAtA) - i, nil } +func (m *GitHubIntegrationMetadata) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GitHubIntegrationMetadata) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GitHubIntegrationMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.Organization) > 0 { + i -= len(m.Organization) + copy(dAtA[i:], m.Organization) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Organization))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *PluginCreate) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -31188,12 +31282,12 @@ func (m *StreamStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n655, err655 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastUploadTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastUploadTime):]) - if err655 != nil { - return 0, err655 + n656, err656 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastUploadTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastUploadTime):]) + if err656 != nil { + return 0, err656 } - i -= n655 - i = encodeVarintEvents(dAtA, i, uint64(n655)) + i -= n656 + i = encodeVarintEvents(dAtA, i, uint64(n656)) i-- dAtA[i] = 0x1a if m.LastEventIndex != 0 { @@ -31352,12 +31446,12 @@ func (m *Identity) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0xc2 } } - n659, err659 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.PreviousIdentityExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.PreviousIdentityExpires):]) - if err659 != nil { - return 0, err659 + n660, err660 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.PreviousIdentityExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.PreviousIdentityExpires):]) + if err660 != nil { + return 0, err660 } - i -= n659 - i = encodeVarintEvents(dAtA, i, uint64(n659)) + i -= n660 + i = encodeVarintEvents(dAtA, i, uint64(n660)) i-- dAtA[i] = 0x1 i-- @@ -31505,12 +31599,12 @@ func (m *Identity) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x4a } - n663, err663 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err663 != nil { - return 0, err663 + n664, err664 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err664 != nil { + return 0, err664 } - i -= n663 - i = encodeVarintEvents(dAtA, i, uint64(n663)) + i -= n664 + i = encodeVarintEvents(dAtA, i, uint64(n664)) i-- dAtA[i] = 0x42 if len(m.KubernetesUsers) > 0 { @@ -41867,6 +41961,10 @@ func (m *IntegrationMetadata) Size() (n int) { l = m.AzureOIDC.Size() n += 1 + l + sovEvents(uint64(l)) } + if m.GitHub != nil { + l = m.GitHub.Size() + n += 1 + l + sovEvents(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -41913,6 +42011,22 @@ func (m *AzureOIDCIntegrationMetadata) Size() (n int) { return n } +func (m *GitHubIntegrationMetadata) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Organization) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *PluginCreate) Size() (n int) { if m == nil { return 0 @@ -77693,6 +77807,42 @@ func (m *IntegrationMetadata) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GitHub", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.GitHub == nil { + m.GitHub = &GitHubIntegrationMetadata{} + } + if err := m.GitHub.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) @@ -77945,6 +78095,89 @@ func (m *AzureOIDCIntegrationMetadata) Unmarshal(dAtA []byte) error { } return nil } +func (m *GitHubIntegrationMetadata) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GitHubIntegrationMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GitHubIntegrationMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Organization", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Organization = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *PluginCreate) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/api/types/integration.go b/api/types/integration.go index 8a70b6f63337d..fb8331da64d92 100644 --- a/api/types/integration.go +++ b/api/types/integration.go @@ -32,6 +32,9 @@ const ( // IntegrationSubKindAzureOIDC is an integration with Azure that uses OpenID Connect as an Identity Provider. IntegrationSubKindAzureOIDC = "azure-oidc" + + // IntegrationSubKindGitHub is an integration with GitHub. + IntegrationSubKindGitHub = "github" ) const ( @@ -61,6 +64,14 @@ type Integration interface { // GetAzureOIDCIntegrationSpec returns the `azure-oidc` spec fields. GetAzureOIDCIntegrationSpec() *AzureOIDCIntegrationSpecV1 + + // GetGitHubIntegrationSpec returns the GitHub spec. + GetGitHubIntegrationSpec() *GitHubIntegrationSpecV1 + // SetGitHubIntegrationSpec returns the GitHub spec. + SetGitHubIntegrationSpec(*GitHubIntegrationSpecV1) + + // WithoutSecrets returns an instance of resource without secrets. + WithoutSecrets() Integration } var _ ResourceWithLabels = (*IntegrationV1)(nil) @@ -107,6 +118,27 @@ func NewIntegrationAzureOIDC(md Metadata, spec *AzureOIDCIntegrationSpecV1) (*In return ig, nil } +// NewIntegrationGitHub returns a new `github` subkind Integration +func NewIntegrationGitHub(md Metadata, spec *GitHubIntegrationSpecV1) (*IntegrationV1, error) { + ig := &IntegrationV1{ + ResourceHeader: ResourceHeader{ + Metadata: md, + Kind: KindIntegration, + Version: V1, + SubKind: IntegrationSubKindGitHub, + }, + Spec: IntegrationSpecV1{ + SubKindSpec: &IntegrationSpecV1_GitHub{ + GitHub: spec, + }, + }, + } + if err := ig.CheckAndSetDefaults(); err != nil { + return nil, trace.Wrap(err) + } + return ig, nil +} + // String returns the integration string representation. func (ig *IntegrationV1) String() string { return fmt.Sprintf("IntegrationV1(Name=%v, SubKind=%s, Labels=%v)", @@ -168,6 +200,11 @@ func (s *IntegrationSpecV1) CheckAndSetDefaults() error { if err != nil { return trace.Wrap(err) } + case *IntegrationSpecV1_GitHub: + if err := integrationSubKind.CheckAndSetDefaults(); err != nil { + return trace.Wrap(err) + } + return nil default: return trace.BadParameter("unknown integration subkind: %T", integrationSubKind) } @@ -230,6 +267,49 @@ func (s *IntegrationSpecV1_AzureOIDC) Validate() error { return nil } +// CheckAndSetDefaults validates the configuration for GitHub integration subkind. +func (s *IntegrationSpecV1_GitHub) CheckAndSetDefaults() error { + if s == nil || s.GitHub == nil { + return trace.BadParameter("github is required for %q subkind", IntegrationSubKindGitHub) + } + if s.GitHub.Organization == "" { + return trace.BadParameter("organization must be set") + } + if s.GitHub.Proxy == nil { + s.GitHub.Proxy = &GitHubProxy{} + } + if err := s.GitHub.Proxy.CheckAndSetDefaults(); err != nil { + return trace.Wrap(err) + } + return nil +} + +// CheckAndSetDefaults validates the configuration for GitHub proxy settings. +func (p *GitHubProxy) CheckAndSetDefaults() error { + for _, ca := range p.CertAuthorities { + if err := ca.CheckAndSetDefaults(); err != nil { + return trace.Wrap(err) + } + } + if p.Connector != nil { + if err := p.Connector.CheckAndSetDefaults(); err != nil { + return trace.Wrap(err) + } + } + return nil +} + +// CheckAndSetDefaults validates the configuration for GitHub Proxy connector. +func (c *GitHubProxyConnector) CheckAndSetDefaults() error { + if c.ClientID == "" { + return trace.BadParameter("client_id must be set") + } + if c.RedirectURL == "" { + return trace.BadParameter("redirect must be set") + } + return nil +} + // GetAWSOIDCIntegrationSpec returns the specific spec fields for `aws-oidc` subkind integrations. func (ig *IntegrationV1) GetAWSOIDCIntegrationSpec() *AWSOIDCIntegrationSpecV1 { return ig.Spec.GetAWSOIDC() @@ -273,6 +353,18 @@ func (ig *IntegrationV1) GetAzureOIDCIntegrationSpec() *AzureOIDCIntegrationSpec return ig.Spec.GetAzureOIDC() } +// GetGitHubIntegrationSpec returns the GitHub spec. +func (ig *IntegrationV1) GetGitHubIntegrationSpec() *GitHubIntegrationSpecV1 { + return ig.Spec.GetGitHub() +} + +// SetGitHubIntegrationSpec returns the GitHub spec. +func (ig *IntegrationV1) SetGitHubIntegrationSpec(spec *GitHubIntegrationSpecV1) { + ig.Spec.SubKindSpec = &IntegrationSpecV1_GitHub{ + GitHub: spec, + } +} + // Integrations is a list of Integration resources. type Integrations []Integration @@ -324,6 +416,7 @@ func (ig *IntegrationV1) UnmarshalJSON(data []byte) error { Spec struct { AWSOIDC json.RawMessage `json:"aws_oidc"` AzureOIDC json.RawMessage `json:"azure_oidc"` + GitHub json.RawMessage `json:"github"` } `json:"spec"` }{} @@ -357,6 +450,17 @@ func (ig *IntegrationV1) UnmarshalJSON(data []byte) error { integration.Spec.SubKindSpec = subkindSpec + case IntegrationSubKindGitHub: + subkindSpec := &IntegrationSpecV1_GitHub{ + GitHub: &GitHubIntegrationSpecV1{}, + } + + if err := json.Unmarshal(d.Spec.GitHub, subkindSpec.GitHub); err != nil { + return trace.Wrap(err) + } + + integration.Spec.SubKindSpec = subkindSpec + default: return trace.BadParameter("invalid subkind %q", integration.ResourceHeader.SubKind) } @@ -379,6 +483,7 @@ func (ig *IntegrationV1) MarshalJSON() ([]byte, error) { Spec struct { AWSOIDC AWSOIDCIntegrationSpecV1 `json:"aws_oidc,omitempty"` AzureOIDC AzureOIDCIntegrationSpecV1 `json:"azure_oidc,omitempty"` + GitHub GitHubIntegrationSpecV1 `json:"github,omitempty"` } `json:"spec"` }{} @@ -397,6 +502,11 @@ func (ig *IntegrationV1) MarshalJSON() ([]byte, error) { } d.Spec.AzureOIDC = *ig.GetAzureOIDCIntegrationSpec() + case IntegrationSubKindGitHub: + if ig.GetGitHubIntegrationSpec() == nil { + return nil, trace.BadParameter("missing subkind data for %q subkind", ig.SubKind) + } + d.Spec.GitHub = *ig.GetGitHubIntegrationSpec() default: return nil, trace.BadParameter("invalid subkind %q", ig.SubKind) } @@ -404,3 +514,31 @@ func (ig *IntegrationV1) MarshalJSON() ([]byte, error) { out, err := json.Marshal(d) return out, trace.Wrap(err) } + +// Copy returns a deep copy of the integration. +func (ig *IntegrationV1) Copy() *IntegrationV1 { + return utils.CloneProtoMsg(ig) +} + +// WithoutSecrets returns an instance of resource without secrets. +func (ig *IntegrationV1) WithoutSecrets() Integration { + switch ig.SubKind { + case IntegrationSubKindGitHub: + spec := ig.GetGitHubIntegrationSpec() + if spec == nil || spec.Proxy == nil { + return ig + } + + clone := ig.Copy() + spec = clone.GetGitHubIntegrationSpec() + for i := range spec.Proxy.CertAuthorities { + spec.Proxy.CertAuthorities[i].PrivateKey = nil + } + if spec.Proxy.Connector != nil { + spec.Proxy.Connector.ClientSecret = "" + } + clone.SetGitHubIntegrationSpec(spec) + return clone + } + return ig +} diff --git a/api/types/integration_test.go b/api/types/integration_test.go index 4cded6391fed7..22cefac9785dd 100644 --- a/api/types/integration_test.go +++ b/api/types/integration_test.go @@ -281,6 +281,91 @@ func TestIntegrationCheckAndSetDefaults(t *testing.T) { }, expectedErrorIs: trace.IsBadParameter, }, + { + name: "github: valid", + integration: func(name string) (*IntegrationV1, error) { + return NewIntegrationGitHub( + Metadata{ + Name: name, + }, + &GitHubIntegrationSpecV1{ + Organization: "my-org", + }, + ) + }, + expectedIntegration: func(name string) *IntegrationV1 { + return &IntegrationV1{ + ResourceHeader: ResourceHeader{ + Kind: KindIntegration, + SubKind: IntegrationSubKindGitHub, + Version: V1, + Metadata: Metadata{ + Name: name, + Namespace: defaults.Namespace, + }, + }, + Spec: IntegrationSpecV1{ + SubKindSpec: &IntegrationSpecV1_GitHub{ + GitHub: &GitHubIntegrationSpecV1{ + Organization: "my-org", + Proxy: &GitHubProxy{}, + }, + }, + }, + } + }, + expectedErrorIs: noErrorFunc, + }, + { + name: "github: error when no org is provided", + integration: func(name string) (*IntegrationV1, error) { + return NewIntegrationGitHub( + Metadata{ + Name: name, + }, + &GitHubIntegrationSpecV1{}, + ) + }, + expectedErrorIs: trace.IsBadParameter, + }, + { + name: "github: error when invalid CA is provided", + integration: func(name string) (*IntegrationV1, error) { + return NewIntegrationGitHub( + Metadata{ + Name: name, + }, + &GitHubIntegrationSpecV1{ + Organization: "my-org", + Proxy: &GitHubProxy{ + CertAuthorities: []*SSHKeyPair{{ + PrivateKey: []byte("missing pub key"), + }}, + }, + }, + ) + }, + expectedErrorIs: trace.IsBadParameter, + }, + { + name: "github: error when invalid connector is provided", + integration: func(name string) (*IntegrationV1, error) { + return NewIntegrationGitHub( + Metadata{ + Name: name, + }, + &GitHubIntegrationSpecV1{ + Organization: "my-org", + Proxy: &GitHubProxy{ + Connector: &GitHubProxyConnector{ + ClientID: "no-redirect-url", + }, + }, + }, + ) + }, + expectedErrorIs: trace.IsBadParameter, + }, } { t.Run(tt.name, func(t *testing.T) { name := uuid.NewString() @@ -295,3 +380,91 @@ func TestIntegrationCheckAndSetDefaults(t *testing.T) { }) } } + +func TestIntegrationWithoutSecrets(t *testing.T) { + for _, tt := range []struct { + name string + integration func(string) (*IntegrationV1, error) + expectedIntegration func(*testing.T, string) *IntegrationV1 + }{ + { + name: "github: no secrets", + integration: func(name string) (*IntegrationV1, error) { + return NewIntegrationGitHub( + Metadata{ + Name: name, + }, + &GitHubIntegrationSpecV1{ + Organization: "my-org", + }, + ) + }, + expectedIntegration: func(t *testing.T, name string) *IntegrationV1 { + t.Helper() + ig, err := NewIntegrationGitHub( + Metadata{ + Name: name, + }, + &GitHubIntegrationSpecV1{ + Organization: "my-org", + }, + ) + require.NoError(t, err) + return ig + }, + }, + { + name: "github: secrets removed", + integration: func(name string) (*IntegrationV1, error) { + return NewIntegrationGitHub( + Metadata{ + Name: name, + }, + &GitHubIntegrationSpecV1{ + Organization: "my-org", + Proxy: &GitHubProxy{ + CertAuthorities: []*SSHKeyPair{{ + PublicKey: []byte("pub"), + PrivateKey: []byte("key"), + }}, + Connector: &GitHubProxyConnector{ + ClientID: "id", + ClientSecret: "secret", + RedirectURL: "redirect", + }, + }, + }, + ) + }, + expectedIntegration: func(t *testing.T, name string) *IntegrationV1 { + t.Helper() + ig, err := NewIntegrationGitHub( + Metadata{ + Name: name, + }, + &GitHubIntegrationSpecV1{ + Organization: "my-org", + Proxy: &GitHubProxy{ + CertAuthorities: []*SSHKeyPair{{ + PublicKey: []byte("pub"), + }}, + Connector: &GitHubProxyConnector{ + ClientID: "id", + RedirectURL: "redirect", + }, + }, + }, + ) + require.NoError(t, err) + return ig + }, + }, + } { + t.Run(tt.name, func(t *testing.T) { + name := uuid.NewString() + ig, err := tt.integration(name) + require.NoError(t, err) + require.Equal(t, tt.expectedIntegration(t, name), ig.WithoutSecrets()) + }) + } +} diff --git a/api/types/types.pb.go b/api/types/types.pb.go index 28a9c3f94e10e..ac20f27e270b3 100644 --- a/api/types/types.pb.go +++ b/api/types/types.pb.go @@ -19567,6 +19567,7 @@ type IntegrationSpecV1 struct { // // *IntegrationSpecV1_AWSOIDC // *IntegrationSpecV1_AzureOIDC + // *IntegrationSpecV1_GitHub SubKindSpec isIntegrationSpecV1_SubKindSpec `protobuf_oneof:"SubKindSpec"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -19618,9 +19619,13 @@ type IntegrationSpecV1_AWSOIDC struct { type IntegrationSpecV1_AzureOIDC struct { AzureOIDC *AzureOIDCIntegrationSpecV1 `protobuf:"bytes,2,opt,name=AzureOIDC,proto3,oneof" json:"azure_oidc,omitempty"` } +type IntegrationSpecV1_GitHub struct { + GitHub *GitHubIntegrationSpecV1 `protobuf:"bytes,3,opt,name=GitHub,proto3,oneof" json:"github,omitempty"` +} func (*IntegrationSpecV1_AWSOIDC) isIntegrationSpecV1_SubKindSpec() {} func (*IntegrationSpecV1_AzureOIDC) isIntegrationSpecV1_SubKindSpec() {} +func (*IntegrationSpecV1_GitHub) isIntegrationSpecV1_SubKindSpec() {} func (m *IntegrationSpecV1) GetSubKindSpec() isIntegrationSpecV1_SubKindSpec { if m != nil { @@ -19643,11 +19648,19 @@ func (m *IntegrationSpecV1) GetAzureOIDC() *AzureOIDCIntegrationSpecV1 { return nil } +func (m *IntegrationSpecV1) GetGitHub() *GitHubIntegrationSpecV1 { + if x, ok := m.GetSubKindSpec().(*IntegrationSpecV1_GitHub); ok { + return x.GitHub + } + return nil +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*IntegrationSpecV1) XXX_OneofWrappers() []interface{} { return []interface{}{ (*IntegrationSpecV1_AWSOIDC)(nil), (*IntegrationSpecV1_AzureOIDC)(nil), + (*IntegrationSpecV1_GitHub)(nil), } } @@ -19759,6 +19772,146 @@ func (m *AzureOIDCIntegrationSpecV1) XXX_DiscardUnknown() { var xxx_messageInfo_AzureOIDCIntegrationSpecV1 proto.InternalMessageInfo +// GitHubIntegrationSpecV1 contains the specific fields to handle the GitHub integration subkind. +type GitHubIntegrationSpecV1 struct { + // Organization specifies the name of the organization for the GitHub integration. + Organization string `protobuf:"bytes,1,opt,name=Organization,proto3" json:"organization,omitempty"` + // Proxy specifies GitHub proxy related settings. + Proxy *GitHubProxy `protobuf:"bytes,2,opt,name=proxy,proto3" json:"proxy,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GitHubIntegrationSpecV1) Reset() { *m = GitHubIntegrationSpecV1{} } +func (m *GitHubIntegrationSpecV1) String() string { return proto.CompactTextString(m) } +func (*GitHubIntegrationSpecV1) ProtoMessage() {} +func (*GitHubIntegrationSpecV1) Descriptor() ([]byte, []int) { + return fileDescriptor_9198ee693835762e, []int{339} +} +func (m *GitHubIntegrationSpecV1) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GitHubIntegrationSpecV1) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GitHubIntegrationSpecV1.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GitHubIntegrationSpecV1) XXX_Merge(src proto.Message) { + xxx_messageInfo_GitHubIntegrationSpecV1.Merge(m, src) +} +func (m *GitHubIntegrationSpecV1) XXX_Size() int { + return m.Size() +} +func (m *GitHubIntegrationSpecV1) XXX_DiscardUnknown() { + xxx_messageInfo_GitHubIntegrationSpecV1.DiscardUnknown(m) +} + +var xxx_messageInfo_GitHubIntegrationSpecV1 proto.InternalMessageInfo + +// GitHubProxy specifies GitHub proxy related settings. +type GitHubProxy struct { + // CertAuthority contains the active SSH CAs used between Teleport and + // GitHub. GitHub does not allow the same CA to be used for a different + // organization so the CA is defined per integration. TODO(greedy52) support + // rotation, HSM encryption. + CertAuthorities []*SSHKeyPair `protobuf:"bytes,1,rep,name=cert_authorities,json=certAuthorities,proto3" json:"cert_authorities,omitempty"` + // Connector specifies the GitHub connector spec used to obtain user ID and + // username. + Connector *GitHubProxyConnector `protobuf:"bytes,2,opt,name=connector,proto3" json:"connector,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GitHubProxy) Reset() { *m = GitHubProxy{} } +func (m *GitHubProxy) String() string { return proto.CompactTextString(m) } +func (*GitHubProxy) ProtoMessage() {} +func (*GitHubProxy) Descriptor() ([]byte, []int) { + return fileDescriptor_9198ee693835762e, []int{340} +} +func (m *GitHubProxy) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GitHubProxy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GitHubProxy.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GitHubProxy) XXX_Merge(src proto.Message) { + xxx_messageInfo_GitHubProxy.Merge(m, src) +} +func (m *GitHubProxy) XXX_Size() int { + return m.Size() +} +func (m *GitHubProxy) XXX_DiscardUnknown() { + xxx_messageInfo_GitHubProxy.DiscardUnknown(m) +} + +var xxx_messageInfo_GitHubProxy proto.InternalMessageInfo + +// GitHubProxyConnector specifies the GitHub connector spec for a GitHub proxy. +// This type is a subset of GithubConnectorSpecV3 but does not require fields +// like TeamRolesMapping. +type GitHubProxyConnector struct { + // ClientID is the Github OAuth app client ID. + ClientID string `protobuf:"bytes,1,opt,name=ClientID,proto3" json:"client_id"` + // ClientSecret is the Github OAuth app client secret. + ClientSecret string `protobuf:"bytes,2,opt,name=ClientSecret,proto3" json:"client_secret"` + // RedirectURL is the authorization callback URL. + RedirectURL string `protobuf:"bytes,3,opt,name=RedirectURL,proto3" json:"redirect_url"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GitHubProxyConnector) Reset() { *m = GitHubProxyConnector{} } +func (m *GitHubProxyConnector) String() string { return proto.CompactTextString(m) } +func (*GitHubProxyConnector) ProtoMessage() {} +func (*GitHubProxyConnector) Descriptor() ([]byte, []int) { + return fileDescriptor_9198ee693835762e, []int{341} +} +func (m *GitHubProxyConnector) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GitHubProxyConnector) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GitHubProxyConnector.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GitHubProxyConnector) XXX_Merge(src proto.Message) { + xxx_messageInfo_GitHubProxyConnector.Merge(m, src) +} +func (m *GitHubProxyConnector) XXX_Size() int { + return m.Size() +} +func (m *GitHubProxyConnector) XXX_DiscardUnknown() { + xxx_messageInfo_GitHubProxyConnector.DiscardUnknown(m) +} + +var xxx_messageInfo_GitHubProxyConnector proto.InternalMessageInfo + // HeadlessAuthentication holds data for an ongoing headless authentication attempt. type HeadlessAuthentication struct { // Header is the resource header. @@ -19791,7 +19944,7 @@ func (m *HeadlessAuthentication) Reset() { *m = HeadlessAuthentication{} func (m *HeadlessAuthentication) String() string { return proto.CompactTextString(m) } func (*HeadlessAuthentication) ProtoMessage() {} func (*HeadlessAuthentication) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{339} + return fileDescriptor_9198ee693835762e, []int{342} } func (m *HeadlessAuthentication) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19848,7 +20001,7 @@ func (m *WatchKind) Reset() { *m = WatchKind{} } func (m *WatchKind) String() string { return proto.CompactTextString(m) } func (*WatchKind) ProtoMessage() {} func (*WatchKind) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{340} + return fileDescriptor_9198ee693835762e, []int{343} } func (m *WatchKind) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19898,7 +20051,7 @@ func (m *WatchStatusV1) Reset() { *m = WatchStatusV1{} } func (m *WatchStatusV1) String() string { return proto.CompactTextString(m) } func (*WatchStatusV1) ProtoMessage() {} func (*WatchStatusV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{341} + return fileDescriptor_9198ee693835762e, []int{344} } func (m *WatchStatusV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19939,7 +20092,7 @@ func (m *WatchStatusSpecV1) Reset() { *m = WatchStatusSpecV1{} } func (m *WatchStatusSpecV1) String() string { return proto.CompactTextString(m) } func (*WatchStatusSpecV1) ProtoMessage() {} func (*WatchStatusSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{342} + return fileDescriptor_9198ee693835762e, []int{345} } func (m *WatchStatusSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19989,7 +20142,7 @@ func (m *ServerInfoV1) Reset() { *m = ServerInfoV1{} } func (m *ServerInfoV1) String() string { return proto.CompactTextString(m) } func (*ServerInfoV1) ProtoMessage() {} func (*ServerInfoV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{343} + return fileDescriptor_9198ee693835762e, []int{346} } func (m *ServerInfoV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20031,7 +20184,7 @@ func (m *ServerInfoSpecV1) Reset() { *m = ServerInfoSpecV1{} } func (m *ServerInfoSpecV1) String() string { return proto.CompactTextString(m) } func (*ServerInfoSpecV1) ProtoMessage() {} func (*ServerInfoSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{344} + return fileDescriptor_9198ee693835762e, []int{347} } func (m *ServerInfoSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20088,7 +20241,7 @@ func (m *JamfSpecV1) Reset() { *m = JamfSpecV1{} } func (m *JamfSpecV1) String() string { return proto.CompactTextString(m) } func (*JamfSpecV1) ProtoMessage() {} func (*JamfSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{345} + return fileDescriptor_9198ee693835762e, []int{348} } func (m *JamfSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20153,7 +20306,7 @@ func (m *JamfInventoryEntry) Reset() { *m = JamfInventoryEntry{} } func (m *JamfInventoryEntry) String() string { return proto.CompactTextString(m) } func (*JamfInventoryEntry) ProtoMessage() {} func (*JamfInventoryEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{346} + return fileDescriptor_9198ee693835762e, []int{349} } func (m *JamfInventoryEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20210,7 +20363,7 @@ type MessageWithHeader struct { func (m *MessageWithHeader) Reset() { *m = MessageWithHeader{} } func (*MessageWithHeader) ProtoMessage() {} func (*MessageWithHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{347} + return fileDescriptor_9198ee693835762e, []int{350} } func (m *MessageWithHeader) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20274,7 +20427,7 @@ func (m *AWSMatcher) Reset() { *m = AWSMatcher{} } func (m *AWSMatcher) String() string { return proto.CompactTextString(m) } func (*AWSMatcher) ProtoMessage() {} func (*AWSMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{348} + return fileDescriptor_9198ee693835762e, []int{351} } func (m *AWSMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20319,7 +20472,7 @@ func (m *AssumeRole) Reset() { *m = AssumeRole{} } func (m *AssumeRole) String() string { return proto.CompactTextString(m) } func (*AssumeRole) ProtoMessage() {} func (*AssumeRole) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{349} + return fileDescriptor_9198ee693835762e, []int{352} } func (m *AssumeRole) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20381,7 +20534,7 @@ func (m *InstallerParams) Reset() { *m = InstallerParams{} } func (m *InstallerParams) String() string { return proto.CompactTextString(m) } func (*InstallerParams) ProtoMessage() {} func (*InstallerParams) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{350} + return fileDescriptor_9198ee693835762e, []int{353} } func (m *InstallerParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20424,7 +20577,7 @@ func (m *AWSSSM) Reset() { *m = AWSSSM{} } func (m *AWSSSM) String() string { return proto.CompactTextString(m) } func (*AWSSSM) ProtoMessage() {} func (*AWSSSM) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{351} + return fileDescriptor_9198ee693835762e, []int{354} } func (m *AWSSSM) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20467,7 +20620,7 @@ func (m *AzureInstallerParams) Reset() { *m = AzureInstallerParams{} } func (m *AzureInstallerParams) String() string { return proto.CompactTextString(m) } func (*AzureInstallerParams) ProtoMessage() {} func (*AzureInstallerParams) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{352} + return fileDescriptor_9198ee693835762e, []int{355} } func (m *AzureInstallerParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20521,7 +20674,7 @@ func (m *AzureMatcher) Reset() { *m = AzureMatcher{} } func (m *AzureMatcher) String() string { return proto.CompactTextString(m) } func (*AzureMatcher) ProtoMessage() {} func (*AzureMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{353} + return fileDescriptor_9198ee693835762e, []int{356} } func (m *AzureMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20576,7 +20729,7 @@ func (m *GCPMatcher) Reset() { *m = GCPMatcher{} } func (m *GCPMatcher) String() string { return proto.CompactTextString(m) } func (*GCPMatcher) ProtoMessage() {} func (*GCPMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{354} + return fileDescriptor_9198ee693835762e, []int{357} } func (m *GCPMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20622,7 +20775,7 @@ func (m *KubernetesMatcher) Reset() { *m = KubernetesMatcher{} } func (m *KubernetesMatcher) String() string { return proto.CompactTextString(m) } func (*KubernetesMatcher) ProtoMessage() {} func (*KubernetesMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{355} + return fileDescriptor_9198ee693835762e, []int{358} } func (m *KubernetesMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20664,7 +20817,7 @@ func (m *OktaOptions) Reset() { *m = OktaOptions{} } func (m *OktaOptions) String() string { return proto.CompactTextString(m) } func (*OktaOptions) ProtoMessage() {} func (*OktaOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{356} + return fileDescriptor_9198ee693835762e, []int{359} } func (m *OktaOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20708,7 +20861,7 @@ func (m *AccessGraphSync) Reset() { *m = AccessGraphSync{} } func (m *AccessGraphSync) String() string { return proto.CompactTextString(m) } func (*AccessGraphSync) ProtoMessage() {} func (*AccessGraphSync) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{357} + return fileDescriptor_9198ee693835762e, []int{360} } func (m *AccessGraphSync) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20754,7 +20907,7 @@ func (m *AccessGraphAWSSync) Reset() { *m = AccessGraphAWSSync{} } func (m *AccessGraphAWSSync) String() string { return proto.CompactTextString(m) } func (*AccessGraphAWSSync) ProtoMessage() {} func (*AccessGraphAWSSync) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{358} + return fileDescriptor_9198ee693835762e, []int{361} } func (m *AccessGraphAWSSync) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -21185,6 +21338,9 @@ func init() { proto.RegisterType((*IntegrationSpecV1)(nil), "types.IntegrationSpecV1") proto.RegisterType((*AWSOIDCIntegrationSpecV1)(nil), "types.AWSOIDCIntegrationSpecV1") proto.RegisterType((*AzureOIDCIntegrationSpecV1)(nil), "types.AzureOIDCIntegrationSpecV1") + proto.RegisterType((*GitHubIntegrationSpecV1)(nil), "types.GitHubIntegrationSpecV1") + proto.RegisterType((*GitHubProxy)(nil), "types.GitHubProxy") + proto.RegisterType((*GitHubProxyConnector)(nil), "types.GitHubProxyConnector") proto.RegisterType((*HeadlessAuthentication)(nil), "types.HeadlessAuthentication") proto.RegisterType((*WatchKind)(nil), "types.WatchKind") proto.RegisterMapType((map[string]string)(nil), "types.WatchKind.FilterEntry") @@ -21212,7 +21368,7 @@ func init() { func init() { proto.RegisterFile("teleport/legacy/types/types.proto", fileDescriptor_9198ee693835762e) } var fileDescriptor_9198ee693835762e = []byte{ - // 29447 bytes of a gzipped FileDescriptorProto + // 29597 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xfd, 0x6b, 0x70, 0x1c, 0x59, 0x76, 0x20, 0x06, 0x77, 0x55, 0xe1, 0x51, 0x38, 0x78, 0x15, 0x2e, 0x40, 0x12, 0x44, 0x37, 0xbb, 0xd8, 0xd9, 0xdd, 0x6c, 0x76, 0x4f, 0x37, 0x39, 0x04, 0xa7, 0x39, 0xd3, 0xd3, 0xaf, 0x29, 0x3c, @@ -22692,368 +22848,377 @@ var fileDescriptor_9198ee693835762e = []byte{ 0xce, 0xea, 0x91, 0x2a, 0xf5, 0xd1, 0x9a, 0x6e, 0x84, 0x3e, 0xef, 0xb7, 0xe3, 0xcf, 0x4b, 0x09, 0x77, 0x6c, 0x35, 0xbd, 0xae, 0xb3, 0xee, 0x27, 0x8a, 0xa8, 0xff, 0xd2, 0xfe, 0x22, 0x9c, 0xa2, 0xc9, 0xb7, 0x13, 0xb8, 0x9d, 0xdd, 0x84, 0x9d, 0x6c, 0xe8, 0x2b, 0x59, 0xec, 0xe4, 0xac, 0xbc, - 0xf1, 0xff, 0xb1, 0x77, 0x35, 0x31, 0x6e, 0x24, 0xd7, 0x79, 0x9a, 0xe4, 0xcc, 0x70, 0x1e, 0xe7, - 0xa7, 0xa7, 0xa4, 0x95, 0x66, 0x67, 0xf4, 0xdb, 0xfa, 0xb1, 0x44, 0x79, 0xd7, 0x96, 0x36, 0xf6, - 0xae, 0xd6, 0x59, 0xaf, 0x7b, 0xc8, 0xe6, 0x4c, 0x4b, 0xfc, 0x73, 0x37, 0x39, 0x63, 0xed, 0xda, - 0xee, 0x50, 0x64, 0xcf, 0x0c, 0x63, 0x0e, 0x49, 0xb3, 0x49, 0xc9, 0x5a, 0x04, 0x48, 0x8c, 0x00, - 0x36, 0x90, 0x3f, 0x27, 0x4e, 0x80, 0x2c, 0x82, 0x00, 0x39, 0x64, 0x11, 0xe4, 0x90, 0x6b, 0x90, - 0x20, 0xc9, 0xc5, 0xb7, 0x05, 0x0c, 0x03, 0x06, 0x92, 0x53, 0x02, 0x2c, 0x92, 0x05, 0x92, 0x43, - 0x92, 0x5b, 0x10, 0x1f, 0x7c, 0x0a, 0xea, 0x55, 0x55, 0x77, 0xf5, 0x0f, 0xa9, 0xd1, 0x6a, 0x37, - 0x89, 0x01, 0x9f, 0xc8, 0x7e, 0xf5, 0xaa, 0xba, 0xba, 0x7e, 0xdf, 0x7b, 0x55, 0xef, 0x7b, 0x94, - 0xdf, 0x2f, 0xf5, 0x54, 0x2b, 0x4e, 0xe4, 0xdf, 0xf0, 0xed, 0x94, 0x98, 0xea, 0x09, 0xd5, 0x49, - 0x18, 0xd6, 0x4a, 0xd2, 0xb0, 0x3e, 0xf9, 0x9c, 0xaa, 0x02, 0x91, 0x17, 0x2b, 0x66, 0xf5, 0xe4, - 0x17, 0xaa, 0x84, 0x9c, 0xce, 0x2b, 0x22, 0x2d, 0x0d, 0x36, 0x0b, 0xa6, 0xb9, 0xde, 0x8e, 0x92, - 0xc8, 0x16, 0x2c, 0xf9, 0xf1, 0xaa, 0xf9, 0xc6, 0x91, 0x65, 0x04, 0xb3, 0x43, 0x2e, 0xc1, 0x32, - 0x13, 0xc9, 0x43, 0x73, 0x0e, 0x90, 0xa6, 0xd3, 0x89, 0x27, 0xda, 0x40, 0x81, 0x4b, 0x4f, 0x6b, - 0x43, 0xb2, 0x0f, 0x67, 0xf0, 0x5a, 0x87, 0x37, 0xf0, 0xbb, 0xc1, 0x69, 0xb7, 0xda, 0x47, 0x2e, - 0x1f, 0xb5, 0x5a, 0x62, 0x67, 0x0c, 0x87, 0xb6, 0x5d, 0x93, 0xfa, 0x61, 0x38, 0xb4, 0xbd, 0x81, - 0x78, 0x2e, 0xd0, 0xec, 0xbc, 0x0e, 0x1d, 0xd8, 0x9a, 0x91, 0x53, 0x5a, 0x38, 0x14, 0x79, 0xe1, - 0xb8, 0x01, 0xea, 0x81, 0xdb, 0xa1, 0x32, 0xb1, 0xdb, 0xc1, 0xaa, 0x3d, 0xba, 0xc3, 0x22, 0xb4, - 0x5b, 0xab, 0x3e, 0xdd, 0xf6, 0x06, 0x7b, 0x77, 0xf8, 0x5b, 0x8e, 0xc5, 0x96, 0x27, 0xab, 0x15, - 0xe4, 0x65, 0x38, 0x15, 0x01, 0x1c, 0x09, 0x3c, 0xd8, 0xad, 0x75, 0x9a, 0x14, 0x86, 0xa7, 0xba, - 0x0c, 0xcb, 0x62, 0x54, 0x8c, 0x7c, 0x3f, 0x38, 0x2b, 0xc7, 0x69, 0x74, 0xd6, 0xf1, 0xd7, 0x4d, - 0xc4, 0x47, 0x25, 0x6a, 0x24, 0x27, 0x90, 0xa5, 0xc9, 0x4b, 0x40, 0x7c, 0xb9, 0xdd, 0x5f, 0x28, - 0xf8, 0x0b, 0xd7, 0x45, 0x8a, 0x3f, 0xc3, 0xf9, 0x6b, 0xff, 0x2e, 0x05, 0xa7, 0x12, 0x54, 0x19, - 0xaa, 0x04, 0x74, 0xfb, 0x63, 0xf7, 0x90, 0xa9, 0x10, 0xf2, 0x47, 0xae, 0x49, 0x74, 0x6e, 0x9f, - 0x5a, 0x60, 0x11, 0xc8, 0xf9, 0xbb, 0xf8, 0x13, 0x5d, 0x3c, 0x5a, 0x23, 0x61, 0x7a, 0xa1, 0x7f, - 0x89, 0x09, 0xeb, 0x18, 0x56, 0xc1, 0xeb, 0x0e, 0x30, 0x3a, 0x03, 0x0a, 0x21, 0x99, 0x90, 0xb2, - 0x83, 0xb5, 0xa8, 0x4b, 0x4c, 0x54, 0x0a, 0xb1, 0xd4, 0x61, 0x84, 0x42, 0xbe, 0x00, 0x9b, 0xd2, - 0x5e, 0xe3, 0x44, 0x66, 0x1e, 0xde, 0x74, 0xb7, 0xce, 0xb6, 0xfc, 0x5d, 0xa7, 0x18, 0x9a, 0x83, - 0xdb, 0x70, 0x01, 0x3b, 0xb1, 0xdb, 0x19, 0x3a, 0xb1, 0x38, 0x1c, 0xf8, 0xa9, 0x0c, 0xb8, 0x7e, - 0x93, 0x72, 0x99, 0x9d, 0x61, 0x24, 0x24, 0x07, 0xfd, 0x6a, 0xde, 0x7c, 0x6f, 0xc3, 0x0b, 0x89, - 0x35, 0xa6, 0x1b, 0x0c, 0x5e, 0xa4, 0x0a, 0x64, 0xa3, 0x45, 0xfa, 0x4c, 0x85, 0xa3, 0xcb, 0xb0, - 0xfc, 0xd0, 0x6d, 0x8d, 0xdc, 0x11, 0xdf, 0xb9, 0xf9, 0x90, 0x60, 0x34, 0x79, 0xe3, 0xee, 0x84, - 0xbb, 0x86, 0xdb, 0x8c, 0x48, 0x05, 0x4e, 0xb1, 0x1d, 0xb0, 0x7b, 0x8c, 0xc2, 0x20, 0xb7, 0x33, - 0x29, 0x21, 0x71, 0x08, 0xb3, 0xe0, 0xd6, 0x64, 0x22, 0x17, 0xcb, 0x6d, 0xad, 0x1f, 0x46, 0x49, - 0x74, 0x46, 0x9f, 0x49, 0xe6, 0x26, 0xdb, 0x90, 0x63, 0x85, 0x33, 0xb5, 0x80, 0x1d, 0x10, 0x5c, - 0x9e, 0xf9, 0x86, 0x02, 0xde, 0x2f, 0xf6, 0xfc, 0xff, 0x74, 0xbf, 0xc6, 0xb3, 0x58, 0xe7, 0x58, - 0x3e, 0xff, 0xb0, 0x96, 0x91, 0xc8, 0xcf, 0x3d, 0xb4, 0xbf, 0x57, 0xc4, 0xa7, 0x86, 0x94, 0x63, - 0x3a, 0xb4, 0x3c, 0xb7, 0x2f, 0xce, 0x80, 0x96, 0x2c, 0xfe, 0xf4, 0x8c, 0x43, 0x9d, 0xbc, 0x0a, - 0xcb, 0xb4, 0xd8, 0xc3, 0x49, 0x9f, 0x0d, 0xb9, 0x74, 0x08, 0x68, 0xa7, 0xc2, 0x92, 0x68, 0xb7, - 0xed, 0xce, 0x59, 0xb9, 0xe3, 0xe0, 0x91, 0x4a, 0xcb, 0xde, 0xf1, 0x78, 0x28, 0x0f, 0x54, 0x61, - 0x28, 0xb4, 0x2b, 0x8d, 0x3a, 0xcf, 0x92, 0xa5, 0x3c, 0x81, 0xb4, 0xbc, 0xbd, 0xc0, 0x4c, 0x85, - 0xda, 0x2d, 0xc8, 0x49, 0x65, 0xd3, 0x8f, 0x61, 0x9e, 0x33, 0xe2, 0x63, 0xd8, 0x13, 0xef, 0xec, - 0x87, 0x90, 0x15, 0x45, 0x52, 0xb5, 0xe0, 0x68, 0xe0, 0x89, 0x49, 0x8e, 0xff, 0x29, 0x8d, 0xb6, - 0x32, 0x7e, 0xe4, 0xbc, 0x85, 0xff, 0x71, 0x2f, 0x19, 0xb7, 0xa8, 0x3e, 0xd0, 0xf3, 0x9c, 0x21, - 0xde, 0xc0, 0xf2, 0x85, 0x67, 0x4a, 0x6f, 0xf4, 0x3c, 0x76, 0x2f, 0x8b, 0xbf, 0xe3, 0xaf, 0xfd, - 0x4d, 0x38, 0x62, 0x4d, 0x98, 0xb6, 0x66, 0x86, 0xb6, 0x8c, 0x54, 0x7c, 0xcb, 0x60, 0x00, 0x2a, - 0x3c, 0x27, 0x7b, 0x33, 0x20, 0x0d, 0xb7, 0x0c, 0x69, 0x65, 0xc8, 0x84, 0x56, 0x06, 0x49, 0x27, - 0x0f, 0x7a, 0x8f, 0xed, 0x38, 0x42, 0x27, 0x8f, 0xae, 0x53, 0x7f, 0x96, 0x12, 0x26, 0x82, 0xed, - 0xc1, 0x60, 0xec, 0x8d, 0x47, 0xad, 0x61, 0xc8, 0x14, 0x4a, 0x8e, 0xe1, 0x45, 0x94, 0xa0, 0xef, - 0x60, 0x08, 0x8b, 0xc1, 0x48, 0x60, 0x76, 0xf8, 0x23, 0x37, 0x77, 0xe7, 0x33, 0x61, 0x19, 0x5f, - 0xa7, 0xdc, 0xba, 0xcc, 0x4c, 0x07, 0xac, 0x54, 0xea, 0xee, 0x9c, 0x75, 0x96, 0x95, 0x19, 0xe3, - 0x22, 0xbb, 0x09, 0x93, 0x38, 0x6a, 0x0b, 0xdd, 0x0e, 0x66, 0x74, 0xb8, 0x54, 0x79, 0xae, 0x93, - 0x2f, 0xc2, 0x52, 0xb7, 0x23, 0x47, 0x6a, 0x8c, 0x5a, 0xe1, 0xcc, 0x0e, 0x43, 0x8b, 0x0e, 0xca, - 0xa0, 0x63, 0xae, 0xcb, 0xa9, 0xdb, 0x2b, 0x21, 0xa3, 0xb1, 0xb6, 0x2d, 0xb4, 0xd1, 0x78, 0x36, - 0xb2, 0x0a, 0x29, 0xbf, 0x87, 0x53, 0xdd, 0x0e, 0x9b, 0x5e, 0x01, 0x5e, 0xb5, 0xc5, 0x9f, 0xb4, - 0x5f, 0x81, 0x1b, 0x27, 0x6d, 0x23, 0x3a, 0x15, 0xa7, 0x34, 0xf8, 0x92, 0xb5, 0xde, 0x8a, 0xb5, - 0xdb, 0x65, 0x90, 0xe1, 0x76, 0xbb, 0x62, 0xf1, 0x13, 0xb4, 0xe6, 0xa8, 0xab, 0xfd, 0x55, 0x1a, - 0x56, 0xc3, 0x66, 0x72, 0x72, 0x0b, 0x32, 0xd2, 0x0a, 0x74, 0x36, 0xc1, 0x96, 0x8e, 0xeb, 0x0e, - 0x32, 0x9d, 0x68, 0xc5, 0x21, 0xf7, 0x60, 0x15, 0x2f, 0xee, 0xa1, 0xe8, 0x39, 0xee, 0xf2, 0xc3, - 0x97, 0xd9, 0xe7, 0x67, 0xd9, 0xf7, 0x3f, 0xb8, 0x38, 0x87, 0x47, 0x65, 0xcb, 0x34, 0x2f, 0x95, - 0xfe, 0x68, 0xa2, 0x64, 0x05, 0xcd, 0x4c, 0xb7, 0x82, 0xf2, 0x4f, 0x99, 0x62, 0x05, 0x9d, 0x9f, - 0x61, 0x05, 0x0d, 0x72, 0xca, 0x56, 0x50, 0xb4, 0x85, 0x2f, 0x4e, 0xb3, 0x85, 0x07, 0x79, 0x98, - 0x2d, 0x3c, 0xb0, 0x62, 0x66, 0xa7, 0x5a, 0x31, 0x83, 0x3c, 0xdc, 0x8a, 0x79, 0x95, 0xb7, 0xd1, - 0xa8, 0xf5, 0xd8, 0xc1, 0xc6, 0xe3, 0xdb, 0x22, 0x7e, 0xbd, 0xd5, 0x7a, 0x8c, 0x97, 0x6b, 0xb6, - 0x97, 0x40, 0xdc, 0xc8, 0xd1, 0x7e, 0x5f, 0x89, 0x58, 0x02, 0x45, 0xff, 0x5d, 0x83, 0x55, 0xb6, - 0x59, 0xb9, 0x1d, 0x49, 0xd7, 0x5c, 0xb1, 0x56, 0x04, 0x95, 0xe9, 0x9b, 0x9f, 0x82, 0x35, 0x9f, - 0x8d, 0xab, 0x5c, 0xe8, 0xa9, 0x67, 0xf9, 0xb9, 0x39, 0xec, 0xcc, 0x2d, 0x58, 0xf7, 0x19, 0xb9, - 0x35, 0x87, 0xa9, 0x9b, 0x2b, 0x96, 0x2a, 0x12, 0xea, 0x9c, 0xae, 0x1d, 0x46, 0x35, 0x8f, 0x4f, - 0xa8, 0x56, 0xda, 0x0f, 0xd2, 0x21, 0x2b, 0x89, 0x78, 0x0d, 0xdd, 0x45, 0xbd, 0x81, 0xc3, 0x1b, - 0x89, 0xaf, 0x45, 0x97, 0xa7, 0xf4, 0x19, 0xbf, 0xd3, 0x64, 0xdb, 0x35, 0x0b, 0x3c, 0x6f, 0x20, - 0xae, 0x38, 0x39, 0x4c, 0xa2, 0x66, 0xfb, 0x3e, 0x8e, 0x59, 0x51, 0x1c, 0x5b, 0x78, 0xf2, 0xb3, - 0x8b, 0x13, 0x6a, 0x2a, 0x1d, 0xb2, 0x28, 0x59, 0xfb, 0x4f, 0xe2, 0x05, 0x4d, 0x40, 0xa3, 0xa2, - 0x17, 0x2e, 0x3c, 0x9d, 0xa0, 0x3b, 0xc5, 0x0a, 0xc7, 0x56, 0xc2, 0x92, 0xd5, 0x89, 0xf8, 0x2b, - 0x8a, 0x35, 0x60, 0x19, 0x6d, 0x14, 0xa2, 0xc0, 0x4c, 0x82, 0x09, 0x3e, 0xfe, 0xf1, 0x05, 0xb3, - 0x62, 0xe5, 0x68, 0x3e, 0x51, 0xcc, 0x11, 0xbc, 0x28, 0x5b, 0x16, 0xc2, 0x95, 0x9c, 0x17, 0x28, - 0xba, 0x33, 0x5b, 0x20, 0x30, 0x40, 0x60, 0x55, 0xcf, 0xb4, 0xc2, 0x04, 0xce, 0xa6, 0x1d, 0xc1, - 0xe6, 0xf4, 0x2e, 0x99, 0x11, 0xa1, 0x29, 0xd8, 0x40, 0x53, 0xf2, 0x06, 0x2a, 0xdb, 0x19, 0xd2, - 0x21, 0x3b, 0x83, 0xf6, 0xa7, 0x69, 0xb8, 0x72, 0x82, 0xee, 0x9a, 0xf1, 0xce, 0x2f, 0x85, 0xc5, - 0xb3, 0x54, 0x48, 0x33, 0xa4, 0x85, 0xf2, 0x05, 0x92, 0x6a, 0xa9, 0xc9, 0xc2, 0xd9, 0x2f, 0xc1, - 0x1a, 0x5b, 0x05, 0xd9, 0xb5, 0xc4, 0x83, 0x49, 0xef, 0x04, 0xcb, 0xe0, 0x96, 0xf0, 0xa1, 0x8a, - 0x64, 0xc5, 0x95, 0x11, 0x57, 0x0c, 0xdb, 0xa7, 0x91, 0x06, 0xe4, 0x90, 0xed, 0xa0, 0xd5, 0xed, - 0x9d, 0xc8, 0x99, 0x47, 0x78, 0x68, 0xc9, 0xd9, 0xd8, 0x6d, 0x6a, 0x4a, 0x28, 0xe1, 0x33, 0xb9, - 0x0e, 0x6b, 0xfd, 0xc9, 0x31, 0x15, 0x3c, 0xd8, 0x58, 0xe0, 0xb7, 0x3f, 0xe6, 0xad, 0x95, 0xfe, - 0xe4, 0x58, 0x1f, 0x0e, 0xb1, 0x4b, 0xf1, 0x9a, 0xc8, 0x3a, 0xe5, 0x63, 0xb3, 0x56, 0x70, 0x2e, - 0x20, 0x27, 0x2d, 0x80, 0xcd, 0x5b, 0xce, 0x7b, 0x1a, 0xd8, 0xa5, 0x41, 0x1e, 0xa1, 0x8a, 0x3d, - 0x68, 0x3f, 0x49, 0x09, 0x7d, 0x77, 0xfa, 0xb8, 0xff, 0x79, 0x17, 0x25, 0x74, 0xd1, 0x0d, 0x50, - 0x69, 0xd3, 0x07, 0x8b, 0x8a, 0xdf, 0x47, 0xab, 0xfd, 0xc9, 0xb1, 0xdf, 0x76, 0x72, 0xc3, 0x2f, - 0xc8, 0x0d, 0xff, 0xaa, 0xd0, 0x87, 0x13, 0x97, 0x87, 0xe9, 0x4d, 0xae, 0xfd, 0x67, 0x1a, 0xae, - 0x9f, 0x6c, 0x11, 0xf8, 0x79, 0xbf, 0x25, 0xf4, 0x5b, 0xc4, 0x74, 0x3a, 0x1f, 0x33, 0x9d, 0x26, - 0xcc, 0xbd, 0x85, 0xa4, 0xb9, 0x17, 0x33, 0xd4, 0x2e, 0x26, 0x18, 0x6a, 0x13, 0x27, 0x68, 0xf6, - 0x29, 0x13, 0x74, 0x49, 0x1e, 0x27, 0xff, 0xe6, 0x1b, 0x30, 0xc2, 0xfa, 0xc0, 0xdb, 0x70, 0x4a, - 0xe8, 0x03, 0x6c, 0xe7, 0x08, 0xec, 0xef, 0xb9, 0x3b, 0x37, 0x93, 0x34, 0x01, 0x64, 0x4b, 0x90, - 0xd6, 0xd7, 0xb9, 0x0e, 0x10, 0xa4, 0xff, 0xff, 0x91, 0xfe, 0xc9, 0x03, 0x38, 0x83, 0xf8, 0xee, - 0x6d, 0xf9, 0xe4, 0xc0, 0x19, 0xb9, 0x07, 0x7c, 0x3c, 0x5c, 0x8e, 0xc9, 0xca, 0xdd, 0xb6, 0x54, - 0x1d, 0xcb, 0x3d, 0xd8, 0x9d, 0xb3, 0x4e, 0x7b, 0x09, 0xf4, 0xa8, 0x62, 0xf1, 0x17, 0x0a, 0x68, - 0x4f, 0x6f, 0x2f, 0x34, 0x54, 0x45, 0x1b, 0x7c, 0xc9, 0xca, 0xb5, 0xa4, 0xd6, 0xbb, 0x02, 0x2b, - 0x23, 0xf7, 0x60, 0xe4, 0x7a, 0x47, 0x21, 0x0b, 0xc8, 0x32, 0x27, 0x8a, 0x86, 0x11, 0x28, 0x93, - 0xcf, 0x24, 0x99, 0x8b, 0x4c, 0x5a, 0xc9, 0xd7, 0x17, 0x13, 0xfb, 0x81, 0x8e, 0x26, 0xb9, 0x82, - 0xec, 0xe1, 0x5e, 0x26, 0x9b, 0x52, 0xd3, 0x16, 0xc7, 0xc2, 0x3c, 0xe8, 0xf6, 0x5c, 0xed, 0x6f, - 0x14, 0x21, 0x11, 0x24, 0x35, 0x1e, 0x79, 0x5b, 0xba, 0xcc, 0x9b, 0x8e, 0x89, 0x21, 0x49, 0x59, - 0xe4, 0x7b, 0x8f, 0x1c, 0x9e, 0x11, 0x09, 0x21, 0x78, 0x46, 0xa4, 0x3c, 0xc7, 0x8d, 0x44, 0xae, - 0x35, 0xdf, 0x15, 0x37, 0x82, 0xe8, 0x9a, 0xb7, 0x77, 0x9b, 0xdc, 0x84, 0x45, 0x76, 0x09, 0x48, - 0x54, 0x77, 0x2d, 0x54, 0xdd, 0xbd, 0xdb, 0x96, 0x48, 0xd7, 0xde, 0xf5, 0xcf, 0xb5, 0x62, 0x1f, - 0xb1, 0x77, 0x9b, 0xbc, 0x7a, 0xb2, 0xcb, 0xb9, 0x59, 0x71, 0x39, 0xd7, 0xbf, 0x98, 0xfb, 0x5a, - 0xe8, 0x62, 0xee, 0xd5, 0xd9, 0xad, 0xc5, 0x4f, 0x23, 0x19, 0x1c, 0x61, 0x00, 0x53, 0xf5, 0x13, - 0x05, 0xce, 0xcf, 0xcc, 0x41, 0xce, 0x41, 0x56, 0xaf, 0x9b, 0x8d, 0xa0, 0x7f, 0xe9, 0x9c, 0x11, - 0x14, 0xb2, 0x03, 0x4b, 0xdb, 0x2d, 0xaf, 0xdb, 0xa6, 0xc3, 0x38, 0xf1, 0x78, 0x20, 0x56, 0xac, - 0xcf, 0xbe, 0x3b, 0x67, 0x05, 0x79, 0x89, 0x03, 0xeb, 0x38, 0x17, 0x42, 0xa1, 0x9f, 0xd2, 0x09, - 0xb6, 0x86, 0x58, 0x81, 0xb1, 0x6c, 0x74, 0x9d, 0x89, 0x11, 0xa3, 0x53, 0xf0, 0x91, 0x90, 0x45, - 0xa6, 0x57, 0xf0, 0x19, 0x70, 0x55, 0x6f, 0x40, 0xb6, 0x2e, 0xee, 0x09, 0x48, 0xb7, 0xd9, 0xc5, - 0x9d, 0x00, 0xcb, 0x4f, 0xd5, 0x7e, 0x4b, 0x11, 0x06, 0x81, 0xa7, 0x7f, 0x88, 0x14, 0x35, 0xab, - 0x33, 0x3b, 0x6a, 0x56, 0xe7, 0x23, 0x46, 0xcd, 0xd2, 0xfe, 0x9c, 0xa3, 0x9e, 0x9b, 0x9d, 0x7a, - 0xc4, 0x32, 0xfb, 0xbc, 0x5e, 0x09, 0x46, 0x68, 0x74, 0x5e, 0x91, 0xa2, 0x2e, 0xc6, 0xdf, 0x35, - 0xdd, 0x39, 0x41, 0x1a, 0xaa, 0x7f, 0x98, 0x86, 0x73, 0xb3, 0xb2, 0x27, 0xc6, 0x75, 0x56, 0x9e, - 0x2d, 0xae, 0xf3, 0x4d, 0xc8, 0x32, 0x9a, 0x7f, 0xe5, 0x1e, 0x1b, 0x9c, 0x67, 0xa5, 0x0d, 0x2e, - 0x92, 0xc9, 0x15, 0x58, 0xd0, 0x0b, 0x76, 0x10, 0x6a, 0x0c, 0xef, 0xc6, 0xb6, 0xda, 0x1e, 0xde, - 0xba, 0xe4, 0x49, 0xe4, 0xeb, 0xf1, 0xe8, 0x7a, 0x3c, 0xc6, 0xd8, 0x96, 0xd4, 0x20, 0xb1, 0x80, - 0x04, 0x58, 0xdf, 0x00, 0x40, 0x9f, 0x63, 0x52, 0x5b, 0xf1, 0x48, 0x7d, 0x1a, 0x2c, 0xd4, 0x47, - 0xae, 0xe7, 0x8e, 0xe5, 0x7b, 0xab, 0x43, 0xa4, 0x58, 0x3c, 0x85, 0xdf, 0x2a, 0x6d, 0x3d, 0x61, - 0x20, 0x02, 0x0b, 0x32, 0xb0, 0x0b, 0x5e, 0x43, 0xa5, 0x64, 0x4b, 0x62, 0xa1, 0x19, 0xca, 0xad, - 0x49, 0xbf, 0x7d, 0xd4, 0xb4, 0xca, 0x5c, 0xd4, 0x60, 0x19, 0x7a, 0x48, 0xa5, 0x1f, 0xe8, 0x59, - 0x12, 0x8b, 0xf6, 0x5d, 0x05, 0x4e, 0x27, 0x7d, 0x07, 0x39, 0x07, 0x99, 0x7e, 0x62, 0x20, 0xc1, - 0x3e, 0xf3, 0x7d, 0xce, 0xd1, 0x5f, 0xe7, 0x60, 0x30, 0x3a, 0x6e, 0x8d, 0xe5, 0xdb, 0xbd, 0x12, - 0xd9, 0x02, 0xfa, 0x50, 0xc2, 0xff, 0xe4, 0xa2, 0x58, 0xa3, 0xd3, 0xb1, 0xd0, 0x83, 0xf8, 0xa3, - 0xe9, 0x00, 0x66, 0xa7, 0x5e, 0x1b, 0x32, 0x40, 0xfc, 0x57, 0x20, 0x43, 0xab, 0x15, 0x19, 0xbd, - 0x74, 0xfc, 0xe8, 0x95, 0x32, 0x67, 0x62, 0xb5, 0xf2, 0x5a, 0xc7, 0x3d, 0x0b, 0x99, 0xb5, 0x7d, - 0x58, 0x0d, 0x73, 0x10, 0x23, 0x0c, 0xa1, 0x9a, 0xbb, 0xa3, 0xf2, 0x92, 0xb6, 0x07, 0x03, 0xe6, - 0x61, 0xb2, 0xfd, 0xe2, 0x3f, 0x7e, 0x70, 0x11, 0xe8, 0x23, 0xcb, 0x93, 0x04, 0xb1, 0xaa, 0x7d, - 0x2f, 0x05, 0xa7, 0x03, 0xa7, 0x76, 0x31, 0x87, 0x7e, 0x66, 0x3d, 0x2c, 0xf5, 0x90, 0x07, 0xa0, - 0x10, 0xb4, 0xe2, 0x1f, 0x38, 0xc3, 0xf1, 0x68, 0x07, 0x36, 0xa6, 0xf1, 0x93, 0x5b, 0xb0, 0x84, - 0x38, 0x48, 0xc3, 0x56, 0xdb, 0x95, 0xd7, 0xbe, 0xbe, 0x20, 0x5a, 0x41, 0xba, 0xf6, 0x23, 0x05, - 0x36, 0xb9, 0x5f, 0x44, 0xa5, 0xd5, 0xed, 0xa3, 0x59, 0xbd, 0xed, 0x7e, 0x3c, 0x1e, 0xc2, 0x3b, - 0xa1, 0x75, 0xec, 0x5a, 0xd8, 0xfd, 0x25, 0xf6, 0xb6, 0xe9, 0x5f, 0x4b, 0x6e, 0x22, 0xb6, 0x17, - 0x3f, 0x76, 0xce, 0x30, 0x44, 0x86, 0x3e, 0x25, 0xc8, 0x88, 0x0c, 0xc8, 0xa1, 0xfd, 0x2a, 0x5c, - 0x98, 0xfd, 0x02, 0xf2, 0x35, 0x58, 0xc1, 0x60, 0x51, 0xcd, 0xe1, 0xe1, 0xa8, 0xd5, 0x71, 0x85, - 0x29, 0x4c, 0x98, 0x2f, 0xe5, 0x34, 0x06, 0x55, 0xc6, 0x11, 0x02, 0x0e, 0x31, 0x0c, 0x15, 0xcf, - 0x14, 0x72, 0x3e, 0x92, 0x4b, 0xd3, 0x7e, 0x4d, 0x01, 0x12, 0x2f, 0x83, 0x7c, 0x1e, 0x96, 0x9b, - 0x8d, 0x82, 0x3d, 0x6e, 0x8d, 0xc6, 0xbb, 0x83, 0xc9, 0x88, 0xe3, 0x84, 0x31, 0x87, 0xf1, 0x71, - 0xdb, 0x61, 0x07, 0x28, 0x47, 0x83, 0xc9, 0xc8, 0x0a, 0xf1, 0x61, 0x94, 0x23, 0xd7, 0xfd, 0x46, - 0xa7, 0xf5, 0x24, 0x1c, 0xe5, 0x88, 0xd3, 0x42, 0x51, 0x8e, 0x38, 0x4d, 0x7b, 0x4f, 0x81, 0x2d, - 0x71, 0x9b, 0xb0, 0x93, 0x50, 0x97, 0x02, 0xc2, 0xa2, 0x8c, 0x04, 0x30, 0xed, 0x2c, 0x91, 0x76, - 0x5d, 0x20, 0x07, 0x61, 0x05, 0x51, 0xb6, 0x65, 0x79, 0xc9, 0x97, 0x20, 0x63, 0x8f, 0x07, 0xc3, - 0x13, 0x40, 0x07, 0xa9, 0x7e, 0x8f, 0x8e, 0x07, 0x43, 0x2c, 0x02, 0x73, 0x6a, 0x2e, 0x9c, 0x96, - 0x2b, 0x27, 0x6a, 0x4c, 0x2a, 0xb0, 0xc8, 0x31, 0xe2, 0x22, 0x07, 0xf5, 0x33, 0xbe, 0x69, 0x7b, - 0x4d, 0xe0, 0x13, 0x71, 0x60, 0x54, 0x4b, 0x94, 0xa1, 0xfd, 0x8e, 0x02, 0x39, 0x2a, 0x6d, 0xa0, - 0x16, 0xf7, 0xbc, 0x43, 0x3a, 0x2c, 0x38, 0x8a, 0x7b, 0x27, 0x7e, 0xf1, 0x27, 0xda, 0x8d, 0x3f, - 0x07, 0x6b, 0x91, 0x0c, 0x44, 0x43, 0x64, 0x8a, 0x5e, 0xb7, 0xdd, 0x62, 0x41, 0x53, 0xd8, 0x9d, - 0x8d, 0x10, 0x4d, 0xfb, 0x0d, 0x05, 0x4e, 0x53, 0x9d, 0x9f, 0x9d, 0x73, 0x5a, 0x93, 0x9e, 0x98, - 0xef, 0x54, 0x82, 0x12, 0xd7, 0x52, 0x99, 0xd7, 0x3c, 0x93, 0xa0, 0x38, 0xcd, 0xf2, 0x53, 0xc9, - 0x2e, 0x64, 0xf9, 0xfe, 0xe2, 0x71, 0x3c, 0xd3, 0x0b, 0x92, 0x31, 0x21, 0x28, 0x98, 0x33, 0xd1, - 0x2f, 0xc1, 0x25, 0x8c, 0xe7, 0xb1, 0xfc, 0xdc, 0xda, 0x7f, 0x29, 0x70, 0x76, 0x4a, 0x1e, 0xf2, - 0x06, 0xcc, 0xa3, 0x47, 0x1f, 0xef, 0xbd, 0x73, 0x53, 0x5e, 0x31, 0x6e, 0x1f, 0xed, 0xdd, 0x66, - 0x1b, 0xd1, 0x31, 0x7d, 0xb0, 0x58, 0x2e, 0xf2, 0x36, 0x2c, 0xe9, 0x9d, 0x0e, 0x57, 0x67, 0x52, - 0x21, 0x75, 0x66, 0xca, 0x1b, 0x5f, 0xf6, 0xf9, 0x99, 0x3a, 0xc3, 0x7c, 0x4b, 0x3a, 0x1d, 0x87, - 0x7b, 0x2b, 0x06, 0xe5, 0x6d, 0xfe, 0x22, 0xac, 0x86, 0x99, 0x9f, 0xc9, 0xc1, 0xea, 0x5d, 0x05, - 0xd4, 0x70, 0x1d, 0x3e, 0x19, 0x64, 0xa5, 0xa4, 0x6e, 0x7e, 0xca, 0xa0, 0xfa, 0xbd, 0x14, 0xbc, - 0x90, 0xd8, 0xc2, 0xe4, 0x25, 0x58, 0xd0, 0x87, 0x43, 0xb3, 0xc8, 0x47, 0x15, 0x97, 0x90, 0xd0, - 0x4a, 0x1c, 0xd2, 0xf6, 0x18, 0x13, 0x79, 0x05, 0xb2, 0xec, 0x38, 0xbd, 0x28, 0x16, 0x1c, 0x84, - 0x8a, 0xe1, 0x67, 0xfd, 0x61, 0x64, 0x51, 0xc1, 0x48, 0x4a, 0xb0, 0xca, 0x41, 0x56, 0x2c, 0xf7, - 0xd0, 0xfd, 0x96, 0x0f, 0x71, 0x8f, 0x28, 0xfc, 0xc2, 0xf4, 0xec, 0x8c, 0x58, 0x9a, 0x0c, 0x33, - 0x12, 0xce, 0x45, 0xca, 0xa0, 0x62, 0x99, 0x72, 0x49, 0x0c, 0xde, 0x14, 0x61, 0x6f, 0x58, 0x25, - 0xa6, 0x94, 0x15, 0xcb, 0xe9, 0x77, 0x97, 0xee, 0x79, 0xdd, 0xc3, 0xfe, 0xb1, 0xdb, 0x1f, 0x7f, - 0x72, 0xdd, 0x15, 0xbc, 0xe3, 0x44, 0xdd, 0xf5, 0x07, 0x19, 0x36, 0x99, 0xa3, 0xd9, 0xa8, 0x44, - 0x23, 0x21, 0x5a, 0xa3, 0x44, 0x43, 0x95, 0x26, 0x0e, 0x23, 0x52, 0x84, 0x45, 0x06, 0xef, 0x22, - 0x66, 0xc6, 0xf9, 0xc4, 0x2a, 0x30, 0x9e, 0xbd, 0xdb, 0x4c, 0x7c, 0x61, 0xae, 0x85, 0x9e, 0x25, - 0xb2, 0x92, 0x3d, 0xc8, 0x15, 0x7a, 0x6e, 0xab, 0x3f, 0x19, 0x36, 0x4e, 0x76, 0xe4, 0xb8, 0xc1, - 0xbf, 0x65, 0xb9, 0xcd, 0xb2, 0xe1, 0x51, 0x25, 0xae, 0xe4, 0x72, 0x41, 0xa4, 0xe1, 0x7b, 0x1b, - 0x65, 0xd0, 0x52, 0xf9, 0xd9, 0x19, 0xed, 0x13, 0x25, 0x62, 0xbe, 0xb0, 0x2b, 0x1d, 0x77, 0x47, - 0x72, 0x60, 0xb5, 0xdc, 0xf2, 0xc6, 0x8d, 0x51, 0xab, 0xef, 0x21, 0x2c, 0xe4, 0x09, 0x60, 0xb3, - 0xb6, 0x44, 0xc8, 0x61, 0xb4, 0x31, 0x8e, 0xfd, 0xac, 0xcc, 0x82, 0x19, 0x2e, 0x8e, 0xca, 0x4b, - 0xa5, 0x6e, 0xbf, 0xd5, 0xeb, 0xbe, 0x23, 0x9c, 0x32, 0x99, 0xbc, 0x74, 0x20, 0x88, 0x56, 0x90, - 0xae, 0x7d, 0x35, 0xd6, 0x6f, 0xac, 0x96, 0x39, 0x58, 0xe4, 0x2e, 0xfb, 0xcc, 0x85, 0xbd, 0x6e, - 0x54, 0x8b, 0x66, 0x75, 0x47, 0x55, 0xc8, 0x2a, 0x40, 0xdd, 0xaa, 0x15, 0x0c, 0xdb, 0xa6, 0xcf, - 0x29, 0xfa, 0xcc, 0xfd, 0xdb, 0x4b, 0xcd, 0xb2, 0x9a, 0x96, 0x5c, 0xdc, 0x33, 0xda, 0x0f, 0x15, - 0x38, 0x93, 0xdc, 0x95, 0xa4, 0x01, 0x08, 0x72, 0xc0, 0x0f, 0x9f, 0x3f, 0x3f, 0xb3, 0xdf, 0x13, - 0xc9, 0x51, 0xb0, 0x84, 0x31, 0x73, 0xc2, 0x4f, 0x89, 0xc3, 0x22, 0xe6, 0xd5, 0xd7, 0xed, 0x58, - 0xa9, 0x6e, 0x47, 0x2b, 0xc0, 0xc6, 0xb4, 0x32, 0xc2, 0x9f, 0xba, 0x06, 0x39, 0xbd, 0x5e, 0x2f, - 0x9b, 0x05, 0xbd, 0x61, 0xd6, 0xaa, 0xaa, 0x42, 0x96, 0x60, 0x7e, 0xc7, 0xaa, 0x35, 0xeb, 0x6a, - 0x4a, 0xfb, 0xbe, 0x02, 0x2b, 0x66, 0x70, 0x4d, 0xeb, 0x79, 0x27, 0xdf, 0xeb, 0xa1, 0xc9, 0xb7, - 0xe1, 0xc3, 0x81, 0xf8, 0x2f, 0x38, 0xd1, 0xcc, 0xfb, 0x07, 0x05, 0xd6, 0x63, 0x79, 0x88, 0x0d, - 0x8b, 0xfa, 0xbe, 0x5d, 0x33, 0x8b, 0x05, 0x5e, 0xb3, 0x8b, 0xc1, 0xfd, 0x22, 0x8c, 0xf8, 0x14, - 0x7b, 0x0b, 0x73, 0xa1, 0x7d, 0xec, 0x39, 0x83, 0x6e, 0x47, 0x8a, 0xd6, 0xba, 0x3b, 0x67, 0x89, - 0x92, 0x70, 0x27, 0x7b, 0x67, 0x32, 0x72, 0xb1, 0xd8, 0x54, 0xc8, 0x10, 0xea, 0xd3, 0xe3, 0x05, - 0xa3, 0xc3, 0x43, 0x8b, 0xa6, 0xc7, 0x8b, 0x0e, 0xca, 0xdb, 0x5e, 0x81, 0x1c, 0xd7, 0x5a, 0x50, - 0x21, 0xf8, 0x81, 0x02, 0x1b, 0xd3, 0xea, 0x4a, 0x15, 0xa1, 0xb0, 0x3f, 0xfd, 0x19, 0x3f, 0x82, - 0x43, 0xd8, 0x91, 0x5e, 0xb0, 0x91, 0x37, 0x21, 0x67, 0x7a, 0xde, 0xc4, 0x1d, 0xd9, 0xaf, 0x34, - 0x2d, 0x93, 0x0f, 0x90, 0xf3, 0xff, 0xfe, 0xc1, 0xc5, 0xb3, 0xe8, 0x96, 0x30, 0x72, 0xbc, 0x57, - 0x9c, 0xc9, 0xa8, 0x1b, 0x42, 0xbb, 0x97, 0x73, 0x50, 0xb9, 0xb5, 0x35, 0xe9, 0x74, 0x5d, 0x21, - 0xb5, 0x0b, 0x9f, 0x63, 0x4e, 0x93, 0x77, 0x11, 0x41, 0xd3, 0xbe, 0xa3, 0xc0, 0xe6, 0xf4, 0x86, - 0xa1, 0x3b, 0x53, 0x83, 0xdd, 0xfa, 0x11, 0x5e, 0xbf, 0xb8, 0x33, 0xf9, 0x57, 0x83, 0xe4, 0x32, - 0x05, 0x23, 0xcd, 0xe4, 0x47, 0x4f, 0x4f, 0xc5, 0x42, 0x26, 0x87, 0x33, 0x09, 0x46, 0xed, 0x3f, - 0x52, 0x70, 0x86, 0x0e, 0xba, 0x9e, 0xeb, 0x79, 0xfa, 0x64, 0x7c, 0xe4, 0xf6, 0xc7, 0x5c, 0x0c, - 0x23, 0xaf, 0xc2, 0xc2, 0xd1, 0xb3, 0x99, 0x1c, 0x19, 0x3b, 0x21, 0x80, 0x0b, 0xb9, 0x70, 0xb2, - 0xa0, 0xff, 0xc9, 0x65, 0x90, 0x83, 0x54, 0xa7, 0x11, 0x26, 0x33, 0xb5, 0xa1, 0x58, 0x4b, 0x43, - 0x3f, 0x9e, 0xec, 0x6b, 0x30, 0x8f, 0x66, 0x06, 0xbe, 0xa4, 0x0a, 0x51, 0x38, 0xb9, 0x76, 0x68, - 0x84, 0xb0, 0x58, 0x06, 0xf2, 0x19, 0x80, 0x20, 0xc2, 0x00, 0x5f, 0x33, 0x85, 0xfa, 0xed, 0x07, - 0x19, 0xb0, 0x96, 0x8e, 0x0f, 0x5a, 0x1c, 0xb6, 0x3f, 0x0f, 0xeb, 0xa2, 0x59, 0x86, 0x02, 0x5d, - 0x8f, 0x9f, 0x86, 0xad, 0xb1, 0x04, 0x73, 0x28, 0x10, 0xf6, 0xae, 0xc6, 0x02, 0xed, 0x22, 0xc8, - 0x6e, 0x24, 0x9a, 0xee, 0xd5, 0x58, 0x34, 0xdd, 0x2c, 0xe3, 0x92, 0x43, 0xe6, 0x6a, 0xff, 0x9a, - 0x82, 0xa5, 0x7d, 0x2a, 0xac, 0xa0, 0x0a, 0x3e, 0x5b, 0xa5, 0xbf, 0x03, 0xb9, 0xf2, 0xa0, 0xc5, - 0x8f, 0x1d, 0xb8, 0x6f, 0x02, 0xf3, 0x0d, 0xee, 0x0d, 0x5a, 0xe2, 0x04, 0xc3, 0xb3, 0x64, 0xa6, - 0xa7, 0xf8, 0x35, 0xdf, 0x83, 0x05, 0x76, 0x0c, 0xc4, 0xad, 0x4b, 0x42, 0x5c, 0xf5, 0x6b, 0xf4, - 0x32, 0x4b, 0x96, 0x2c, 0xe5, 0xec, 0x28, 0x49, 0x96, 0x9d, 0x38, 0x56, 0xa8, 0x64, 0x70, 0x98, - 0x3f, 0x99, 0xc1, 0x41, 0xc2, 0x44, 0x5b, 0x38, 0x09, 0x26, 0xda, 0xe6, 0x5d, 0xc8, 0x49, 0xf5, - 0x79, 0x26, 0xe9, 0xf5, 0xdb, 0x29, 0x58, 0xc1, 0xaf, 0xf2, 0xef, 0x84, 0xfc, 0x6c, 0x9a, 0x4f, - 0x5e, 0x0f, 0x99, 0x4f, 0x36, 0xe4, 0xfe, 0x62, 0x5f, 0x36, 0xc3, 0x6e, 0x72, 0x0f, 0xd6, 0x63, - 0x8c, 0xe4, 0x73, 0x30, 0x4f, 0xab, 0x2f, 0xd4, 0x4d, 0x35, 0x3a, 0x02, 0x02, 0xfc, 0x5c, 0xfa, - 0xe1, 0x9e, 0xc5, 0xb8, 0xb5, 0xff, 0x56, 0x60, 0x99, 0x87, 0xaf, 0xe8, 0x1f, 0x0c, 0x9e, 0xda, - 0x9c, 0xd7, 0xa3, 0xcd, 0xc9, 0x50, 0x3a, 0x78, 0x73, 0xfe, 0x6f, 0x37, 0xe2, 0xdd, 0x50, 0x23, - 0x9e, 0xf5, 0xd1, 0xf4, 0xc4, 0xe7, 0xcc, 0x68, 0xc3, 0xbf, 0x45, 0x7c, 0xd9, 0x30, 0x23, 0xf9, - 0x3a, 0x2c, 0x55, 0xdd, 0xc7, 0x21, 0xad, 0xed, 0xfa, 0x94, 0x42, 0x5f, 0xf6, 0x19, 0xd9, 0x9c, - 0xc2, 0x0d, 0xaf, 0xef, 0x3e, 0x76, 0x62, 0x27, 0x50, 0x41, 0x91, 0x54, 0x71, 0x0b, 0x67, 0x7b, - 0x96, 0xa1, 0xcf, 0x1d, 0x25, 0x11, 0x78, 0xe6, 0xbb, 0x69, 0x80, 0xc0, 0xc7, 0x8c, 0x4e, 0xc0, - 0xd0, 0xe1, 0xbb, 0x30, 0x78, 0x23, 0x49, 0x1e, 0xe3, 0xe2, 0x4c, 0xfe, 0x3a, 0x37, 0xcc, 0xa6, - 0xa6, 0xa3, 0x1d, 0xa2, 0x89, 0xb6, 0xc0, 0x9d, 0x9a, 0x3a, 0x6e, 0xaf, 0xc5, 0xd6, 0xf6, 0xf4, - 0xf6, 0x55, 0x04, 0xb7, 0xf5, 0xa9, 0x53, 0xe2, 0x10, 0xa3, 0xeb, 0x53, 0x91, 0x32, 0xc4, 0xfc, - 0x36, 0x33, 0xcf, 0xe6, 0xb7, 0x59, 0x87, 0xa5, 0x6e, 0xff, 0x91, 0xdb, 0x1f, 0x0f, 0x46, 0x4f, - 0xd0, 0x1a, 0x1d, 0x98, 0xb9, 0x68, 0x13, 0x98, 0x22, 0x8d, 0xf5, 0x03, 0x6e, 0x8c, 0x3e, 0xbf, - 0xdc, 0x0d, 0x3e, 0xd1, 0xf7, 0x3b, 0x9d, 0x57, 0x17, 0xee, 0x65, 0xb2, 0x0b, 0xea, 0xe2, 0xbd, - 0x4c, 0x36, 0xab, 0x2e, 0xdd, 0xcb, 0x64, 0x97, 0x54, 0xb0, 0xa4, 0xf3, 0x1d, 0xff, 0xfc, 0x46, - 0x3a, 0x72, 0x09, 0x1f, 0xa7, 0x68, 0x3f, 0x4d, 0x01, 0x89, 0x57, 0x83, 0xbc, 0x0e, 0x39, 0xb6, - 0xc0, 0x3a, 0x23, 0xef, 0x9b, 0xfc, 0xda, 0x3a, 0x83, 0xef, 0x91, 0xc8, 0x32, 0x7c, 0x0f, 0x23, - 0x5b, 0xde, 0x37, 0x7b, 0xe4, 0x6b, 0x70, 0x0a, 0x9b, 0x77, 0xe8, 0x8e, 0xba, 0x83, 0x8e, 0x83, - 0x58, 0xab, 0xad, 0x1e, 0x8f, 0x19, 0xf8, 0x12, 0x06, 0xb7, 0x8d, 0x27, 0x4f, 0xe9, 0x06, 0x74, - 0x25, 0xab, 0x23, 0x67, 0x9d, 0x31, 0x92, 0x06, 0xa8, 0x72, 0xfe, 0x83, 0x49, 0xaf, 0xc7, 0x7b, - 0x36, 0x4f, 0x15, 0xdd, 0x68, 0xda, 0x94, 0x82, 0x57, 0x83, 0x82, 0x4b, 0x93, 0x5e, 0x8f, 0xbc, - 0x0a, 0x30, 0xe8, 0x3b, 0xc7, 0x5d, 0xcf, 0x63, 0x67, 0x1c, 0xbe, 0xd7, 0x6b, 0x40, 0x95, 0x3b, - 0x63, 0xd0, 0xaf, 0x30, 0x22, 0xf9, 0x05, 0x40, 0xaf, 0x7f, 0x84, 0xc3, 0x60, 0xb7, 0x5a, 0x78, - 0x14, 0x10, 0x41, 0x0c, 0x3b, 0xd9, 0x1e, 0xba, 0x76, 0xf7, 0x1d, 0xe1, 0x32, 0xf0, 0x16, 0xac, - 0xf3, 0x4b, 0xa8, 0xfb, 0xdd, 0xf1, 0x11, 0x97, 0xb0, 0x9f, 0x47, 0x3c, 0x97, 0x44, 0xec, 0x7f, - 0xca, 0x00, 0xe8, 0xfb, 0xb6, 0x40, 0x9a, 0xba, 0x09, 0xf3, 0x54, 0x6f, 0x10, 0xf6, 0x07, 0xb4, - 0xde, 0x62, 0xb9, 0xb2, 0xf5, 0x16, 0x39, 0xe8, 0x6c, 0xb4, 0xf0, 0x72, 0xb6, 0xb0, 0x3d, 0xe0, - 0x6c, 0x64, 0xf7, 0xb5, 0x43, 0x48, 0xbf, 0x9c, 0x8b, 0x94, 0x01, 0x02, 0xec, 0x27, 0xae, 0xc9, - 0xae, 0x07, 0x20, 0x2a, 0x3c, 0x81, 0x47, 0x1b, 0x08, 0xf0, 0xa3, 0xe4, 0xe1, 0x13, 0xb0, 0x91, - 0xfb, 0x90, 0x69, 0xb4, 0x7c, 0x9f, 0xce, 0x29, 0x88, 0x58, 0x97, 0x78, 0x4c, 0xc7, 0x00, 0x15, - 0x6b, 0x75, 0xdc, 0x0a, 0x85, 0xbe, 0xc5, 0x42, 0x88, 0x01, 0x0b, 0x3c, 0x5e, 0xf7, 0x14, 0x24, - 0x45, 0x1e, 0xae, 0x9b, 0xe3, 0x27, 0x23, 0x51, 0x96, 0x29, 0x78, 0x64, 0xee, 0x3b, 0x90, 0xb6, - 0xed, 0x0a, 0xc7, 0x81, 0x58, 0x09, 0xb4, 0x12, 0xdb, 0xae, 0xb0, 0x33, 0x4a, 0xcf, 0x3b, 0x96, - 0xb2, 0x51, 0x66, 0xf2, 0x05, 0xc8, 0x49, 0xe2, 0x33, 0x47, 0x50, 0xc1, 0x36, 0x90, 0xbc, 0x66, - 0xe4, 0x45, 0x43, 0xe2, 0x26, 0x65, 0x50, 0xef, 0x4f, 0x1e, 0xba, 0xfa, 0x70, 0x88, 0xee, 0x74, - 0x8f, 0xdc, 0x11, 0x13, 0xdb, 0xb2, 0x01, 0xf4, 0x30, 0xde, 0xb5, 0xef, 0x88, 0x54, 0xd9, 0x06, - 0x13, 0xcd, 0x49, 0xea, 0xb0, 0x6e, 0xbb, 0xe3, 0xc9, 0x90, 0xdd, 0xd3, 0x28, 0x0d, 0x46, 0x54, - 0x09, 0x61, 0x78, 0x2b, 0x88, 0xd2, 0xea, 0xd1, 0x44, 0x71, 0x39, 0xe6, 0x60, 0x30, 0x8a, 0x28, - 0x24, 0xf1, 0xcc, 0x9a, 0x2b, 0x77, 0x39, 0xdd, 0x55, 0xc3, 0xaa, 0x0d, 0xee, 0xaa, 0x42, 0xb5, - 0x09, 0x14, 0x9a, 0xcf, 0x24, 0x60, 0x82, 0xe1, 0x81, 0x99, 0x84, 0x09, 0x16, 0x42, 0x02, 0x7b, - 0x2f, 0x23, 0xc1, 0x52, 0xf2, 0xbe, 0x78, 0x03, 0xe0, 0xde, 0xa0, 0xdb, 0xaf, 0xb8, 0xe3, 0xa3, - 0x41, 0x47, 0x82, 0x26, 0xcb, 0xfd, 0xf2, 0xa0, 0xdb, 0x77, 0x8e, 0x91, 0xfc, 0xd3, 0x0f, 0x2e, - 0x4a, 0x4c, 0x96, 0xf4, 0x9f, 0x7c, 0x1a, 0x96, 0xe8, 0x53, 0x23, 0xb8, 0x6d, 0xc2, 0x4c, 0x95, - 0x98, 0x9b, 0x05, 0x6f, 0x08, 0x18, 0xc8, 0x5d, 0x0c, 0x57, 0xd2, 0x1d, 0x8e, 0x25, 0xe1, 0x55, - 0xc4, 0x26, 0xe9, 0x0e, 0xc7, 0x51, 0xa4, 0x61, 0x89, 0x99, 0xec, 0xfa, 0x55, 0x17, 0x11, 0x86, - 0x78, 0x54, 0x14, 0xb4, 0xc7, 0xf1, 0xb1, 0xe6, 0x08, 0x88, 0x53, 0x39, 0x16, 0x6c, 0x24, 0x1b, - 0x56, 0xc2, 0xde, 0x2d, 0xb2, 0x03, 0x14, 0x2e, 0xd4, 0xb2, 0x4a, 0x78, 0x47, 0x1d, 0xa7, 0x8d, - 0xe4, 0x50, 0x25, 0x7c, 0x66, 0xb2, 0x0d, 0x6b, 0x4c, 0xc6, 0xf7, 0x23, 0x15, 0x72, 0x11, 0x17, - 0xd7, 0xb6, 0x20, 0x94, 0xa1, 0xfc, 0xfa, 0x48, 0x06, 0x52, 0x82, 0x79, 0x54, 0x08, 0xf9, 0x15, - 0xf3, 0x2d, 0x59, 0x7b, 0x8e, 0xce, 0x23, 0x5c, 0x57, 0x50, 0x6f, 0x96, 0xd7, 0x15, 0x64, 0x25, - 0x5f, 0x01, 0x30, 0xfa, 0xa3, 0x41, 0xaf, 0x87, 0x20, 0xbc, 0x59, 0x54, 0xa5, 0xce, 0x87, 0xe7, - 0x23, 0x96, 0x12, 0x30, 0x71, 0xc0, 0x38, 0x7c, 0x76, 0x22, 0x50, 0xbd, 0x52, 0x59, 0x9a, 0x09, - 0x0b, 0x6c, 0x32, 0x22, 0xa0, 0x35, 0x0f, 0xd1, 0x21, 0xc1, 0x21, 0x33, 0x40, 0x6b, 0x4e, 0x8f, - 0x03, 0x5a, 0x4b, 0x19, 0xb4, 0xfb, 0x70, 0x3a, 0xe9, 0xc3, 0x42, 0x2a, 0xac, 0x72, 0x52, 0x15, - 0xf6, 0x4f, 0xd2, 0xb0, 0x8c, 0xa5, 0x89, 0x55, 0x58, 0x87, 0x15, 0x7b, 0xf2, 0xd0, 0x47, 0x7b, - 0x12, 0xab, 0x31, 0xd6, 0xcf, 0x93, 0x13, 0xe4, 0xa3, 0xad, 0x50, 0x0e, 0x62, 0xc0, 0xaa, 0xd8, - 0x09, 0x76, 0xc4, 0x0d, 0x74, 0x1f, 0x4b, 0x5a, 0x20, 0x16, 0xc6, 0x23, 0xb5, 0x46, 0x32, 0x05, - 0xfb, 0x41, 0xfa, 0x59, 0xf6, 0x83, 0xcc, 0x89, 0xf6, 0x83, 0xb7, 0x61, 0x59, 0xbc, 0x0d, 0x57, - 0xf2, 0xf9, 0xe7, 0x5b, 0xc9, 0x43, 0x85, 0x91, 0xb2, 0xbf, 0xa2, 0x2f, 0xcc, 0x5c, 0xd1, 0xf1, - 0xbc, 0x50, 0xcc, 0xb2, 0x21, 0xd2, 0xe2, 0x0b, 0x3b, 0x86, 0x32, 0xdc, 0x29, 0xd4, 0x3f, 0xc2, - 0x2e, 0xf9, 0x39, 0x58, 0x2a, 0x0f, 0xc4, 0x51, 0x91, 0x64, 0xa3, 0xef, 0x09, 0xa2, 0x2c, 0x2e, - 0xf8, 0x9c, 0xfe, 0xee, 0x96, 0xfe, 0x38, 0x76, 0xb7, 0xbb, 0x00, 0xdc, 0xb5, 0x21, 0x08, 0x41, - 0x86, 0x53, 0x46, 0x20, 0x5d, 0x84, 0x8f, 0x0a, 0x24, 0x66, 0xba, 0x3a, 0xf1, 0x5b, 0x28, 0x7a, - 0xbb, 0x3d, 0x98, 0xf4, 0xc7, 0xa1, 0x98, 0xbd, 0xc2, 0x13, 0xb2, 0xc5, 0xd3, 0xe4, 0xe5, 0x21, - 0x92, 0xed, 0xe3, 0xed, 0x10, 0xf2, 0x65, 0xff, 0x12, 0xdd, 0xe2, 0xac, 0x16, 0xd2, 0x62, 0x2d, - 0x34, 0xf5, 0xea, 0x9c, 0xf6, 0x43, 0x45, 0x06, 0xf2, 0xff, 0x08, 0x5d, 0xfd, 0x1a, 0x80, 0x7f, - 0x56, 0x2f, 0xfa, 0x9a, 0xe9, 0x4b, 0x3e, 0x55, 0x6e, 0xe5, 0x80, 0x57, 0xfa, 0x9a, 0xf4, 0xc7, - 0xf5, 0x35, 0x0d, 0xc8, 0xd5, 0xbe, 0x31, 0x6e, 0x05, 0x97, 0x3b, 0xc0, 0xf6, 0x25, 0x59, 0x5c, - 0x99, 0xd2, 0xdb, 0xd7, 0x70, 0x6f, 0x08, 0xe4, 0xe0, 0x29, 0x22, 0xb0, 0x94, 0x51, 0xfb, 0x4b, - 0x05, 0xd6, 0x64, 0xf7, 0xed, 0x27, 0xfd, 0x36, 0xf9, 0x22, 0xc3, 0x15, 0x55, 0x42, 0x2a, 0x8b, - 0xc4, 0x44, 0x97, 0xdc, 0x27, 0xfd, 0x36, 0x13, 0x80, 0x5a, 0x8f, 0xe5, 0xca, 0xd2, 0x8c, 0xe4, - 0x21, 0x2c, 0xd7, 0x07, 0xbd, 0x1e, 0x15, 0x6b, 0x46, 0x8f, 0xb8, 0x02, 0x40, 0x0b, 0x8a, 0x9e, - 0x18, 0x88, 0x0a, 0x6d, 0x5f, 0xe1, 0x7a, 0xee, 0xd9, 0x21, 0x5d, 0xef, 0xbb, 0x3c, 0x5f, 0x50, - 0xec, 0xbb, 0xe8, 0x6f, 0x25, 0x97, 0xa9, 0xfd, 0x58, 0x01, 0x12, 0xaf, 0x92, 0xbc, 0x64, 0x29, - 0xff, 0x07, 0x22, 0x6c, 0x44, 0xf4, 0xcb, 0x3c, 0x8b, 0xe8, 0x97, 0xff, 0x5d, 0x05, 0xd6, 0x4c, - 0xbd, 0xc2, 0xa1, 0xfd, 0xd9, 0xc1, 0xc6, 0x65, 0x38, 0x6f, 0xea, 0x15, 0xa7, 0x5e, 0x2b, 0x9b, - 0x85, 0x07, 0x4e, 0x22, 0x62, 0xef, 0x79, 0x78, 0x31, 0xce, 0x12, 0x1c, 0x80, 0x9c, 0x83, 0x8d, - 0x78, 0xb2, 0x40, 0xf5, 0x4d, 0xce, 0x2c, 0x00, 0x80, 0xd3, 0xf9, 0x37, 0x61, 0x4d, 0x20, 0xd8, - 0x36, 0xca, 0x36, 0x62, 0xe4, 0xaf, 0x41, 0x6e, 0xcf, 0xb0, 0xcc, 0xd2, 0x03, 0xa7, 0xd4, 0x2c, - 0x97, 0xd5, 0x39, 0xb2, 0x02, 0x4b, 0x9c, 0x50, 0xd0, 0x55, 0x85, 0x2c, 0x43, 0xd6, 0xac, 0xda, - 0x46, 0xa1, 0x69, 0x19, 0x6a, 0x2a, 0xff, 0x26, 0xac, 0xd6, 0x47, 0xdd, 0x47, 0xad, 0xb1, 0x7b, - 0xdf, 0x7d, 0x82, 0xe7, 0x17, 0x8b, 0x90, 0xb6, 0xf4, 0x7d, 0x75, 0x8e, 0x00, 0x2c, 0xd4, 0xef, - 0x17, 0xec, 0xdb, 0xb7, 0x55, 0x85, 0xe4, 0x60, 0x71, 0xa7, 0x50, 0x77, 0xee, 0x57, 0x6c, 0x35, - 0x45, 0x1f, 0xf4, 0x7d, 0x1b, 0x1f, 0xd2, 0xf9, 0xcf, 0xc2, 0x3a, 0x0a, 0x24, 0xe5, 0xae, 0x37, - 0x76, 0xfb, 0xee, 0x08, 0xeb, 0xb0, 0x0c, 0x59, 0xdb, 0xa5, 0x2b, 0xc9, 0xd8, 0x65, 0x15, 0xa8, - 0x4c, 0x7a, 0xe3, 0xee, 0xb0, 0xe7, 0x7e, 0x4b, 0x55, 0xf2, 0x77, 0x61, 0xcd, 0x1a, 0x4c, 0xc6, - 0xdd, 0xfe, 0xa1, 0x3d, 0xa6, 0x1c, 0x87, 0x4f, 0xc8, 0x0b, 0xb0, 0xde, 0xac, 0xea, 0x95, 0x6d, - 0x73, 0xa7, 0x59, 0x6b, 0xda, 0x4e, 0x45, 0x6f, 0x14, 0x76, 0xd9, 0xe9, 0x49, 0xa5, 0x66, 0x37, - 0x1c, 0xcb, 0x28, 0x18, 0xd5, 0x86, 0xaa, 0xe4, 0xbf, 0x87, 0xb6, 0x95, 0xf6, 0xa0, 0xdf, 0x29, - 0xb5, 0xda, 0xe3, 0xc1, 0x08, 0x2b, 0xac, 0xc1, 0x05, 0xdb, 0x28, 0xd4, 0xaa, 0x45, 0xa7, 0xa4, - 0x17, 0x1a, 0x35, 0x2b, 0x09, 0x32, 0x7a, 0x13, 0xce, 0x24, 0xf0, 0xd4, 0x1a, 0x75, 0x55, 0x21, - 0x17, 0x61, 0x2b, 0x21, 0x6d, 0xdf, 0xd8, 0xd6, 0x9b, 0x8d, 0xdd, 0xaa, 0x9a, 0x9a, 0x92, 0xd9, - 0xb6, 0x6b, 0x6a, 0x3a, 0xff, 0x9b, 0x0a, 0xac, 0x36, 0x3d, 0x7e, 0x75, 0xb9, 0x89, 0x5e, 0x8b, - 0x97, 0xe0, 0x5c, 0xd3, 0x36, 0x2c, 0xa7, 0x51, 0xbb, 0x6f, 0x54, 0x9d, 0xa6, 0xad, 0xef, 0x44, - 0x6b, 0x73, 0x11, 0xb6, 0x24, 0x0e, 0xcb, 0x28, 0xd4, 0xf6, 0x0c, 0xcb, 0xa9, 0xeb, 0xb6, 0xbd, - 0x5f, 0xb3, 0x8a, 0xaa, 0x42, 0xdf, 0x98, 0xc0, 0x50, 0x29, 0xe9, 0xac, 0x36, 0xa1, 0xb4, 0xaa, - 0xb1, 0xaf, 0x97, 0x9d, 0xed, 0x5a, 0x43, 0x4d, 0xe7, 0x2b, 0x74, 0x7f, 0x47, 0xe0, 0x56, 0x76, - 0xe1, 0x2e, 0x0b, 0x99, 0x6a, 0xad, 0x6a, 0x44, 0xcf, 0xdc, 0x96, 0x21, 0xab, 0xd7, 0xeb, 0x56, - 0x6d, 0x0f, 0x87, 0x18, 0xc0, 0x42, 0xd1, 0xa8, 0xd2, 0x9a, 0xa5, 0x69, 0x4a, 0xdd, 0xaa, 0x55, - 0x6a, 0x0d, 0xa3, 0xa8, 0x66, 0xf2, 0x96, 0x98, 0xc2, 0xa2, 0xd0, 0xf6, 0x80, 0x1d, 0x70, 0x15, - 0x8d, 0x92, 0xde, 0x2c, 0x37, 0x78, 0x17, 0x3d, 0x70, 0x2c, 0xe3, 0xcb, 0x4d, 0xc3, 0x6e, 0xd8, - 0xaa, 0x42, 0x54, 0x58, 0xae, 0x1a, 0x46, 0xd1, 0x76, 0x2c, 0x63, 0xcf, 0x34, 0xf6, 0xd5, 0x14, - 0x2d, 0x93, 0xfd, 0xa7, 0x6f, 0xc8, 0xbf, 0xa7, 0x00, 0x61, 0xa0, 0xb7, 0x22, 0x92, 0x0a, 0x8e, - 0x98, 0x0b, 0xb0, 0xb9, 0x4b, 0xbb, 0x1a, 0x3f, 0xad, 0x52, 0x2b, 0x46, 0x9b, 0xec, 0x0c, 0x90, - 0x48, 0x7a, 0xad, 0x54, 0x52, 0x15, 0xb2, 0x05, 0xa7, 0x22, 0xf4, 0xa2, 0x55, 0xab, 0xab, 0xa9, - 0xcd, 0x54, 0x56, 0x21, 0x67, 0x63, 0x89, 0xf7, 0x0d, 0xa3, 0xae, 0xa6, 0x69, 0x17, 0x45, 0x12, - 0xc4, 0x94, 0x60, 0xd9, 0x33, 0xf9, 0xef, 0x28, 0x70, 0x86, 0x55, 0x53, 0xcc, 0x2f, 0xbf, 0xaa, - 0xe7, 0x60, 0x83, 0x43, 0x79, 0x27, 0x55, 0xf4, 0x34, 0xa8, 0xa1, 0x54, 0x56, 0xcd, 0x17, 0x60, - 0x3d, 0x44, 0xc5, 0x7a, 0xa4, 0xe8, 0xea, 0x11, 0x22, 0x6f, 0x1b, 0x76, 0xc3, 0x31, 0x4a, 0xa5, - 0x9a, 0xd5, 0x60, 0x15, 0x49, 0xe7, 0x35, 0x58, 0x2f, 0xb8, 0xa3, 0x31, 0x55, 0xbd, 0xfa, 0x5e, - 0x77, 0xd0, 0xc7, 0x2a, 0xac, 0xc0, 0x92, 0xf1, 0x95, 0x86, 0x51, 0xb5, 0xcd, 0x5a, 0x55, 0x9d, - 0xcb, 0x9f, 0x8b, 0xf0, 0x88, 0x79, 0x6c, 0xdb, 0xbb, 0xea, 0x5c, 0xbe, 0x05, 0x2b, 0xe2, 0x92, - 0x30, 0x1b, 0x15, 0x17, 0x60, 0x53, 0x8c, 0x35, 0x5c, 0x51, 0xa2, 0x9f, 0xb0, 0x01, 0xa7, 0xe3, - 0xe9, 0x46, 0x43, 0x55, 0x68, 0x2f, 0x44, 0x52, 0x28, 0x3d, 0x95, 0xff, 0x75, 0x05, 0x56, 0xfc, - 0x43, 0x13, 0x34, 0xd3, 0x5e, 0x84, 0xad, 0x4a, 0x49, 0x77, 0x8a, 0xc6, 0x9e, 0x59, 0x30, 0x9c, - 0xfb, 0x66, 0xb5, 0x18, 0x79, 0xc9, 0x8b, 0xf0, 0x42, 0x02, 0x03, 0xbe, 0x65, 0x03, 0x4e, 0x47, - 0x93, 0x1a, 0x74, 0xaa, 0xa6, 0x68, 0xd3, 0x47, 0x53, 0xfc, 0x79, 0x9a, 0xce, 0xff, 0xb1, 0x02, - 0x1b, 0x3c, 0x54, 0x3d, 0x3f, 0xbe, 0x61, 0x31, 0x4c, 0x10, 0xe4, 0x37, 0x0f, 0xd7, 0x1b, 0x56, - 0xd3, 0x6e, 0x18, 0x45, 0x91, 0x9d, 0x0e, 0x5a, 0xd3, 0x32, 0x2a, 0x46, 0xb5, 0x11, 0xa9, 0xdb, - 0x2d, 0xf8, 0xd4, 0x0c, 0xde, 0x6a, 0xad, 0x21, 0x9e, 0xe9, 0x5c, 0xfd, 0x14, 0x5c, 0x99, 0xc1, - 0xec, 0x33, 0xa6, 0xf2, 0x7b, 0xb0, 0x6a, 0xeb, 0x95, 0x72, 0x69, 0x30, 0x6a, 0xbb, 0xfa, 0x64, - 0x7c, 0xd4, 0x27, 0x5b, 0x70, 0xb6, 0x54, 0xb3, 0x0a, 0x86, 0x83, 0x5f, 0x10, 0xa9, 0xc4, 0x29, - 0x58, 0x93, 0x13, 0x1f, 0x18, 0x74, 0x76, 0x11, 0x58, 0x95, 0x89, 0xd5, 0x9a, 0x9a, 0xca, 0x7f, - 0x15, 0x96, 0x43, 0xf1, 0xde, 0xce, 0xc2, 0x29, 0xf9, 0xb9, 0xee, 0xf6, 0x3b, 0xdd, 0xfe, 0xa1, - 0x3a, 0x17, 0x4d, 0xb0, 0x26, 0xfd, 0x3e, 0x4d, 0xc0, 0xe5, 0x46, 0x4e, 0x68, 0xb8, 0xa3, 0xe3, - 0x6e, 0xbf, 0x35, 0x76, 0x3b, 0x6a, 0x2a, 0xff, 0x32, 0xac, 0x84, 0x50, 0xa6, 0xe9, 0xb8, 0x2a, - 0xd7, 0xf8, 0xfe, 0x50, 0x31, 0x8a, 0x66, 0xb3, 0xa2, 0xce, 0xd3, 0x85, 0x66, 0xd7, 0xdc, 0xd9, - 0x55, 0x21, 0xff, 0x7d, 0x85, 0xaa, 0x41, 0xd8, 0xee, 0x95, 0x92, 0x2e, 0x46, 0x22, 0x9d, 0x05, - 0x0c, 0xbb, 0xde, 0xb0, 0x6d, 0x76, 0x12, 0x7e, 0x0e, 0x36, 0xf8, 0x83, 0xa3, 0x57, 0x8b, 0xce, - 0xae, 0x6e, 0x15, 0xf7, 0x75, 0x8b, 0x4e, 0x8d, 0x07, 0x6a, 0x0a, 0xe7, 0xbb, 0x44, 0x71, 0x1a, - 0xb5, 0x66, 0x61, 0x57, 0x4d, 0xd3, 0xe9, 0x15, 0xa2, 0xd7, 0xcd, 0xaa, 0x9a, 0xc1, 0xd5, 0x23, - 0xc6, 0x8d, 0xc5, 0xd2, 0xf4, 0xf9, 0xfc, 0x87, 0x0a, 0x9c, 0xb5, 0xbb, 0x87, 0xfd, 0xd6, 0x78, - 0x32, 0x72, 0xf5, 0xde, 0xe1, 0x60, 0xd4, 0x1d, 0x1f, 0x1d, 0xdb, 0x93, 0xee, 0xd8, 0x25, 0x37, - 0xe1, 0x9a, 0x6d, 0xee, 0x54, 0xf5, 0x06, 0x9d, 0xfd, 0x7a, 0x79, 0xa7, 0x66, 0x99, 0x8d, 0xdd, - 0x8a, 0x63, 0x37, 0xcd, 0xd8, 0xc4, 0xb8, 0x0a, 0x97, 0xa6, 0xb3, 0x96, 0x8d, 0x1d, 0xbd, 0xf0, - 0x40, 0x55, 0x66, 0x17, 0xb8, 0xad, 0x97, 0xf5, 0x6a, 0xc1, 0x28, 0x3a, 0x7b, 0xb7, 0xd5, 0x14, - 0xb9, 0x06, 0x97, 0xa7, 0xb3, 0x96, 0xcc, 0xba, 0x4d, 0xd9, 0xd2, 0xb3, 0xdf, 0xbb, 0x6b, 0x57, - 0x28, 0x57, 0x26, 0xff, 0x47, 0x0a, 0x6c, 0x4c, 0x83, 0x1a, 0x22, 0xd7, 0x41, 0x33, 0xaa, 0x0d, - 0x4b, 0x37, 0x8b, 0x4e, 0xc1, 0x32, 0x8a, 0x46, 0xb5, 0x61, 0xea, 0x65, 0xdb, 0xb1, 0x6b, 0x4d, - 0x3a, 0x9a, 0x82, 0x0b, 0x0b, 0x57, 0xe0, 0xe2, 0x0c, 0xbe, 0x9a, 0x59, 0x2c, 0xa8, 0x0a, 0xb9, - 0x0d, 0x2f, 0xcd, 0x60, 0xb2, 0x1f, 0xd8, 0x0d, 0xa3, 0x22, 0xa7, 0xa8, 0xa9, 0x7c, 0x01, 0x36, - 0xa7, 0x63, 0x91, 0xd0, 0x5d, 0x24, 0xdc, 0xd2, 0x59, 0xc8, 0x14, 0xe9, 0xc6, 0x15, 0x0a, 0x71, - 0x90, 0xef, 0x82, 0x1a, 0x85, 0x13, 0x88, 0xdd, 0x2c, 0xb1, 0x9a, 0xd5, 0x2a, 0xdb, 0xe5, 0xd6, - 0x20, 0x57, 0x6b, 0xec, 0x1a, 0x16, 0x0f, 0x12, 0x81, 0x51, 0x21, 0x9a, 0x55, 0x3a, 0x71, 0x6a, - 0x96, 0xf9, 0x16, 0x6e, 0x77, 0x1b, 0x70, 0xda, 0x2e, 0xeb, 0x85, 0xfb, 0x38, 0xa7, 0xcd, 0xaa, - 0x53, 0xd8, 0xd5, 0xab, 0x55, 0xa3, 0xac, 0x02, 0x36, 0xe6, 0x34, 0x17, 0x42, 0xf2, 0x69, 0xb8, - 0x51, 0xbb, 0xdf, 0xd0, 0x9d, 0x7a, 0xb9, 0xb9, 0x63, 0x56, 0x1d, 0xfb, 0x41, 0xb5, 0x20, 0x44, - 0xb3, 0x42, 0x7c, 0x47, 0xb8, 0x01, 0x57, 0x67, 0x72, 0x07, 0xe1, 0x1c, 0xae, 0x83, 0x36, 0x93, - 0x93, 0x7f, 0x48, 0xfe, 0x47, 0x0a, 0x6c, 0xcd, 0x38, 0xe2, 0x26, 0x2f, 0xc1, 0xcd, 0x5d, 0x43, - 0x2f, 0x96, 0x0d, 0xdb, 0xc6, 0x85, 0x82, 0x76, 0x03, 0xbb, 0x81, 0x92, 0xb8, 0xde, 0xdf, 0x84, - 0x6b, 0xb3, 0xd9, 0x03, 0xc9, 0xe1, 0x06, 0x5c, 0x9d, 0xcd, 0xca, 0x25, 0x89, 0x14, 0x5d, 0x6f, - 0x67, 0x73, 0xfa, 0x12, 0x48, 0x3a, 0xff, 0xdb, 0x0a, 0x9c, 0x49, 0xb6, 0x33, 0xd1, 0xba, 0x99, - 0x55, 0xbb, 0xa1, 0x97, 0xcb, 0x4e, 0x5d, 0xb7, 0xf4, 0x8a, 0x63, 0x54, 0xad, 0x5a, 0xb9, 0x9c, - 0xb4, 0xf3, 0x5e, 0x85, 0x4b, 0xd3, 0x59, 0xed, 0x82, 0x65, 0xd6, 0xe9, 0xe6, 0xa2, 0xc1, 0x85, - 0xe9, 0x5c, 0x86, 0x59, 0x30, 0xd4, 0xd4, 0xf6, 0x1b, 0xef, 0xff, 0xcb, 0x85, 0xb9, 0xf7, 0x3f, - 0xbc, 0xa0, 0xfc, 0xf8, 0xc3, 0x0b, 0xca, 0x3f, 0x7f, 0x78, 0x41, 0x79, 0xeb, 0xd6, 0xc9, 0x22, - 0x21, 0xa1, 0x5a, 0xf2, 0x70, 0x01, 0x15, 0xa8, 0x57, 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff, 0x1d, - 0xc1, 0x21, 0xab, 0xdd, 0xb0, 0x01, 0x00, + 0xf1, 0xff, 0xb1, 0xf7, 0x75, 0xb1, 0x6d, 0x64, 0xd7, 0xc1, 0x1a, 0x92, 0x92, 0xa8, 0x43, 0xfd, + 0x8c, 0xae, 0xb5, 0xb6, 0x56, 0xf2, 0xca, 0xeb, 0xf1, 0x4f, 0x6c, 0x3a, 0xbb, 0x89, 0xbd, 0x5f, + 0xb2, 0x71, 0x92, 0x4d, 0x32, 0x22, 0x87, 0x22, 0x2d, 0xfe, 0x65, 0x86, 0x94, 0xe2, 0x6c, 0x92, + 0xf9, 0x68, 0x71, 0x24, 0x4d, 0x43, 0x91, 0x0c, 0x87, 0xb4, 0xe3, 0xa0, 0x40, 0x1b, 0x14, 0x48, + 0x80, 0xfe, 0xa5, 0x4d, 0x0b, 0x34, 0x28, 0x0a, 0xf4, 0xa1, 0x8b, 0xa2, 0x0f, 0x79, 0x2d, 0x5a, + 0xb4, 0x05, 0x8a, 0xbc, 0x05, 0x08, 0x02, 0x04, 0xe8, 0x5b, 0x0b, 0x2c, 0xda, 0x05, 0xda, 0x87, + 0xb6, 0x6f, 0x45, 0xf3, 0x90, 0xa7, 0xe2, 0x9e, 0x7b, 0xef, 0xcc, 0x9d, 0x1f, 0xd2, 0x72, 0xbc, + 0x69, 0x13, 0x20, 0x4f, 0xe4, 0x9c, 0x7b, 0xce, 0x9d, 0x3b, 0xf7, 0xf7, 0x9c, 0x73, 0xcf, 0x0f, + 0xc5, 0xf7, 0x6b, 0xbd, 0xd0, 0x89, 0x03, 0xf9, 0x37, 0x7c, 0x3d, 0x25, 0x96, 0x7a, 0x42, 0x73, + 0x12, 0xa6, 0xb5, 0x92, 0x34, 0xad, 0xcf, 0xbf, 0xa6, 0xea, 0x40, 0xe4, 0xcd, 0x8a, 0x69, 0x3d, + 0xb9, 0x41, 0x95, 0xe0, 0xd3, 0x79, 0x43, 0xa4, 0xad, 0xc1, 0x62, 0xc9, 0x34, 0xd7, 0x8f, 0xa2, + 0x20, 0xb2, 0x0d, 0x4b, 0x7e, 0xbe, 0x6a, 0x7e, 0x70, 0x64, 0x19, 0xa0, 0xd2, 0x25, 0xaf, 0xc2, + 0x32, 0x63, 0xc9, 0x43, 0x6b, 0x0e, 0x10, 0xa6, 0xd3, 0x85, 0x27, 0xfa, 0x40, 0x81, 0x57, 0x9f, + 0xd5, 0x87, 0xe4, 0x10, 0x2e, 0xa2, 0x59, 0x87, 0x37, 0xf0, 0x87, 0xc1, 0x3e, 0xea, 0x1c, 0x9d, + 0x3a, 0x7c, 0xd6, 0x6a, 0x89, 0x83, 0x31, 0x1c, 0x5a, 0x56, 0x43, 0x1a, 0x87, 0xe1, 0xd0, 0xf2, + 0x06, 0xe2, 0xb9, 0x40, 0xc9, 0x79, 0x1b, 0xba, 0xb0, 0x3d, 0x83, 0x52, 0xda, 0x38, 0x14, 0x79, + 0xe3, 0xb8, 0x05, 0xea, 0xb1, 0xd3, 0xa5, 0x3c, 0xb1, 0xd3, 0xc5, 0xa6, 0x3d, 0xbe, 0xc7, 0x32, + 0xb4, 0x9b, 0xab, 0x3e, 0xdc, 0xf2, 0x06, 0x07, 0xf7, 0xf8, 0x5b, 0xce, 0xc4, 0x91, 0x27, 0x8b, + 0x15, 0xe4, 0x75, 0xb8, 0x10, 0x09, 0x38, 0x12, 0x78, 0xb0, 0x9b, 0xeb, 0xb4, 0x28, 0x1c, 0x9e, + 0xea, 0x2a, 0x2c, 0x8b, 0x59, 0x31, 0xf2, 0xfd, 0xe0, 0xcc, 0x1c, 0x87, 0xd1, 0x55, 0xc7, 0x5f, + 0x37, 0x11, 0x1f, 0x95, 0x28, 0x91, 0x9c, 0x83, 0x97, 0x26, 0xaf, 0x01, 0xf1, 0xf9, 0x76, 0x7f, + 0xa3, 0xe0, 0x2f, 0x5c, 0x17, 0x25, 0xfe, 0x0a, 0xe7, 0xaf, 0xfd, 0xbb, 0x14, 0x5c, 0x48, 0x10, + 0x65, 0xa8, 0x10, 0xe0, 0xf6, 0xc7, 0xce, 0x09, 0x13, 0x21, 0xe4, 0x8f, 0x5c, 0x93, 0xe0, 0x5c, + 0x3f, 0xb5, 0xc0, 0x32, 0x90, 0xf3, 0x77, 0xf1, 0x27, 0xba, 0x79, 0x74, 0x46, 0x42, 0xf5, 0x42, + 0xff, 0x92, 0x0a, 0xac, 0x63, 0x5a, 0x05, 0xcf, 0x1d, 0x60, 0x76, 0x06, 0x64, 0x42, 0x32, 0x21, + 0x61, 0x07, 0x5b, 0xd1, 0x94, 0x90, 0x28, 0x17, 0x62, 0xaa, 0xc3, 0x08, 0x84, 0x7c, 0x02, 0xb6, + 0xa4, 0xb3, 0xc6, 0x8e, 0xac, 0x3c, 0xb4, 0x74, 0x37, 0x2f, 0x75, 0xfc, 0x53, 0xa7, 0x18, 0x5a, + 0x83, 0xbb, 0xb0, 0x83, 0x83, 0xe8, 0x76, 0x87, 0x76, 0x2c, 0x0f, 0x07, 0x7e, 0x2a, 0x0b, 0x5c, + 0xbf, 0x45, 0xb1, 0x2a, 0xdd, 0x61, 0x24, 0x25, 0x07, 0xfd, 0x6a, 0xde, 0x7d, 0x6f, 0xc3, 0x4b, + 0x89, 0x2d, 0xa6, 0x07, 0x0c, 0x1a, 0x52, 0x05, 0xbc, 0xd1, 0x22, 0x7d, 0xa6, 0xcc, 0xd1, 0x55, + 0x58, 0x7e, 0xe4, 0x74, 0x46, 0xce, 0x88, 0x9f, 0xdc, 0x7c, 0x4a, 0x30, 0x98, 0x7c, 0x70, 0x77, + 0xc3, 0x43, 0xc3, 0x75, 0x46, 0xa4, 0x06, 0x17, 0xd8, 0x09, 0xe8, 0x9e, 0x21, 0x33, 0xc8, 0xf5, + 0x4c, 0x4a, 0x88, 0x1d, 0x42, 0x12, 0x3c, 0x9a, 0x2a, 0x88, 0xc5, 0xa8, 0xcd, 0xf5, 0x93, 0x28, + 0x88, 0xae, 0xe8, 0x8b, 0xc9, 0xd8, 0x64, 0x17, 0x72, 0xac, 0x72, 0x26, 0x16, 0xb0, 0x0b, 0x82, + 0xab, 0x33, 0xdf, 0x50, 0x40, 0xfb, 0x62, 0xcf, 0xff, 0x4f, 0xcf, 0x6b, 0xbc, 0x8b, 0xb5, 0xcf, + 0xe4, 0xfb, 0x0f, 0x73, 0x19, 0x81, 0xfc, 0xde, 0x43, 0xfb, 0x07, 0x45, 0x7c, 0x6a, 0x48, 0x38, + 0xa6, 0x53, 0xcb, 0x73, 0xfa, 0xe2, 0x0e, 0x68, 0xc9, 0xe4, 0x4f, 0xcf, 0x39, 0xd5, 0xc9, 0x9b, + 0xb0, 0x4c, 0xab, 0x3d, 0x99, 0xf4, 0xd9, 0x94, 0x4b, 0x87, 0x02, 0xed, 0xd4, 0x58, 0x11, 0x1d, + 0xb6, 0xf2, 0x9c, 0x99, 0x3b, 0x0b, 0x1e, 0x29, 0xb7, 0xec, 0x9d, 0x8d, 0x87, 0xf2, 0x44, 0x15, + 0x8a, 0x42, 0xab, 0xd6, 0x6a, 0x72, 0x92, 0x2c, 0xc5, 0x09, 0xb8, 0xe5, 0xdd, 0x05, 0xa6, 0x2a, + 0xd4, 0xee, 0x40, 0x4e, 0xaa, 0x9b, 0x7e, 0x0c, 0xf3, 0x9c, 0x11, 0x1f, 0xc3, 0x9e, 0xf8, 0x60, + 0x3f, 0x82, 0xac, 0xa8, 0x92, 0x8a, 0x05, 0xa7, 0x03, 0x4f, 0x2c, 0x72, 0xfc, 0x4f, 0x61, 0xb4, + 0x97, 0xf1, 0x23, 0xe7, 0x4d, 0xfc, 0x8f, 0x67, 0xc9, 0xb8, 0x43, 0xe5, 0x81, 0x9e, 0x67, 0x0f, + 0xd1, 0x02, 0xcb, 0x67, 0x9e, 0x29, 0xbc, 0xd5, 0xf3, 0x98, 0x5d, 0x16, 0x7f, 0xc7, 0x5f, 0xfb, + 0x87, 0x70, 0x44, 0x9b, 0x30, 0x6d, 0xcf, 0x0c, 0x1d, 0x19, 0xa9, 0xf8, 0x91, 0xc1, 0x02, 0xa8, + 0x70, 0x4a, 0xf6, 0x66, 0x40, 0x18, 0x1e, 0x19, 0xd2, 0xce, 0x90, 0x09, 0xed, 0x0c, 0x92, 0x4c, + 0x1e, 0x8c, 0x1e, 0x3b, 0x71, 0x84, 0x4c, 0x1e, 0xdd, 0xa7, 0xfe, 0x3c, 0x25, 0x54, 0x04, 0xbb, + 0x83, 0xc1, 0xd8, 0x1b, 0x8f, 0x3a, 0xc3, 0x90, 0x2a, 0x94, 0x9c, 0xc1, 0xcb, 0xc8, 0x41, 0xdf, + 0xc3, 0x14, 0x16, 0x83, 0x91, 0x88, 0xd9, 0xe1, 0xcf, 0xdc, 0xdc, 0xbd, 0x0f, 0x85, 0x79, 0x7c, + 0x9d, 0x62, 0xeb, 0x32, 0x32, 0x9d, 0xb0, 0x52, 0xad, 0xe5, 0x39, 0xf3, 0x12, 0xab, 0x33, 0x86, + 0x45, 0xca, 0x09, 0x8b, 0x38, 0xaa, 0x0b, 0xdd, 0x0d, 0x56, 0x74, 0xb8, 0x56, 0x79, 0xad, 0x93, + 0x4f, 0xc1, 0x92, 0xdb, 0x95, 0x33, 0x35, 0x46, 0xb5, 0x70, 0x95, 0x2e, 0x8b, 0x16, 0x1d, 0xd4, + 0x41, 0xe7, 0x9c, 0xcb, 0xa1, 0xbb, 0x2b, 0x21, 0xa5, 0xb1, 0xb6, 0x2b, 0xa4, 0xd1, 0x38, 0x19, + 0x59, 0x85, 0x94, 0x3f, 0xc2, 0x29, 0xb7, 0xcb, 0x96, 0x57, 0x10, 0xaf, 0xda, 0xe4, 0x4f, 0xda, + 0xaf, 0xc2, 0xad, 0xf3, 0xf6, 0x11, 0x5d, 0x8a, 0x53, 0x3a, 0x7c, 0xc9, 0x5c, 0xef, 0xc4, 0xfa, + 0xed, 0x2a, 0xc8, 0xe1, 0x76, 0x5d, 0xb1, 0xf9, 0x09, 0x58, 0x7b, 0xe4, 0x6a, 0x7f, 0x95, 0x86, + 0xd5, 0xb0, 0x9a, 0x9c, 0xdc, 0x81, 0x8c, 0xb4, 0x03, 0x5d, 0x4a, 0xd0, 0xa5, 0xe3, 0xbe, 0x83, + 0x48, 0xe7, 0xda, 0x71, 0xc8, 0x03, 0x58, 0x45, 0xc3, 0x3d, 0x64, 0x3d, 0xc7, 0x2e, 0xbf, 0x7c, + 0x99, 0x7d, 0x7f, 0x96, 0xfd, 0xfe, 0xbb, 0x57, 0xe6, 0xf0, 0xaa, 0x6c, 0x99, 0xd2, 0x52, 0xee, + 0x8f, 0x16, 0x4a, 0x5a, 0xd0, 0xcc, 0x74, 0x2d, 0x28, 0xff, 0x94, 0x29, 0x5a, 0xd0, 0xf9, 0x19, + 0x5a, 0xd0, 0x80, 0x52, 0xd6, 0x82, 0xa2, 0x2e, 0x7c, 0x71, 0x9a, 0x2e, 0x3c, 0xa0, 0x61, 0xba, + 0xf0, 0x40, 0x8b, 0x99, 0x9d, 0xaa, 0xc5, 0x0c, 0x68, 0xb8, 0x16, 0xf3, 0x3a, 0xef, 0xa3, 0x51, + 0xe7, 0x89, 0x8d, 0x9d, 0xc7, 0x8f, 0x45, 0xfc, 0x7a, 0xb3, 0xf3, 0x04, 0x8d, 0x6b, 0x76, 0x97, + 0x40, 0x58, 0xe4, 0x68, 0x7f, 0xa0, 0x44, 0x34, 0x81, 0x62, 0xfc, 0x6e, 0xc0, 0x2a, 0x3b, 0xac, + 0x9c, 0xae, 0x24, 0x6b, 0xae, 0x98, 0x2b, 0x02, 0xca, 0xe4, 0xcd, 0x0f, 0xc0, 0x9a, 0x8f, 0xc6, + 0x45, 0x2e, 0xf4, 0xd4, 0x33, 0x7d, 0x6a, 0x1e, 0x76, 0xe6, 0x0e, 0xac, 0xfb, 0x88, 0x5c, 0x9b, + 0xc3, 0xc4, 0xcd, 0x15, 0x53, 0x15, 0x05, 0x4d, 0x0e, 0xd7, 0x4e, 0xa2, 0x92, 0xc7, 0xcf, 0xa8, + 0x55, 0xda, 0xf7, 0xd2, 0x21, 0x2d, 0x89, 0x78, 0x0d, 0x3d, 0x45, 0xbd, 0x81, 0xcd, 0x3b, 0x89, + 0xef, 0x45, 0x57, 0xa7, 0x8c, 0x19, 0xb7, 0x69, 0xb2, 0xac, 0x86, 0x09, 0x9e, 0x37, 0x10, 0x26, + 0x4e, 0x36, 0xe3, 0xa8, 0xd9, 0xb9, 0x8f, 0x73, 0x56, 0x54, 0xc7, 0x36, 0x9e, 0xfc, 0xec, 0xea, + 0x84, 0x98, 0x4a, 0xa7, 0x2c, 0x72, 0xd6, 0xfe, 0x93, 0x78, 0x41, 0x1b, 0x50, 0xa9, 0xe8, 0x85, + 0x2b, 0x4f, 0x27, 0xc8, 0x4e, 0xb1, 0xca, 0xb1, 0x97, 0xb0, 0x66, 0x75, 0x22, 0xfe, 0x8a, 0x6a, + 0x0d, 0x58, 0x46, 0x1d, 0x85, 0xa8, 0x30, 0x93, 0xa0, 0x82, 0x8f, 0x7f, 0x7c, 0xa1, 0x52, 0x33, + 0x73, 0x94, 0x4e, 0x54, 0x73, 0x0a, 0x2f, 0xcb, 0x9a, 0x85, 0x70, 0x23, 0xe7, 0x45, 0x14, 0xdd, + 0x99, 0x3d, 0x10, 0x28, 0x20, 0xb0, 0xa9, 0x17, 0x3b, 0x61, 0x00, 0x47, 0xd3, 0x4e, 0x61, 0x6b, + 0xfa, 0x90, 0xcc, 0xc8, 0xd0, 0x14, 0x1c, 0xa0, 0x29, 0xf9, 0x00, 0x95, 0xf5, 0x0c, 0xe9, 0x90, + 0x9e, 0x41, 0xfb, 0xb3, 0x34, 0x5c, 0x3b, 0xc7, 0x70, 0xcd, 0x78, 0xe7, 0x67, 0xc2, 0xec, 0x59, + 0x2a, 0x24, 0x19, 0xd2, 0x4a, 0xf9, 0x06, 0x49, 0xa5, 0xd4, 0x64, 0xe6, 0xec, 0xff, 0xc3, 0x1a, + 0xdb, 0x05, 0x99, 0x59, 0xe2, 0xf1, 0xa4, 0x77, 0x8e, 0x6d, 0x70, 0x5b, 0xf8, 0x50, 0x45, 0x48, + 0x71, 0x67, 0xc4, 0x1d, 0xc3, 0xf2, 0x61, 0xa4, 0x05, 0x39, 0x44, 0x3b, 0xee, 0xb8, 0xbd, 0x73, + 0x39, 0xf3, 0x08, 0x0f, 0x2d, 0x99, 0x8c, 0x59, 0x53, 0x53, 0x40, 0x09, 0x9f, 0xc9, 0x4d, 0x58, + 0xeb, 0x4f, 0xce, 0x28, 0xe3, 0xc1, 0xe6, 0x02, 0xb7, 0xfe, 0x98, 0x37, 0x57, 0xfa, 0x93, 0x33, + 0x7d, 0x38, 0xc4, 0x21, 0x45, 0x33, 0x91, 0x75, 0x8a, 0xc7, 0x56, 0xad, 0xc0, 0x5c, 0x40, 0x4c, + 0x5a, 0x01, 0x5b, 0xb7, 0x1c, 0x77, 0x03, 0x98, 0xd1, 0x20, 0xcf, 0x50, 0xc5, 0x1e, 0xb4, 0x1f, + 0xa7, 0x84, 0xbc, 0x3b, 0x7d, 0xde, 0xff, 0x72, 0x88, 0x12, 0x86, 0xe8, 0x16, 0xa8, 0xb4, 0xeb, + 0x83, 0x4d, 0xc5, 0x1f, 0xa3, 0xd5, 0xfe, 0xe4, 0xcc, 0xef, 0x3b, 0xb9, 0xe3, 0x17, 0xe4, 0x8e, + 0x7f, 0x53, 0xc8, 0xc3, 0x89, 0xdb, 0xc3, 0xf4, 0x2e, 0xd7, 0xfe, 0x33, 0x0d, 0x37, 0xcf, 0xb7, + 0x09, 0xfc, 0x72, 0xdc, 0x12, 0xc6, 0x2d, 0xa2, 0x3a, 0x9d, 0x8f, 0xa9, 0x4e, 0x13, 0xd6, 0xde, + 0x42, 0xd2, 0xda, 0x8b, 0x29, 0x6a, 0x17, 0x13, 0x14, 0xb5, 0x89, 0x0b, 0x34, 0xfb, 0x8c, 0x05, + 0xba, 0x24, 0xcf, 0x93, 0x7f, 0xf3, 0x15, 0x18, 0x61, 0x79, 0xe0, 0x6d, 0xb8, 0x20, 0xe4, 0x01, + 0x76, 0x72, 0x04, 0xfa, 0xf7, 0xdc, 0xbd, 0xdb, 0x49, 0x92, 0x00, 0xa2, 0x25, 0x70, 0xeb, 0xeb, + 0x5c, 0x06, 0x08, 0xca, 0x7f, 0x7e, 0xb8, 0x7f, 0xf2, 0x10, 0x2e, 0x62, 0x7c, 0xf7, 0x23, 0xf9, + 0xe6, 0xc0, 0x1e, 0x39, 0xc7, 0x7c, 0x3e, 0x5c, 0x8d, 0xf1, 0xca, 0xee, 0x91, 0xd4, 0x1c, 0xd3, + 0x39, 0x2e, 0xcf, 0x99, 0x1b, 0x5e, 0x02, 0x3c, 0x2a, 0x58, 0x7c, 0x57, 0x01, 0xed, 0xd9, 0xfd, + 0x85, 0x8a, 0xaa, 0x68, 0x87, 0x2f, 0x99, 0xb9, 0x8e, 0xd4, 0x7b, 0xd7, 0x60, 0x65, 0xe4, 0x1c, + 0x8f, 0x1c, 0xef, 0x34, 0xa4, 0x01, 0x59, 0xe6, 0x40, 0xd1, 0x31, 0x22, 0xca, 0xe4, 0x73, 0x71, + 0xe6, 0x82, 0x48, 0x2b, 0xf9, 0xf2, 0x62, 0xe2, 0x38, 0xd0, 0xd9, 0x24, 0x37, 0x90, 0x3d, 0x3c, + 0xc8, 0x64, 0x53, 0x6a, 0xda, 0xe4, 0xb1, 0x30, 0x8f, 0xdd, 0x9e, 0xa3, 0xfd, 0x8d, 0x22, 0x38, + 0x82, 0xa4, 0xce, 0x23, 0x6f, 0x4b, 0xc6, 0xbc, 0xe9, 0x18, 0x1b, 0x92, 0x44, 0x22, 0xdb, 0x3d, + 0xf2, 0xf0, 0x8c, 0x08, 0x08, 0x85, 0x67, 0x44, 0xc8, 0x0b, 0x58, 0x24, 0x72, 0xa9, 0xf9, 0xbe, + 0xb0, 0x08, 0xa2, 0x7b, 0xde, 0xc1, 0x5d, 0x72, 0x1b, 0x16, 0x99, 0x11, 0x90, 0x68, 0xee, 0x5a, + 0xa8, 0xb9, 0x07, 0x77, 0x4d, 0x51, 0xae, 0x7d, 0xc7, 0xbf, 0xd7, 0x8a, 0x7d, 0xc4, 0xc1, 0x5d, + 0xf2, 0xe6, 0xf9, 0x8c, 0x73, 0xb3, 0xc2, 0x38, 0xd7, 0x37, 0xcc, 0xfd, 0x58, 0xc8, 0x30, 0xf7, + 0xfa, 0xec, 0xde, 0xe2, 0xb7, 0x91, 0x2c, 0x1c, 0x61, 0x10, 0xa6, 0xea, 0xc7, 0x0a, 0xbc, 0x32, + 0x93, 0x82, 0x5c, 0x86, 0xac, 0xde, 0xac, 0xb4, 0x82, 0xf1, 0xa5, 0x6b, 0x46, 0x40, 0xc8, 0x1e, + 0x2c, 0xed, 0x76, 0x3c, 0xf7, 0x88, 0x4e, 0xe3, 0xc4, 0xeb, 0x81, 0x58, 0xb5, 0x3e, 0x7a, 0x79, + 0xce, 0x0c, 0x68, 0x89, 0x0d, 0xeb, 0xb8, 0x16, 0x42, 0xa9, 0x9f, 0xd2, 0x09, 0xba, 0x86, 0x58, + 0x85, 0x31, 0x32, 0xba, 0xcf, 0xc4, 0x80, 0xd1, 0x25, 0xf8, 0x58, 0xf0, 0x22, 0xd3, 0x1b, 0xf8, + 0x1c, 0x71, 0x55, 0x6f, 0x41, 0xb6, 0x29, 0xec, 0x04, 0x24, 0x6b, 0x76, 0x61, 0x13, 0x60, 0xfa, + 0xa5, 0xda, 0x6f, 0x2b, 0x42, 0x21, 0xf0, 0xec, 0x0f, 0x91, 0xb2, 0x66, 0x75, 0x67, 0x67, 0xcd, + 0xea, 0xfe, 0x94, 0x59, 0xb3, 0xb4, 0xbf, 0xe0, 0x51, 0xcf, 0x2b, 0xdd, 0x66, 0x44, 0x33, 0xfb, + 0xa2, 0x5e, 0x09, 0x46, 0x68, 0x76, 0x5e, 0x93, 0xb2, 0x2e, 0xc6, 0xdf, 0x35, 0xdd, 0x39, 0x41, + 0x9a, 0xaa, 0x7f, 0x94, 0x86, 0xcb, 0xb3, 0xc8, 0x13, 0xf3, 0x3a, 0x2b, 0xcf, 0x97, 0xd7, 0xf9, + 0x36, 0x64, 0x19, 0xcc, 0x37, 0xb9, 0xc7, 0x0e, 0xe7, 0xa4, 0xb4, 0xc3, 0x45, 0x31, 0xb9, 0x06, + 0x0b, 0x7a, 0xc1, 0x0a, 0x52, 0x8d, 0xa1, 0x6d, 0x6c, 0xe7, 0xc8, 0x43, 0xab, 0x4b, 0x5e, 0x44, + 0xbe, 0x14, 0xcf, 0xae, 0xc7, 0x73, 0x8c, 0x6d, 0x4b, 0x1d, 0x12, 0x4b, 0x48, 0x80, 0xed, 0x0d, + 0x02, 0xe8, 0xf3, 0x98, 0xd4, 0x66, 0x3c, 0x53, 0x9f, 0x06, 0x0b, 0xcd, 0x91, 0xe3, 0x39, 0x63, + 0xd9, 0x6e, 0x75, 0x88, 0x10, 0x93, 0x97, 0x70, 0xab, 0xd2, 0xce, 0x53, 0x16, 0x44, 0x60, 0x41, + 0x0e, 0xec, 0x82, 0x66, 0xa8, 0x14, 0x6c, 0x4a, 0x28, 0x94, 0xa0, 0xda, 0x99, 0xf4, 0x8f, 0x4e, + 0xdb, 0x66, 0x95, 0xb3, 0x1a, 0x8c, 0xa0, 0x87, 0x50, 0xfa, 0x81, 0x9e, 0x29, 0xa1, 0x68, 0xdf, + 0x54, 0x60, 0x23, 0xe9, 0x3b, 0xc8, 0x65, 0xc8, 0xf4, 0x13, 0x13, 0x09, 0xf6, 0x99, 0xef, 0x73, + 0x8e, 0xfe, 0xda, 0xc7, 0x83, 0xd1, 0x59, 0x67, 0x2c, 0x5b, 0xf7, 0x4a, 0x60, 0x13, 0xe8, 0x43, + 0x09, 0xff, 0x93, 0x2b, 0x62, 0x8f, 0x4e, 0xc7, 0x52, 0x0f, 0xe2, 0x8f, 0xa6, 0x03, 0x54, 0xba, + 0xcd, 0xc6, 0x90, 0x05, 0xc4, 0x7f, 0x03, 0x32, 0xb4, 0x59, 0x91, 0xd9, 0x4b, 0xe7, 0x8f, 0x5e, + 0xab, 0x72, 0x24, 0xd6, 0x2a, 0xaf, 0x73, 0xd6, 0x33, 0x11, 0x59, 0x3b, 0x84, 0xd5, 0x30, 0x06, + 0x31, 0xc2, 0x21, 0x54, 0x73, 0xf7, 0x54, 0x5e, 0xd3, 0xee, 0x60, 0xc0, 0x3c, 0x4c, 0x76, 0x5f, + 0xfe, 0xc7, 0x77, 0xaf, 0x00, 0x7d, 0x64, 0x34, 0x49, 0x21, 0x56, 0xb5, 0x6f, 0xa5, 0x60, 0x23, + 0x70, 0x6a, 0x17, 0x6b, 0xe8, 0x17, 0xd6, 0xc3, 0x52, 0x0f, 0x79, 0x00, 0x0a, 0x46, 0x2b, 0xfe, + 0x81, 0x33, 0x1c, 0x8f, 0xf6, 0x60, 0x73, 0x1a, 0x3e, 0xb9, 0x03, 0x4b, 0x18, 0x07, 0x69, 0xd8, + 0x39, 0x72, 0xe4, 0xbd, 0xaf, 0x2f, 0x80, 0x66, 0x50, 0xae, 0xfd, 0x50, 0x81, 0x2d, 0xee, 0x17, + 0x51, 0xeb, 0xb8, 0x7d, 0x54, 0xab, 0x1f, 0x39, 0xef, 0x8f, 0x87, 0xf0, 0x5e, 0x68, 0x1f, 0xbb, + 0x11, 0x76, 0x7f, 0x89, 0xbd, 0x6d, 0xfa, 0xd7, 0x92, 0xdb, 0x18, 0xdb, 0x8b, 0x5f, 0x3b, 0x67, + 0x58, 0x44, 0x86, 0x3e, 0x05, 0xc8, 0x11, 0x19, 0x10, 0x43, 0xfb, 0x35, 0xd8, 0x99, 0xfd, 0x02, + 0xf2, 0x45, 0x58, 0xc1, 0x64, 0x51, 0xed, 0xe1, 0xc9, 0xa8, 0xd3, 0x75, 0x84, 0x2a, 0x4c, 0xa8, + 0x2f, 0xe5, 0x32, 0x16, 0xaa, 0x8c, 0x47, 0x08, 0x38, 0xc1, 0x34, 0x54, 0x9c, 0x28, 0xe4, 0x7c, + 0x24, 0xd7, 0xa6, 0xfd, 0xba, 0x02, 0x24, 0x5e, 0x07, 0xf9, 0x28, 0x2c, 0xb7, 0x5b, 0x05, 0x6b, + 0xdc, 0x19, 0x8d, 0xcb, 0x83, 0xc9, 0x88, 0xc7, 0x09, 0x63, 0x0e, 0xe3, 0xe3, 0x23, 0x9b, 0x5d, + 0xa0, 0x9c, 0x0e, 0x26, 0x23, 0x33, 0x84, 0x87, 0x59, 0x8e, 0x1c, 0xe7, 0xcb, 0xdd, 0xce, 0xd3, + 0x70, 0x96, 0x23, 0x0e, 0x0b, 0x65, 0x39, 0xe2, 0x30, 0xed, 0x1d, 0x05, 0xb6, 0x85, 0x35, 0x61, + 0x37, 0xa1, 0x2d, 0x05, 0x0c, 0x8b, 0x32, 0x12, 0x81, 0x69, 0x67, 0xb1, 0xb4, 0xeb, 0x22, 0x72, + 0x10, 0x36, 0x10, 0x79, 0x5b, 0x46, 0x4b, 0x3e, 0x03, 0x19, 0x6b, 0x3c, 0x18, 0x9e, 0x23, 0x74, + 0x90, 0xea, 0x8f, 0xe8, 0x78, 0x30, 0xc4, 0x2a, 0x90, 0x52, 0x73, 0x60, 0x43, 0x6e, 0x9c, 0x68, + 0x31, 0xa9, 0xc1, 0x22, 0x8f, 0x11, 0x17, 0xb9, 0xa8, 0x9f, 0xf1, 0x4d, 0xbb, 0x6b, 0x22, 0x3e, + 0x11, 0x0f, 0x8c, 0x6a, 0x8a, 0x3a, 0xb4, 0xdf, 0x55, 0x20, 0x47, 0xb9, 0x0d, 0x94, 0xe2, 0x5e, + 0x74, 0x4a, 0x87, 0x19, 0x47, 0x61, 0x77, 0xe2, 0x57, 0x7f, 0xae, 0xd3, 0xf8, 0x23, 0xb0, 0x16, + 0x21, 0x20, 0x1a, 0x46, 0xa6, 0xe8, 0xb9, 0x47, 0x1d, 0x96, 0x34, 0x85, 0xd9, 0x6c, 0x84, 0x60, + 0xda, 0x6f, 0x2a, 0xb0, 0x41, 0x65, 0x7e, 0x76, 0xcf, 0x69, 0x4e, 0x7a, 0x62, 0xbd, 0x53, 0x0e, + 0x4a, 0x98, 0xa5, 0x32, 0xaf, 0x79, 0xc6, 0x41, 0x71, 0x98, 0xe9, 0x97, 0x92, 0x32, 0x64, 0xf9, + 0xf9, 0xe2, 0xf1, 0x78, 0xa6, 0x3b, 0x92, 0x32, 0x21, 0xa8, 0x98, 0x23, 0xd1, 0x2f, 0xc1, 0x2d, + 0x8c, 0xd3, 0x98, 0x3e, 0xb5, 0xf6, 0x5f, 0x0a, 0x5c, 0x9a, 0x42, 0x43, 0xde, 0x82, 0x79, 0xf4, + 0xe8, 0xe3, 0xa3, 0x77, 0x79, 0xca, 0x2b, 0xc6, 0x47, 0xa7, 0x07, 0x77, 0xd9, 0x41, 0x74, 0x46, + 0x1f, 0x4c, 0x46, 0x45, 0xde, 0x86, 0x25, 0xbd, 0xdb, 0xe5, 0xe2, 0x4c, 0x2a, 0x24, 0xce, 0x4c, + 0x79, 0xe3, 0xeb, 0x3e, 0x3e, 0x13, 0x67, 0x98, 0x6f, 0x49, 0xb7, 0x6b, 0x73, 0x6f, 0xc5, 0xa0, + 0xbe, 0xad, 0x4f, 0xc2, 0x6a, 0x18, 0xf9, 0xb9, 0x1c, 0xac, 0xbe, 0xa3, 0x80, 0x1a, 0x6e, 0xc3, + 0xcf, 0x26, 0xb2, 0x52, 0xd2, 0x30, 0x3f, 0x63, 0x52, 0xfd, 0x7e, 0x0a, 0x5e, 0x4a, 0xec, 0x61, + 0xf2, 0x1a, 0x2c, 0xe8, 0xc3, 0x61, 0xa5, 0xc8, 0x67, 0x15, 0xe7, 0x90, 0x50, 0x4b, 0x1c, 0x92, + 0xf6, 0x18, 0x12, 0x79, 0x03, 0xb2, 0xec, 0x3a, 0xbd, 0x28, 0x36, 0x1c, 0x0c, 0x15, 0xc3, 0xef, + 0xfa, 0xc3, 0x91, 0x45, 0x05, 0x22, 0x29, 0xc1, 0x2a, 0x0f, 0xb2, 0x62, 0x3a, 0x27, 0xce, 0x57, + 0xfd, 0x10, 0xf7, 0x18, 0x85, 0x5f, 0xa8, 0x9e, 0xed, 0x11, 0x2b, 0x93, 0xc3, 0x8c, 0x84, 0xa9, + 0x48, 0x15, 0x54, 0xac, 0x53, 0xae, 0x89, 0x85, 0x37, 0xc5, 0xb0, 0x37, 0xac, 0x11, 0x53, 0xea, + 0x8a, 0x51, 0xfa, 0xc3, 0xa5, 0x7b, 0x9e, 0x7b, 0xd2, 0x3f, 0x73, 0xfa, 0xe3, 0x9f, 0xdd, 0x70, + 0x05, 0xef, 0x38, 0xd7, 0x70, 0xfd, 0x61, 0x86, 0x2d, 0xe6, 0x28, 0x19, 0xe5, 0x68, 0xa4, 0x88, + 0xd6, 0xc8, 0xd1, 0x50, 0xa1, 0x89, 0x87, 0x11, 0x29, 0xc2, 0x22, 0x0b, 0xef, 0x22, 0x56, 0xc6, + 0x2b, 0x89, 0x4d, 0x60, 0x38, 0x07, 0x77, 0x19, 0xfb, 0xc2, 0x5c, 0x0b, 0x3d, 0x53, 0x90, 0x92, + 0x03, 0xc8, 0x15, 0x7a, 0x4e, 0xa7, 0x3f, 0x19, 0xb6, 0xce, 0x77, 0xe5, 0xb8, 0xc9, 0xbf, 0x65, + 0xf9, 0x88, 0x91, 0xe1, 0x55, 0x25, 0xee, 0xe4, 0x72, 0x45, 0xa4, 0xe5, 0x7b, 0x1b, 0x65, 0x50, + 0x53, 0xf9, 0xe1, 0x19, 0xfd, 0x13, 0x05, 0x22, 0x5d, 0xd8, 0x95, 0x8e, 0xbb, 0x23, 0xd9, 0xb0, + 0x5a, 0xed, 0x78, 0xe3, 0xd6, 0xa8, 0xd3, 0xf7, 0x30, 0x2c, 0xe4, 0x39, 0xc2, 0x66, 0x6d, 0x8b, + 0x94, 0xc3, 0xa8, 0x63, 0x1c, 0xfb, 0xa4, 0x4c, 0x83, 0x19, 0xae, 0x8e, 0xf2, 0x4b, 0x25, 0xb7, + 0xdf, 0xe9, 0xb9, 0x5f, 0x13, 0x4e, 0x99, 0x8c, 0x5f, 0x3a, 0x16, 0x40, 0x33, 0x28, 0xd7, 0xbe, + 0x10, 0x1b, 0x37, 0xd6, 0xca, 0x1c, 0x2c, 0x72, 0x97, 0x7d, 0xe6, 0xc2, 0xde, 0x34, 0xea, 0xc5, + 0x4a, 0x7d, 0x4f, 0x55, 0xc8, 0x2a, 0x40, 0xd3, 0x6c, 0x14, 0x0c, 0xcb, 0xa2, 0xcf, 0x29, 0xfa, + 0xcc, 0xfd, 0xdb, 0x4b, 0xed, 0xaa, 0x9a, 0x96, 0x5c, 0xdc, 0x33, 0xda, 0x0f, 0x14, 0xb8, 0x98, + 0x3c, 0x94, 0xa4, 0x05, 0x18, 0xe4, 0x80, 0x5f, 0x3e, 0x7f, 0x74, 0xe6, 0xb8, 0x27, 0x82, 0xa3, + 0xc1, 0x12, 0xc6, 0xcc, 0x09, 0x3f, 0x25, 0x2e, 0x8b, 0x98, 0x57, 0x9f, 0xdb, 0x35, 0x53, 0x6e, + 0x57, 0x2b, 0xc0, 0xe6, 0xb4, 0x3a, 0xc2, 0x9f, 0xba, 0x06, 0x39, 0xbd, 0xd9, 0xac, 0x56, 0x0a, + 0x7a, 0xab, 0xd2, 0xa8, 0xab, 0x0a, 0x59, 0x82, 0xf9, 0x3d, 0xb3, 0xd1, 0x6e, 0xaa, 0x29, 0xed, + 0xdb, 0x0a, 0xac, 0x54, 0x02, 0x33, 0xad, 0x17, 0x5d, 0x7c, 0x1f, 0x0f, 0x2d, 0xbe, 0x4d, 0x3f, + 0x1c, 0x88, 0xff, 0x82, 0x73, 0xad, 0xbc, 0x77, 0x52, 0xb0, 0x1e, 0xa3, 0x21, 0x16, 0x2c, 0xea, + 0x87, 0x56, 0xa3, 0x52, 0x2c, 0xf0, 0x96, 0x5d, 0x09, 0xec, 0x8b, 0x30, 0xe3, 0x53, 0xec, 0x2d, + 0xcc, 0x85, 0xf6, 0x89, 0x67, 0x0f, 0xdc, 0xae, 0x94, 0xad, 0xb5, 0x3c, 0x67, 0x8a, 0x9a, 0xf0, + 0x24, 0xfb, 0xda, 0x64, 0xe4, 0x60, 0xb5, 0xa9, 0x90, 0x22, 0xd4, 0x87, 0xc7, 0x2b, 0x46, 0x87, + 0x87, 0x0e, 0x2d, 0x8f, 0x57, 0x1d, 0xd4, 0x47, 0xea, 0xb0, 0xb0, 0xe7, 0x8e, 0xcb, 0x93, 0x47, + 0x7c, 0xfd, 0xee, 0x04, 0xf9, 0x7f, 0xca, 0x93, 0x47, 0xf1, 0x6a, 0x51, 0xc7, 0xc7, 0xc2, 0xdd, + 0x84, 0xaa, 0xe4, 0xb5, 0xec, 0xae, 0x40, 0x8e, 0x4b, 0x41, 0x28, 0x60, 0x7c, 0x4f, 0x81, 0xcd, + 0x69, 0xdf, 0x4e, 0x05, 0xab, 0xb0, 0x7f, 0xfe, 0x45, 0x3f, 0x23, 0x44, 0xd8, 0x31, 0x5f, 0xa0, + 0x91, 0x4f, 0x43, 0xae, 0xe2, 0x79, 0x13, 0x67, 0x64, 0xbd, 0xd1, 0x36, 0x2b, 0x7c, 0xc2, 0xbd, + 0xf2, 0xef, 0xef, 0x5e, 0xb9, 0x84, 0x6e, 0x0e, 0x23, 0xdb, 0x7b, 0xc3, 0x9e, 0x8c, 0xdc, 0x50, + 0xf4, 0x7c, 0x99, 0x82, 0xf2, 0xc1, 0x9d, 0x49, 0xd7, 0x75, 0x84, 0x14, 0x20, 0x7c, 0x98, 0x39, + 0x4c, 0x3e, 0x95, 0x04, 0x4c, 0xfb, 0x86, 0x02, 0x5b, 0xd3, 0x3b, 0x9a, 0x9e, 0x74, 0x2d, 0x66, + 0x45, 0x24, 0xbc, 0x88, 0xf1, 0xa4, 0xf3, 0x4d, 0x8d, 0xe4, 0x3a, 0x05, 0x22, 0x25, 0xf2, 0xb3, + 0xb1, 0xa7, 0x62, 0x29, 0x98, 0xc3, 0x44, 0x02, 0x11, 0xe3, 0x30, 0x4c, 0x19, 0x17, 0xf2, 0xa9, + 0xc4, 0x44, 0x33, 0xe8, 0x9a, 0x23, 0x27, 0x9a, 0x09, 0xa5, 0x20, 0x93, 0x53, 0xce, 0xbc, 0x05, + 0xf3, 0x18, 0xf5, 0x9b, 0x4f, 0x30, 0x12, 0x9a, 0x06, 0x18, 0xfa, 0x9b, 0xc9, 0x4b, 0x88, 0x24, + 0xcb, 0x4b, 0x08, 0xd0, 0xfe, 0x5e, 0x81, 0x9c, 0x84, 0x4b, 0xbe, 0x00, 0x2a, 0x66, 0xc2, 0xe6, + 0x36, 0x33, 0x63, 0xd7, 0x8f, 0x2c, 0xba, 0xee, 0x67, 0x84, 0x2b, 0xef, 0x3b, 0x4f, 0x9b, 0x1d, + 0x77, 0xc4, 0x8e, 0xf7, 0x28, 0xba, 0x9c, 0x5a, 0x8a, 0x96, 0xe9, 0x41, 0x11, 0x31, 0x61, 0xc9, + 0x37, 0x59, 0x8d, 0x1c, 0xa2, 0x52, 0x23, 0x7c, 0xdb, 0x55, 0xde, 0xb7, 0xe2, 0x31, 0xe4, 0xfb, + 0x23, 0x80, 0xda, 0x77, 0x15, 0xd8, 0x48, 0x22, 0xfe, 0xf9, 0x4c, 0x9c, 0xaf, 0xfd, 0x47, 0x0a, + 0x2e, 0xd2, 0x0d, 0xad, 0xe7, 0x78, 0x1e, 0xed, 0x1a, 0xa7, 0x3f, 0xe6, 0x2c, 0x3e, 0x79, 0x13, + 0x16, 0x4e, 0x9f, 0x4f, 0x9d, 0xcd, 0xd0, 0x09, 0x01, 0x64, 0x12, 0x84, 0x03, 0x0f, 0xfd, 0x4f, + 0xae, 0x82, 0x9c, 0x00, 0x3d, 0x8d, 0x21, 0x58, 0x53, 0x9b, 0x8a, 0xb9, 0x34, 0xf4, 0x73, 0x15, + 0x7f, 0x0c, 0xe6, 0x51, 0x85, 0xc5, 0x8f, 0x6b, 0x21, 0x66, 0x25, 0xb7, 0x0e, 0x15, 0x5c, 0x26, + 0x23, 0x20, 0x1f, 0x02, 0x08, 0xb2, 0x57, 0xf0, 0xf3, 0x58, 0xa8, 0x76, 0xfc, 0x04, 0x16, 0xe6, + 0xd2, 0xd9, 0x71, 0x87, 0xa7, 0x84, 0xc8, 0xc3, 0xba, 0xe8, 0xf7, 0xa1, 0x88, 0xdc, 0xc8, 0x6f, + 0x5a, 0xd7, 0x58, 0x41, 0x65, 0x28, 0xa2, 0x37, 0x5e, 0x8f, 0x25, 0x71, 0xc6, 0x00, 0xce, 0x91, + 0x4c, 0xcd, 0xd7, 0x63, 0x99, 0x9a, 0xb3, 0x0c, 0x4b, 0x4e, 0xc7, 0xac, 0xfd, 0x6b, 0x0a, 0x96, + 0x0e, 0x29, 0x23, 0x8c, 0xea, 0x9d, 0xd9, 0xea, 0xa2, 0x7b, 0x90, 0xab, 0x0e, 0x3a, 0xfc, 0x4a, + 0x8b, 0xfb, 0xbd, 0xb0, 0xd1, 0xec, 0x0d, 0x3a, 0xe2, 0x76, 0xcc, 0x33, 0x65, 0xa4, 0x67, 0xf8, + 0xcc, 0x3f, 0x80, 0x05, 0x76, 0xc5, 0xc8, 0x35, 0x97, 0x42, 0x14, 0xf2, 0x5b, 0xf4, 0x3a, 0x2b, + 0x96, 0x6e, 0x61, 0xd8, 0x35, 0xa5, 0xcc, 0x97, 0xf3, 0x38, 0xb4, 0x92, 0x32, 0x6b, 0xfe, 0x7c, + 0xca, 0x2c, 0x29, 0xde, 0xde, 0xc2, 0x79, 0xe2, 0xed, 0x6d, 0xdd, 0x87, 0x9c, 0xd4, 0x9e, 0xe7, + 0x92, 0x8c, 0xbe, 0x9e, 0x82, 0x15, 0xfc, 0x2a, 0xdf, 0xde, 0xe8, 0x17, 0x53, 0x35, 0xf7, 0xf1, + 0x90, 0x6a, 0x6e, 0x53, 0x1e, 0x2f, 0xf6, 0x65, 0x33, 0x74, 0x72, 0x0f, 0x60, 0x3d, 0x86, 0x48, + 0x3e, 0x02, 0xf3, 0xb4, 0xf9, 0x62, 0x13, 0x55, 0xa3, 0x33, 0x20, 0x88, 0xcd, 0x4c, 0x3f, 0xdc, + 0x33, 0x19, 0xb6, 0xf6, 0xdf, 0x0a, 0x2c, 0xf3, 0xd4, 0x28, 0xfd, 0xe3, 0xc1, 0x33, 0xbb, 0xf3, + 0x66, 0xb4, 0x3b, 0x59, 0x04, 0x18, 0xde, 0x9d, 0xff, 0xdb, 0x9d, 0x78, 0x3f, 0xd4, 0x89, 0x97, + 0xfc, 0x48, 0x8d, 0xe2, 0x73, 0x66, 0xf4, 0xe1, 0xdf, 0x62, 0xec, 0xe2, 0x30, 0x22, 0xf9, 0x12, + 0x2c, 0xd5, 0x9d, 0x27, 0x21, 0x8d, 0xc0, 0xcd, 0x29, 0x95, 0xbe, 0xee, 0x23, 0xb2, 0x35, 0x85, + 0xcc, 0x54, 0xdf, 0x79, 0x62, 0xc7, 0x6e, 0x37, 0x83, 0x2a, 0xb7, 0x3e, 0x09, 0xab, 0x61, 0xb2, + 0xe7, 0x99, 0xfa, 0xdc, 0x09, 0x17, 0x83, 0x1a, 0x7d, 0x33, 0x0d, 0x10, 0xf8, 0x2f, 0xd2, 0x05, + 0x18, 0x32, 0xec, 0x10, 0x97, 0x29, 0x08, 0x92, 0xe7, 0xb8, 0xb0, 0xf7, 0xb8, 0xc9, 0x95, 0xfe, + 0xa9, 0xe9, 0x91, 0x34, 0x51, 0xfd, 0x5f, 0xe0, 0x0e, 0x73, 0x5d, 0xa7, 0xd7, 0x61, 0x7b, 0x7b, + 0x7a, 0xf7, 0x3a, 0x06, 0x4e, 0xf6, 0xa1, 0x53, 0x72, 0x5c, 0xa3, 0x5b, 0x5d, 0x91, 0x22, 0xc4, + 0x7c, 0x82, 0x33, 0xcf, 0xe7, 0x13, 0xdc, 0x84, 0x25, 0xb7, 0xff, 0xd8, 0xe9, 0x8f, 0x07, 0xa3, + 0xa7, 0x78, 0xd3, 0x11, 0xa8, 0x50, 0x69, 0x17, 0x54, 0x44, 0x19, 0x1b, 0x07, 0x3c, 0xc8, 0x7d, + 0x7c, 0x79, 0x18, 0x7c, 0xa0, 0xef, 0xd3, 0x3c, 0xaf, 0x2e, 0x3c, 0xc8, 0x64, 0x17, 0xd4, 0xc5, + 0x07, 0x99, 0x6c, 0x56, 0x5d, 0x7a, 0x90, 0xc9, 0x2e, 0xa9, 0x60, 0x4a, 0x77, 0x87, 0xfe, 0xdd, + 0xa0, 0x74, 0x96, 0x87, 0xcf, 0x69, 0xed, 0x27, 0x29, 0x20, 0xf1, 0x66, 0x90, 0x8f, 0x43, 0x8e, + 0x6d, 0xb0, 0xf6, 0xc8, 0xfb, 0x0a, 0x77, 0x89, 0x60, 0xa1, 0xa1, 0x24, 0xb0, 0x1c, 0x1a, 0x8a, + 0x81, 0x4d, 0xef, 0x2b, 0x3d, 0xf2, 0x45, 0xb8, 0x80, 0xdd, 0x3b, 0x74, 0x46, 0xee, 0xa0, 0x6b, + 0x63, 0x1c, 0xdf, 0x4e, 0x8f, 0xe7, 0xa3, 0x7c, 0x0d, 0x13, 0x27, 0xc7, 0x8b, 0xa7, 0x0c, 0x03, + 0xba, 0x29, 0x36, 0x11, 0xb3, 0xc9, 0x10, 0x49, 0x0b, 0x54, 0x99, 0xfe, 0x78, 0xd2, 0xeb, 0xf1, + 0x91, 0xcd, 0x53, 0x2e, 0x2b, 0x5a, 0x36, 0xa5, 0xe2, 0xd5, 0xa0, 0xe2, 0xd2, 0xa4, 0xd7, 0x23, + 0x6f, 0x02, 0x0c, 0xfa, 0xf6, 0x99, 0xeb, 0x79, 0xec, 0xfe, 0xcc, 0xf7, 0xa8, 0x0e, 0xa0, 0xf2, + 0x60, 0x0c, 0xfa, 0x35, 0x06, 0x24, 0xff, 0x0f, 0x30, 0xa2, 0x04, 0x86, 0x5a, 0x61, 0x16, 0x53, + 0x3c, 0xc3, 0x8c, 0x00, 0x86, 0x1d, 0xb8, 0x4f, 0x1c, 0xcb, 0xfd, 0x9a, 0x70, 0x47, 0xf9, 0x3c, + 0xac, 0x73, 0x03, 0xe7, 0x43, 0x77, 0x7c, 0xca, 0xa5, 0xb7, 0x17, 0x11, 0xfd, 0x24, 0xf1, 0xed, + 0x9f, 0x32, 0x00, 0xfa, 0xa1, 0x25, 0xa2, 0x98, 0xdd, 0x86, 0x79, 0x2a, 0x93, 0x0a, 0xdd, 0x16, + 0x72, 0xba, 0x58, 0xaf, 0xcc, 0xe9, 0x22, 0x06, 0x5d, 0x8d, 0x26, 0x1a, 0xfe, 0x0b, 0xbd, 0x16, + 0xae, 0x46, 0xe6, 0x0b, 0x10, 0x8a, 0x22, 0xcd, 0xb1, 0x48, 0x15, 0x20, 0x88, 0x2b, 0xc6, 0xa5, + 0xac, 0xf5, 0x20, 0x40, 0x0f, 0x2f, 0xe0, 0x99, 0x2c, 0x82, 0xd8, 0x64, 0xf2, 0xf4, 0x09, 0xd0, + 0xc8, 0x3e, 0x64, 0x5a, 0x1d, 0xdf, 0x5f, 0x78, 0x4a, 0xb4, 0xb5, 0x57, 0x79, 0xbe, 0xd0, 0x20, + 0xe2, 0xda, 0xea, 0xb8, 0x13, 0x4a, 0xab, 0x8c, 0x95, 0x10, 0x03, 0x16, 0x78, 0x2e, 0xf8, 0x29, + 0x51, 0x3a, 0x79, 0x2a, 0x78, 0x1e, 0x9b, 0x1b, 0x81, 0x32, 0x4f, 0xc1, 0xb3, 0xbe, 0xdf, 0x83, + 0xb4, 0x65, 0xd5, 0x78, 0x8c, 0x91, 0x95, 0x40, 0xe2, 0xb5, 0xac, 0x1a, 0x63, 0x7e, 0x3d, 0xef, + 0x4c, 0x22, 0xa3, 0xc8, 0xe4, 0x13, 0x90, 0x93, 0x84, 0x18, 0x1e, 0x9d, 0x07, 0xfb, 0x40, 0xf2, + 0xc8, 0x92, 0x37, 0x0d, 0x09, 0x9b, 0x54, 0x41, 0xdd, 0x9f, 0x3c, 0x72, 0xf4, 0xe1, 0x10, 0x5d, + 0x35, 0x1f, 0x3b, 0x23, 0xc6, 0xb6, 0x65, 0x83, 0xb0, 0xd6, 0xe8, 0xc7, 0xd1, 0x15, 0xa5, 0xb2, + 0x7e, 0x2f, 0x4a, 0x49, 0x9a, 0xb0, 0x6e, 0x39, 0xe3, 0xc9, 0x90, 0xd9, 0x00, 0x95, 0x06, 0x23, + 0x2a, 0x90, 0xb2, 0x58, 0x3e, 0x18, 0x01, 0xd8, 0xa3, 0x85, 0xc2, 0xf0, 0xea, 0x78, 0x30, 0x8a, + 0x08, 0xa7, 0x71, 0x62, 0xcd, 0x91, 0x87, 0x9c, 0x9e, 0xaa, 0x61, 0x31, 0x17, 0x4f, 0x55, 0x21, + 0xe6, 0x06, 0xc2, 0xed, 0x87, 0x12, 0xe2, 0xcd, 0xe1, 0x65, 0xac, 0x14, 0x6f, 0x2e, 0x14, 0x65, + 0xee, 0x9d, 0x8c, 0x14, 0xf2, 0x94, 0x8f, 0xc5, 0x5b, 0x00, 0x0f, 0x06, 0x6e, 0xbf, 0xe6, 0x8c, + 0x4f, 0x07, 0x5d, 0x29, 0xec, 0x5d, 0xee, 0x57, 0x06, 0x6e, 0xdf, 0x3e, 0x43, 0xf0, 0x4f, 0xde, + 0xbd, 0x22, 0x21, 0x99, 0xd2, 0x7f, 0xf2, 0x41, 0x58, 0xa2, 0x4f, 0xad, 0xc0, 0x92, 0x89, 0xa9, + 0xc1, 0x91, 0x9a, 0x25, 0x06, 0x09, 0x10, 0xc8, 0x7d, 0x4c, 0x85, 0xe3, 0x0e, 0xc7, 0x12, 0xf3, + 0x2a, 0xf2, 0xde, 0xb8, 0xc3, 0x71, 0x34, 0x8a, 0xb5, 0x84, 0x4c, 0xca, 0x7e, 0xd3, 0x45, 0xf6, + 0x2a, 0x9e, 0x71, 0x07, 0x85, 0x41, 0x3e, 0xd7, 0x6c, 0x11, 0x3e, 0x57, 0x16, 0x06, 0x23, 0x64, + 0xd8, 0x08, 0xab, 0x5c, 0x64, 0x97, 0x73, 0x9c, 0xa9, 0x65, 0x8d, 0xf0, 0x4e, 0xbb, 0xf6, 0x11, + 0x82, 0x43, 0x8d, 0xf0, 0x91, 0xc9, 0x2e, 0xac, 0x31, 0x1e, 0xdf, 0xcf, 0x82, 0xc9, 0x59, 0x5c, + 0xdc, 0xdb, 0x82, 0x34, 0x99, 0xf2, 0xeb, 0x23, 0x04, 0xa4, 0x04, 0xf3, 0xa8, 0x1c, 0xe0, 0xee, + 0x0b, 0xdb, 0xb2, 0x66, 0x26, 0xba, 0x8e, 0x70, 0x5f, 0x41, 0x9d, 0x8c, 0xbc, 0xaf, 0x20, 0x2a, + 0xf9, 0x1c, 0x80, 0xd1, 0x1f, 0x0d, 0x7a, 0x3d, 0x0c, 0xf0, 0x9c, 0x45, 0x51, 0xea, 0x95, 0xf0, + 0x7a, 0xc4, 0x5a, 0x02, 0x24, 0x1e, 0x8c, 0x10, 0x9f, 0xed, 0x48, 0x18, 0x68, 0xa9, 0x2e, 0xad, + 0x02, 0x0b, 0x6c, 0x31, 0x62, 0xb0, 0x74, 0x9e, 0xfe, 0x45, 0x0a, 0xb5, 0xcd, 0x82, 0xa5, 0x73, + 0x78, 0x3c, 0x58, 0xba, 0x44, 0xa0, 0xed, 0xc3, 0x46, 0xd2, 0x87, 0x85, 0xd4, 0x19, 0xca, 0x79, + 0xd5, 0x19, 0x7f, 0x9a, 0x86, 0x65, 0xac, 0x4d, 0xec, 0xc2, 0x3a, 0xac, 0x58, 0x93, 0x47, 0x7e, + 0x24, 0x31, 0xb1, 0x1b, 0x63, 0xfb, 0x3c, 0xb9, 0x40, 0xbe, 0x36, 0x0d, 0x51, 0x10, 0x03, 0x56, + 0xc5, 0x49, 0xb0, 0x27, 0xbc, 0x1b, 0xfc, 0x38, 0xe5, 0x22, 0x1a, 0x66, 0x3c, 0x0b, 0x70, 0x84, + 0x28, 0x38, 0x0f, 0xd2, 0xcf, 0x73, 0x1e, 0x64, 0xce, 0x75, 0x1e, 0xbc, 0x0d, 0xcb, 0xe2, 0x6d, + 0xb8, 0x93, 0xcf, 0xbf, 0xd8, 0x4e, 0x1e, 0xaa, 0x8c, 0x54, 0xfd, 0x1d, 0x7d, 0x61, 0xe6, 0x8e, + 0x8e, 0x77, 0xd1, 0x62, 0x95, 0x0d, 0x11, 0x16, 0xdf, 0xd8, 0x31, 0x4d, 0xe6, 0x5e, 0xa1, 0xf9, + 0x53, 0x9c, 0x92, 0x1f, 0x81, 0xa5, 0xea, 0x40, 0x5c, 0x43, 0x4a, 0xf7, 0x3f, 0x3d, 0x01, 0x94, + 0xd9, 0x05, 0x1f, 0xd3, 0x3f, 0xdd, 0xd2, 0xef, 0xc7, 0xe9, 0x76, 0x1f, 0x80, 0xbb, 0xcd, 0x04, + 0xe9, 0xed, 0x70, 0xc9, 0x88, 0x28, 0x2a, 0xe1, 0x6b, 0x28, 0x09, 0x99, 0xee, 0x4e, 0xdc, 0xc2, + 0x49, 0x3f, 0x3a, 0x1a, 0x4c, 0xfa, 0xe3, 0x50, 0x3e, 0x68, 0xe1, 0x65, 0xdb, 0xe1, 0x65, 0xf2, + 0xf6, 0x10, 0x21, 0x7b, 0x7f, 0x07, 0x84, 0x7c, 0xd6, 0x37, 0xd0, 0x5c, 0x9c, 0xd5, 0x43, 0x5a, + 0xac, 0x87, 0xa6, 0x9a, 0x65, 0x6a, 0x3f, 0x50, 0xe4, 0x24, 0x11, 0x3f, 0xc5, 0x50, 0x7f, 0x0c, + 0xc0, 0xb7, 0x03, 0x11, 0x63, 0xcd, 0xe4, 0x25, 0x1f, 0x2a, 0xf7, 0x72, 0x80, 0x2b, 0x7d, 0x4d, + 0xfa, 0xfd, 0xfa, 0x9a, 0x16, 0xe4, 0x1a, 0x5f, 0x1e, 0x77, 0x02, 0xc3, 0x21, 0xb0, 0x7c, 0x4e, + 0x16, 0x77, 0xa6, 0xf4, 0xee, 0x0d, 0x3c, 0x1b, 0x02, 0x3e, 0x78, 0x0a, 0x0b, 0x2c, 0x11, 0x6a, + 0x7f, 0xa9, 0xc0, 0x9a, 0x1c, 0x1a, 0xe0, 0x69, 0xff, 0x88, 0x7c, 0x8a, 0xc5, 0xac, 0x55, 0x42, + 0x22, 0x8b, 0x84, 0x44, 0xb7, 0xdc, 0xa7, 0xfd, 0x23, 0xc6, 0x00, 0x75, 0x9e, 0xc8, 0x8d, 0xa5, + 0x84, 0xe4, 0x11, 0x2c, 0x37, 0x07, 0xbd, 0x1e, 0x65, 0x6b, 0x46, 0x8f, 0xb9, 0x00, 0x40, 0x2b, + 0x8a, 0xde, 0x46, 0x89, 0x06, 0xed, 0x5e, 0xe3, 0x72, 0xee, 0xa5, 0x21, 0xdd, 0xef, 0x5d, 0x4e, + 0x17, 0x54, 0xfb, 0x1d, 0xf4, 0xe5, 0x93, 0xeb, 0xd4, 0x7e, 0xa4, 0x00, 0x89, 0x37, 0x49, 0xde, + 0xb2, 0x94, 0xff, 0x03, 0x16, 0x36, 0xc2, 0xfa, 0x65, 0x9e, 0x87, 0xf5, 0xcb, 0xff, 0x9e, 0x02, + 0x6b, 0x15, 0xbd, 0xc6, 0xd3, 0x46, 0xb0, 0x4b, 0xb3, 0xab, 0xf0, 0x4a, 0x45, 0xaf, 0xd9, 0xcd, + 0x46, 0xb5, 0x52, 0x78, 0x68, 0x27, 0x46, 0x83, 0x7e, 0x05, 0x5e, 0x8e, 0xa3, 0x04, 0x97, 0x6b, + 0x97, 0x61, 0x33, 0x5e, 0x2c, 0x22, 0x46, 0x27, 0x13, 0x8b, 0xe0, 0xd2, 0xe9, 0xfc, 0xa7, 0x61, + 0x4d, 0x44, 0x47, 0x6e, 0x55, 0x2d, 0xcc, 0xbf, 0xb0, 0x06, 0xb9, 0x03, 0xc3, 0xac, 0x94, 0x1e, + 0xda, 0xa5, 0x76, 0xb5, 0xaa, 0xce, 0x91, 0x15, 0x58, 0xe2, 0x80, 0x82, 0xae, 0x2a, 0x64, 0x19, + 0xb2, 0x95, 0xba, 0x65, 0x14, 0xda, 0xa6, 0xa1, 0xa6, 0xf2, 0x9f, 0x86, 0xd5, 0xe6, 0xc8, 0x7d, + 0xdc, 0x19, 0x3b, 0xfb, 0xce, 0x53, 0xbc, 0x1b, 0x5b, 0x84, 0xb4, 0xa9, 0x1f, 0xaa, 0x73, 0x04, + 0x60, 0xa1, 0xb9, 0x5f, 0xb0, 0xee, 0xde, 0x55, 0x15, 0x92, 0x83, 0xc5, 0xbd, 0x42, 0xd3, 0xde, + 0xaf, 0x59, 0x6a, 0x8a, 0x3e, 0xe8, 0x87, 0x16, 0x3e, 0xa4, 0xf3, 0x1f, 0x86, 0x75, 0x64, 0x48, + 0xaa, 0xae, 0x37, 0x76, 0xfa, 0xce, 0x08, 0xdb, 0xb0, 0x0c, 0x59, 0xcb, 0xa1, 0x3b, 0xc9, 0xd8, + 0x61, 0x0d, 0xa8, 0x4d, 0x7a, 0x63, 0x77, 0xd8, 0x73, 0xbe, 0xaa, 0x2a, 0xf9, 0xfb, 0xb0, 0x66, + 0x0e, 0x26, 0x63, 0xb7, 0x7f, 0x62, 0x8d, 0x29, 0xc6, 0xc9, 0x53, 0xf2, 0x12, 0xac, 0xb7, 0xeb, + 0x7a, 0x6d, 0xb7, 0xb2, 0xd7, 0x6e, 0xb4, 0x2d, 0xbb, 0xa6, 0xb7, 0x0a, 0x65, 0x76, 0x33, 0x57, + 0x6b, 0x58, 0x2d, 0xdb, 0x34, 0x0a, 0x46, 0xbd, 0xa5, 0x2a, 0xf9, 0x6f, 0xa1, 0x6e, 0xe5, 0x68, + 0xd0, 0xef, 0x96, 0x3a, 0x47, 0xe3, 0xc1, 0x08, 0x1b, 0xac, 0xc1, 0x8e, 0x65, 0x14, 0x1a, 0xf5, + 0xa2, 0x5d, 0xd2, 0x0b, 0xad, 0x86, 0x99, 0x14, 0x8e, 0x7c, 0x0b, 0x2e, 0x26, 0xe0, 0x34, 0x5a, + 0x4d, 0x55, 0x21, 0x57, 0x60, 0x3b, 0xa1, 0xec, 0xd0, 0xd8, 0xd5, 0xdb, 0xad, 0x72, 0x5d, 0x4d, + 0x4d, 0x21, 0xb6, 0xac, 0x86, 0x9a, 0xce, 0xff, 0x96, 0x02, 0xab, 0x6d, 0x8f, 0x9b, 0xc5, 0xb7, + 0xd1, 0x23, 0xf6, 0x55, 0xb8, 0xdc, 0xb6, 0x0c, 0xd3, 0x6e, 0x35, 0xf6, 0x8d, 0xba, 0xdd, 0xb6, + 0xf4, 0xbd, 0x68, 0x6b, 0xae, 0xc0, 0xb6, 0x84, 0x61, 0x1a, 0x85, 0xc6, 0x81, 0x61, 0xda, 0x4d, + 0xdd, 0xb2, 0x0e, 0x1b, 0x66, 0x51, 0x55, 0xe8, 0x1b, 0x13, 0x10, 0x6a, 0x25, 0x9d, 0xb5, 0x26, + 0x54, 0x56, 0x37, 0x0e, 0xf5, 0xaa, 0xbd, 0xdb, 0x68, 0xa9, 0xe9, 0x7c, 0x8d, 0x9e, 0xef, 0x18, + 0x14, 0x98, 0x19, 0x73, 0x66, 0x21, 0x53, 0x6f, 0xd4, 0x8d, 0xe8, 0x7d, 0xee, 0x32, 0x64, 0xf5, + 0x66, 0xd3, 0x6c, 0x1c, 0xe0, 0x14, 0x03, 0x58, 0x28, 0x1a, 0x75, 0xda, 0xb2, 0x34, 0x2d, 0x69, + 0x9a, 0x8d, 0x5a, 0xa3, 0x65, 0x14, 0xd5, 0x4c, 0xde, 0x14, 0x4b, 0x58, 0x54, 0x7a, 0x34, 0x60, + 0x97, 0xa7, 0x45, 0xa3, 0xa4, 0xb7, 0xab, 0x2d, 0x3e, 0x44, 0x0f, 0x6d, 0xd3, 0xf8, 0x6c, 0xdb, + 0xb0, 0x5a, 0x96, 0xaa, 0x10, 0x15, 0x96, 0xeb, 0x86, 0x51, 0xb4, 0x6c, 0xd3, 0x38, 0xa8, 0x18, + 0x87, 0x6a, 0x8a, 0xd6, 0xc9, 0xfe, 0xd3, 0x37, 0xe4, 0xdf, 0x51, 0x80, 0xb0, 0x80, 0xca, 0x22, + 0x4b, 0x0f, 0xce, 0x98, 0x1d, 0xd8, 0x2a, 0xd3, 0xa1, 0xc6, 0x4f, 0xab, 0x35, 0x8a, 0xd1, 0x2e, + 0xbb, 0x08, 0x24, 0x52, 0xde, 0x28, 0x95, 0x54, 0x85, 0x6c, 0xc3, 0x85, 0x08, 0xbc, 0x68, 0x36, + 0x9a, 0x6a, 0x6a, 0x2b, 0x95, 0x55, 0xc8, 0xa5, 0x58, 0xe1, 0xbe, 0x61, 0x34, 0xd5, 0x34, 0x1d, + 0xa2, 0x48, 0x81, 0x58, 0x12, 0x8c, 0x3c, 0x93, 0xff, 0x86, 0x02, 0x17, 0x59, 0x33, 0xc5, 0xfa, + 0xf2, 0x9b, 0x7a, 0x19, 0x36, 0x79, 0x98, 0xf8, 0xa4, 0x86, 0x6e, 0x80, 0x1a, 0x2a, 0x65, 0xcd, + 0x7c, 0x09, 0xd6, 0x43, 0x50, 0x6c, 0x47, 0x8a, 0xee, 0x1e, 0x21, 0xf0, 0xae, 0x61, 0xb5, 0x6c, + 0xa3, 0x54, 0x6a, 0x98, 0x2d, 0xd6, 0x90, 0x74, 0x5e, 0x83, 0xf5, 0x82, 0x33, 0x1a, 0x53, 0xd1, + 0xab, 0xef, 0xb9, 0x83, 0x3e, 0x36, 0x61, 0x05, 0x96, 0x8c, 0xcf, 0xb5, 0x8c, 0xba, 0x55, 0x69, + 0xd4, 0xd5, 0xb9, 0xfc, 0xe5, 0x08, 0x8e, 0x58, 0xc7, 0x96, 0x55, 0x56, 0xe7, 0xf2, 0x1d, 0x58, + 0x11, 0x06, 0xe8, 0x6c, 0x56, 0xec, 0xc0, 0x96, 0x98, 0x6b, 0xb8, 0xa3, 0x44, 0x3f, 0x61, 0x13, + 0x36, 0xe2, 0xe5, 0x46, 0x4b, 0x55, 0xe8, 0x28, 0x44, 0x4a, 0x28, 0x3c, 0x95, 0xff, 0x0d, 0x05, + 0x56, 0xfc, 0x4b, 0x13, 0x54, 0xd3, 0x5e, 0x81, 0xed, 0x5a, 0x49, 0xb7, 0x8b, 0xc6, 0x41, 0xa5, + 0x60, 0xd8, 0xfb, 0x95, 0x7a, 0x31, 0xf2, 0x92, 0x97, 0xe1, 0xa5, 0x04, 0x04, 0x7c, 0xcb, 0x26, + 0x6c, 0x44, 0x8b, 0x5a, 0x74, 0xa9, 0xa6, 0x68, 0xd7, 0x47, 0x4b, 0xfc, 0x75, 0x9a, 0xce, 0xff, + 0x89, 0x02, 0x9b, 0xad, 0xd1, 0xc4, 0x1b, 0x3b, 0x5d, 0x7e, 0x7d, 0xc3, 0xf2, 0xe3, 0x60, 0x00, + 0xe9, 0x3c, 0xdc, 0x6c, 0x99, 0x6d, 0xab, 0x65, 0x14, 0x05, 0x39, 0x9d, 0xb4, 0x15, 0xd3, 0xa8, + 0x19, 0xf5, 0x56, 0xa4, 0x6d, 0x77, 0xe0, 0x03, 0x33, 0x70, 0xeb, 0x8d, 0x96, 0x78, 0xa6, 0x6b, + 0xf5, 0x03, 0x70, 0x6d, 0x06, 0xb2, 0x8f, 0x98, 0xca, 0x1f, 0xc0, 0xaa, 0xa5, 0xd7, 0xaa, 0xa5, + 0xc1, 0xe8, 0xc8, 0xd1, 0x27, 0xe3, 0xd3, 0x3e, 0xd9, 0x86, 0x4b, 0xa5, 0x86, 0x59, 0x30, 0x6c, + 0xfc, 0x82, 0x48, 0x23, 0x2e, 0xc0, 0x9a, 0x5c, 0xf8, 0xd0, 0xa0, 0xab, 0x8b, 0xc0, 0xaa, 0x0c, + 0xac, 0x37, 0xd4, 0x54, 0xfe, 0x0b, 0xb0, 0x1c, 0xca, 0x25, 0x78, 0x09, 0x2e, 0xc8, 0xcf, 0x4d, + 0xa7, 0xdf, 0x75, 0xfb, 0x27, 0xea, 0x5c, 0xb4, 0xc0, 0x9c, 0xf4, 0xfb, 0xb4, 0x00, 0xb7, 0x1b, + 0xb9, 0xa0, 0xe5, 0x8c, 0xce, 0xdc, 0x7e, 0x67, 0xec, 0x74, 0xd5, 0x54, 0xfe, 0x75, 0x58, 0x09, + 0x45, 0x30, 0xa7, 0xf3, 0xaa, 0xda, 0xe0, 0xe7, 0x43, 0xcd, 0x28, 0x56, 0xda, 0x35, 0x75, 0x9e, + 0x6e, 0x34, 0xe5, 0xca, 0x5e, 0x59, 0x85, 0xfc, 0xb7, 0x15, 0x2a, 0x06, 0x61, 0xbf, 0xd7, 0x4a, + 0xba, 0x98, 0x89, 0x74, 0x15, 0xb0, 0xbc, 0x08, 0x86, 0x65, 0x31, 0x2b, 0x8b, 0xcb, 0xb0, 0xc9, + 0x1f, 0x6c, 0xbd, 0x5e, 0xb4, 0xcb, 0xba, 0x59, 0x3c, 0xd4, 0x4d, 0xba, 0x34, 0x1e, 0xaa, 0x29, + 0x5c, 0xef, 0x12, 0xc4, 0x6e, 0x35, 0xda, 0x85, 0xb2, 0x9a, 0xa6, 0xcb, 0x2b, 0x04, 0x6f, 0x56, + 0xea, 0x6a, 0x06, 0x77, 0x8f, 0x18, 0x36, 0x56, 0x4b, 0xcb, 0xe7, 0xf3, 0xef, 0x29, 0x70, 0xc9, + 0x72, 0x4f, 0xfa, 0x9d, 0xf1, 0x64, 0xe4, 0xe8, 0xbd, 0x93, 0xc1, 0xc8, 0x1d, 0x9f, 0x9e, 0x59, + 0x13, 0x77, 0xec, 0x90, 0xdb, 0x70, 0xc3, 0xaa, 0xec, 0xd5, 0xf5, 0x16, 0x5d, 0xfd, 0x7a, 0x75, + 0xaf, 0x61, 0x56, 0x5a, 0xe5, 0x9a, 0x6d, 0xb5, 0x2b, 0xb1, 0x85, 0x71, 0x1d, 0x5e, 0x9d, 0x8e, + 0x5a, 0x35, 0xf6, 0xf4, 0xc2, 0x43, 0x55, 0x99, 0x5d, 0xe1, 0xae, 0x5e, 0xd5, 0xeb, 0x05, 0xa3, + 0x68, 0x1f, 0xdc, 0x55, 0x53, 0xe4, 0x06, 0x5c, 0x9d, 0x8e, 0x5a, 0xaa, 0x34, 0x2d, 0x8a, 0x96, + 0x9e, 0xfd, 0xde, 0xb2, 0x55, 0xa3, 0x58, 0x99, 0xfc, 0x1f, 0x2b, 0xb0, 0x39, 0x2d, 0x8c, 0x15, + 0xb9, 0x09, 0x9a, 0x51, 0x6f, 0x99, 0x7a, 0xa5, 0x68, 0x17, 0x4c, 0xa3, 0x68, 0xd4, 0x5b, 0x15, + 0xbd, 0x6a, 0xd9, 0x56, 0xa3, 0x4d, 0x67, 0x53, 0x60, 0x0c, 0x73, 0x0d, 0xae, 0xcc, 0xc0, 0x6b, + 0x54, 0x8a, 0x05, 0x55, 0x21, 0x77, 0xe1, 0xb5, 0x19, 0x48, 0xd6, 0x43, 0xab, 0x65, 0xd4, 0xe4, + 0x12, 0x35, 0x95, 0x2f, 0xc0, 0xd6, 0xf4, 0x38, 0x37, 0xf4, 0x14, 0x09, 0xf7, 0x74, 0x16, 0x32, + 0x45, 0x7a, 0x70, 0x85, 0xd2, 0x67, 0xe4, 0x5d, 0x50, 0xa3, 0xa1, 0x2a, 0x62, 0x56, 0x4b, 0x66, + 0xbb, 0x5e, 0x67, 0xa7, 0xdc, 0x1a, 0xe4, 0x1a, 0xad, 0xb2, 0x61, 0xf2, 0x04, 0x24, 0x98, 0x71, + 0xa4, 0x5d, 0xa7, 0x0b, 0xa7, 0x61, 0x56, 0x3e, 0x8f, 0xc7, 0xdd, 0x26, 0x6c, 0x58, 0x55, 0xbd, + 0xb0, 0x8f, 0x6b, 0xba, 0x52, 0xb7, 0x0b, 0x65, 0xbd, 0x5e, 0x37, 0xaa, 0x2a, 0x60, 0x67, 0x4e, + 0x73, 0x4f, 0x25, 0x1f, 0x84, 0x5b, 0x8d, 0xfd, 0x96, 0x6e, 0x37, 0xab, 0xed, 0xbd, 0x4a, 0xdd, + 0xb6, 0x1e, 0xd6, 0x0b, 0x82, 0x35, 0x2b, 0xc4, 0x4f, 0x84, 0x5b, 0x70, 0x7d, 0x26, 0x76, 0x90, + 0x2a, 0xe4, 0x26, 0x68, 0x33, 0x31, 0xf9, 0x87, 0xe4, 0x7f, 0xa8, 0xc0, 0xf6, 0x8c, 0x2b, 0x6e, + 0xf2, 0x1a, 0xdc, 0x2e, 0x1b, 0x7a, 0xb1, 0x6a, 0x58, 0x16, 0x6e, 0x14, 0x74, 0x18, 0x98, 0x75, + 0x53, 0xe2, 0x7e, 0x7f, 0x1b, 0x6e, 0xcc, 0x46, 0x0f, 0x38, 0x87, 0x5b, 0x70, 0x7d, 0x36, 0x2a, + 0xe7, 0x24, 0x52, 0x74, 0xbf, 0x9d, 0x8d, 0xe9, 0x73, 0x20, 0xe9, 0xfc, 0xef, 0x28, 0x70, 0x31, + 0x59, 0xcf, 0x44, 0xdb, 0x56, 0xa9, 0x5b, 0x2d, 0xbd, 0x5a, 0xb5, 0x9b, 0xba, 0xa9, 0xd7, 0x6c, + 0xa3, 0x6e, 0x36, 0xaa, 0xd5, 0xa4, 0x93, 0xf7, 0x3a, 0xbc, 0x3a, 0x1d, 0xd5, 0x2a, 0x98, 0x95, + 0x26, 0x3d, 0x5c, 0x34, 0xd8, 0x99, 0x8e, 0x65, 0x54, 0x0a, 0x86, 0x9a, 0xda, 0x7d, 0xeb, 0xfb, + 0xff, 0xb2, 0x33, 0xf7, 0xfd, 0xf7, 0x76, 0x94, 0x1f, 0xbd, 0xb7, 0xa3, 0xfc, 0xf3, 0x7b, 0x3b, + 0xca, 0xe7, 0xef, 0x9c, 0x2f, 0xcb, 0x16, 0x8a, 0x25, 0x8f, 0x16, 0x50, 0x80, 0x7a, 0xe3, 0x7f, + 0x02, 0x00, 0x00, 0xff, 0xff, 0xbc, 0xb9, 0x65, 0xe7, 0x39, 0xb3, 0x01, 0x00, } func (this *PluginSpecV1) Equal(that interface{}) bool { @@ -47539,6 +47704,27 @@ func (m *IntegrationSpecV1_AzureOIDC) MarshalToSizedBuffer(dAtA []byte) (int, er } return len(dAtA) - i, nil } +func (m *IntegrationSpecV1_GitHub) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IntegrationSpecV1_GitHub) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.GitHub != nil { + { + size, err := m.GitHub.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + return len(dAtA) - i, nil +} func (m *AWSOIDCIntegrationSpecV1) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -47628,6 +47814,153 @@ func (m *AzureOIDCIntegrationSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, err return len(dAtA) - i, nil } +func (m *GitHubIntegrationSpecV1) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GitHubIntegrationSpecV1) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GitHubIntegrationSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.Proxy != nil { + { + size, err := m.Proxy.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.Organization) > 0 { + i -= len(m.Organization) + copy(dAtA[i:], m.Organization) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Organization))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *GitHubProxy) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GitHubProxy) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GitHubProxy) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.Connector != nil { + { + size, err := m.Connector.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.CertAuthorities) > 0 { + for iNdEx := len(m.CertAuthorities) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.CertAuthorities[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *GitHubProxyConnector) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GitHubProxyConnector) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GitHubProxyConnector) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.RedirectURL) > 0 { + i -= len(m.RedirectURL) + copy(dAtA[i:], m.RedirectURL) + i = encodeVarintTypes(dAtA, i, uint64(len(m.RedirectURL))) + i-- + dAtA[i] = 0x1a + } + if len(m.ClientSecret) > 0 { + i -= len(m.ClientSecret) + copy(dAtA[i:], m.ClientSecret) + i = encodeVarintTypes(dAtA, i, uint64(len(m.ClientSecret))) + i-- + dAtA[i] = 0x12 + } + if len(m.ClientID) > 0 { + i -= len(m.ClientID) + copy(dAtA[i:], m.ClientID) + i = encodeVarintTypes(dAtA, i, uint64(len(m.ClientID))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *HeadlessAuthentication) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -48791,12 +49124,12 @@ func (m *AccessGraphSync) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n415, err415 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.PollInterval, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.PollInterval):]) - if err415 != nil { - return 0, err415 + n418, err418 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.PollInterval, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.PollInterval):]) + if err418 != nil { + return 0, err418 } - i -= n415 - i = encodeVarintTypes(dAtA, i, uint64(n415)) + i -= n418 + i = encodeVarintTypes(dAtA, i, uint64(n418)) i-- dAtA[i] = 0x12 if len(m.AWS) > 0 { @@ -59297,6 +59630,18 @@ func (m *IntegrationSpecV1_AzureOIDC) Size() (n int) { } return n } +func (m *IntegrationSpecV1_GitHub) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.GitHub != nil { + l = m.GitHub.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} func (m *AWSOIDCIntegrationSpecV1) Size() (n int) { if m == nil { return 0 @@ -59341,6 +59686,72 @@ func (m *AzureOIDCIntegrationSpecV1) Size() (n int) { return n } +func (m *GitHubIntegrationSpecV1) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Organization) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + if m.Proxy != nil { + l = m.Proxy.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *GitHubProxy) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.CertAuthorities) > 0 { + for _, e := range m.CertAuthorities { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if m.Connector != nil { + l = m.Connector.Size() + n += 1 + l + sovTypes(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *GitHubProxyConnector) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ClientID) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.ClientSecret) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.RedirectURL) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *HeadlessAuthentication) Size() (n int) { if m == nil { return 0 @@ -125925,15 +126336,375 @@ func (m *OktaAssignmentSpecV1) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.LastTransition, dAtA[iNdEx:postIndex]); err != nil { + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.LastTransition, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Finalized", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Finalized = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OktaAssignmentTargetV1) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OktaAssignmentTargetV1: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OktaAssignmentTargetV1: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + m.Type = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Type |= OktaAssignmentTargetV1_OktaAssignmentTargetType(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", 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.Id = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IntegrationV1) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IntegrationV1: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IntegrationV1: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceHeader", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ResourceHeader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IntegrationSpecV1) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IntegrationSpecV1: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IntegrationSpecV1: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AWSOIDC", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &AWSOIDCIntegrationSpecV1{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.SubKindSpec = &IntegrationSpecV1_AWSOIDC{v} + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureOIDC", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &AzureOIDCIntegrationSpecV1{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } + m.SubKindSpec = &IntegrationSpecV1_AzureOIDC{v} iNdEx = postIndex - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Finalized", wireType) + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GitHub", wireType) } - var v int + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTypes @@ -125943,12 +126714,27 @@ func (m *OktaAssignmentSpecV1) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= int(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - m.Finalized = bool(v != 0) + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &GitHubIntegrationSpecV1{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.SubKindSpec = &IntegrationSpecV1_GitHub{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -125971,7 +126757,7 @@ func (m *OktaAssignmentSpecV1) Unmarshal(dAtA []byte) error { } return nil } -func (m *OktaAssignmentTargetV1) Unmarshal(dAtA []byte) error { +func (m *AWSOIDCIntegrationSpecV1) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -125994,17 +126780,17 @@ func (m *OktaAssignmentTargetV1) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: OktaAssignmentTargetV1: wiretype end group for non-group") + return fmt.Errorf("proto: AWSOIDCIntegrationSpecV1: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: OktaAssignmentTargetV1: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AWSOIDCIntegrationSpecV1: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RoleARN", wireType) } - m.Type = 0 + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTypes @@ -126014,14 +126800,27 @@ func (m *OktaAssignmentTargetV1) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.Type |= OktaAssignmentTargetV1_OktaAssignmentTargetType(b&0x7F) << shift + 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.RoleARN = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field IssuerS3URI", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -126049,7 +126848,39 @@ func (m *OktaAssignmentTargetV1) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Id = string(dAtA[iNdEx:postIndex]) + m.IssuerS3URI = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Audience", 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.Audience = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -126073,7 +126904,7 @@ func (m *OktaAssignmentTargetV1) Unmarshal(dAtA []byte) error { } return nil } -func (m *IntegrationV1) Unmarshal(dAtA []byte) error { +func (m *AzureOIDCIntegrationSpecV1) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -126096,17 +126927,17 @@ func (m *IntegrationV1) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: IntegrationV1: wiretype end group for non-group") + return fmt.Errorf("proto: AzureOIDCIntegrationSpecV1: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: IntegrationV1: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AzureOIDCIntegrationSpecV1: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceHeader", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TenantID", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTypes @@ -126116,30 +126947,29 @@ func (m *IntegrationV1) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthTypes } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthTypes } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ResourceHeader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.TenantID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ClientID", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTypes @@ -126149,24 +126979,23 @@ func (m *IntegrationV1) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthTypes } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthTypes } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.ClientID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -126190,7 +127019,7 @@ func (m *IntegrationV1) Unmarshal(dAtA []byte) error { } return nil } -func (m *IntegrationSpecV1) Unmarshal(dAtA []byte) error { +func (m *GitHubIntegrationSpecV1) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -126213,17 +127042,17 @@ func (m *IntegrationSpecV1) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: IntegrationSpecV1: wiretype end group for non-group") + return fmt.Errorf("proto: GitHubIntegrationSpecV1: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: IntegrationSpecV1: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: GitHubIntegrationSpecV1: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AWSOIDC", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Organization", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTypes @@ -126233,30 +127062,27 @@ func (m *IntegrationSpecV1) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthTypes } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthTypes } if postIndex > l { return io.ErrUnexpectedEOF } - v := &AWSOIDCIntegrationSpecV1{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.SubKindSpec = &IntegrationSpecV1_AWSOIDC{v} + m.Organization = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AzureOIDC", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Proxy", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -126283,11 +127109,12 @@ func (m *IntegrationSpecV1) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - v := &AzureOIDCIntegrationSpecV1{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Proxy == nil { + m.Proxy = &GitHubProxy{} + } + if err := m.Proxy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } - m.SubKindSpec = &IntegrationSpecV1_AzureOIDC{v} iNdEx = postIndex default: iNdEx = preIndex @@ -126311,7 +127138,7 @@ func (m *IntegrationSpecV1) Unmarshal(dAtA []byte) error { } return nil } -func (m *AWSOIDCIntegrationSpecV1) Unmarshal(dAtA []byte) error { +func (m *GitHubProxy) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -126334,17 +127161,17 @@ func (m *AWSOIDCIntegrationSpecV1) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AWSOIDCIntegrationSpecV1: wiretype end group for non-group") + return fmt.Errorf("proto: GitHubProxy: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AWSOIDCIntegrationSpecV1: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: GitHubProxy: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RoleARN", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field CertAuthorities", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTypes @@ -126354,29 +127181,31 @@ func (m *AWSOIDCIntegrationSpecV1) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthTypes } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthTypes } if postIndex > l { return io.ErrUnexpectedEOF } - m.RoleARN = string(dAtA[iNdEx:postIndex]) + m.CertAuthorities = append(m.CertAuthorities, &SSHKeyPair{}) + if err := m.CertAuthorities[len(m.CertAuthorities)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IssuerS3URI", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Connector", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTypes @@ -126386,55 +127215,27 @@ func (m *AWSOIDCIntegrationSpecV1) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthTypes } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthTypes } if postIndex > l { return io.ErrUnexpectedEOF } - m.IssuerS3URI = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Audience", 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 m.Connector == nil { + m.Connector = &GitHubProxyConnector{} } - if postIndex > l { - return io.ErrUnexpectedEOF + if err := m.Connector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - m.Audience = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -126458,7 +127259,7 @@ func (m *AWSOIDCIntegrationSpecV1) Unmarshal(dAtA []byte) error { } return nil } -func (m *AzureOIDCIntegrationSpecV1) Unmarshal(dAtA []byte) error { +func (m *GitHubProxyConnector) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -126481,15 +127282,15 @@ func (m *AzureOIDCIntegrationSpecV1) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AzureOIDCIntegrationSpecV1: wiretype end group for non-group") + return fmt.Errorf("proto: GitHubProxyConnector: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AzureOIDCIntegrationSpecV1: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: GitHubProxyConnector: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TenantID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ClientID", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -126517,11 +127318,11 @@ func (m *AzureOIDCIntegrationSpecV1) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.TenantID = string(dAtA[iNdEx:postIndex]) + m.ClientID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClientID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ClientSecret", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -126549,7 +127350,39 @@ func (m *AzureOIDCIntegrationSpecV1) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ClientID = string(dAtA[iNdEx:postIndex]) + m.ClientSecret = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RedirectURL", 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.RedirectURL = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex diff --git a/lib/auth/authclient/api.go b/lib/auth/authclient/api.go index 932d78a383505..d135ed196248f 100644 --- a/lib/auth/authclient/api.go +++ b/lib/auth/authclient/api.go @@ -756,7 +756,7 @@ type ReadDiscoveryAccessPoint interface { ListDiscoveryConfigs(ctx context.Context, pageSize int, nextKey string) ([]*discoveryconfig.DiscoveryConfig, string, error) // GetIntegration returns the specified integration resource. - GetIntegration(ctx context.Context, name string) (types.Integration, error) + GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) // GetProxies returns a list of registered proxies. GetProxies() ([]types.Server, error) diff --git a/lib/auth/integration/integrationv1/service.go b/lib/auth/integration/integrationv1/service.go index 68831213c0fd5..b52d2825b35f7 100644 --- a/lib/auth/integration/integrationv1/service.go +++ b/lib/auth/integration/integrationv1/service.go @@ -26,6 +26,7 @@ import ( "github.com/gravitational/trace" "github.com/jonboulle/clockwork" + "golang.org/x/crypto/ssh" "google.golang.org/protobuf/types/known/emptypb" "github.com/gravitational/teleport" @@ -33,6 +34,7 @@ import ( "github.com/gravitational/teleport/api/types" apievents "github.com/gravitational/teleport/api/types/events" "github.com/gravitational/teleport/lib/authz" + "github.com/gravitational/teleport/lib/cryptosuites" "github.com/gravitational/teleport/lib/events" "github.com/gravitational/teleport/lib/services" ) @@ -57,6 +59,10 @@ type Cache interface { type KeyStoreManager interface { // GetJWTSigner selects a usable JWT keypair from the given keySet and returns a [crypto.Signer]. GetJWTSigner(ctx context.Context, ca types.CertAuthority) (crypto.Signer, error) + // NewSSHKeyPair generates a new SSH keypair in the keystore backend and returns it. + NewSSHKeyPair(ctx context.Context, purpose cryptosuites.KeyPurpose) (*types.SSHKeyPair, error) + // GetSSHSignerFromKeySet selects a usable SSH keypair from the provided key set. + GetSSHSignerFromKeySet(ctx context.Context, keySet types.CAKeySet) (ssh.Signer, error) } // ServiceConfig holds configuration options for @@ -137,6 +143,13 @@ func NewService(cfg *ServiceConfig) (*Service, error) { var _ integrationpb.IntegrationServiceServer = (*Service)(nil) +func readVerb(withSecret bool) string { + if withSecret { + return types.VerbRead + } + return types.VerbReadNoSecrets +} + // ListIntegrations returns a paginated list of all Integration resources. func (s *Service) ListIntegrations(ctx context.Context, req *integrationpb.ListIntegrationsRequest) (*integrationpb.ListIntegrationsResponse, error) { authCtx, err := s.authorizer.Authorize(ctx) @@ -144,11 +157,17 @@ func (s *Service) ListIntegrations(ctx context.Context, req *integrationpb.ListI return nil, trace.Wrap(err) } - if err := authCtx.CheckAccessToKind(types.KindIntegration, types.VerbRead, types.VerbList); err != nil { + if err := authCtx.CheckAccessToKind(types.KindIntegration, readVerb(req.WithSecrets), types.VerbList); err != nil { return nil, trace.Wrap(err) } - results, nextKey, err := s.cache.ListIntegrations(ctx, int(req.GetLimit()), req.GetNextKey()) + if req.WithSecrets { + if err := authCtx.AuthorizeAdminActionAllowReusedMFA(); err != nil { + return nil, trace.Wrap(err) + } + } + + results, nextKey, err := s.cache.ListIntegrations(ctx, int(req.GetLimit()), req.GetNextKey(), req.WithSecrets) if err != nil { return nil, trace.Wrap(err) } @@ -175,10 +194,17 @@ func (s *Service) GetIntegration(ctx context.Context, req *integrationpb.GetInte return nil, trace.Wrap(err) } - if err := authCtx.CheckAccessToKind(types.KindIntegration, types.VerbRead); err != nil { + if err := authCtx.CheckAccessToKind(types.KindIntegration, readVerb(req.WithSecrets)); err != nil { return nil, trace.Wrap(err) } - integration, err := s.cache.GetIntegration(ctx, req.GetName()) + + if req.WithSecrets { + if err := authCtx.AuthorizeAdminActionAllowReusedMFA(); err != nil { + return nil, trace.Wrap(err) + } + } + + integration, err := s.cache.GetIntegration(ctx, req.GetName(), req.WithSecrets) if err != nil { return nil, trace.Wrap(err) } @@ -191,6 +217,25 @@ func (s *Service) GetIntegration(ctx context.Context, req *integrationpb.GetInte return igV1, nil } +func (s *Service) initIntegrationResource(ctx context.Context, req *integrationpb.CreateIntegrationRequest) (*types.IntegrationV1, error) { + ig := req.GetIntegration() + switch ig.GetSubKind() { + case types.IntegrationSubKindGitHub: + spec := ig.GetGitHubIntegrationSpec() + if spec.Proxy == nil { + spec.Proxy = &types.GitHubProxy{} + } + // Generate SSH CA for the integration. + // TODO(greedy52) support per auth CA like HSM. + ca, err := s.keyStoreManager.NewSSHKeyPair(ctx, cryptosuites.GitHubProxyCASSH) + if err != nil { + return nil, trace.Wrap(err) + } + spec.Proxy.CertAuthorities = append(spec.Proxy.CertAuthorities, ca) + } + return ig, nil +} + // CreateIntegration creates a new Okta import rule resource. func (s *Service) CreateIntegration(ctx context.Context, req *integrationpb.CreateIntegrationRequest) (*types.IntegrationV1, error) { authCtx, err := s.authorizer.Authorize(ctx) @@ -202,7 +247,11 @@ func (s *Service) CreateIntegration(ctx context.Context, req *integrationpb.Crea return nil, trace.Wrap(err) } - ig, err := s.backend.CreateIntegration(ctx, req.GetIntegration()) + reqIg, err := s.initIntegrationResource(ctx, req) + if err != nil { + return nil, trace.Wrap(err) + } + ig, err := s.backend.CreateIntegration(ctx, reqIg) if err != nil { return nil, trace.Wrap(err) } @@ -292,7 +341,7 @@ func (s *Service) DeleteIntegration(ctx context.Context, req *integrationpb.Dele return nil, trace.Wrap(err) } - ig, err := s.cache.GetIntegration(ctx, req.GetName()) + ig, err := s.cache.GetIntegration(ctx, req.GetName(), false) if err != nil { return nil, trace.Wrap(err) } @@ -339,6 +388,10 @@ func getIntegrationMetadata(ig types.Integration) (apievents.IntegrationMetadata TenantID: ig.GetAzureOIDCIntegrationSpec().TenantID, ClientID: ig.GetAzureOIDCIntegrationSpec().ClientID, } + case types.IntegrationSubKindGitHub: + igMeta.GitHub = &apievents.GitHubIntegrationMetadata{ + Organization: ig.GetGitHubIntegrationSpec().Organization, + } default: return apievents.IntegrationMetadata{}, fmt.Errorf("unknown integration subkind: %s", igMeta.SubKind) } diff --git a/lib/auth/integration/integrationv1/service_test.go b/lib/auth/integration/integrationv1/service_test.go index 3316cf239d0e8..5e8af860e5ffb 100644 --- a/lib/auth/integration/integrationv1/service_test.go +++ b/lib/auth/integration/integrationv1/service_test.go @@ -76,7 +76,7 @@ func TestIntegrationCRUD(t *testing.T) { Role: types.RoleSpecV6{ Allow: types.RoleConditions{Rules: []types.Rule{{ Resources: []string{types.KindIntegration}, - Verbs: []string{types.VerbRead}, + Verbs: []string{types.VerbReadNoSecrets}, }}}, }, Setup: func(t *testing.T, igName string) { @@ -91,6 +91,27 @@ func TestIntegrationCRUD(t *testing.T) { }, ErrAssertion: noError, }, + { + Name: "allowed read access to integrations with secrets", + Role: types.RoleSpecV6{ + Allow: types.RoleConditions{Rules: []types.Rule{{ + Resources: []string{types.KindIntegration}, + Verbs: []string{types.VerbRead}, + }}}, + }, + Setup: func(t *testing.T, igName string) { + _, err := localClient.CreateIntegration(ctx, sampleIntegrationFn(t, igName)) + require.NoError(t, err) + }, + Test: func(ctx context.Context, resourceSvc *Service, igName string) error { + _, err := resourceSvc.GetIntegration(ctx, &integrationpb.GetIntegrationRequest{ + Name: igName, + WithSecrets: true, + }) + return err + }, + ErrAssertion: noError, + }, { Name: "no access to read integrations", Role: types.RoleSpecV6{}, @@ -102,6 +123,23 @@ func TestIntegrationCRUD(t *testing.T) { }, ErrAssertion: trace.IsAccessDenied, }, + { + Name: "no access to read integrations with secrets", + Role: types.RoleSpecV6{ + Allow: types.RoleConditions{Rules: []types.Rule{{ + Resources: []string{types.KindIntegration}, + Verbs: []string{types.VerbReadNoSecrets}, + }}}, + }, + Test: func(ctx context.Context, resourceSvc *Service, igName string) error { + _, err := resourceSvc.GetIntegration(ctx, &integrationpb.GetIntegrationRequest{ + Name: igName, + WithSecrets: true, + }) + return err + }, + ErrAssertion: trace.IsAccessDenied, + }, { Name: "denied access to read integrations", Role: types.RoleSpecV6{ @@ -160,6 +198,24 @@ func TestIntegrationCRUD(t *testing.T) { }, ErrAssertion: trace.IsAccessDenied, }, + { + Name: "no list access to integrations with secrets", + Role: types.RoleSpecV6{ + Allow: types.RoleConditions{Rules: []types.Rule{{ + Resources: []string{types.KindIntegration}, + Verbs: []string{types.VerbList, types.VerbReadNoSecrets}, + }}}, + }, + Test: func(ctx context.Context, resourceSvc *Service, igName string) error { + _, err := resourceSvc.ListIntegrations(ctx, &integrationpb.ListIntegrationsRequest{ + Limit: 0, + NextKey: "", + WithSecrets: true, + }) + return err + }, + ErrAssertion: trace.IsAccessDenied, + }, // Create { @@ -187,6 +243,42 @@ func TestIntegrationCRUD(t *testing.T) { }, ErrAssertion: noError, }, + { + Name: "create github integrations with generated CAs", + Role: types.RoleSpecV6{ + Allow: types.RoleConditions{Rules: []types.Rule{{ + Resources: []string{types.KindIntegration}, + Verbs: []string{types.VerbCreate}, + }}}, + }, + Test: func(ctx context.Context, resourceSvc *Service, igName string) error { + ig, err := types.NewIntegrationGitHub( + types.Metadata{Name: igName}, + &types.GitHubIntegrationSpecV1{ + Organization: "my-org", + }, + ) + if err != nil { + return trace.Wrap(err) + } + + created, err := resourceSvc.CreateIntegration(ctx, &integrationpb.CreateIntegrationRequest{Integration: ig}) + if err != nil { + return trace.Wrap(err) + } + spec := created.GetGitHubIntegrationSpec() + if spec == nil || spec.Proxy == nil || len(spec.Proxy.CertAuthorities) == 0 { + return trace.BadParameter("missing CAs") + } + for _, ca := range spec.Proxy.CertAuthorities { + if len(ca.PublicKey) == 0 || len(ca.PrivateKey) == 0 { + return trace.BadParameter("missing CA keys") + } + } + return nil + }, + ErrAssertion: noError, + }, // Update { diff --git a/lib/auth/keystore/manager.go b/lib/auth/keystore/manager.go index 3c8fcfc16498b..68073ae7f297f 100644 --- a/lib/auth/keystore/manager.go +++ b/lib/auth/keystore/manager.go @@ -251,18 +251,20 @@ func (s *cryptoCountSigner) Sign(rand io.Reader, digest []byte, opts crypto.Sign // GetSSHSigner selects a usable SSH keypair from the given CA ActiveKeys and // returns an [ssh.Signer]. func (m *Manager) GetSSHSigner(ctx context.Context, ca types.CertAuthority) (ssh.Signer, error) { - signer, err := m.getSSHSigner(ctx, ca.GetActiveKeys()) + signer, err := m.GetSSHSignerFromKeySet(ctx, ca.GetActiveKeys()) return signer, trace.Wrap(err) } // GetSSHSigner selects a usable SSH keypair from the given CA // AdditionalTrustedKeys and returns an [ssh.Signer]. func (m *Manager) GetAdditionalTrustedSSHSigner(ctx context.Context, ca types.CertAuthority) (ssh.Signer, error) { - signer, err := m.getSSHSigner(ctx, ca.GetAdditionalTrustedKeys()) + signer, err := m.GetSSHSignerFromKeySet(ctx, ca.GetAdditionalTrustedKeys()) return signer, trace.Wrap(err) } -func (m *Manager) getSSHSigner(ctx context.Context, keySet types.CAKeySet) (ssh.Signer, error) { +// GetSSHSignerFromKeySet selects a usable SSH keypair from the provided key +// set. +func (m *Manager) GetSSHSignerFromKeySet(ctx context.Context, keySet types.CAKeySet) (ssh.Signer, error) { for _, backend := range m.usableSigningBackends { for _, keyPair := range keySet.SSH { canSign, err := backend.canSignWithKey(ctx, keyPair.PrivateKey, keyPair.PrivateKeyType) diff --git a/lib/cache/cache.go b/lib/cache/cache.go index 2ba3dbebfbbf5..4a47e7c0ad0c2 100644 --- a/lib/cache/cache.go +++ b/lib/cache/cache.go @@ -172,7 +172,7 @@ func ForAuth(cfg Config) Config { {Kind: types.KindUserGroup}, {Kind: types.KindOktaImportRule}, {Kind: types.KindOktaAssignment}, - {Kind: types.KindIntegration}, + {Kind: types.KindIntegration, LoadSecrets: true}, {Kind: types.KindHeadlessAuthentication}, {Kind: types.KindUserLoginState}, {Kind: types.KindDiscoveryConfig}, @@ -3008,7 +3008,7 @@ func (c *Cache) GetOktaAssignment(ctx context.Context, name string) (types.OktaA } // ListIntegrations returns a paginated list of all Integrations resources. -func (c *Cache) ListIntegrations(ctx context.Context, pageSize int, nextKey string) ([]types.Integration, string, error) { +func (c *Cache) ListIntegrations(ctx context.Context, pageSize int, nextKey string, withSecrets bool) ([]types.Integration, string, error) { ctx, span := c.Tracer.Start(ctx, "cache/ListIntegrations") defer span.End() @@ -3017,11 +3017,11 @@ func (c *Cache) ListIntegrations(ctx context.Context, pageSize int, nextKey stri return nil, "", trace.Wrap(err) } defer rg.Release() - return rg.reader.ListIntegrations(ctx, pageSize, nextKey) + return rg.reader.ListIntegrations(ctx, pageSize, nextKey, withSecrets) } // GetIntegration returns the specified Integration resources. -func (c *Cache) GetIntegration(ctx context.Context, name string) (types.Integration, error) { +func (c *Cache) GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) { ctx, span := c.Tracer.Start(ctx, "cache/GetIntegration") defer span.End() @@ -3030,7 +3030,7 @@ func (c *Cache) GetIntegration(ctx context.Context, name string) (types.Integrat return nil, trace.Wrap(err) } defer rg.Release() - return rg.reader.GetIntegration(ctx, name) + return rg.reader.GetIntegration(ctx, name, withSecrets) } // ListUserTasks returns a list of UserTask resources. diff --git a/lib/cache/cache_test.go b/lib/cache/cache_test.go index 2bfb56ae2916e..7412c5526e63a 100644 --- a/lib/cache/cache_test.go +++ b/lib/cache/cache_test.go @@ -2288,12 +2288,14 @@ func TestIntegrations(t *testing.T) { return err }, list: func(ctx context.Context) ([]types.Integration, error) { - results, _, err := p.integrations.ListIntegrations(ctx, 0, "") + results, _, err := p.integrations.ListIntegrations(ctx, 0, "", false) return results, err }, - cacheGet: p.cache.GetIntegration, + cacheGet: func(ctx context.Context, name string) (types.Integration, error) { + return p.cache.GetIntegration(ctx, name, false) + }, cacheList: func(ctx context.Context) ([]types.Integration, error) { - results, _, err := p.cache.ListIntegrations(ctx, 0, "") + results, _, err := p.cache.ListIntegrations(ctx, 0, "", false) return results, err }, update: func(ctx context.Context, i types.Integration) error { diff --git a/lib/cache/collections.go b/lib/cache/collections.go index c6aa7c73898a3..e20a04eb3e507 100644 --- a/lib/cache/collections.go +++ b/lib/cache/collections.go @@ -2869,7 +2869,7 @@ func (integrationsExecutor) getAll(ctx context.Context, cache *Cache, loadSecret for { var igs []types.Integration var err error - igs, startKey, err = cache.Integrations.ListIntegrations(ctx, 0, startKey) + igs, startKey, err = cache.Integrations.ListIntegrations(ctx, 0, startKey, loadSecrets) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/cryptosuites/suites.go b/lib/cryptosuites/suites.go index 2449a589422ec..d43d50ef35237 100644 --- a/lib/cryptosuites/suites.go +++ b/lib/cryptosuites/suites.go @@ -111,6 +111,9 @@ const ( // EC2InstanceConnect is a key used for the EC2 Instance Connect service. EC2InstanceConnect + // GitHubProxyCASSH represents the SSH key for GitHub proxy CAs. + GitHubProxyCASSH + // keyPurposeMax is 1 greater than the last valid key purpose, used to test that all values less than this // are valid for each suite. keyPurposeMax @@ -184,6 +187,8 @@ var ( ProxyKubeClient: RSA2048, // EC2InstanceConnect has always used Ed25519 by default. EC2InstanceConnect: Ed25519, + // GitHubProxyCASSH uses same algorithms as UserCASSH. + GitHubProxyCASSH: RSA2048, } // balancedV1 strikes a balance between security, compatibility, and @@ -214,6 +219,7 @@ var ( ProxyToDatabaseAgent: ECDSAP256, ProxyKubeClient: ECDSAP256, EC2InstanceConnect: Ed25519, + GitHubProxyCASSH: Ed25519, } // fipsv1 is an algorithm suite tailored for FIPS compliance. It is based on @@ -244,6 +250,7 @@ var ( ProxyToDatabaseAgent: ECDSAP256, ProxyKubeClient: ECDSAP256, EC2InstanceConnect: ECDSAP256, + GitHubProxyCASSH: ECDSAP256, } // hsmv1 in an algorithm suite tailored for clusters using an HSM or KMS @@ -276,6 +283,7 @@ var ( ProxyToDatabaseAgent: ECDSAP256, ProxyKubeClient: ECDSAP256, EC2InstanceConnect: Ed25519, + GitHubProxyCASSH: ECDSAP256, } allSuites = map[types.SignatureAlgorithmSuite]suite{ diff --git a/lib/integrations/awsoidc/clientsv1.go b/lib/integrations/awsoidc/clientsv1.go index 8c16f4c66156a..ab75dc716b10a 100644 --- a/lib/integrations/awsoidc/clientsv1.go +++ b/lib/integrations/awsoidc/clientsv1.go @@ -42,7 +42,7 @@ func (j IdentityToken) FetchToken(ctx credentials.Context) ([]byte, error) { // IntegrationTokenGenerator is an interface that indicates which APIs are required to generate an Integration Token. type IntegrationTokenGenerator interface { // GetIntegration returns the specified integration resources. - GetIntegration(ctx context.Context, name string) (types.Integration, error) + GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) // GetProxies returns a list of registered proxies. GetProxies() ([]types.Server, error) @@ -59,7 +59,7 @@ func NewSessionV1(ctx context.Context, client IntegrationTokenGenerator, region return nil, trace.Wrap(err) } } - integration, err := client.GetIntegration(ctx, integrationName) + integration, err := client.GetIntegration(ctx, integrationName, false) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/integrations/awsoidc/clientsv1_test.go b/lib/integrations/awsoidc/clientsv1_test.go index 66a350ebe67a6..0fdd6eb269318 100644 --- a/lib/integrations/awsoidc/clientsv1_test.go +++ b/lib/integrations/awsoidc/clientsv1_test.go @@ -38,7 +38,10 @@ type mockIntegrationsTokenGenerator struct { } // GetIntegration returns the specified integration resources. -func (m *mockIntegrationsTokenGenerator) GetIntegration(ctx context.Context, name string) (types.Integration, error) { +func (m *mockIntegrationsTokenGenerator) GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) { + if withSecrets { + return nil, trace.AccessDenied("access denied") + } if ig, found := m.integrations[name]; found { return ig, nil } diff --git a/lib/integrations/awsoidc/credprovider/integration_config_provider.go b/lib/integrations/awsoidc/credprovider/integration_config_provider.go index a98ba7a2b55ff..f19aed7ae704b 100644 --- a/lib/integrations/awsoidc/credprovider/integration_config_provider.go +++ b/lib/integrations/awsoidc/credprovider/integration_config_provider.go @@ -83,7 +83,7 @@ type Config struct { type integrationGetter interface { // GetIntegration returns an integration by name from the backend. - GetIntegration(ctx context.Context, name string) (types.Integration, error) + GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) } type tokenGenerator interface { @@ -115,7 +115,7 @@ func (c *Config) checkAndSetDefaults() error { } func newAWSCredCache(ctx context.Context, cfg Config, stsClient stscreds.AssumeRoleWithWebIdentityAPIClient) (*CredentialsCache, error) { - integration, err := cfg.IntegrationGetter.GetIntegration(ctx, cfg.IntegrationName) + integration, err := cfg.IntegrationGetter.GetIntegration(ctx, cfg.IntegrationName, false) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/integrations/awsoidc/token_generator.go b/lib/integrations/awsoidc/token_generator.go index 0cb4e8d122172..44967590d3e8d 100644 --- a/lib/integrations/awsoidc/token_generator.go +++ b/lib/integrations/awsoidc/token_generator.go @@ -38,7 +38,7 @@ import ( // Cache is the subset of the cached resources that the AWS OIDC Token Generation queries. type Cache interface { // GetIntegration returns the specified integration resources. - GetIntegration(ctx context.Context, name string) (types.Integration, error) + GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) // GetClusterName returns local cluster name of the current auth server GetClusterName(...services.MarshalOption) (types.ClusterName, error) @@ -94,7 +94,7 @@ func issuerForIntegration(ctx context.Context, cacheClt Cache, integrationName s return issuer, trace.Wrap(err) } - integration, err := cacheClt.GetIntegration(ctx, integrationName) + integration, err := cacheClt.GetIntegration(ctx, integrationName, false) if err != nil { return "", trace.Wrap(err) } diff --git a/lib/integrations/externalauditstorage/configurator.go b/lib/integrations/externalauditstorage/configurator.go index 96c16c9dde133..dbd7874167fa0 100644 --- a/lib/integrations/externalauditstorage/configurator.go +++ b/lib/integrations/externalauditstorage/configurator.go @@ -144,7 +144,7 @@ type ExternalAuditStorageGetter interface { // integration by name. type IntegrationGetter interface { // GetIntegration returns the specified integration resources. - GetIntegration(ctx context.Context, name string) (types.Integration, error) + GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) } // NewConfigurator returns a new Configurator set up with the current active @@ -185,7 +185,7 @@ func newConfigurator(ctx context.Context, spec *externalauditstorage.ExternalAud } oidcIntegrationName := spec.IntegrationName - integration, err := integrationSvc.GetIntegration(ctx, oidcIntegrationName) + integration, err := integrationSvc.GetIntegration(ctx, oidcIntegrationName, false) if err != nil { if trace.IsNotFound(err) { return nil, trace.NotFound( diff --git a/lib/reversetunnel/localsite.go b/lib/reversetunnel/localsite.go index 7c89ea25273b0..177e83f317bdd 100644 --- a/lib/reversetunnel/localsite.go +++ b/lib/reversetunnel/localsite.go @@ -531,7 +531,7 @@ func (s *localSite) setupTunnelForOpenSSHEICENode(ctx context.Context, targetSer return nil, trace.BadParameter("failed to generate aws token: %v", err) } - integration, err := s.client.GetIntegration(ctx, awsInfo.Integration) + integration, err := s.client.GetIntegration(ctx, awsInfo.Integration, false) if err != nil { return nil, trace.BadParameter("failed to fetch integration details: %v", err) } diff --git a/lib/services/integration.go b/lib/services/integration.go index be495d385b4ab..fa75817427157 100644 --- a/lib/services/integration.go +++ b/lib/services/integration.go @@ -43,9 +43,9 @@ type Integrations interface { // IntegrationsGetter defines methods for List/Read operations on Integration Resources. type IntegrationsGetter interface { // ListIntegrations returns a paginated list of all integration resources. - ListIntegrations(ctx context.Context, pageSize int, nextToken string) ([]types.Integration, string, error) + ListIntegrations(ctx context.Context, pageSize int, nextToken string, withSecrets bool) ([]types.Integration, string, error) // GetIntegration returns the specified integration resources. - GetIntegration(ctx context.Context, name string) (types.Integration, error) + GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) } // IntegrationsTokenGenerator defines methods to generate tokens for Integrations. diff --git a/lib/services/local/externalauditstorage.go b/lib/services/local/externalauditstorage.go index 96cd050bfd5be..a9897e6d30ff2 100644 --- a/lib/services/local/externalauditstorage.go +++ b/lib/services/local/externalauditstorage.go @@ -258,7 +258,7 @@ func (s *ExternalAuditStorageService) checkAWSIntegration(ctx context.Context, i if err != nil { return backend.Key{}, "", trace.Wrap(err) } - integration, err := integrationsSvc.GetIntegration(ctx, integrationName) + integration, err := integrationsSvc.GetIntegration(ctx, integrationName, false) if err != nil { return backend.Key{}, "", trace.Wrap(err, "getting integration") } diff --git a/lib/services/local/integrations.go b/lib/services/local/integrations.go index 3b9842ee79690..a51dbf04032bf 100644 --- a/lib/services/local/integrations.go +++ b/lib/services/local/integrations.go @@ -76,22 +76,32 @@ func NewIntegrationsService(b backend.Backend, opts ...IntegrationsServiceOption } // ListIntegrations returns a paginated list of Integration resources. -func (s *IntegrationsService) ListIntegrations(ctx context.Context, pageSize int, pageToken string) ([]types.Integration, string, error) { +func (s *IntegrationsService) ListIntegrations(ctx context.Context, pageSize int, pageToken string, withSecrets bool) ([]types.Integration, string, error) { igs, nextKey, err := s.svc.ListResources(ctx, pageSize, pageToken) if err != nil { return nil, "", trace.Wrap(err) } + if !withSecrets { + for i, ig := range igs { + igs[i] = ig.WithoutSecrets() + } + } + return igs, nextKey, nil } // GetIntegration returns the specified Integration resource. -func (s *IntegrationsService) GetIntegration(ctx context.Context, name string) (types.Integration, error) { +func (s *IntegrationsService) GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) { ig, err := s.svc.GetResource(ctx, name) if err != nil { return nil, trace.Wrap(err) } + if !withSecrets { + ig = ig.WithoutSecrets() + } + return ig, nil } diff --git a/lib/srv/forward/sshserver.go b/lib/srv/forward/sshserver.go index 978be8c89ea32..29769a4b5e05c 100644 --- a/lib/srv/forward/sshserver.go +++ b/lib/srv/forward/sshserver.go @@ -680,7 +680,7 @@ func (s *Server) sendSSHPublicKeyToTarget(ctx context.Context) (ssh.Signer, erro return nil, trace.BadParameter("failed to generate aws token: %v", err) } - integration, err := s.authClient.GetIntegration(ctx, awsInfo.Integration) + integration, err := s.authClient.GetIntegration(ctx, awsInfo.Integration, false) if err != nil { return nil, trace.BadParameter("failed to fetch integration details: %v", err) } diff --git a/lib/web/integrations.go b/lib/web/integrations.go index 665035e048a15..ee1286af4adf8 100644 --- a/lib/web/integrations.go +++ b/lib/web/integrations.go @@ -118,7 +118,7 @@ func (h *Handler) integrationsUpdate(w http.ResponseWriter, r *http.Request, p h return nil, trace.Wrap(err) } - integration, err := clt.GetIntegration(r.Context(), integrationName) + integration, err := clt.GetIntegration(r.Context(), integrationName, false) if err != nil { return nil, trace.Wrap(err) } @@ -184,7 +184,7 @@ func (h *Handler) integrationsGet(w http.ResponseWriter, r *http.Request, p http return nil, trace.Wrap(err) } - ig, err := clt.GetIntegration(r.Context(), integrationName) + ig, err := clt.GetIntegration(r.Context(), integrationName, false) if err != nil { return nil, trace.Wrap(err) } @@ -212,7 +212,7 @@ func (h *Handler) integrationsList(w http.ResponseWriter, r *http.Request, p htt startKey := values.Get("startKey") - igs, nextKey, err := clt.ListIntegrations(r.Context(), int(limit), startKey) + igs, nextKey, err := clt.ListIntegrations(r.Context(), int(limit), startKey, false) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/web/integrations_awsoidc.go b/lib/web/integrations_awsoidc.go index 52d7d1710809b..40c87157272f3 100644 --- a/lib/web/integrations_awsoidc.go +++ b/lib/web/integrations_awsoidc.go @@ -270,7 +270,7 @@ func (h *Handler) awsOIDCConfigureDeployServiceIAM(w http.ResponseWriter, r *htt } // Ensure the IntegrationName is valid. - _, err = h.GetProxyClient().GetIntegration(ctx, integrationName) + _, err = h.GetProxyClient().GetIntegration(ctx, integrationName, false) // NotFound error is ignored to prevent disclosure of whether the integration exists in a public/no-auth endpoint. if err != nil && !trace.IsNotFound(err) { return nil, trace.Wrap(err) @@ -972,7 +972,7 @@ func (h *Handler) awsOIDCCreateAWSAppAccess(w http.ResponseWriter, r *http.Reque return nil, trace.Wrap(err) } - ig, err := clt.GetIntegration(ctx, integrationName) + ig, err := clt.GetIntegration(ctx, integrationName, false) if err != nil { return nil, trace.Wrap(err) } @@ -1036,7 +1036,7 @@ func (h *Handler) awsOIDCDeleteAWSAppAccess(w http.ResponseWriter, r *http.Reque return nil, trace.Wrap(err) } - ig, err := clt.GetIntegration(ctx, integrationName) + ig, err := clt.GetIntegration(ctx, integrationName, false) if err != nil { return nil, trace.Wrap(err) } @@ -1091,7 +1091,7 @@ func (h *Handler) awsOIDCConfigureIdP(w http.ResponseWriter, r *http.Request, p } // Ensure the IntegrationName is valid. - _, err = h.GetProxyClient().GetIntegration(ctx, integrationName) + _, err = h.GetProxyClient().GetIntegration(ctx, integrationName, false) // NotFound error is ignored to prevent disclosure of whether the integration exists in a public/no-auth endpoint. if err != nil && !trace.IsNotFound(err) { return nil, trace.Wrap(err) diff --git a/tool/tctl/common/plugin/entraid.go b/tool/tctl/common/plugin/entraid.go index c537be2680da8..5b0a38a563bc0 100644 --- a/tool/tctl/common/plugin/entraid.go +++ b/tool/tctl/common/plugin/entraid.go @@ -315,7 +315,7 @@ func (p *PluginsCommand) InstallEntra(ctx context.Context, args installPluginArg return trace.Wrap(err, "failed to create Azure OIDC integration") } - integration, err := args.authClient.GetIntegration(ctx, integrationSpec.GetName()) + integration, err := args.authClient.GetIntegration(ctx, integrationSpec.GetName(), false) if err != nil { return trace.Wrap(err, "failed to get Azure OIDC integration") } diff --git a/tool/tctl/common/plugin/plugins_command.go b/tool/tctl/common/plugin/plugins_command.go index bcc2661caf8c7..f4853d57f9653 100644 --- a/tool/tctl/common/plugin/plugins_command.go +++ b/tool/tctl/common/plugin/plugins_command.go @@ -205,7 +205,7 @@ type authClient interface { CreateSAMLConnector(ctx context.Context, connector types.SAMLConnector) (types.SAMLConnector, error) UpsertSAMLConnector(ctx context.Context, connector types.SAMLConnector) (types.SAMLConnector, error) CreateIntegration(ctx context.Context, ig types.Integration) (types.Integration, error) - GetIntegration(ctx context.Context, name string) (types.Integration, error) + GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) UpdateIntegration(ctx context.Context, ig types.Integration) (types.Integration, error) Ping(ctx context.Context) (proto.PingResponse, error) PerformMFACeremony(ctx context.Context, challengeRequest *proto.CreateAuthenticateChallengeRequest, promptOpts ...mfa.PromptOpt) (*proto.MFAAuthenticateResponse, error) diff --git a/tool/tctl/common/plugin/plugins_command_test.go b/tool/tctl/common/plugin/plugins_command_test.go index 3254e813ee205..4f838c74a13d0 100644 --- a/tool/tctl/common/plugin/plugins_command_test.go +++ b/tool/tctl/common/plugin/plugins_command_test.go @@ -485,7 +485,7 @@ func (m *mockAuthClient) UpdateIntegration(ctx context.Context, ig types.Integra return result.Get(0).(types.Integration), result.Error(1) } -func (m *mockAuthClient) GetIntegration(ctx context.Context, name string) (types.Integration, error) { +func (m *mockAuthClient) GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) { result := m.Called(ctx, name) return result.Get(0).(types.Integration), result.Error(1) } diff --git a/tool/tctl/common/resource_command.go b/tool/tctl/common/resource_command.go index ed011d771786d..49ddbd8b15dda 100644 --- a/tool/tctl/common/resource_command.go +++ b/tool/tctl/common/resource_command.go @@ -1411,7 +1411,7 @@ func (rc *ResourceCommand) createIntegration(ctx context.Context, client *authcl return trace.Wrap(err) } - existingIntegration, err := client.GetIntegration(ctx, integration.GetName()) + existingIntegration, err := client.GetIntegration(ctx, integration.GetName(), rc.withSecrets) if err != nil && !trace.IsNotFound(err) { return trace.Wrap(err) } @@ -1429,6 +1429,8 @@ func (rc *ResourceCommand) createIntegration(ctx context.Context, client *authcl switch integration.GetSubKind() { case types.IntegrationSubKindAWSOIDC: existingIntegration.SetAWSOIDCIntegrationSpec(integration.GetAWSOIDCIntegrationSpec()) + case types.IntegrationSubKindGitHub: + existingIntegration.SetGitHubIntegrationSpec(integration.GetGitHubIntegrationSpec()) default: return trace.BadParameter("subkind %q is not supported", integration.GetSubKind()) } @@ -2907,7 +2909,7 @@ func (rc *ResourceCommand) getCollection(ctx context.Context, client *authclient } case types.KindIntegration: if rc.ref.Name != "" { - ig, err := client.GetIntegration(ctx, rc.ref.Name) + ig, err := client.GetIntegration(ctx, rc.ref.Name, rc.withSecrets) if err != nil { return nil, trace.Wrap(err) } @@ -2919,7 +2921,7 @@ func (rc *ResourceCommand) getCollection(ctx context.Context, client *authclient var err error var nextKey string for { - igs, nextKey, err = client.ListIntegrations(ctx, 0, nextKey) + igs, nextKey, err = client.ListIntegrations(ctx, 0, nextKey, rc.withSecrets) if err != nil { return nil, trace.Wrap(err) } From 4efaa6c31700c52fca665a126d6e2f518793de6d Mon Sep 17 00:00:00 2001 From: STeve Huang Date: Thu, 14 Nov 2024 14:50:46 -0500 Subject: [PATCH 2/6] fix lib/web --- lib/web/intgrations_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/web/intgrations_test.go b/lib/web/intgrations_test.go index 6baf1532b2250..56a866d434152 100644 --- a/lib/web/intgrations_test.go +++ b/lib/web/intgrations_test.go @@ -68,7 +68,7 @@ func TestIntegrationsCreateWithAudience(t *testing.T) { require.Equal(t, 200, createResp.Code()) // check origin label stored in backend - intgrationResource, err := wPack.server.Auth().GetIntegration(ctx, integrationName) + intgrationResource, err := wPack.server.Auth().GetIntegration(ctx, integrationName, false) require.NoError(t, err) require.Equal(t, test.audience, intgrationResource.GetAWSOIDCIntegrationSpec().Audience) From 6501d5d577a7d7207c651a1fa373a8b09a4bc773 Mon Sep 17 00:00:00 2001 From: STeve Huang Date: Tue, 19 Nov 2024 13:31:57 -0500 Subject: [PATCH 3/6] revert withSecrets --- api/client/client.go | 14 +- .../integration/v1/integration_service.pb.go | 200 ++++++++---------- .../integration/v1/integration_service.proto | 4 - lib/auth/authclient/api.go | 2 +- lib/auth/integration/integrationv1/service.go | 29 +-- lib/cache/cache.go | 8 +- lib/cache/cache_test.go | 6 +- lib/cache/collections.go | 2 +- lib/integrations/awsoidc/clientsv1.go | 4 +- lib/integrations/awsoidc/clientsv1_test.go | 5 +- lib/integrations/awsoidc/token_generator.go | 4 +- .../externalauditstorage/configurator.go | 4 +- lib/reversetunnel/localsite.go | 2 +- lib/services/integration.go | 4 +- lib/services/local/externalauditstorage.go | 2 +- lib/services/local/integrations.go | 14 +- lib/srv/forward/sshserver.go | 2 +- lib/web/integrations.go | 6 +- lib/web/integrations_awsoidc.go | 8 +- lib/web/intgrations_test.go | 2 +- tool/tctl/common/plugin/entraid.go | 2 +- tool/tctl/common/plugin/plugins_command.go | 2 +- tool/tctl/common/resource_command.go | 6 +- 23 files changed, 136 insertions(+), 196 deletions(-) diff --git a/api/client/client.go b/api/client/client.go index 9c4e358387d7b..a9b8c665de599 100644 --- a/api/client/client.go +++ b/api/client/client.go @@ -4660,11 +4660,10 @@ func (c *Client) integrationsClient() integrationpb.IntegrationServiceClient { // ListIntegrations returns a paginated list of Integrations. // The response includes a nextKey which must be used to fetch the next page. -func (c *Client) ListIntegrations(ctx context.Context, pageSize int, nextKey string, withSecrets bool) ([]types.Integration, string, error) { +func (c *Client) ListIntegrations(ctx context.Context, pageSize int, nextKey string) ([]types.Integration, string, error) { resp, err := c.integrationsClient().ListIntegrations(ctx, &integrationpb.ListIntegrationsRequest{ - Limit: int32(pageSize), - NextKey: nextKey, - WithSecrets: withSecrets, + Limit: int32(pageSize), + NextKey: nextKey, }) if err != nil { return nil, "", trace.Wrap(err) @@ -4683,7 +4682,7 @@ func (c *Client) ListAllIntegrations(ctx context.Context) ([]types.Integration, var result []types.Integration var nextKey string for { - integrations, nextKey, err := c.ListIntegrations(ctx, 0, nextKey, false /*withSecrets*/) + integrations, nextKey, err := c.ListIntegrations(ctx, 0, nextKey) if err != nil { return nil, trace.Wrap(err) } @@ -4695,10 +4694,9 @@ func (c *Client) ListAllIntegrations(ctx context.Context) ([]types.Integration, } // GetIntegration returns an Integration by its name. -func (c *Client) GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) { +func (c *Client) GetIntegration(ctx context.Context, name string) (types.Integration, error) { ig, err := c.integrationsClient().GetIntegration(ctx, &integrationpb.GetIntegrationRequest{ - Name: name, - WithSecrets: withSecrets, + Name: name, }) if err != nil { return nil, 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 631f86c06a34d..4bf4813a11236 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 @@ -46,8 +46,6 @@ type ListIntegrationsRequest struct { Limit int32 `protobuf:"varint,1,opt,name=limit,proto3" json:"limit,omitempty"` // NextKey is the key for the next page of Integrations. NextKey string `protobuf:"bytes,2,opt,name=next_key,json=nextKey,proto3" json:"next_key,omitempty"` - // WithSecrets specifies whether to load associated secrets. - WithSecrets bool `protobuf:"varint,3,opt,name=with_secrets,json=withSecrets,proto3" json:"with_secrets,omitempty"` } func (x *ListIntegrationsRequest) Reset() { @@ -94,13 +92,6 @@ func (x *ListIntegrationsRequest) GetNextKey() string { return "" } -func (x *ListIntegrationsRequest) GetWithSecrets() bool { - if x != nil { - return x.WithSecrets - } - return false -} - // ListIntegrationsResponse is the response for ListIntegrationsRequest. type ListIntegrationsResponse struct { state protoimpl.MessageState @@ -174,8 +165,6 @@ type GetIntegrationRequest struct { // Name is the name of the Integration to be requested. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // WithSecrets specifies whether to load associated secrets. - WithSecrets bool `protobuf:"varint,2,opt,name=with_secrets,json=withSecrets,proto3" json:"with_secrets,omitempty"` } func (x *GetIntegrationRequest) Reset() { @@ -215,13 +204,6 @@ func (x *GetIntegrationRequest) GetName() string { return "" } -func (x *GetIntegrationRequest) GetWithSecrets() bool { - if x != nil { - return x.WithSecrets - } - return false -} - // CreateIntegrationRequest is the request to create the provided integration. type CreateIntegrationRequest struct { state protoimpl.MessageState @@ -523,106 +505,102 @@ var file_teleport_integration_v1_integration_service_proto_rawDesc = []byte{ 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6d, 0x0a, 0x17, + 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4a, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x6e, 0x65, 0x78, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x69, 0x74, 0x68, - 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x77, 0x69, 0x74, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x18, - 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, 0x38, 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x56, 0x31, 0x52, 0x0c, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x78, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, - 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x4e, - 0x0a, 0x15, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x77, - 0x69, 0x74, 0x68, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, 0x52, - 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0b, 0x69, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x56, 0x31, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x52, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, - 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x31, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2e, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 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, 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, 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, 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, + 0x07, 0x6e, 0x65, 0x78, 0x74, 0x4b, 0x65, 0x79, 0x22, 0x90, 0x01, 0x0a, 0x18, 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, 0x38, 0x0a, 0x0c, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 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, 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, 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, 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, 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, + 0x31, 0x52, 0x0c, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x19, 0x0a, 0x08, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6e, 0x65, 0x78, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x2b, 0x0a, 0x15, 0x47, + 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x52, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x31, 0x52, + 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x52, 0x0a, 0x18, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x31, 0x52, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0x2e, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, + 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, 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, 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, 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, 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, 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, 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, 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, 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, + 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 cf4000b741981..6306a204a79d7 100644 --- a/api/proto/teleport/integration/v1/integration_service.proto +++ b/api/proto/teleport/integration/v1/integration_service.proto @@ -52,8 +52,6 @@ message ListIntegrationsRequest { int32 limit = 1; // NextKey is the key for the next page of Integrations. string next_key = 2; - // WithSecrets specifies whether to load associated secrets. - bool with_secrets = 3; } // ListIntegrationsResponse is the response for ListIntegrationsRequest. @@ -70,8 +68,6 @@ message ListIntegrationsResponse { message GetIntegrationRequest { // Name is the name of the Integration to be requested. string name = 1; - // WithSecrets specifies whether to load associated secrets. - bool with_secrets = 2; } // CreateIntegrationRequest is the request to create the provided integration. diff --git a/lib/auth/authclient/api.go b/lib/auth/authclient/api.go index d135ed196248f..932d78a383505 100644 --- a/lib/auth/authclient/api.go +++ b/lib/auth/authclient/api.go @@ -756,7 +756,7 @@ type ReadDiscoveryAccessPoint interface { ListDiscoveryConfigs(ctx context.Context, pageSize int, nextKey string) ([]*discoveryconfig.DiscoveryConfig, string, error) // GetIntegration returns the specified integration resource. - GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) + GetIntegration(ctx context.Context, name string) (types.Integration, error) // GetProxies returns a list of registered proxies. GetProxies() ([]types.Server, error) diff --git a/lib/auth/integration/integrationv1/service.go b/lib/auth/integration/integrationv1/service.go index b52d2825b35f7..4400768078f26 100644 --- a/lib/auth/integration/integrationv1/service.go +++ b/lib/auth/integration/integrationv1/service.go @@ -143,13 +143,6 @@ func NewService(cfg *ServiceConfig) (*Service, error) { var _ integrationpb.IntegrationServiceServer = (*Service)(nil) -func readVerb(withSecret bool) string { - if withSecret { - return types.VerbRead - } - return types.VerbReadNoSecrets -} - // ListIntegrations returns a paginated list of all Integration resources. func (s *Service) ListIntegrations(ctx context.Context, req *integrationpb.ListIntegrationsRequest) (*integrationpb.ListIntegrationsResponse, error) { authCtx, err := s.authorizer.Authorize(ctx) @@ -157,17 +150,11 @@ func (s *Service) ListIntegrations(ctx context.Context, req *integrationpb.ListI return nil, trace.Wrap(err) } - if err := authCtx.CheckAccessToKind(types.KindIntegration, readVerb(req.WithSecrets), types.VerbList); err != nil { + if err := authCtx.CheckAccessToKind(types.KindIntegration, types.VerbRead, types.VerbList); err != nil { return nil, trace.Wrap(err) } - if req.WithSecrets { - if err := authCtx.AuthorizeAdminActionAllowReusedMFA(); err != nil { - return nil, trace.Wrap(err) - } - } - - results, nextKey, err := s.cache.ListIntegrations(ctx, int(req.GetLimit()), req.GetNextKey(), req.WithSecrets) + results, nextKey, err := s.cache.ListIntegrations(ctx, int(req.GetLimit()), req.GetNextKey()) if err != nil { return nil, trace.Wrap(err) } @@ -194,17 +181,11 @@ func (s *Service) GetIntegration(ctx context.Context, req *integrationpb.GetInte return nil, trace.Wrap(err) } - if err := authCtx.CheckAccessToKind(types.KindIntegration, readVerb(req.WithSecrets)); err != nil { + if err := authCtx.CheckAccessToKind(types.KindIntegration, types.VerbRead); err != nil { return nil, trace.Wrap(err) } - if req.WithSecrets { - if err := authCtx.AuthorizeAdminActionAllowReusedMFA(); err != nil { - return nil, trace.Wrap(err) - } - } - - integration, err := s.cache.GetIntegration(ctx, req.GetName(), req.WithSecrets) + integration, err := s.cache.GetIntegration(ctx, req.GetName()) if err != nil { return nil, trace.Wrap(err) } @@ -341,7 +322,7 @@ func (s *Service) DeleteIntegration(ctx context.Context, req *integrationpb.Dele return nil, trace.Wrap(err) } - ig, err := s.cache.GetIntegration(ctx, req.GetName(), false) + ig, err := s.cache.GetIntegration(ctx, req.GetName()) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/cache/cache.go b/lib/cache/cache.go index 4a47e7c0ad0c2..6105f79955887 100644 --- a/lib/cache/cache.go +++ b/lib/cache/cache.go @@ -3008,7 +3008,7 @@ func (c *Cache) GetOktaAssignment(ctx context.Context, name string) (types.OktaA } // ListIntegrations returns a paginated list of all Integrations resources. -func (c *Cache) ListIntegrations(ctx context.Context, pageSize int, nextKey string, withSecrets bool) ([]types.Integration, string, error) { +func (c *Cache) ListIntegrations(ctx context.Context, pageSize int, nextKey string) ([]types.Integration, string, error) { ctx, span := c.Tracer.Start(ctx, "cache/ListIntegrations") defer span.End() @@ -3017,11 +3017,11 @@ func (c *Cache) ListIntegrations(ctx context.Context, pageSize int, nextKey stri return nil, "", trace.Wrap(err) } defer rg.Release() - return rg.reader.ListIntegrations(ctx, pageSize, nextKey, withSecrets) + return rg.reader.ListIntegrations(ctx, pageSize, nextKey) } // GetIntegration returns the specified Integration resources. -func (c *Cache) GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) { +func (c *Cache) GetIntegration(ctx context.Context, name string) (types.Integration, error) { ctx, span := c.Tracer.Start(ctx, "cache/GetIntegration") defer span.End() @@ -3030,7 +3030,7 @@ func (c *Cache) GetIntegration(ctx context.Context, name string, withSecrets boo return nil, trace.Wrap(err) } defer rg.Release() - return rg.reader.GetIntegration(ctx, name, withSecrets) + return rg.reader.GetIntegration(ctx, name) } // ListUserTasks returns a list of UserTask resources. diff --git a/lib/cache/cache_test.go b/lib/cache/cache_test.go index 7412c5526e63a..bdc1f7f0107e9 100644 --- a/lib/cache/cache_test.go +++ b/lib/cache/cache_test.go @@ -2288,14 +2288,14 @@ func TestIntegrations(t *testing.T) { return err }, list: func(ctx context.Context) ([]types.Integration, error) { - results, _, err := p.integrations.ListIntegrations(ctx, 0, "", false) + results, _, err := p.integrations.ListIntegrations(ctx, 0, "") return results, err }, cacheGet: func(ctx context.Context, name string) (types.Integration, error) { - return p.cache.GetIntegration(ctx, name, false) + return p.cache.GetIntegration(ctx, name) }, cacheList: func(ctx context.Context) ([]types.Integration, error) { - results, _, err := p.cache.ListIntegrations(ctx, 0, "", false) + results, _, err := p.cache.ListIntegrations(ctx, 0, "") return results, err }, update: func(ctx context.Context, i types.Integration) error { diff --git a/lib/cache/collections.go b/lib/cache/collections.go index e20a04eb3e507..c6aa7c73898a3 100644 --- a/lib/cache/collections.go +++ b/lib/cache/collections.go @@ -2869,7 +2869,7 @@ func (integrationsExecutor) getAll(ctx context.Context, cache *Cache, loadSecret for { var igs []types.Integration var err error - igs, startKey, err = cache.Integrations.ListIntegrations(ctx, 0, startKey, loadSecrets) + igs, startKey, err = cache.Integrations.ListIntegrations(ctx, 0, startKey) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/integrations/awsoidc/clientsv1.go b/lib/integrations/awsoidc/clientsv1.go index ab75dc716b10a..8c16f4c66156a 100644 --- a/lib/integrations/awsoidc/clientsv1.go +++ b/lib/integrations/awsoidc/clientsv1.go @@ -42,7 +42,7 @@ func (j IdentityToken) FetchToken(ctx credentials.Context) ([]byte, error) { // IntegrationTokenGenerator is an interface that indicates which APIs are required to generate an Integration Token. type IntegrationTokenGenerator interface { // GetIntegration returns the specified integration resources. - GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) + GetIntegration(ctx context.Context, name string) (types.Integration, error) // GetProxies returns a list of registered proxies. GetProxies() ([]types.Server, error) @@ -59,7 +59,7 @@ func NewSessionV1(ctx context.Context, client IntegrationTokenGenerator, region return nil, trace.Wrap(err) } } - integration, err := client.GetIntegration(ctx, integrationName, false) + integration, err := client.GetIntegration(ctx, integrationName) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/integrations/awsoidc/clientsv1_test.go b/lib/integrations/awsoidc/clientsv1_test.go index 0fdd6eb269318..66a350ebe67a6 100644 --- a/lib/integrations/awsoidc/clientsv1_test.go +++ b/lib/integrations/awsoidc/clientsv1_test.go @@ -38,10 +38,7 @@ type mockIntegrationsTokenGenerator struct { } // GetIntegration returns the specified integration resources. -func (m *mockIntegrationsTokenGenerator) GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) { - if withSecrets { - return nil, trace.AccessDenied("access denied") - } +func (m *mockIntegrationsTokenGenerator) GetIntegration(ctx context.Context, name string) (types.Integration, error) { if ig, found := m.integrations[name]; found { return ig, nil } diff --git a/lib/integrations/awsoidc/token_generator.go b/lib/integrations/awsoidc/token_generator.go index 44967590d3e8d..0cb4e8d122172 100644 --- a/lib/integrations/awsoidc/token_generator.go +++ b/lib/integrations/awsoidc/token_generator.go @@ -38,7 +38,7 @@ import ( // Cache is the subset of the cached resources that the AWS OIDC Token Generation queries. type Cache interface { // GetIntegration returns the specified integration resources. - GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) + GetIntegration(ctx context.Context, name string) (types.Integration, error) // GetClusterName returns local cluster name of the current auth server GetClusterName(...services.MarshalOption) (types.ClusterName, error) @@ -94,7 +94,7 @@ func issuerForIntegration(ctx context.Context, cacheClt Cache, integrationName s return issuer, trace.Wrap(err) } - integration, err := cacheClt.GetIntegration(ctx, integrationName, false) + integration, err := cacheClt.GetIntegration(ctx, integrationName) if err != nil { return "", trace.Wrap(err) } diff --git a/lib/integrations/externalauditstorage/configurator.go b/lib/integrations/externalauditstorage/configurator.go index dbd7874167fa0..96c16c9dde133 100644 --- a/lib/integrations/externalauditstorage/configurator.go +++ b/lib/integrations/externalauditstorage/configurator.go @@ -144,7 +144,7 @@ type ExternalAuditStorageGetter interface { // integration by name. type IntegrationGetter interface { // GetIntegration returns the specified integration resources. - GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) + GetIntegration(ctx context.Context, name string) (types.Integration, error) } // NewConfigurator returns a new Configurator set up with the current active @@ -185,7 +185,7 @@ func newConfigurator(ctx context.Context, spec *externalauditstorage.ExternalAud } oidcIntegrationName := spec.IntegrationName - integration, err := integrationSvc.GetIntegration(ctx, oidcIntegrationName, false) + integration, err := integrationSvc.GetIntegration(ctx, oidcIntegrationName) if err != nil { if trace.IsNotFound(err) { return nil, trace.NotFound( diff --git a/lib/reversetunnel/localsite.go b/lib/reversetunnel/localsite.go index 177e83f317bdd..7c89ea25273b0 100644 --- a/lib/reversetunnel/localsite.go +++ b/lib/reversetunnel/localsite.go @@ -531,7 +531,7 @@ func (s *localSite) setupTunnelForOpenSSHEICENode(ctx context.Context, targetSer return nil, trace.BadParameter("failed to generate aws token: %v", err) } - integration, err := s.client.GetIntegration(ctx, awsInfo.Integration, false) + integration, err := s.client.GetIntegration(ctx, awsInfo.Integration) if err != nil { return nil, trace.BadParameter("failed to fetch integration details: %v", err) } diff --git a/lib/services/integration.go b/lib/services/integration.go index fa75817427157..be495d385b4ab 100644 --- a/lib/services/integration.go +++ b/lib/services/integration.go @@ -43,9 +43,9 @@ type Integrations interface { // IntegrationsGetter defines methods for List/Read operations on Integration Resources. type IntegrationsGetter interface { // ListIntegrations returns a paginated list of all integration resources. - ListIntegrations(ctx context.Context, pageSize int, nextToken string, withSecrets bool) ([]types.Integration, string, error) + ListIntegrations(ctx context.Context, pageSize int, nextToken string) ([]types.Integration, string, error) // GetIntegration returns the specified integration resources. - GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) + GetIntegration(ctx context.Context, name string) (types.Integration, error) } // IntegrationsTokenGenerator defines methods to generate tokens for Integrations. diff --git a/lib/services/local/externalauditstorage.go b/lib/services/local/externalauditstorage.go index a9897e6d30ff2..96cd050bfd5be 100644 --- a/lib/services/local/externalauditstorage.go +++ b/lib/services/local/externalauditstorage.go @@ -258,7 +258,7 @@ func (s *ExternalAuditStorageService) checkAWSIntegration(ctx context.Context, i if err != nil { return backend.Key{}, "", trace.Wrap(err) } - integration, err := integrationsSvc.GetIntegration(ctx, integrationName, false) + integration, err := integrationsSvc.GetIntegration(ctx, integrationName) if err != nil { return backend.Key{}, "", trace.Wrap(err, "getting integration") } diff --git a/lib/services/local/integrations.go b/lib/services/local/integrations.go index a51dbf04032bf..3b9842ee79690 100644 --- a/lib/services/local/integrations.go +++ b/lib/services/local/integrations.go @@ -76,32 +76,22 @@ func NewIntegrationsService(b backend.Backend, opts ...IntegrationsServiceOption } // ListIntegrations returns a paginated list of Integration resources. -func (s *IntegrationsService) ListIntegrations(ctx context.Context, pageSize int, pageToken string, withSecrets bool) ([]types.Integration, string, error) { +func (s *IntegrationsService) ListIntegrations(ctx context.Context, pageSize int, pageToken string) ([]types.Integration, string, error) { igs, nextKey, err := s.svc.ListResources(ctx, pageSize, pageToken) if err != nil { return nil, "", trace.Wrap(err) } - if !withSecrets { - for i, ig := range igs { - igs[i] = ig.WithoutSecrets() - } - } - return igs, nextKey, nil } // GetIntegration returns the specified Integration resource. -func (s *IntegrationsService) GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) { +func (s *IntegrationsService) GetIntegration(ctx context.Context, name string) (types.Integration, error) { ig, err := s.svc.GetResource(ctx, name) if err != nil { return nil, trace.Wrap(err) } - if !withSecrets { - ig = ig.WithoutSecrets() - } - return ig, nil } diff --git a/lib/srv/forward/sshserver.go b/lib/srv/forward/sshserver.go index 29769a4b5e05c..978be8c89ea32 100644 --- a/lib/srv/forward/sshserver.go +++ b/lib/srv/forward/sshserver.go @@ -680,7 +680,7 @@ func (s *Server) sendSSHPublicKeyToTarget(ctx context.Context) (ssh.Signer, erro return nil, trace.BadParameter("failed to generate aws token: %v", err) } - integration, err := s.authClient.GetIntegration(ctx, awsInfo.Integration, false) + integration, err := s.authClient.GetIntegration(ctx, awsInfo.Integration) if err != nil { return nil, trace.BadParameter("failed to fetch integration details: %v", err) } diff --git a/lib/web/integrations.go b/lib/web/integrations.go index ee1286af4adf8..665035e048a15 100644 --- a/lib/web/integrations.go +++ b/lib/web/integrations.go @@ -118,7 +118,7 @@ func (h *Handler) integrationsUpdate(w http.ResponseWriter, r *http.Request, p h return nil, trace.Wrap(err) } - integration, err := clt.GetIntegration(r.Context(), integrationName, false) + integration, err := clt.GetIntegration(r.Context(), integrationName) if err != nil { return nil, trace.Wrap(err) } @@ -184,7 +184,7 @@ func (h *Handler) integrationsGet(w http.ResponseWriter, r *http.Request, p http return nil, trace.Wrap(err) } - ig, err := clt.GetIntegration(r.Context(), integrationName, false) + ig, err := clt.GetIntegration(r.Context(), integrationName) if err != nil { return nil, trace.Wrap(err) } @@ -212,7 +212,7 @@ func (h *Handler) integrationsList(w http.ResponseWriter, r *http.Request, p htt startKey := values.Get("startKey") - igs, nextKey, err := clt.ListIntegrations(r.Context(), int(limit), startKey, false) + igs, nextKey, err := clt.ListIntegrations(r.Context(), int(limit), startKey) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/web/integrations_awsoidc.go b/lib/web/integrations_awsoidc.go index 40c87157272f3..52d7d1710809b 100644 --- a/lib/web/integrations_awsoidc.go +++ b/lib/web/integrations_awsoidc.go @@ -270,7 +270,7 @@ func (h *Handler) awsOIDCConfigureDeployServiceIAM(w http.ResponseWriter, r *htt } // Ensure the IntegrationName is valid. - _, err = h.GetProxyClient().GetIntegration(ctx, integrationName, false) + _, err = h.GetProxyClient().GetIntegration(ctx, integrationName) // NotFound error is ignored to prevent disclosure of whether the integration exists in a public/no-auth endpoint. if err != nil && !trace.IsNotFound(err) { return nil, trace.Wrap(err) @@ -972,7 +972,7 @@ func (h *Handler) awsOIDCCreateAWSAppAccess(w http.ResponseWriter, r *http.Reque return nil, trace.Wrap(err) } - ig, err := clt.GetIntegration(ctx, integrationName, false) + ig, err := clt.GetIntegration(ctx, integrationName) if err != nil { return nil, trace.Wrap(err) } @@ -1036,7 +1036,7 @@ func (h *Handler) awsOIDCDeleteAWSAppAccess(w http.ResponseWriter, r *http.Reque return nil, trace.Wrap(err) } - ig, err := clt.GetIntegration(ctx, integrationName, false) + ig, err := clt.GetIntegration(ctx, integrationName) if err != nil { return nil, trace.Wrap(err) } @@ -1091,7 +1091,7 @@ func (h *Handler) awsOIDCConfigureIdP(w http.ResponseWriter, r *http.Request, p } // Ensure the IntegrationName is valid. - _, err = h.GetProxyClient().GetIntegration(ctx, integrationName, false) + _, err = h.GetProxyClient().GetIntegration(ctx, integrationName) // NotFound error is ignored to prevent disclosure of whether the integration exists in a public/no-auth endpoint. if err != nil && !trace.IsNotFound(err) { return nil, trace.Wrap(err) diff --git a/lib/web/intgrations_test.go b/lib/web/intgrations_test.go index 56a866d434152..6baf1532b2250 100644 --- a/lib/web/intgrations_test.go +++ b/lib/web/intgrations_test.go @@ -68,7 +68,7 @@ func TestIntegrationsCreateWithAudience(t *testing.T) { require.Equal(t, 200, createResp.Code()) // check origin label stored in backend - intgrationResource, err := wPack.server.Auth().GetIntegration(ctx, integrationName, false) + intgrationResource, err := wPack.server.Auth().GetIntegration(ctx, integrationName) require.NoError(t, err) require.Equal(t, test.audience, intgrationResource.GetAWSOIDCIntegrationSpec().Audience) diff --git a/tool/tctl/common/plugin/entraid.go b/tool/tctl/common/plugin/entraid.go index 5b0a38a563bc0..c537be2680da8 100644 --- a/tool/tctl/common/plugin/entraid.go +++ b/tool/tctl/common/plugin/entraid.go @@ -315,7 +315,7 @@ func (p *PluginsCommand) InstallEntra(ctx context.Context, args installPluginArg return trace.Wrap(err, "failed to create Azure OIDC integration") } - integration, err := args.authClient.GetIntegration(ctx, integrationSpec.GetName(), false) + integration, err := args.authClient.GetIntegration(ctx, integrationSpec.GetName()) if err != nil { return trace.Wrap(err, "failed to get Azure OIDC integration") } diff --git a/tool/tctl/common/plugin/plugins_command.go b/tool/tctl/common/plugin/plugins_command.go index f4853d57f9653..bcc2661caf8c7 100644 --- a/tool/tctl/common/plugin/plugins_command.go +++ b/tool/tctl/common/plugin/plugins_command.go @@ -205,7 +205,7 @@ type authClient interface { CreateSAMLConnector(ctx context.Context, connector types.SAMLConnector) (types.SAMLConnector, error) UpsertSAMLConnector(ctx context.Context, connector types.SAMLConnector) (types.SAMLConnector, error) CreateIntegration(ctx context.Context, ig types.Integration) (types.Integration, error) - GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) + GetIntegration(ctx context.Context, name string) (types.Integration, error) UpdateIntegration(ctx context.Context, ig types.Integration) (types.Integration, error) Ping(ctx context.Context) (proto.PingResponse, error) PerformMFACeremony(ctx context.Context, challengeRequest *proto.CreateAuthenticateChallengeRequest, promptOpts ...mfa.PromptOpt) (*proto.MFAAuthenticateResponse, error) diff --git a/tool/tctl/common/resource_command.go b/tool/tctl/common/resource_command.go index 49ddbd8b15dda..373e248655587 100644 --- a/tool/tctl/common/resource_command.go +++ b/tool/tctl/common/resource_command.go @@ -1411,7 +1411,7 @@ func (rc *ResourceCommand) createIntegration(ctx context.Context, client *authcl return trace.Wrap(err) } - existingIntegration, err := client.GetIntegration(ctx, integration.GetName(), rc.withSecrets) + existingIntegration, err := client.GetIntegration(ctx, integration.GetName()) if err != nil && !trace.IsNotFound(err) { return trace.Wrap(err) } @@ -2909,7 +2909,7 @@ func (rc *ResourceCommand) getCollection(ctx context.Context, client *authclient } case types.KindIntegration: if rc.ref.Name != "" { - ig, err := client.GetIntegration(ctx, rc.ref.Name, rc.withSecrets) + ig, err := client.GetIntegration(ctx, rc.ref.Name) if err != nil { return nil, trace.Wrap(err) } @@ -2921,7 +2921,7 @@ func (rc *ResourceCommand) getCollection(ctx context.Context, client *authclient var err error var nextKey string for { - igs, nextKey, err = client.ListIntegrations(ctx, 0, nextKey, rc.withSecrets) + igs, nextKey, err = client.ListIntegrations(ctx, 0, nextKey) if err != nil { return nil, trace.Wrap(err) } From 1116e01323d51bb3281f498c6e6b6a682d4d9d56 Mon Sep 17 00:00:00 2001 From: STeve Huang Date: Thu, 21 Nov 2024 22:30:12 -0500 Subject: [PATCH 4/6] use static credentials --- api/proto/teleport/legacy/types/types.proto | 40 +- api/types/integration.go | 124 +- api/types/integration_github.go | 32 + api/types/integration_github_test.go | 60 + api/types/integration_test.go | 129 +- api/types/plugin.go | 1 + api/types/plugin_static_credentials.go | 21 + api/types/types.pb.go | 1862 +++++++---------- lib/auth/auth.go | 8 + lib/auth/init.go | 3 + .../integration/integrationv1/credentials.go | 227 ++ lib/auth/integration/integrationv1/service.go | 60 +- .../integration/integrationv1/service_test.go | 298 ++- lib/cache/cache.go | 2 +- lib/cache/cache_test.go | 4 +- .../integration_config_provider.go | 4 +- .../common/plugin/plugins_command_test.go | 2 +- 17 files changed, 1486 insertions(+), 1391 deletions(-) create mode 100644 api/types/integration_github.go create mode 100644 api/types/integration_github_test.go create mode 100644 lib/auth/integration/integrationv1/credentials.go diff --git a/api/proto/teleport/legacy/types/types.proto b/api/proto/teleport/legacy/types/types.proto index 9e1f033d39cd3..0feb8057b01d0 100644 --- a/api/proto/teleport/legacy/types/types.proto +++ b/api/proto/teleport/legacy/types/types.proto @@ -6994,6 +6994,7 @@ message PluginStaticCredentialsSpecV1 { string APIToken = 1; PluginStaticCredentialsBasicAuth BasicAuth = 2; PluginStaticCredentialsOAuthClientSecret OAuthClientSecret = 3; + PluginStaticCredentialsSSHCertAuthorities SSHCertAuthorities = 4; } } @@ -7015,6 +7016,14 @@ message PluginStaticCredentialsOAuthClientSecret { string ClientSecret = 2 [(gogoproto.jsontag) = "client_secret"]; } +// PluginStaticCredentialsSSHCertAuthorities contains the active SSH CAs used +// for the integration or plugin. +message PluginStaticCredentialsSSHCertAuthorities { + // CertAuthorities contains the active SSH CAs used for the integration or + // plugin. + repeated SSHKeyPair cert_authorities = 1; +} + // SAMLIdPServiceProviderV1 is the representation of a SAML IdP service provider. message SAMLIdPServiceProviderV1 { option (gogoproto.goproto_stringer) = false; @@ -7365,6 +7374,9 @@ message IntegrationSpecV1 { // GitHub contains the specific fields to handle the GitHub integration subkind. GitHubIntegrationSpecV1 GitHub = 3 [(gogoproto.jsontag) = "github,omitempty"]; } + + // Credentials contains credentials for the integration. + PluginCredentialsV1 credentials = 4; } // AWSOIDCIntegrationSpecV1 contains the spec properties for the AWS OIDC SubKind Integration. @@ -7413,34 +7425,6 @@ message AzureOIDCIntegrationSpecV1 { message GitHubIntegrationSpecV1 { // Organization specifies the name of the organization for the GitHub integration. string Organization = 1 [(gogoproto.jsontag) = "organization,omitempty"]; - - // Proxy specifies GitHub proxy related settings. - GitHubProxy proxy = 2 [(gogoproto.jsontag) = "proxy,omitempty"]; -} - -// GitHubProxy specifies GitHub proxy related settings. -message GitHubProxy { - // CertAuthority contains the active SSH CAs used between Teleport and - // GitHub. GitHub does not allow the same CA to be used for a different - // organization so the CA is defined per integration. TODO(greedy52) support - // rotation, HSM encryption. - repeated SSHKeyPair cert_authorities = 1 [(gogoproto.jsontag) = "cert_authorities,omitempty"]; - - // Connector specifies the GitHub connector spec used to obtain user ID and - // username. - GitHubProxyConnector connector = 2 [(gogoproto.jsontag) = "connector,omitempty"]; -} - -// GitHubProxyConnector specifies the GitHub connector spec for a GitHub proxy. -// This type is a subset of GithubConnectorSpecV3 but does not require fields -// like TeamRolesMapping. -message GitHubProxyConnector { - // ClientID is the Github OAuth app client ID. - string ClientID = 1 [(gogoproto.jsontag) = "client_id"]; - // ClientSecret is the Github OAuth app client secret. - string ClientSecret = 2 [(gogoproto.jsontag) = "client_secret"]; - // RedirectURL is the authorization callback URL. - string RedirectURL = 3 [(gogoproto.jsontag) = "redirect_url"]; } // HeadlessAuthentication holds data for an ongoing headless authentication attempt. diff --git a/api/types/integration.go b/api/types/integration.go index fb8331da64d92..36f8779ba4571 100644 --- a/api/types/integration.go +++ b/api/types/integration.go @@ -22,6 +22,8 @@ import ( "net/url" "github.com/gravitational/trace" + "google.golang.org/protobuf/encoding/protojson" + "google.golang.org/protobuf/protoadapt" "github.com/gravitational/teleport/api/utils" ) @@ -70,8 +72,12 @@ type Integration interface { // SetGitHubIntegrationSpec returns the GitHub spec. SetGitHubIntegrationSpec(*GitHubIntegrationSpecV1) - // WithoutSecrets returns an instance of resource without secrets. - WithoutSecrets() Integration + // SetCredentials updates credentials. + SetCredentials(creds PluginCredentials) error + // GetCredentials retrieves credentials. + GetCredentials() PluginCredentials + // WithoutCredentials returns a copy without credentials. + WithoutCredentials() Integration } var _ ResourceWithLabels = (*IntegrationV1)(nil) @@ -272,40 +278,8 @@ func (s *IntegrationSpecV1_GitHub) CheckAndSetDefaults() error { if s == nil || s.GitHub == nil { return trace.BadParameter("github is required for %q subkind", IntegrationSubKindGitHub) } - if s.GitHub.Organization == "" { - return trace.BadParameter("organization must be set") - } - if s.GitHub.Proxy == nil { - s.GitHub.Proxy = &GitHubProxy{} - } - if err := s.GitHub.Proxy.CheckAndSetDefaults(); err != nil { - return trace.Wrap(err) - } - return nil -} - -// CheckAndSetDefaults validates the configuration for GitHub proxy settings. -func (p *GitHubProxy) CheckAndSetDefaults() error { - for _, ca := range p.CertAuthorities { - if err := ca.CheckAndSetDefaults(); err != nil { - return trace.Wrap(err) - } - } - if p.Connector != nil { - if err := p.Connector.CheckAndSetDefaults(); err != nil { - return trace.Wrap(err) - } - } - return nil -} - -// CheckAndSetDefaults validates the configuration for GitHub Proxy connector. -func (c *GitHubProxyConnector) CheckAndSetDefaults() error { - if c.ClientID == "" { - return trace.BadParameter("client_id must be set") - } - if c.RedirectURL == "" { - return trace.BadParameter("redirect must be set") + if err := ValidateGitHubOrganizationName(s.GitHub.Organization); err != nil { + return trace.Wrap(err, "invalid organization name") } return nil } @@ -414,9 +388,10 @@ func (ig *IntegrationV1) UnmarshalJSON(data []byte) error { d := struct { ResourceHeader `json:""` Spec struct { - AWSOIDC json.RawMessage `json:"aws_oidc"` - AzureOIDC json.RawMessage `json:"azure_oidc"` - GitHub json.RawMessage `json:"github"` + AWSOIDC json.RawMessage `json:"aws_oidc"` + AzureOIDC json.RawMessage `json:"azure_oidc"` + GitHub json.RawMessage `json:"github"` + Credentials json.RawMessage `json:"credentials"` } `json:"spec"` }{} @@ -426,6 +401,13 @@ func (ig *IntegrationV1) UnmarshalJSON(data []byte) error { } integration.ResourceHeader = d.ResourceHeader + if len(d.Spec.Credentials) != 0 { + var credentials PluginCredentialsV1 + if err := protojson.Unmarshal(d.Spec.Credentials, protoadapt.MessageV2Of(&credentials)); err != nil { + return trace.Wrap(err) + } + integration.Spec.Credentials = &credentials + } switch integration.SubKind { case IntegrationSubKindAWSOIDC: @@ -481,13 +463,21 @@ func (ig *IntegrationV1) MarshalJSON() ([]byte, error) { d := struct { ResourceHeader `json:""` Spec struct { - AWSOIDC AWSOIDCIntegrationSpecV1 `json:"aws_oidc,omitempty"` - AzureOIDC AzureOIDCIntegrationSpecV1 `json:"azure_oidc,omitempty"` - GitHub GitHubIntegrationSpecV1 `json:"github,omitempty"` + AWSOIDC AWSOIDCIntegrationSpecV1 `json:"aws_oidc,omitempty"` + AzureOIDC AzureOIDCIntegrationSpecV1 `json:"azure_oidc,omitempty"` + GitHub GitHubIntegrationSpecV1 `json:"github,omitempty"` + Credentials json.RawMessage `json:"credentials,omitempty"` } `json:"spec"` }{} d.ResourceHeader = ig.ResourceHeader + if ig.Spec.Credentials != nil { + data, err := protojson.Marshal(protoadapt.MessageV2Of(ig.Spec.Credentials)) + if err != nil { + return nil, trace.Wrap(err) + } + d.Spec.Credentials = json.RawMessage(data) + } switch ig.SubKind { case IntegrationSubKindAWSOIDC: @@ -515,30 +505,36 @@ func (ig *IntegrationV1) MarshalJSON() ([]byte, error) { return out, trace.Wrap(err) } -// Copy returns a deep copy of the integration. -func (ig *IntegrationV1) Copy() *IntegrationV1 { - return utils.CloneProtoMsg(ig) +// SetCredentials updates credentials. +func (ig *IntegrationV1) SetCredentials(creds PluginCredentials) error { + if creds == nil { + ig.Spec.Credentials = nil + return nil + } + switch creds := creds.(type) { + case *PluginCredentialsV1: + ig.Spec.Credentials = creds + default: + return trace.BadParameter("unsupported plugin credential type %T", creds) + } + return nil } -// WithoutSecrets returns an instance of resource without secrets. -func (ig *IntegrationV1) WithoutSecrets() Integration { - switch ig.SubKind { - case IntegrationSubKindGitHub: - spec := ig.GetGitHubIntegrationSpec() - if spec == nil || spec.Proxy == nil { - return ig - } +// GetCredentials retrieves credentials. +func (ig *IntegrationV1) GetCredentials() PluginCredentials { + if ig.Spec.Credentials == nil { + return nil + } + return ig.Spec.Credentials +} - clone := ig.Copy() - spec = clone.GetGitHubIntegrationSpec() - for i := range spec.Proxy.CertAuthorities { - spec.Proxy.CertAuthorities[i].PrivateKey = nil - } - if spec.Proxy.Connector != nil { - spec.Proxy.Connector.ClientSecret = "" - } - clone.SetGitHubIntegrationSpec(spec) - return clone +// WithoutCredentials returns a copy without credentials. +func (ig *IntegrationV1) WithoutCredentials() Integration { + if ig == nil || ig.GetCredentials() == nil { + return ig } - return ig + + clone := utils.CloneProtoMsg(ig) + clone.SetCredentials(nil) + return clone } diff --git a/api/types/integration_github.go b/api/types/integration_github.go new file mode 100644 index 0000000000000..b14777f3356ad --- /dev/null +++ b/api/types/integration_github.go @@ -0,0 +1,32 @@ +/* +Copyright 2024 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package types + +import "regexp" + +// validGitHubOrganizationName filters the allowed characters in GitHub +// organization name. +// +// GitHub shows the following error when inputing an invalid org name: +// The name '_' may only contain alphanumeric characters or single hyphens, and +// cannot begin or end with a hyphen. +var validGitHubOrganizationName = regexp.MustCompile(`^[a-zA-Z0-9]([-a-zA-Z0-9]*[a-zA-Z0-9])?$`) + +// ValidateGitHubOrganizationName returns an error if a given string is not a +// valid GitHub organization name. +func ValidateGitHubOrganizationName(name string) error { + return ValidateResourceName(validGitHubOrganizationName, name) +} diff --git a/api/types/integration_github_test.go b/api/types/integration_github_test.go new file mode 100644 index 0000000000000..9aac25698e198 --- /dev/null +++ b/api/types/integration_github_test.go @@ -0,0 +1,60 @@ +/* +Copyright 2024 Gravitational, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package types + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestValidateGitHubOrganizationName(t *testing.T) { + tests := []struct { + name string + checkError require.ErrorAssertionFunc + }{ + { + name: "valid-org", + checkError: require.NoError, + }, + { + name: "a", + checkError: require.NoError, + }, + { + name: "1-valid-start-with-digit", + checkError: require.NoError, + }, + { + name: "-invalid-start-with-hyphen", + checkError: require.Error, + }, + { + name: "invalid-end-with-hyphen-", + checkError: require.Error, + }, + { + name: "invalid charactersc", + checkError: require.Error, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + test.checkError(t, ValidateGitHubOrganizationName(test.name)) + }) + } +} diff --git a/api/types/integration_test.go b/api/types/integration_test.go index 22cefac9785dd..e743b1629d239 100644 --- a/api/types/integration_test.go +++ b/api/types/integration_test.go @@ -308,7 +308,6 @@ func TestIntegrationCheckAndSetDefaults(t *testing.T) { SubKindSpec: &IntegrationSpecV1_GitHub{ GitHub: &GitHubIntegrationSpecV1{ Organization: "my-org", - Proxy: &GitHubProxy{}, }, }, }, @@ -317,7 +316,7 @@ func TestIntegrationCheckAndSetDefaults(t *testing.T) { expectedErrorIs: noErrorFunc, }, { - name: "github: error when no org is provided", + name: "github: error when invalid org is provided", integration: func(name string) (*IntegrationV1, error) { return NewIntegrationGitHub( Metadata{ @@ -328,44 +327,6 @@ func TestIntegrationCheckAndSetDefaults(t *testing.T) { }, expectedErrorIs: trace.IsBadParameter, }, - { - name: "github: error when invalid CA is provided", - integration: func(name string) (*IntegrationV1, error) { - return NewIntegrationGitHub( - Metadata{ - Name: name, - }, - &GitHubIntegrationSpecV1{ - Organization: "my-org", - Proxy: &GitHubProxy{ - CertAuthorities: []*SSHKeyPair{{ - PrivateKey: []byte("missing pub key"), - }}, - }, - }, - ) - }, - expectedErrorIs: trace.IsBadParameter, - }, - { - name: "github: error when invalid connector is provided", - integration: func(name string) (*IntegrationV1, error) { - return NewIntegrationGitHub( - Metadata{ - Name: name, - }, - &GitHubIntegrationSpecV1{ - Organization: "my-org", - Proxy: &GitHubProxy{ - Connector: &GitHubProxyConnector{ - ClientID: "no-redirect-url", - }, - }, - }, - ) - }, - expectedErrorIs: trace.IsBadParameter, - }, } { t.Run(tt.name, func(t *testing.T) { name := uuid.NewString() @@ -380,91 +341,3 @@ func TestIntegrationCheckAndSetDefaults(t *testing.T) { }) } } - -func TestIntegrationWithoutSecrets(t *testing.T) { - for _, tt := range []struct { - name string - integration func(string) (*IntegrationV1, error) - expectedIntegration func(*testing.T, string) *IntegrationV1 - }{ - { - name: "github: no secrets", - integration: func(name string) (*IntegrationV1, error) { - return NewIntegrationGitHub( - Metadata{ - Name: name, - }, - &GitHubIntegrationSpecV1{ - Organization: "my-org", - }, - ) - }, - expectedIntegration: func(t *testing.T, name string) *IntegrationV1 { - t.Helper() - ig, err := NewIntegrationGitHub( - Metadata{ - Name: name, - }, - &GitHubIntegrationSpecV1{ - Organization: "my-org", - }, - ) - require.NoError(t, err) - return ig - }, - }, - { - name: "github: secrets removed", - integration: func(name string) (*IntegrationV1, error) { - return NewIntegrationGitHub( - Metadata{ - Name: name, - }, - &GitHubIntegrationSpecV1{ - Organization: "my-org", - Proxy: &GitHubProxy{ - CertAuthorities: []*SSHKeyPair{{ - PublicKey: []byte("pub"), - PrivateKey: []byte("key"), - }}, - Connector: &GitHubProxyConnector{ - ClientID: "id", - ClientSecret: "secret", - RedirectURL: "redirect", - }, - }, - }, - ) - }, - expectedIntegration: func(t *testing.T, name string) *IntegrationV1 { - t.Helper() - ig, err := NewIntegrationGitHub( - Metadata{ - Name: name, - }, - &GitHubIntegrationSpecV1{ - Organization: "my-org", - Proxy: &GitHubProxy{ - CertAuthorities: []*SSHKeyPair{{ - PublicKey: []byte("pub"), - }}, - Connector: &GitHubProxyConnector{ - ClientID: "id", - RedirectURL: "redirect", - }, - }, - }, - ) - require.NoError(t, err) - return ig - }, - }, - } { - t.Run(tt.name, func(t *testing.T) { - name := uuid.NewString() - ig, err := tt.integration(name) - require.NoError(t, err) - require.Equal(t, tt.expectedIntegration(t, name), ig.WithoutSecrets()) - }) - } -} diff --git a/api/types/plugin.go b/api/types/plugin.go index ee946c9615979..fc69231cc6622 100644 --- a/api/types/plugin.go +++ b/api/types/plugin.go @@ -118,6 +118,7 @@ type Plugin interface { // PluginCredentials are the credentials embedded in Plugin type PluginCredentials interface { GetOauth2AccessToken() *PluginOAuth2AccessTokenCredentials + GetIdSecret() *PluginIdSecretCredential GetStaticCredentialsRef() *PluginStaticCredentialsRef } diff --git a/api/types/plugin_static_credentials.go b/api/types/plugin_static_credentials.go index 236f2d3c8c0e4..cf605fc6a6a2a 100644 --- a/api/types/plugin_static_credentials.go +++ b/api/types/plugin_static_credentials.go @@ -33,6 +33,9 @@ type PluginStaticCredentials interface { // GetOAuthClientSecret will return the attached client ID and client secret. IF they are not // present, the client ID and client secret will be empty. GetOAuthClientSecret() (clientID string, clientSecret string) + + // GetSSHCertAuthorities will return the attached SSH CA keys. + GetSSHCertAuthorities() []*SSHKeyPair } // NewPluginStaticCredentials creates a new PluginStaticCredentialsV1 resource. @@ -88,6 +91,15 @@ func (p *PluginStaticCredentialsV1) CheckAndSetDefaults() error { if credentials.OAuthClientSecret.ClientSecret == "" { return trace.BadParameter("client secret is empty") } + case *PluginStaticCredentialsSpecV1_SSHCertAuthorities: + if credentials.SSHCertAuthorities == nil { + return trace.BadParameter("SSH CAs are missing") + } + for _, ca := range credentials.SSHCertAuthorities.CertAuthorities { + if err := ca.CheckAndSetDefaults(); err != nil { + return trace.Wrap(err, "invalid SSH CA") + } + } default: return trace.BadParameter("credentials are not set or have an unknown type %T", credentials) } @@ -133,6 +145,15 @@ func (p *PluginStaticCredentialsV1) GetOAuthClientSecret() (clientID string, cli return credentials.OAuthClientSecret.ClientId, credentials.OAuthClientSecret.ClientSecret } +// GetSSHCertAuthorities will return the attached SSH CA keys. +func (p *PluginStaticCredentialsV1) GetSSHCertAuthorities() []*SSHKeyPair { + credentials, ok := p.Spec.Credentials.(*PluginStaticCredentialsSpecV1_SSHCertAuthorities) + if !ok { + return nil + } + return credentials.SSHCertAuthorities.CertAuthorities +} + // MatchSearch is a dummy value as credentials are not searchable. func (p *PluginStaticCredentialsV1) MatchSearch(_ []string) bool { return false diff --git a/api/types/types.pb.go b/api/types/types.pb.go index ac20f27e270b3..7854bbb607096 100644 --- a/api/types/types.pb.go +++ b/api/types/types.pb.go @@ -1261,7 +1261,7 @@ func (x OktaAssignmentSpecV1_OktaAssignmentStatus) String() string { } func (OktaAssignmentSpecV1_OktaAssignmentStatus) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{333, 0} + return fileDescriptor_9198ee693835762e, []int{334, 0} } // OktaAssignmentTargetType is the type of Okta object that an assignment is targeting. @@ -1293,7 +1293,7 @@ func (x OktaAssignmentTargetV1_OktaAssignmentTargetType) String() string { } func (OktaAssignmentTargetV1_OktaAssignmentTargetType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{334, 0} + return fileDescriptor_9198ee693835762e, []int{335, 0} } type KeepAlive struct { @@ -18363,6 +18363,7 @@ type PluginStaticCredentialsSpecV1 struct { // *PluginStaticCredentialsSpecV1_APIToken // *PluginStaticCredentialsSpecV1_BasicAuth // *PluginStaticCredentialsSpecV1_OAuthClientSecret + // *PluginStaticCredentialsSpecV1_SSHCertAuthorities Credentials isPluginStaticCredentialsSpecV1_Credentials `protobuf_oneof:"credentials"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -18417,11 +18418,16 @@ type PluginStaticCredentialsSpecV1_BasicAuth struct { type PluginStaticCredentialsSpecV1_OAuthClientSecret struct { OAuthClientSecret *PluginStaticCredentialsOAuthClientSecret `protobuf:"bytes,3,opt,name=OAuthClientSecret,proto3,oneof" json:"OAuthClientSecret,omitempty"` } +type PluginStaticCredentialsSpecV1_SSHCertAuthorities struct { + SSHCertAuthorities *PluginStaticCredentialsSSHCertAuthorities `protobuf:"bytes,4,opt,name=SSHCertAuthorities,proto3,oneof" json:"SSHCertAuthorities,omitempty"` +} func (*PluginStaticCredentialsSpecV1_APIToken) isPluginStaticCredentialsSpecV1_Credentials() {} func (*PluginStaticCredentialsSpecV1_BasicAuth) isPluginStaticCredentialsSpecV1_Credentials() {} func (*PluginStaticCredentialsSpecV1_OAuthClientSecret) isPluginStaticCredentialsSpecV1_Credentials() { } +func (*PluginStaticCredentialsSpecV1_SSHCertAuthorities) isPluginStaticCredentialsSpecV1_Credentials() { +} func (m *PluginStaticCredentialsSpecV1) GetCredentials() isPluginStaticCredentialsSpecV1_Credentials { if m != nil { @@ -18451,12 +18457,20 @@ func (m *PluginStaticCredentialsSpecV1) GetOAuthClientSecret() *PluginStaticCred return nil } +func (m *PluginStaticCredentialsSpecV1) GetSSHCertAuthorities() *PluginStaticCredentialsSSHCertAuthorities { + if x, ok := m.GetCredentials().(*PluginStaticCredentialsSpecV1_SSHCertAuthorities); ok { + return x.SSHCertAuthorities + } + return nil +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*PluginStaticCredentialsSpecV1) XXX_OneofWrappers() []interface{} { return []interface{}{ (*PluginStaticCredentialsSpecV1_APIToken)(nil), (*PluginStaticCredentialsSpecV1_BasicAuth)(nil), (*PluginStaticCredentialsSpecV1_OAuthClientSecret)(nil), + (*PluginStaticCredentialsSpecV1_SSHCertAuthorities)(nil), } } @@ -18550,6 +18564,54 @@ func (m *PluginStaticCredentialsOAuthClientSecret) XXX_DiscardUnknown() { var xxx_messageInfo_PluginStaticCredentialsOAuthClientSecret proto.InternalMessageInfo +// PluginStaticCredentialsSSHCertAuthorities contains the active SSH CAs used +// for the integration or plugin. +type PluginStaticCredentialsSSHCertAuthorities struct { + // CertAuthorities contains the active SSH CAs used for the integration or + // plugin. + CertAuthorities []*SSHKeyPair `protobuf:"bytes,1,rep,name=cert_authorities,json=certAuthorities,proto3" json:"cert_authorities,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PluginStaticCredentialsSSHCertAuthorities) Reset() { + *m = PluginStaticCredentialsSSHCertAuthorities{} +} +func (m *PluginStaticCredentialsSSHCertAuthorities) String() string { + return proto.CompactTextString(m) +} +func (*PluginStaticCredentialsSSHCertAuthorities) ProtoMessage() {} +func (*PluginStaticCredentialsSSHCertAuthorities) Descriptor() ([]byte, []int) { + return fileDescriptor_9198ee693835762e, []int{314} +} +func (m *PluginStaticCredentialsSSHCertAuthorities) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PluginStaticCredentialsSSHCertAuthorities) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_PluginStaticCredentialsSSHCertAuthorities.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *PluginStaticCredentialsSSHCertAuthorities) XXX_Merge(src proto.Message) { + xxx_messageInfo_PluginStaticCredentialsSSHCertAuthorities.Merge(m, src) +} +func (m *PluginStaticCredentialsSSHCertAuthorities) XXX_Size() int { + return m.Size() +} +func (m *PluginStaticCredentialsSSHCertAuthorities) XXX_DiscardUnknown() { + xxx_messageInfo_PluginStaticCredentialsSSHCertAuthorities.DiscardUnknown(m) +} + +var xxx_messageInfo_PluginStaticCredentialsSSHCertAuthorities proto.InternalMessageInfo + // SAMLIdPServiceProviderV1 is the representation of a SAML IdP service provider. type SAMLIdPServiceProviderV1 struct { // Header is the resource header for the SAML IdP service provider. @@ -18564,7 +18626,7 @@ type SAMLIdPServiceProviderV1 struct { func (m *SAMLIdPServiceProviderV1) Reset() { *m = SAMLIdPServiceProviderV1{} } func (*SAMLIdPServiceProviderV1) ProtoMessage() {} func (*SAMLIdPServiceProviderV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{314} + return fileDescriptor_9198ee693835762e, []int{315} } func (m *SAMLIdPServiceProviderV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18635,7 +18697,7 @@ func (m *SAMLIdPServiceProviderSpecV1) Reset() { *m = SAMLIdPServiceProv func (m *SAMLIdPServiceProviderSpecV1) String() string { return proto.CompactTextString(m) } func (*SAMLIdPServiceProviderSpecV1) ProtoMessage() {} func (*SAMLIdPServiceProviderSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{315} + return fileDescriptor_9198ee693835762e, []int{316} } func (m *SAMLIdPServiceProviderSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18682,7 +18744,7 @@ func (m *SAMLAttributeMapping) Reset() { *m = SAMLAttributeMapping{} } func (m *SAMLAttributeMapping) String() string { return proto.CompactTextString(m) } func (*SAMLAttributeMapping) ProtoMessage() {} func (*SAMLAttributeMapping) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{316} + return fileDescriptor_9198ee693835762e, []int{317} } func (m *SAMLAttributeMapping) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18724,7 +18786,7 @@ func (m *IdPOptions) Reset() { *m = IdPOptions{} } func (m *IdPOptions) String() string { return proto.CompactTextString(m) } func (*IdPOptions) ProtoMessage() {} func (*IdPOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{317} + return fileDescriptor_9198ee693835762e, []int{318} } func (m *IdPOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18766,7 +18828,7 @@ func (m *IdPSAMLOptions) Reset() { *m = IdPSAMLOptions{} } func (m *IdPSAMLOptions) String() string { return proto.CompactTextString(m) } func (*IdPSAMLOptions) ProtoMessage() {} func (*IdPSAMLOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{318} + return fileDescriptor_9198ee693835762e, []int{319} } func (m *IdPSAMLOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18816,7 +18878,7 @@ func (m *KubernetesResourceV1) Reset() { *m = KubernetesResourceV1{} } func (m *KubernetesResourceV1) String() string { return proto.CompactTextString(m) } func (*KubernetesResourceV1) ProtoMessage() {} func (*KubernetesResourceV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{319} + return fileDescriptor_9198ee693835762e, []int{320} } func (m *KubernetesResourceV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18858,7 +18920,7 @@ func (m *KubernetesResourceSpecV1) Reset() { *m = KubernetesResourceSpec func (m *KubernetesResourceSpecV1) String() string { return proto.CompactTextString(m) } func (*KubernetesResourceSpecV1) ProtoMessage() {} func (*KubernetesResourceSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{320} + return fileDescriptor_9198ee693835762e, []int{321} } func (m *KubernetesResourceSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18904,7 +18966,7 @@ func (m *ClusterMaintenanceConfigV1) Reset() { *m = ClusterMaintenanceCo func (m *ClusterMaintenanceConfigV1) String() string { return proto.CompactTextString(m) } func (*ClusterMaintenanceConfigV1) ProtoMessage() {} func (*ClusterMaintenanceConfigV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{321} + return fileDescriptor_9198ee693835762e, []int{322} } func (m *ClusterMaintenanceConfigV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18946,7 +19008,7 @@ func (m *ClusterMaintenanceConfigSpecV1) Reset() { *m = ClusterMaintenan func (m *ClusterMaintenanceConfigSpecV1) String() string { return proto.CompactTextString(m) } func (*ClusterMaintenanceConfigSpecV1) ProtoMessage() {} func (*ClusterMaintenanceConfigSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{322} + return fileDescriptor_9198ee693835762e, []int{323} } func (m *ClusterMaintenanceConfigSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18992,7 +19054,7 @@ func (m *AgentUpgradeWindow) Reset() { *m = AgentUpgradeWindow{} } func (m *AgentUpgradeWindow) String() string { return proto.CompactTextString(m) } func (*AgentUpgradeWindow) ProtoMessage() {} func (*AgentUpgradeWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{323} + return fileDescriptor_9198ee693835762e, []int{324} } func (m *AgentUpgradeWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19039,7 +19101,7 @@ func (m *ScheduledAgentUpgradeWindow) Reset() { *m = ScheduledAgentUpgra func (m *ScheduledAgentUpgradeWindow) String() string { return proto.CompactTextString(m) } func (*ScheduledAgentUpgradeWindow) ProtoMessage() {} func (*ScheduledAgentUpgradeWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{324} + return fileDescriptor_9198ee693835762e, []int{325} } func (m *ScheduledAgentUpgradeWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19082,7 +19144,7 @@ func (m *AgentUpgradeSchedule) Reset() { *m = AgentUpgradeSchedule{} } func (m *AgentUpgradeSchedule) String() string { return proto.CompactTextString(m) } func (*AgentUpgradeSchedule) ProtoMessage() {} func (*AgentUpgradeSchedule) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{325} + return fileDescriptor_9198ee693835762e, []int{326} } func (m *AgentUpgradeSchedule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19125,7 +19187,7 @@ type UserGroupV1 struct { func (m *UserGroupV1) Reset() { *m = UserGroupV1{} } func (*UserGroupV1) ProtoMessage() {} func (*UserGroupV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{326} + return fileDescriptor_9198ee693835762e, []int{327} } func (m *UserGroupV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19167,7 +19229,7 @@ func (m *UserGroupSpecV1) Reset() { *m = UserGroupSpecV1{} } func (m *UserGroupSpecV1) String() string { return proto.CompactTextString(m) } func (*UserGroupSpecV1) ProtoMessage() {} func (*UserGroupSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{327} + return fileDescriptor_9198ee693835762e, []int{328} } func (m *UserGroupSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19211,7 +19273,7 @@ func (m *OktaImportRuleSpecV1) Reset() { *m = OktaImportRuleSpecV1{} } func (m *OktaImportRuleSpecV1) String() string { return proto.CompactTextString(m) } func (*OktaImportRuleSpecV1) ProtoMessage() {} func (*OktaImportRuleSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{328} + return fileDescriptor_9198ee693835762e, []int{329} } func (m *OktaImportRuleSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19255,7 +19317,7 @@ func (m *OktaImportRuleMappingV1) Reset() { *m = OktaImportRuleMappingV1 func (m *OktaImportRuleMappingV1) String() string { return proto.CompactTextString(m) } func (*OktaImportRuleMappingV1) ProtoMessage() {} func (*OktaImportRuleMappingV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{329} + return fileDescriptor_9198ee693835762e, []int{330} } func (m *OktaImportRuleMappingV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19298,7 +19360,7 @@ type OktaImportRuleV1 struct { func (m *OktaImportRuleV1) Reset() { *m = OktaImportRuleV1{} } func (*OktaImportRuleV1) ProtoMessage() {} func (*OktaImportRuleV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{330} + return fileDescriptor_9198ee693835762e, []int{331} } func (m *OktaImportRuleV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19346,7 +19408,7 @@ func (m *OktaImportRuleMatchV1) Reset() { *m = OktaImportRuleMatchV1{} } func (m *OktaImportRuleMatchV1) String() string { return proto.CompactTextString(m) } func (*OktaImportRuleMatchV1) ProtoMessage() {} func (*OktaImportRuleMatchV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{331} + return fileDescriptor_9198ee693835762e, []int{332} } func (m *OktaImportRuleMatchV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19389,7 +19451,7 @@ type OktaAssignmentV1 struct { func (m *OktaAssignmentV1) Reset() { *m = OktaAssignmentV1{} } func (*OktaAssignmentV1) ProtoMessage() {} func (*OktaAssignmentV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{332} + return fileDescriptor_9198ee693835762e, []int{333} } func (m *OktaAssignmentV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19443,7 +19505,7 @@ func (m *OktaAssignmentSpecV1) Reset() { *m = OktaAssignmentSpecV1{} } func (m *OktaAssignmentSpecV1) String() string { return proto.CompactTextString(m) } func (*OktaAssignmentSpecV1) ProtoMessage() {} func (*OktaAssignmentSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{333} + return fileDescriptor_9198ee693835762e, []int{334} } func (m *OktaAssignmentSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19487,7 +19549,7 @@ func (m *OktaAssignmentTargetV1) Reset() { *m = OktaAssignmentTargetV1{} func (m *OktaAssignmentTargetV1) String() string { return proto.CompactTextString(m) } func (*OktaAssignmentTargetV1) ProtoMessage() {} func (*OktaAssignmentTargetV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{334} + return fileDescriptor_9198ee693835762e, []int{335} } func (m *OktaAssignmentTargetV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19532,7 +19594,7 @@ type IntegrationV1 struct { func (m *IntegrationV1) Reset() { *m = IntegrationV1{} } func (*IntegrationV1) ProtoMessage() {} func (*IntegrationV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{335} + return fileDescriptor_9198ee693835762e, []int{336} } func (m *IntegrationV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19568,17 +19630,19 @@ type IntegrationSpecV1 struct { // *IntegrationSpecV1_AWSOIDC // *IntegrationSpecV1_AzureOIDC // *IntegrationSpecV1_GitHub - SubKindSpec isIntegrationSpecV1_SubKindSpec `protobuf_oneof:"SubKindSpec"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + SubKindSpec isIntegrationSpecV1_SubKindSpec `protobuf_oneof:"SubKindSpec"` + // Credentials contains credentials for the integration. + Credentials *PluginCredentialsV1 `protobuf:"bytes,4,opt,name=credentials,proto3" json:"credentials,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *IntegrationSpecV1) Reset() { *m = IntegrationSpecV1{} } func (m *IntegrationSpecV1) String() string { return proto.CompactTextString(m) } func (*IntegrationSpecV1) ProtoMessage() {} func (*IntegrationSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{336} + return fileDescriptor_9198ee693835762e, []int{337} } func (m *IntegrationSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19697,7 +19761,7 @@ func (m *AWSOIDCIntegrationSpecV1) Reset() { *m = AWSOIDCIntegrationSpec func (m *AWSOIDCIntegrationSpecV1) String() string { return proto.CompactTextString(m) } func (*AWSOIDCIntegrationSpecV1) ProtoMessage() {} func (*AWSOIDCIntegrationSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{337} + return fileDescriptor_9198ee693835762e, []int{338} } func (m *AWSOIDCIntegrationSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19743,7 +19807,7 @@ func (m *AzureOIDCIntegrationSpecV1) Reset() { *m = AzureOIDCIntegration func (m *AzureOIDCIntegrationSpecV1) String() string { return proto.CompactTextString(m) } func (*AzureOIDCIntegrationSpecV1) ProtoMessage() {} func (*AzureOIDCIntegrationSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{338} + return fileDescriptor_9198ee693835762e, []int{339} } func (m *AzureOIDCIntegrationSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19775,19 +19839,17 @@ var xxx_messageInfo_AzureOIDCIntegrationSpecV1 proto.InternalMessageInfo // GitHubIntegrationSpecV1 contains the specific fields to handle the GitHub integration subkind. type GitHubIntegrationSpecV1 struct { // Organization specifies the name of the organization for the GitHub integration. - Organization string `protobuf:"bytes,1,opt,name=Organization,proto3" json:"organization,omitempty"` - // Proxy specifies GitHub proxy related settings. - Proxy *GitHubProxy `protobuf:"bytes,2,opt,name=proxy,proto3" json:"proxy,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Organization string `protobuf:"bytes,1,opt,name=Organization,proto3" json:"organization,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *GitHubIntegrationSpecV1) Reset() { *m = GitHubIntegrationSpecV1{} } func (m *GitHubIntegrationSpecV1) String() string { return proto.CompactTextString(m) } func (*GitHubIntegrationSpecV1) ProtoMessage() {} func (*GitHubIntegrationSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{339} + return fileDescriptor_9198ee693835762e, []int{340} } func (m *GitHubIntegrationSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19816,102 +19878,6 @@ func (m *GitHubIntegrationSpecV1) XXX_DiscardUnknown() { var xxx_messageInfo_GitHubIntegrationSpecV1 proto.InternalMessageInfo -// GitHubProxy specifies GitHub proxy related settings. -type GitHubProxy struct { - // CertAuthority contains the active SSH CAs used between Teleport and - // GitHub. GitHub does not allow the same CA to be used for a different - // organization so the CA is defined per integration. TODO(greedy52) support - // rotation, HSM encryption. - CertAuthorities []*SSHKeyPair `protobuf:"bytes,1,rep,name=cert_authorities,json=certAuthorities,proto3" json:"cert_authorities,omitempty"` - // Connector specifies the GitHub connector spec used to obtain user ID and - // username. - Connector *GitHubProxyConnector `protobuf:"bytes,2,opt,name=connector,proto3" json:"connector,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GitHubProxy) Reset() { *m = GitHubProxy{} } -func (m *GitHubProxy) String() string { return proto.CompactTextString(m) } -func (*GitHubProxy) ProtoMessage() {} -func (*GitHubProxy) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{340} -} -func (m *GitHubProxy) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GitHubProxy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GitHubProxy.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *GitHubProxy) XXX_Merge(src proto.Message) { - xxx_messageInfo_GitHubProxy.Merge(m, src) -} -func (m *GitHubProxy) XXX_Size() int { - return m.Size() -} -func (m *GitHubProxy) XXX_DiscardUnknown() { - xxx_messageInfo_GitHubProxy.DiscardUnknown(m) -} - -var xxx_messageInfo_GitHubProxy proto.InternalMessageInfo - -// GitHubProxyConnector specifies the GitHub connector spec for a GitHub proxy. -// This type is a subset of GithubConnectorSpecV3 but does not require fields -// like TeamRolesMapping. -type GitHubProxyConnector struct { - // ClientID is the Github OAuth app client ID. - ClientID string `protobuf:"bytes,1,opt,name=ClientID,proto3" json:"client_id"` - // ClientSecret is the Github OAuth app client secret. - ClientSecret string `protobuf:"bytes,2,opt,name=ClientSecret,proto3" json:"client_secret"` - // RedirectURL is the authorization callback URL. - RedirectURL string `protobuf:"bytes,3,opt,name=RedirectURL,proto3" json:"redirect_url"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GitHubProxyConnector) Reset() { *m = GitHubProxyConnector{} } -func (m *GitHubProxyConnector) String() string { return proto.CompactTextString(m) } -func (*GitHubProxyConnector) ProtoMessage() {} -func (*GitHubProxyConnector) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{341} -} -func (m *GitHubProxyConnector) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *GitHubProxyConnector) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_GitHubProxyConnector.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *GitHubProxyConnector) XXX_Merge(src proto.Message) { - xxx_messageInfo_GitHubProxyConnector.Merge(m, src) -} -func (m *GitHubProxyConnector) XXX_Size() int { - return m.Size() -} -func (m *GitHubProxyConnector) XXX_DiscardUnknown() { - xxx_messageInfo_GitHubProxyConnector.DiscardUnknown(m) -} - -var xxx_messageInfo_GitHubProxyConnector proto.InternalMessageInfo - // HeadlessAuthentication holds data for an ongoing headless authentication attempt. type HeadlessAuthentication struct { // Header is the resource header. @@ -19944,7 +19910,7 @@ func (m *HeadlessAuthentication) Reset() { *m = HeadlessAuthentication{} func (m *HeadlessAuthentication) String() string { return proto.CompactTextString(m) } func (*HeadlessAuthentication) ProtoMessage() {} func (*HeadlessAuthentication) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{342} + return fileDescriptor_9198ee693835762e, []int{341} } func (m *HeadlessAuthentication) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20001,7 +19967,7 @@ func (m *WatchKind) Reset() { *m = WatchKind{} } func (m *WatchKind) String() string { return proto.CompactTextString(m) } func (*WatchKind) ProtoMessage() {} func (*WatchKind) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{343} + return fileDescriptor_9198ee693835762e, []int{342} } func (m *WatchKind) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20051,7 +20017,7 @@ func (m *WatchStatusV1) Reset() { *m = WatchStatusV1{} } func (m *WatchStatusV1) String() string { return proto.CompactTextString(m) } func (*WatchStatusV1) ProtoMessage() {} func (*WatchStatusV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{344} + return fileDescriptor_9198ee693835762e, []int{343} } func (m *WatchStatusV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20092,7 +20058,7 @@ func (m *WatchStatusSpecV1) Reset() { *m = WatchStatusSpecV1{} } func (m *WatchStatusSpecV1) String() string { return proto.CompactTextString(m) } func (*WatchStatusSpecV1) ProtoMessage() {} func (*WatchStatusSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{345} + return fileDescriptor_9198ee693835762e, []int{344} } func (m *WatchStatusSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20142,7 +20108,7 @@ func (m *ServerInfoV1) Reset() { *m = ServerInfoV1{} } func (m *ServerInfoV1) String() string { return proto.CompactTextString(m) } func (*ServerInfoV1) ProtoMessage() {} func (*ServerInfoV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{346} + return fileDescriptor_9198ee693835762e, []int{345} } func (m *ServerInfoV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20184,7 +20150,7 @@ func (m *ServerInfoSpecV1) Reset() { *m = ServerInfoSpecV1{} } func (m *ServerInfoSpecV1) String() string { return proto.CompactTextString(m) } func (*ServerInfoSpecV1) ProtoMessage() {} func (*ServerInfoSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{347} + return fileDescriptor_9198ee693835762e, []int{346} } func (m *ServerInfoSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20241,7 +20207,7 @@ func (m *JamfSpecV1) Reset() { *m = JamfSpecV1{} } func (m *JamfSpecV1) String() string { return proto.CompactTextString(m) } func (*JamfSpecV1) ProtoMessage() {} func (*JamfSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{348} + return fileDescriptor_9198ee693835762e, []int{347} } func (m *JamfSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20306,7 +20272,7 @@ func (m *JamfInventoryEntry) Reset() { *m = JamfInventoryEntry{} } func (m *JamfInventoryEntry) String() string { return proto.CompactTextString(m) } func (*JamfInventoryEntry) ProtoMessage() {} func (*JamfInventoryEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{349} + return fileDescriptor_9198ee693835762e, []int{348} } func (m *JamfInventoryEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20363,7 +20329,7 @@ type MessageWithHeader struct { func (m *MessageWithHeader) Reset() { *m = MessageWithHeader{} } func (*MessageWithHeader) ProtoMessage() {} func (*MessageWithHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{350} + return fileDescriptor_9198ee693835762e, []int{349} } func (m *MessageWithHeader) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20427,7 +20393,7 @@ func (m *AWSMatcher) Reset() { *m = AWSMatcher{} } func (m *AWSMatcher) String() string { return proto.CompactTextString(m) } func (*AWSMatcher) ProtoMessage() {} func (*AWSMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{351} + return fileDescriptor_9198ee693835762e, []int{350} } func (m *AWSMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20472,7 +20438,7 @@ func (m *AssumeRole) Reset() { *m = AssumeRole{} } func (m *AssumeRole) String() string { return proto.CompactTextString(m) } func (*AssumeRole) ProtoMessage() {} func (*AssumeRole) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{352} + return fileDescriptor_9198ee693835762e, []int{351} } func (m *AssumeRole) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20534,7 +20500,7 @@ func (m *InstallerParams) Reset() { *m = InstallerParams{} } func (m *InstallerParams) String() string { return proto.CompactTextString(m) } func (*InstallerParams) ProtoMessage() {} func (*InstallerParams) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{353} + return fileDescriptor_9198ee693835762e, []int{352} } func (m *InstallerParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20577,7 +20543,7 @@ func (m *AWSSSM) Reset() { *m = AWSSSM{} } func (m *AWSSSM) String() string { return proto.CompactTextString(m) } func (*AWSSSM) ProtoMessage() {} func (*AWSSSM) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{354} + return fileDescriptor_9198ee693835762e, []int{353} } func (m *AWSSSM) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20620,7 +20586,7 @@ func (m *AzureInstallerParams) Reset() { *m = AzureInstallerParams{} } func (m *AzureInstallerParams) String() string { return proto.CompactTextString(m) } func (*AzureInstallerParams) ProtoMessage() {} func (*AzureInstallerParams) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{355} + return fileDescriptor_9198ee693835762e, []int{354} } func (m *AzureInstallerParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20674,7 +20640,7 @@ func (m *AzureMatcher) Reset() { *m = AzureMatcher{} } func (m *AzureMatcher) String() string { return proto.CompactTextString(m) } func (*AzureMatcher) ProtoMessage() {} func (*AzureMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{356} + return fileDescriptor_9198ee693835762e, []int{355} } func (m *AzureMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20729,7 +20695,7 @@ func (m *GCPMatcher) Reset() { *m = GCPMatcher{} } func (m *GCPMatcher) String() string { return proto.CompactTextString(m) } func (*GCPMatcher) ProtoMessage() {} func (*GCPMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{357} + return fileDescriptor_9198ee693835762e, []int{356} } func (m *GCPMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20775,7 +20741,7 @@ func (m *KubernetesMatcher) Reset() { *m = KubernetesMatcher{} } func (m *KubernetesMatcher) String() string { return proto.CompactTextString(m) } func (*KubernetesMatcher) ProtoMessage() {} func (*KubernetesMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{358} + return fileDescriptor_9198ee693835762e, []int{357} } func (m *KubernetesMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20817,7 +20783,7 @@ func (m *OktaOptions) Reset() { *m = OktaOptions{} } func (m *OktaOptions) String() string { return proto.CompactTextString(m) } func (*OktaOptions) ProtoMessage() {} func (*OktaOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{359} + return fileDescriptor_9198ee693835762e, []int{358} } func (m *OktaOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20861,7 +20827,7 @@ func (m *AccessGraphSync) Reset() { *m = AccessGraphSync{} } func (m *AccessGraphSync) String() string { return proto.CompactTextString(m) } func (*AccessGraphSync) ProtoMessage() {} func (*AccessGraphSync) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{360} + return fileDescriptor_9198ee693835762e, []int{359} } func (m *AccessGraphSync) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20907,7 +20873,7 @@ func (m *AccessGraphAWSSync) Reset() { *m = AccessGraphAWSSync{} } func (m *AccessGraphAWSSync) String() string { return proto.CompactTextString(m) } func (*AccessGraphAWSSync) ProtoMessage() {} func (*AccessGraphAWSSync) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{361} + return fileDescriptor_9198ee693835762e, []int{360} } func (m *AccessGraphAWSSync) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -21312,6 +21278,7 @@ func init() { proto.RegisterType((*PluginStaticCredentialsSpecV1)(nil), "types.PluginStaticCredentialsSpecV1") proto.RegisterType((*PluginStaticCredentialsBasicAuth)(nil), "types.PluginStaticCredentialsBasicAuth") proto.RegisterType((*PluginStaticCredentialsOAuthClientSecret)(nil), "types.PluginStaticCredentialsOAuthClientSecret") + proto.RegisterType((*PluginStaticCredentialsSSHCertAuthorities)(nil), "types.PluginStaticCredentialsSSHCertAuthorities") proto.RegisterType((*SAMLIdPServiceProviderV1)(nil), "types.SAMLIdPServiceProviderV1") proto.RegisterType((*SAMLIdPServiceProviderSpecV1)(nil), "types.SAMLIdPServiceProviderSpecV1") proto.RegisterType((*SAMLAttributeMapping)(nil), "types.SAMLAttributeMapping") @@ -21339,8 +21306,6 @@ func init() { proto.RegisterType((*AWSOIDCIntegrationSpecV1)(nil), "types.AWSOIDCIntegrationSpecV1") proto.RegisterType((*AzureOIDCIntegrationSpecV1)(nil), "types.AzureOIDCIntegrationSpecV1") proto.RegisterType((*GitHubIntegrationSpecV1)(nil), "types.GitHubIntegrationSpecV1") - proto.RegisterType((*GitHubProxy)(nil), "types.GitHubProxy") - proto.RegisterType((*GitHubProxyConnector)(nil), "types.GitHubProxyConnector") proto.RegisterType((*HeadlessAuthentication)(nil), "types.HeadlessAuthentication") proto.RegisterType((*WatchKind)(nil), "types.WatchKind") proto.RegisterMapType((map[string]string)(nil), "types.WatchKind.FilterEntry") @@ -21368,7 +21333,7 @@ func init() { func init() { proto.RegisterFile("teleport/legacy/types/types.proto", fileDescriptor_9198ee693835762e) } var fileDescriptor_9198ee693835762e = []byte{ - // 29597 bytes of a gzipped FileDescriptorProto + // 29564 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xfd, 0x6b, 0x70, 0x1c, 0x59, 0x76, 0x20, 0x06, 0x77, 0x55, 0xe1, 0x51, 0x38, 0x78, 0x15, 0x2e, 0x40, 0x12, 0x44, 0x37, 0xbb, 0xd8, 0xd9, 0xdd, 0x6c, 0x76, 0x4f, 0x37, 0x39, 0x04, 0xa7, 0x39, 0xd3, 0xd3, 0xaf, 0x29, 0x3c, @@ -22848,377 +22813,375 @@ var fileDescriptor_9198ee693835762e = []byte{ 0xce, 0xea, 0x91, 0x2a, 0xf5, 0xd1, 0x9a, 0x6e, 0x84, 0x3e, 0xef, 0xb7, 0xe3, 0xcf, 0x4b, 0x09, 0x77, 0x6c, 0x35, 0xbd, 0xae, 0xb3, 0xee, 0x27, 0x8a, 0xa8, 0xff, 0xd2, 0xfe, 0x22, 0x9c, 0xa2, 0xc9, 0xb7, 0x13, 0xb8, 0x9d, 0xdd, 0x84, 0x9d, 0x6c, 0xe8, 0x2b, 0x59, 0xec, 0xe4, 0xac, 0xbc, - 0xf1, 0xff, 0xb1, 0xf7, 0x75, 0xb1, 0x6d, 0x64, 0xd7, 0xc1, 0x1a, 0x92, 0x92, 0xa8, 0x43, 0xfd, - 0x8c, 0xae, 0xb5, 0xb6, 0x56, 0xf2, 0xca, 0xeb, 0xf1, 0x4f, 0x6c, 0x3a, 0xbb, 0x89, 0xbd, 0x5f, - 0xb2, 0x71, 0x92, 0x4d, 0x32, 0x22, 0x87, 0x22, 0x2d, 0xfe, 0x65, 0x86, 0x94, 0xe2, 0x6c, 0x92, - 0xf9, 0x68, 0x71, 0x24, 0x4d, 0x43, 0x91, 0x0c, 0x87, 0xb4, 0xe3, 0xa0, 0x40, 0x1b, 0x14, 0x48, - 0x80, 0xfe, 0xa5, 0x4d, 0x0b, 0x34, 0x28, 0x0a, 0xf4, 0xa1, 0x8b, 0xa2, 0x0f, 0x79, 0x2d, 0x5a, - 0xb4, 0x05, 0x8a, 0xbc, 0x05, 0x08, 0x02, 0x04, 0xe8, 0x5b, 0x0b, 0x2c, 0xda, 0x05, 0xda, 0x87, - 0xb6, 0x6f, 0x45, 0xf3, 0x90, 0xa7, 0xe2, 0x9e, 0x7b, 0xef, 0xcc, 0x9d, 0x1f, 0xd2, 0x72, 0xbc, - 0x69, 0x13, 0x20, 0x4f, 0xe4, 0x9c, 0x7b, 0xce, 0x9d, 0x3b, 0xf7, 0xf7, 0x9c, 0x73, 0xcf, 0x0f, - 0xc5, 0xf7, 0x6b, 0xbd, 0xd0, 0x89, 0x03, 0xf9, 0x37, 0x7c, 0x3d, 0x25, 0x96, 0x7a, 0x42, 0x73, - 0x12, 0xa6, 0xb5, 0x92, 0x34, 0xad, 0xcf, 0xbf, 0xa6, 0xea, 0x40, 0xe4, 0xcd, 0x8a, 0x69, 0x3d, - 0xb9, 0x41, 0x95, 0xe0, 0xd3, 0x79, 0x43, 0xa4, 0xad, 0xc1, 0x62, 0xc9, 0x34, 0xd7, 0x8f, 0xa2, - 0x20, 0xb2, 0x0d, 0x4b, 0x7e, 0xbe, 0x6a, 0x7e, 0x70, 0x64, 0x19, 0xa0, 0xd2, 0x25, 0xaf, 0xc2, - 0x32, 0x63, 0xc9, 0x43, 0x6b, 0x0e, 0x10, 0xa6, 0xd3, 0x85, 0x27, 0xfa, 0x40, 0x81, 0x57, 0x9f, - 0xd5, 0x87, 0xe4, 0x10, 0x2e, 0xa2, 0x59, 0x87, 0x37, 0xf0, 0x87, 0xc1, 0x3e, 0xea, 0x1c, 0x9d, - 0x3a, 0x7c, 0xd6, 0x6a, 0x89, 0x83, 0x31, 0x1c, 0x5a, 0x56, 0x43, 0x1a, 0x87, 0xe1, 0xd0, 0xf2, - 0x06, 0xe2, 0xb9, 0x40, 0xc9, 0x79, 0x1b, 0xba, 0xb0, 0x3d, 0x83, 0x52, 0xda, 0x38, 0x14, 0x79, - 0xe3, 0xb8, 0x05, 0xea, 0xb1, 0xd3, 0xa5, 0x3c, 0xb1, 0xd3, 0xc5, 0xa6, 0x3d, 0xbe, 0xc7, 0x32, - 0xb4, 0x9b, 0xab, 0x3e, 0xdc, 0xf2, 0x06, 0x07, 0xf7, 0xf8, 0x5b, 0xce, 0xc4, 0x91, 0x27, 0x8b, - 0x15, 0xe4, 0x75, 0xb8, 0x10, 0x09, 0x38, 0x12, 0x78, 0xb0, 0x9b, 0xeb, 0xb4, 0x28, 0x1c, 0x9e, - 0xea, 0x2a, 0x2c, 0x8b, 0x59, 0x31, 0xf2, 0xfd, 0xe0, 0xcc, 0x1c, 0x87, 0xd1, 0x55, 0xc7, 0x5f, - 0x37, 0x11, 0x1f, 0x95, 0x28, 0x91, 0x9c, 0x83, 0x97, 0x26, 0xaf, 0x01, 0xf1, 0xf9, 0x76, 0x7f, - 0xa3, 0xe0, 0x2f, 0x5c, 0x17, 0x25, 0xfe, 0x0a, 0xe7, 0xaf, 0xfd, 0xbb, 0x14, 0x5c, 0x48, 0x10, - 0x65, 0xa8, 0x10, 0xe0, 0xf6, 0xc7, 0xce, 0x09, 0x13, 0x21, 0xe4, 0x8f, 0x5c, 0x93, 0xe0, 0x5c, - 0x3f, 0xb5, 0xc0, 0x32, 0x90, 0xf3, 0x77, 0xf1, 0x27, 0xba, 0x79, 0x74, 0x46, 0x42, 0xf5, 0x42, - 0xff, 0x92, 0x0a, 0xac, 0x63, 0x5a, 0x05, 0xcf, 0x1d, 0x60, 0x76, 0x06, 0x64, 0x42, 0x32, 0x21, - 0x61, 0x07, 0x5b, 0xd1, 0x94, 0x90, 0x28, 0x17, 0x62, 0xaa, 0xc3, 0x08, 0x84, 0x7c, 0x02, 0xb6, - 0xa4, 0xb3, 0xc6, 0x8e, 0xac, 0x3c, 0xb4, 0x74, 0x37, 0x2f, 0x75, 0xfc, 0x53, 0xa7, 0x18, 0x5a, - 0x83, 0xbb, 0xb0, 0x83, 0x83, 0xe8, 0x76, 0x87, 0x76, 0x2c, 0x0f, 0x07, 0x7e, 0x2a, 0x0b, 0x5c, - 0xbf, 0x45, 0xb1, 0x2a, 0xdd, 0x61, 0x24, 0x25, 0x07, 0xfd, 0x6a, 0xde, 0x7d, 0x6f, 0xc3, 0x4b, - 0x89, 0x2d, 0xa6, 0x07, 0x0c, 0x1a, 0x52, 0x05, 0xbc, 0xd1, 0x22, 0x7d, 0xa6, 0xcc, 0xd1, 0x55, - 0x58, 0x7e, 0xe4, 0x74, 0x46, 0xce, 0x88, 0x9f, 0xdc, 0x7c, 0x4a, 0x30, 0x98, 0x7c, 0x70, 0x77, - 0xc3, 0x43, 0xc3, 0x75, 0x46, 0xa4, 0x06, 0x17, 0xd8, 0x09, 0xe8, 0x9e, 0x21, 0x33, 0xc8, 0xf5, - 0x4c, 0x4a, 0x88, 0x1d, 0x42, 0x12, 0x3c, 0x9a, 0x2a, 0x88, 0xc5, 0xa8, 0xcd, 0xf5, 0x93, 0x28, - 0x88, 0xae, 0xe8, 0x8b, 0xc9, 0xd8, 0x64, 0x17, 0x72, 0xac, 0x72, 0x26, 0x16, 0xb0, 0x0b, 0x82, - 0xab, 0x33, 0xdf, 0x50, 0x40, 0xfb, 0x62, 0xcf, 0xff, 0x4f, 0xcf, 0x6b, 0xbc, 0x8b, 0xb5, 0xcf, - 0xe4, 0xfb, 0x0f, 0x73, 0x19, 0x81, 0xfc, 0xde, 0x43, 0xfb, 0x07, 0x45, 0x7c, 0x6a, 0x48, 0x38, - 0xa6, 0x53, 0xcb, 0x73, 0xfa, 0xe2, 0x0e, 0x68, 0xc9, 0xe4, 0x4f, 0xcf, 0x39, 0xd5, 0xc9, 0x9b, - 0xb0, 0x4c, 0xab, 0x3d, 0x99, 0xf4, 0xd9, 0x94, 0x4b, 0x87, 0x02, 0xed, 0xd4, 0x58, 0x11, 0x1d, - 0xb6, 0xf2, 0x9c, 0x99, 0x3b, 0x0b, 0x1e, 0x29, 0xb7, 0xec, 0x9d, 0x8d, 0x87, 0xf2, 0x44, 0x15, - 0x8a, 0x42, 0xab, 0xd6, 0x6a, 0x72, 0x92, 0x2c, 0xc5, 0x09, 0xb8, 0xe5, 0xdd, 0x05, 0xa6, 0x2a, - 0xd4, 0xee, 0x40, 0x4e, 0xaa, 0x9b, 0x7e, 0x0c, 0xf3, 0x9c, 0x11, 0x1f, 0xc3, 0x9e, 0xf8, 0x60, - 0x3f, 0x82, 0xac, 0xa8, 0x92, 0x8a, 0x05, 0xa7, 0x03, 0x4f, 0x2c, 0x72, 0xfc, 0x4f, 0x61, 0xb4, - 0x97, 0xf1, 0x23, 0xe7, 0x4d, 0xfc, 0x8f, 0x67, 0xc9, 0xb8, 0x43, 0xe5, 0x81, 0x9e, 0x67, 0x0f, - 0xd1, 0x02, 0xcb, 0x67, 0x9e, 0x29, 0xbc, 0xd5, 0xf3, 0x98, 0x5d, 0x16, 0x7f, 0xc7, 0x5f, 0xfb, - 0x87, 0x70, 0x44, 0x9b, 0x30, 0x6d, 0xcf, 0x0c, 0x1d, 0x19, 0xa9, 0xf8, 0x91, 0xc1, 0x02, 0xa8, - 0x70, 0x4a, 0xf6, 0x66, 0x40, 0x18, 0x1e, 0x19, 0xd2, 0xce, 0x90, 0x09, 0xed, 0x0c, 0x92, 0x4c, - 0x1e, 0x8c, 0x1e, 0x3b, 0x71, 0x84, 0x4c, 0x1e, 0xdd, 0xa7, 0xfe, 0x3c, 0x25, 0x54, 0x04, 0xbb, - 0x83, 0xc1, 0xd8, 0x1b, 0x8f, 0x3a, 0xc3, 0x90, 0x2a, 0x94, 0x9c, 0xc1, 0xcb, 0xc8, 0x41, 0xdf, - 0xc3, 0x14, 0x16, 0x83, 0x91, 0x88, 0xd9, 0xe1, 0xcf, 0xdc, 0xdc, 0xbd, 0x0f, 0x85, 0x79, 0x7c, - 0x9d, 0x62, 0xeb, 0x32, 0x32, 0x9d, 0xb0, 0x52, 0xad, 0xe5, 0x39, 0xf3, 0x12, 0xab, 0x33, 0x86, - 0x45, 0xca, 0x09, 0x8b, 0x38, 0xaa, 0x0b, 0xdd, 0x0d, 0x56, 0x74, 0xb8, 0x56, 0x79, 0xad, 0x93, - 0x4f, 0xc1, 0x92, 0xdb, 0x95, 0x33, 0x35, 0x46, 0xb5, 0x70, 0x95, 0x2e, 0x8b, 0x16, 0x1d, 0xd4, - 0x41, 0xe7, 0x9c, 0xcb, 0xa1, 0xbb, 0x2b, 0x21, 0xa5, 0xb1, 0xb6, 0x2b, 0xa4, 0xd1, 0x38, 0x19, - 0x59, 0x85, 0x94, 0x3f, 0xc2, 0x29, 0xb7, 0xcb, 0x96, 0x57, 0x10, 0xaf, 0xda, 0xe4, 0x4f, 0xda, - 0xaf, 0xc2, 0xad, 0xf3, 0xf6, 0x11, 0x5d, 0x8a, 0x53, 0x3a, 0x7c, 0xc9, 0x5c, 0xef, 0xc4, 0xfa, - 0xed, 0x2a, 0xc8, 0xe1, 0x76, 0x5d, 0xb1, 0xf9, 0x09, 0x58, 0x7b, 0xe4, 0x6a, 0x7f, 0x95, 0x86, - 0xd5, 0xb0, 0x9a, 0x9c, 0xdc, 0x81, 0x8c, 0xb4, 0x03, 0x5d, 0x4a, 0xd0, 0xa5, 0xe3, 0xbe, 0x83, - 0x48, 0xe7, 0xda, 0x71, 0xc8, 0x03, 0x58, 0x45, 0xc3, 0x3d, 0x64, 0x3d, 0xc7, 0x2e, 0xbf, 0x7c, - 0x99, 0x7d, 0x7f, 0x96, 0xfd, 0xfe, 0xbb, 0x57, 0xe6, 0xf0, 0xaa, 0x6c, 0x99, 0xd2, 0x52, 0xee, - 0x8f, 0x16, 0x4a, 0x5a, 0xd0, 0xcc, 0x74, 0x2d, 0x28, 0xff, 0x94, 0x29, 0x5a, 0xd0, 0xf9, 0x19, - 0x5a, 0xd0, 0x80, 0x52, 0xd6, 0x82, 0xa2, 0x2e, 0x7c, 0x71, 0x9a, 0x2e, 0x3c, 0xa0, 0x61, 0xba, - 0xf0, 0x40, 0x8b, 0x99, 0x9d, 0xaa, 0xc5, 0x0c, 0x68, 0xb8, 0x16, 0xf3, 0x3a, 0xef, 0xa3, 0x51, - 0xe7, 0x89, 0x8d, 0x9d, 0xc7, 0x8f, 0x45, 0xfc, 0x7a, 0xb3, 0xf3, 0x04, 0x8d, 0x6b, 0x76, 0x97, - 0x40, 0x58, 0xe4, 0x68, 0x7f, 0xa0, 0x44, 0x34, 0x81, 0x62, 0xfc, 0x6e, 0xc0, 0x2a, 0x3b, 0xac, - 0x9c, 0xae, 0x24, 0x6b, 0xae, 0x98, 0x2b, 0x02, 0xca, 0xe4, 0xcd, 0x0f, 0xc0, 0x9a, 0x8f, 0xc6, - 0x45, 0x2e, 0xf4, 0xd4, 0x33, 0x7d, 0x6a, 0x1e, 0x76, 0xe6, 0x0e, 0xac, 0xfb, 0x88, 0x5c, 0x9b, - 0xc3, 0xc4, 0xcd, 0x15, 0x53, 0x15, 0x05, 0x4d, 0x0e, 0xd7, 0x4e, 0xa2, 0x92, 0xc7, 0xcf, 0xa8, - 0x55, 0xda, 0xf7, 0xd2, 0x21, 0x2d, 0x89, 0x78, 0x0d, 0x3d, 0x45, 0xbd, 0x81, 0xcd, 0x3b, 0x89, - 0xef, 0x45, 0x57, 0xa7, 0x8c, 0x19, 0xb7, 0x69, 0xb2, 0xac, 0x86, 0x09, 0x9e, 0x37, 0x10, 0x26, - 0x4e, 0x36, 0xe3, 0xa8, 0xd9, 0xb9, 0x8f, 0x73, 0x56, 0x54, 0xc7, 0x36, 0x9e, 0xfc, 0xec, 0xea, - 0x84, 0x98, 0x4a, 0xa7, 0x2c, 0x72, 0xd6, 0xfe, 0x93, 0x78, 0x41, 0x1b, 0x50, 0xa9, 0xe8, 0x85, - 0x2b, 0x4f, 0x27, 0xc8, 0x4e, 0xb1, 0xca, 0xb1, 0x97, 0xb0, 0x66, 0x75, 0x22, 0xfe, 0x8a, 0x6a, - 0x0d, 0x58, 0x46, 0x1d, 0x85, 0xa8, 0x30, 0x93, 0xa0, 0x82, 0x8f, 0x7f, 0x7c, 0xa1, 0x52, 0x33, - 0x73, 0x94, 0x4e, 0x54, 0x73, 0x0a, 0x2f, 0xcb, 0x9a, 0x85, 0x70, 0x23, 0xe7, 0x45, 0x14, 0xdd, - 0x99, 0x3d, 0x10, 0x28, 0x20, 0xb0, 0xa9, 0x17, 0x3b, 0x61, 0x00, 0x47, 0xd3, 0x4e, 0x61, 0x6b, - 0xfa, 0x90, 0xcc, 0xc8, 0xd0, 0x14, 0x1c, 0xa0, 0x29, 0xf9, 0x00, 0x95, 0xf5, 0x0c, 0xe9, 0x90, - 0x9e, 0x41, 0xfb, 0xb3, 0x34, 0x5c, 0x3b, 0xc7, 0x70, 0xcd, 0x78, 0xe7, 0x67, 0xc2, 0xec, 0x59, - 0x2a, 0x24, 0x19, 0xd2, 0x4a, 0xf9, 0x06, 0x49, 0xa5, 0xd4, 0x64, 0xe6, 0xec, 0xff, 0xc3, 0x1a, - 0xdb, 0x05, 0x99, 0x59, 0xe2, 0xf1, 0xa4, 0x77, 0x8e, 0x6d, 0x70, 0x5b, 0xf8, 0x50, 0x45, 0x48, - 0x71, 0x67, 0xc4, 0x1d, 0xc3, 0xf2, 0x61, 0xa4, 0x05, 0x39, 0x44, 0x3b, 0xee, 0xb8, 0xbd, 0x73, - 0x39, 0xf3, 0x08, 0x0f, 0x2d, 0x99, 0x8c, 0x59, 0x53, 0x53, 0x40, 0x09, 0x9f, 0xc9, 0x4d, 0x58, - 0xeb, 0x4f, 0xce, 0x28, 0xe3, 0xc1, 0xe6, 0x02, 0xb7, 0xfe, 0x98, 0x37, 0x57, 0xfa, 0x93, 0x33, - 0x7d, 0x38, 0xc4, 0x21, 0x45, 0x33, 0x91, 0x75, 0x8a, 0xc7, 0x56, 0xad, 0xc0, 0x5c, 0x40, 0x4c, - 0x5a, 0x01, 0x5b, 0xb7, 0x1c, 0x77, 0x03, 0x98, 0xd1, 0x20, 0xcf, 0x50, 0xc5, 0x1e, 0xb4, 0x1f, - 0xa7, 0x84, 0xbc, 0x3b, 0x7d, 0xde, 0xff, 0x72, 0x88, 0x12, 0x86, 0xe8, 0x16, 0xa8, 0xb4, 0xeb, - 0x83, 0x4d, 0xc5, 0x1f, 0xa3, 0xd5, 0xfe, 0xe4, 0xcc, 0xef, 0x3b, 0xb9, 0xe3, 0x17, 0xe4, 0x8e, - 0x7f, 0x53, 0xc8, 0xc3, 0x89, 0xdb, 0xc3, 0xf4, 0x2e, 0xd7, 0xfe, 0x33, 0x0d, 0x37, 0xcf, 0xb7, - 0x09, 0xfc, 0x72, 0xdc, 0x12, 0xc6, 0x2d, 0xa2, 0x3a, 0x9d, 0x8f, 0xa9, 0x4e, 0x13, 0xd6, 0xde, - 0x42, 0xd2, 0xda, 0x8b, 0x29, 0x6a, 0x17, 0x13, 0x14, 0xb5, 0x89, 0x0b, 0x34, 0xfb, 0x8c, 0x05, - 0xba, 0x24, 0xcf, 0x93, 0x7f, 0xf3, 0x15, 0x18, 0x61, 0x79, 0xe0, 0x6d, 0xb8, 0x20, 0xe4, 0x01, - 0x76, 0x72, 0x04, 0xfa, 0xf7, 0xdc, 0xbd, 0xdb, 0x49, 0x92, 0x00, 0xa2, 0x25, 0x70, 0xeb, 0xeb, - 0x5c, 0x06, 0x08, 0xca, 0x7f, 0x7e, 0xb8, 0x7f, 0xf2, 0x10, 0x2e, 0x62, 0x7c, 0xf7, 0x23, 0xf9, - 0xe6, 0xc0, 0x1e, 0x39, 0xc7, 0x7c, 0x3e, 0x5c, 0x8d, 0xf1, 0xca, 0xee, 0x91, 0xd4, 0x1c, 0xd3, - 0x39, 0x2e, 0xcf, 0x99, 0x1b, 0x5e, 0x02, 0x3c, 0x2a, 0x58, 0x7c, 0x57, 0x01, 0xed, 0xd9, 0xfd, - 0x85, 0x8a, 0xaa, 0x68, 0x87, 0x2f, 0x99, 0xb9, 0x8e, 0xd4, 0x7b, 0xd7, 0x60, 0x65, 0xe4, 0x1c, - 0x8f, 0x1c, 0xef, 0x34, 0xa4, 0x01, 0x59, 0xe6, 0x40, 0xd1, 0x31, 0x22, 0xca, 0xe4, 0x73, 0x71, - 0xe6, 0x82, 0x48, 0x2b, 0xf9, 0xf2, 0x62, 0xe2, 0x38, 0xd0, 0xd9, 0x24, 0x37, 0x90, 0x3d, 0x3c, - 0xc8, 0x64, 0x53, 0x6a, 0xda, 0xe4, 0xb1, 0x30, 0x8f, 0xdd, 0x9e, 0xa3, 0xfd, 0x8d, 0x22, 0x38, - 0x82, 0xa4, 0xce, 0x23, 0x6f, 0x4b, 0xc6, 0xbc, 0xe9, 0x18, 0x1b, 0x92, 0x44, 0x22, 0xdb, 0x3d, - 0xf2, 0xf0, 0x8c, 0x08, 0x08, 0x85, 0x67, 0x44, 0xc8, 0x0b, 0x58, 0x24, 0x72, 0xa9, 0xf9, 0xbe, - 0xb0, 0x08, 0xa2, 0x7b, 0xde, 0xc1, 0x5d, 0x72, 0x1b, 0x16, 0x99, 0x11, 0x90, 0x68, 0xee, 0x5a, - 0xa8, 0xb9, 0x07, 0x77, 0x4d, 0x51, 0xae, 0x7d, 0xc7, 0xbf, 0xd7, 0x8a, 0x7d, 0xc4, 0xc1, 0x5d, - 0xf2, 0xe6, 0xf9, 0x8c, 0x73, 0xb3, 0xc2, 0x38, 0xd7, 0x37, 0xcc, 0xfd, 0x58, 0xc8, 0x30, 0xf7, - 0xfa, 0xec, 0xde, 0xe2, 0xb7, 0x91, 0x2c, 0x1c, 0x61, 0x10, 0xa6, 0xea, 0xc7, 0x0a, 0xbc, 0x32, - 0x93, 0x82, 0x5c, 0x86, 0xac, 0xde, 0xac, 0xb4, 0x82, 0xf1, 0xa5, 0x6b, 0x46, 0x40, 0xc8, 0x1e, - 0x2c, 0xed, 0x76, 0x3c, 0xf7, 0x88, 0x4e, 0xe3, 0xc4, 0xeb, 0x81, 0x58, 0xb5, 0x3e, 0x7a, 0x79, - 0xce, 0x0c, 0x68, 0x89, 0x0d, 0xeb, 0xb8, 0x16, 0x42, 0xa9, 0x9f, 0xd2, 0x09, 0xba, 0x86, 0x58, - 0x85, 0x31, 0x32, 0xba, 0xcf, 0xc4, 0x80, 0xd1, 0x25, 0xf8, 0x58, 0xf0, 0x22, 0xd3, 0x1b, 0xf8, - 0x1c, 0x71, 0x55, 0x6f, 0x41, 0xb6, 0x29, 0xec, 0x04, 0x24, 0x6b, 0x76, 0x61, 0x13, 0x60, 0xfa, - 0xa5, 0xda, 0x6f, 0x2b, 0x42, 0x21, 0xf0, 0xec, 0x0f, 0x91, 0xb2, 0x66, 0x75, 0x67, 0x67, 0xcd, - 0xea, 0xfe, 0x94, 0x59, 0xb3, 0xb4, 0xbf, 0xe0, 0x51, 0xcf, 0x2b, 0xdd, 0x66, 0x44, 0x33, 0xfb, - 0xa2, 0x5e, 0x09, 0x46, 0x68, 0x76, 0x5e, 0x93, 0xb2, 0x2e, 0xc6, 0xdf, 0x35, 0xdd, 0x39, 0x41, - 0x9a, 0xaa, 0x7f, 0x94, 0x86, 0xcb, 0xb3, 0xc8, 0x13, 0xf3, 0x3a, 0x2b, 0xcf, 0x97, 0xd7, 0xf9, - 0x36, 0x64, 0x19, 0xcc, 0x37, 0xb9, 0xc7, 0x0e, 0xe7, 0xa4, 0xb4, 0xc3, 0x45, 0x31, 0xb9, 0x06, - 0x0b, 0x7a, 0xc1, 0x0a, 0x52, 0x8d, 0xa1, 0x6d, 0x6c, 0xe7, 0xc8, 0x43, 0xab, 0x4b, 0x5e, 0x44, - 0xbe, 0x14, 0xcf, 0xae, 0xc7, 0x73, 0x8c, 0x6d, 0x4b, 0x1d, 0x12, 0x4b, 0x48, 0x80, 0xed, 0x0d, - 0x02, 0xe8, 0xf3, 0x98, 0xd4, 0x66, 0x3c, 0x53, 0x9f, 0x06, 0x0b, 0xcd, 0x91, 0xe3, 0x39, 0x63, - 0xd9, 0x6e, 0x75, 0x88, 0x10, 0x93, 0x97, 0x70, 0xab, 0xd2, 0xce, 0x53, 0x16, 0x44, 0x60, 0x41, - 0x0e, 0xec, 0x82, 0x66, 0xa8, 0x14, 0x6c, 0x4a, 0x28, 0x94, 0xa0, 0xda, 0x99, 0xf4, 0x8f, 0x4e, - 0xdb, 0x66, 0x95, 0xb3, 0x1a, 0x8c, 0xa0, 0x87, 0x50, 0xfa, 0x81, 0x9e, 0x29, 0xa1, 0x68, 0xdf, - 0x54, 0x60, 0x23, 0xe9, 0x3b, 0xc8, 0x65, 0xc8, 0xf4, 0x13, 0x13, 0x09, 0xf6, 0x99, 0xef, 0x73, - 0x8e, 0xfe, 0xda, 0xc7, 0x83, 0xd1, 0x59, 0x67, 0x2c, 0x5b, 0xf7, 0x4a, 0x60, 0x13, 0xe8, 0x43, - 0x09, 0xff, 0x93, 0x2b, 0x62, 0x8f, 0x4e, 0xc7, 0x52, 0x0f, 0xe2, 0x8f, 0xa6, 0x03, 0x54, 0xba, - 0xcd, 0xc6, 0x90, 0x05, 0xc4, 0x7f, 0x03, 0x32, 0xb4, 0x59, 0x91, 0xd9, 0x4b, 0xe7, 0x8f, 0x5e, - 0xab, 0x72, 0x24, 0xd6, 0x2a, 0xaf, 0x73, 0xd6, 0x33, 0x11, 0x59, 0x3b, 0x84, 0xd5, 0x30, 0x06, - 0x31, 0xc2, 0x21, 0x54, 0x73, 0xf7, 0x54, 0x5e, 0xd3, 0xee, 0x60, 0xc0, 0x3c, 0x4c, 0x76, 0x5f, - 0xfe, 0xc7, 0x77, 0xaf, 0x00, 0x7d, 0x64, 0x34, 0x49, 0x21, 0x56, 0xb5, 0x6f, 0xa5, 0x60, 0x23, - 0x70, 0x6a, 0x17, 0x6b, 0xe8, 0x17, 0xd6, 0xc3, 0x52, 0x0f, 0x79, 0x00, 0x0a, 0x46, 0x2b, 0xfe, - 0x81, 0x33, 0x1c, 0x8f, 0xf6, 0x60, 0x73, 0x1a, 0x3e, 0xb9, 0x03, 0x4b, 0x18, 0x07, 0x69, 0xd8, - 0x39, 0x72, 0xe4, 0xbd, 0xaf, 0x2f, 0x80, 0x66, 0x50, 0xae, 0xfd, 0x50, 0x81, 0x2d, 0xee, 0x17, - 0x51, 0xeb, 0xb8, 0x7d, 0x54, 0xab, 0x1f, 0x39, 0xef, 0x8f, 0x87, 0xf0, 0x5e, 0x68, 0x1f, 0xbb, - 0x11, 0x76, 0x7f, 0x89, 0xbd, 0x6d, 0xfa, 0xd7, 0x92, 0xdb, 0x18, 0xdb, 0x8b, 0x5f, 0x3b, 0x67, - 0x58, 0x44, 0x86, 0x3e, 0x05, 0xc8, 0x11, 0x19, 0x10, 0x43, 0xfb, 0x35, 0xd8, 0x99, 0xfd, 0x02, - 0xf2, 0x45, 0x58, 0xc1, 0x64, 0x51, 0xed, 0xe1, 0xc9, 0xa8, 0xd3, 0x75, 0x84, 0x2a, 0x4c, 0xa8, - 0x2f, 0xe5, 0x32, 0x16, 0xaa, 0x8c, 0x47, 0x08, 0x38, 0xc1, 0x34, 0x54, 0x9c, 0x28, 0xe4, 0x7c, - 0x24, 0xd7, 0xa6, 0xfd, 0xba, 0x02, 0x24, 0x5e, 0x07, 0xf9, 0x28, 0x2c, 0xb7, 0x5b, 0x05, 0x6b, - 0xdc, 0x19, 0x8d, 0xcb, 0x83, 0xc9, 0x88, 0xc7, 0x09, 0x63, 0x0e, 0xe3, 0xe3, 0x23, 0x9b, 0x5d, - 0xa0, 0x9c, 0x0e, 0x26, 0x23, 0x33, 0x84, 0x87, 0x59, 0x8e, 0x1c, 0xe7, 0xcb, 0xdd, 0xce, 0xd3, - 0x70, 0x96, 0x23, 0x0e, 0x0b, 0x65, 0x39, 0xe2, 0x30, 0xed, 0x1d, 0x05, 0xb6, 0x85, 0x35, 0x61, - 0x37, 0xa1, 0x2d, 0x05, 0x0c, 0x8b, 0x32, 0x12, 0x81, 0x69, 0x67, 0xb1, 0xb4, 0xeb, 0x22, 0x72, - 0x10, 0x36, 0x10, 0x79, 0x5b, 0x46, 0x4b, 0x3e, 0x03, 0x19, 0x6b, 0x3c, 0x18, 0x9e, 0x23, 0x74, - 0x90, 0xea, 0x8f, 0xe8, 0x78, 0x30, 0xc4, 0x2a, 0x90, 0x52, 0x73, 0x60, 0x43, 0x6e, 0x9c, 0x68, - 0x31, 0xa9, 0xc1, 0x22, 0x8f, 0x11, 0x17, 0xb9, 0xa8, 0x9f, 0xf1, 0x4d, 0xbb, 0x6b, 0x22, 0x3e, - 0x11, 0x0f, 0x8c, 0x6a, 0x8a, 0x3a, 0xb4, 0xdf, 0x55, 0x20, 0x47, 0xb9, 0x0d, 0x94, 0xe2, 0x5e, - 0x74, 0x4a, 0x87, 0x19, 0x47, 0x61, 0x77, 0xe2, 0x57, 0x7f, 0xae, 0xd3, 0xf8, 0x23, 0xb0, 0x16, - 0x21, 0x20, 0x1a, 0x46, 0xa6, 0xe8, 0xb9, 0x47, 0x1d, 0x96, 0x34, 0x85, 0xd9, 0x6c, 0x84, 0x60, - 0xda, 0x6f, 0x2a, 0xb0, 0x41, 0x65, 0x7e, 0x76, 0xcf, 0x69, 0x4e, 0x7a, 0x62, 0xbd, 0x53, 0x0e, - 0x4a, 0x98, 0xa5, 0x32, 0xaf, 0x79, 0xc6, 0x41, 0x71, 0x98, 0xe9, 0x97, 0x92, 0x32, 0x64, 0xf9, - 0xf9, 0xe2, 0xf1, 0x78, 0xa6, 0x3b, 0x92, 0x32, 0x21, 0xa8, 0x98, 0x23, 0xd1, 0x2f, 0xc1, 0x2d, - 0x8c, 0xd3, 0x98, 0x3e, 0xb5, 0xf6, 0x5f, 0x0a, 0x5c, 0x9a, 0x42, 0x43, 0xde, 0x82, 0x79, 0xf4, - 0xe8, 0xe3, 0xa3, 0x77, 0x79, 0xca, 0x2b, 0xc6, 0x47, 0xa7, 0x07, 0x77, 0xd9, 0x41, 0x74, 0x46, - 0x1f, 0x4c, 0x46, 0x45, 0xde, 0x86, 0x25, 0xbd, 0xdb, 0xe5, 0xe2, 0x4c, 0x2a, 0x24, 0xce, 0x4c, - 0x79, 0xe3, 0xeb, 0x3e, 0x3e, 0x13, 0x67, 0x98, 0x6f, 0x49, 0xb7, 0x6b, 0x73, 0x6f, 0xc5, 0xa0, - 0xbe, 0xad, 0x4f, 0xc2, 0x6a, 0x18, 0xf9, 0xb9, 0x1c, 0xac, 0xbe, 0xa3, 0x80, 0x1a, 0x6e, 0xc3, - 0xcf, 0x26, 0xb2, 0x52, 0xd2, 0x30, 0x3f, 0x63, 0x52, 0xfd, 0x7e, 0x0a, 0x5e, 0x4a, 0xec, 0x61, - 0xf2, 0x1a, 0x2c, 0xe8, 0xc3, 0x61, 0xa5, 0xc8, 0x67, 0x15, 0xe7, 0x90, 0x50, 0x4b, 0x1c, 0x92, - 0xf6, 0x18, 0x12, 0x79, 0x03, 0xb2, 0xec, 0x3a, 0xbd, 0x28, 0x36, 0x1c, 0x0c, 0x15, 0xc3, 0xef, - 0xfa, 0xc3, 0x91, 0x45, 0x05, 0x22, 0x29, 0xc1, 0x2a, 0x0f, 0xb2, 0x62, 0x3a, 0x27, 0xce, 0x57, - 0xfd, 0x10, 0xf7, 0x18, 0x85, 0x5f, 0xa8, 0x9e, 0xed, 0x11, 0x2b, 0x93, 0xc3, 0x8c, 0x84, 0xa9, - 0x48, 0x15, 0x54, 0xac, 0x53, 0xae, 0x89, 0x85, 0x37, 0xc5, 0xb0, 0x37, 0xac, 0x11, 0x53, 0xea, - 0x8a, 0x51, 0xfa, 0xc3, 0xa5, 0x7b, 0x9e, 0x7b, 0xd2, 0x3f, 0x73, 0xfa, 0xe3, 0x9f, 0xdd, 0x70, - 0x05, 0xef, 0x38, 0xd7, 0x70, 0xfd, 0x61, 0x86, 0x2d, 0xe6, 0x28, 0x19, 0xe5, 0x68, 0xa4, 0x88, - 0xd6, 0xc8, 0xd1, 0x50, 0xa1, 0x89, 0x87, 0x11, 0x29, 0xc2, 0x22, 0x0b, 0xef, 0x22, 0x56, 0xc6, - 0x2b, 0x89, 0x4d, 0x60, 0x38, 0x07, 0x77, 0x19, 0xfb, 0xc2, 0x5c, 0x0b, 0x3d, 0x53, 0x90, 0x92, - 0x03, 0xc8, 0x15, 0x7a, 0x4e, 0xa7, 0x3f, 0x19, 0xb6, 0xce, 0x77, 0xe5, 0xb8, 0xc9, 0xbf, 0x65, - 0xf9, 0x88, 0x91, 0xe1, 0x55, 0x25, 0xee, 0xe4, 0x72, 0x45, 0xa4, 0xe5, 0x7b, 0x1b, 0x65, 0x50, - 0x53, 0xf9, 0xe1, 0x19, 0xfd, 0x13, 0x05, 0x22, 0x5d, 0xd8, 0x95, 0x8e, 0xbb, 0x23, 0xd9, 0xb0, - 0x5a, 0xed, 0x78, 0xe3, 0xd6, 0xa8, 0xd3, 0xf7, 0x30, 0x2c, 0xe4, 0x39, 0xc2, 0x66, 0x6d, 0x8b, - 0x94, 0xc3, 0xa8, 0x63, 0x1c, 0xfb, 0xa4, 0x4c, 0x83, 0x19, 0xae, 0x8e, 0xf2, 0x4b, 0x25, 0xb7, - 0xdf, 0xe9, 0xb9, 0x5f, 0x13, 0x4e, 0x99, 0x8c, 0x5f, 0x3a, 0x16, 0x40, 0x33, 0x28, 0xd7, 0xbe, - 0x10, 0x1b, 0x37, 0xd6, 0xca, 0x1c, 0x2c, 0x72, 0x97, 0x7d, 0xe6, 0xc2, 0xde, 0x34, 0xea, 0xc5, - 0x4a, 0x7d, 0x4f, 0x55, 0xc8, 0x2a, 0x40, 0xd3, 0x6c, 0x14, 0x0c, 0xcb, 0xa2, 0xcf, 0x29, 0xfa, - 0xcc, 0xfd, 0xdb, 0x4b, 0xed, 0xaa, 0x9a, 0x96, 0x5c, 0xdc, 0x33, 0xda, 0x0f, 0x14, 0xb8, 0x98, - 0x3c, 0x94, 0xa4, 0x05, 0x18, 0xe4, 0x80, 0x5f, 0x3e, 0x7f, 0x74, 0xe6, 0xb8, 0x27, 0x82, 0xa3, - 0xc1, 0x12, 0xc6, 0xcc, 0x09, 0x3f, 0x25, 0x2e, 0x8b, 0x98, 0x57, 0x9f, 0xdb, 0x35, 0x53, 0x6e, - 0x57, 0x2b, 0xc0, 0xe6, 0xb4, 0x3a, 0xc2, 0x9f, 0xba, 0x06, 0x39, 0xbd, 0xd9, 0xac, 0x56, 0x0a, - 0x7a, 0xab, 0xd2, 0xa8, 0xab, 0x0a, 0x59, 0x82, 0xf9, 0x3d, 0xb3, 0xd1, 0x6e, 0xaa, 0x29, 0xed, - 0xdb, 0x0a, 0xac, 0x54, 0x02, 0x33, 0xad, 0x17, 0x5d, 0x7c, 0x1f, 0x0f, 0x2d, 0xbe, 0x4d, 0x3f, - 0x1c, 0x88, 0xff, 0x82, 0x73, 0xad, 0xbc, 0x77, 0x52, 0xb0, 0x1e, 0xa3, 0x21, 0x16, 0x2c, 0xea, - 0x87, 0x56, 0xa3, 0x52, 0x2c, 0xf0, 0x96, 0x5d, 0x09, 0xec, 0x8b, 0x30, 0xe3, 0x53, 0xec, 0x2d, - 0xcc, 0x85, 0xf6, 0x89, 0x67, 0x0f, 0xdc, 0xae, 0x94, 0xad, 0xb5, 0x3c, 0x67, 0x8a, 0x9a, 0xf0, - 0x24, 0xfb, 0xda, 0x64, 0xe4, 0x60, 0xb5, 0xa9, 0x90, 0x22, 0xd4, 0x87, 0xc7, 0x2b, 0x46, 0x87, - 0x87, 0x0e, 0x2d, 0x8f, 0x57, 0x1d, 0xd4, 0x47, 0xea, 0xb0, 0xb0, 0xe7, 0x8e, 0xcb, 0x93, 0x47, - 0x7c, 0xfd, 0xee, 0x04, 0xf9, 0x7f, 0xca, 0x93, 0x47, 0xf1, 0x6a, 0x51, 0xc7, 0xc7, 0xc2, 0xdd, - 0x84, 0xaa, 0xe4, 0xb5, 0xec, 0xae, 0x40, 0x8e, 0x4b, 0x41, 0x28, 0x60, 0x7c, 0x4f, 0x81, 0xcd, - 0x69, 0xdf, 0x4e, 0x05, 0xab, 0xb0, 0x7f, 0xfe, 0x45, 0x3f, 0x23, 0x44, 0xd8, 0x31, 0x5f, 0xa0, - 0x91, 0x4f, 0x43, 0xae, 0xe2, 0x79, 0x13, 0x67, 0x64, 0xbd, 0xd1, 0x36, 0x2b, 0x7c, 0xc2, 0xbd, - 0xf2, 0xef, 0xef, 0x5e, 0xb9, 0x84, 0x6e, 0x0e, 0x23, 0xdb, 0x7b, 0xc3, 0x9e, 0x8c, 0xdc, 0x50, - 0xf4, 0x7c, 0x99, 0x82, 0xf2, 0xc1, 0x9d, 0x49, 0xd7, 0x75, 0x84, 0x14, 0x20, 0x7c, 0x98, 0x39, - 0x4c, 0x3e, 0x95, 0x04, 0x4c, 0xfb, 0x86, 0x02, 0x5b, 0xd3, 0x3b, 0x9a, 0x9e, 0x74, 0x2d, 0x66, - 0x45, 0x24, 0xbc, 0x88, 0xf1, 0xa4, 0xf3, 0x4d, 0x8d, 0xe4, 0x3a, 0x05, 0x22, 0x25, 0xf2, 0xb3, - 0xb1, 0xa7, 0x62, 0x29, 0x98, 0xc3, 0x44, 0x02, 0x11, 0xe3, 0x30, 0x4c, 0x19, 0x17, 0xf2, 0xa9, - 0xc4, 0x44, 0x33, 0xe8, 0x9a, 0x23, 0x27, 0x9a, 0x09, 0xa5, 0x20, 0x93, 0x53, 0xce, 0xbc, 0x05, - 0xf3, 0x18, 0xf5, 0x9b, 0x4f, 0x30, 0x12, 0x9a, 0x06, 0x18, 0xfa, 0x9b, 0xc9, 0x4b, 0x88, 0x24, - 0xcb, 0x4b, 0x08, 0xd0, 0xfe, 0x5e, 0x81, 0x9c, 0x84, 0x4b, 0xbe, 0x00, 0x2a, 0x66, 0xc2, 0xe6, - 0x36, 0x33, 0x63, 0xd7, 0x8f, 0x2c, 0xba, 0xee, 0x67, 0x84, 0x2b, 0xef, 0x3b, 0x4f, 0x9b, 0x1d, - 0x77, 0xc4, 0x8e, 0xf7, 0x28, 0xba, 0x9c, 0x5a, 0x8a, 0x96, 0xe9, 0x41, 0x11, 0x31, 0x61, 0xc9, - 0x37, 0x59, 0x8d, 0x1c, 0xa2, 0x52, 0x23, 0x7c, 0xdb, 0x55, 0xde, 0xb7, 0xe2, 0x31, 0xe4, 0xfb, - 0x23, 0x80, 0xda, 0x77, 0x15, 0xd8, 0x48, 0x22, 0xfe, 0xf9, 0x4c, 0x9c, 0xaf, 0xfd, 0x47, 0x0a, - 0x2e, 0xd2, 0x0d, 0xad, 0xe7, 0x78, 0x1e, 0xed, 0x1a, 0xa7, 0x3f, 0xe6, 0x2c, 0x3e, 0x79, 0x13, - 0x16, 0x4e, 0x9f, 0x4f, 0x9d, 0xcd, 0xd0, 0x09, 0x01, 0x64, 0x12, 0x84, 0x03, 0x0f, 0xfd, 0x4f, - 0xae, 0x82, 0x9c, 0x00, 0x3d, 0x8d, 0x21, 0x58, 0x53, 0x9b, 0x8a, 0xb9, 0x34, 0xf4, 0x73, 0x15, - 0x7f, 0x0c, 0xe6, 0x51, 0x85, 0xc5, 0x8f, 0x6b, 0x21, 0x66, 0x25, 0xb7, 0x0e, 0x15, 0x5c, 0x26, - 0x23, 0x20, 0x1f, 0x02, 0x08, 0xb2, 0x57, 0xf0, 0xf3, 0x58, 0xa8, 0x76, 0xfc, 0x04, 0x16, 0xe6, - 0xd2, 0xd9, 0x71, 0x87, 0xa7, 0x84, 0xc8, 0xc3, 0xba, 0xe8, 0xf7, 0xa1, 0x88, 0xdc, 0xc8, 0x6f, - 0x5a, 0xd7, 0x58, 0x41, 0x65, 0x28, 0xa2, 0x37, 0x5e, 0x8f, 0x25, 0x71, 0xc6, 0x00, 0xce, 0x91, - 0x4c, 0xcd, 0xd7, 0x63, 0x99, 0x9a, 0xb3, 0x0c, 0x4b, 0x4e, 0xc7, 0xac, 0xfd, 0x6b, 0x0a, 0x96, - 0x0e, 0x29, 0x23, 0x8c, 0xea, 0x9d, 0xd9, 0xea, 0xa2, 0x7b, 0x90, 0xab, 0x0e, 0x3a, 0xfc, 0x4a, - 0x8b, 0xfb, 0xbd, 0xb0, 0xd1, 0xec, 0x0d, 0x3a, 0xe2, 0x76, 0xcc, 0x33, 0x65, 0xa4, 0x67, 0xf8, - 0xcc, 0x3f, 0x80, 0x05, 0x76, 0xc5, 0xc8, 0x35, 0x97, 0x42, 0x14, 0xf2, 0x5b, 0xf4, 0x3a, 0x2b, - 0x96, 0x6e, 0x61, 0xd8, 0x35, 0xa5, 0xcc, 0x97, 0xf3, 0x38, 0xb4, 0x92, 0x32, 0x6b, 0xfe, 0x7c, - 0xca, 0x2c, 0x29, 0xde, 0xde, 0xc2, 0x79, 0xe2, 0xed, 0x6d, 0xdd, 0x87, 0x9c, 0xd4, 0x9e, 0xe7, - 0x92, 0x8c, 0xbe, 0x9e, 0x82, 0x15, 0xfc, 0x2a, 0xdf, 0xde, 0xe8, 0x17, 0x53, 0x35, 0xf7, 0xf1, - 0x90, 0x6a, 0x6e, 0x53, 0x1e, 0x2f, 0xf6, 0x65, 0x33, 0x74, 0x72, 0x0f, 0x60, 0x3d, 0x86, 0x48, - 0x3e, 0x02, 0xf3, 0xb4, 0xf9, 0x62, 0x13, 0x55, 0xa3, 0x33, 0x20, 0x88, 0xcd, 0x4c, 0x3f, 0xdc, - 0x33, 0x19, 0xb6, 0xf6, 0xdf, 0x0a, 0x2c, 0xf3, 0xd4, 0x28, 0xfd, 0xe3, 0xc1, 0x33, 0xbb, 0xf3, - 0x66, 0xb4, 0x3b, 0x59, 0x04, 0x18, 0xde, 0x9d, 0xff, 0xdb, 0x9d, 0x78, 0x3f, 0xd4, 0x89, 0x97, - 0xfc, 0x48, 0x8d, 0xe2, 0x73, 0x66, 0xf4, 0xe1, 0xdf, 0x62, 0xec, 0xe2, 0x30, 0x22, 0xf9, 0x12, - 0x2c, 0xd5, 0x9d, 0x27, 0x21, 0x8d, 0xc0, 0xcd, 0x29, 0x95, 0xbe, 0xee, 0x23, 0xb2, 0x35, 0x85, - 0xcc, 0x54, 0xdf, 0x79, 0x62, 0xc7, 0x6e, 0x37, 0x83, 0x2a, 0xb7, 0x3e, 0x09, 0xab, 0x61, 0xb2, - 0xe7, 0x99, 0xfa, 0xdc, 0x09, 0x17, 0x83, 0x1a, 0x7d, 0x33, 0x0d, 0x10, 0xf8, 0x2f, 0xd2, 0x05, - 0x18, 0x32, 0xec, 0x10, 0x97, 0x29, 0x08, 0x92, 0xe7, 0xb8, 0xb0, 0xf7, 0xb8, 0xc9, 0x95, 0xfe, - 0xa9, 0xe9, 0x91, 0x34, 0x51, 0xfd, 0x5f, 0xe0, 0x0e, 0x73, 0x5d, 0xa7, 0xd7, 0x61, 0x7b, 0x7b, - 0x7a, 0xf7, 0x3a, 0x06, 0x4e, 0xf6, 0xa1, 0x53, 0x72, 0x5c, 0xa3, 0x5b, 0x5d, 0x91, 0x22, 0xc4, - 0x7c, 0x82, 0x33, 0xcf, 0xe7, 0x13, 0xdc, 0x84, 0x25, 0xb7, 0xff, 0xd8, 0xe9, 0x8f, 0x07, 0xa3, - 0xa7, 0x78, 0xd3, 0x11, 0xa8, 0x50, 0x69, 0x17, 0x54, 0x44, 0x19, 0x1b, 0x07, 0x3c, 0xc8, 0x7d, - 0x7c, 0x79, 0x18, 0x7c, 0xa0, 0xef, 0xd3, 0x3c, 0xaf, 0x2e, 0x3c, 0xc8, 0x64, 0x17, 0xd4, 0xc5, - 0x07, 0x99, 0x6c, 0x56, 0x5d, 0x7a, 0x90, 0xc9, 0x2e, 0xa9, 0x60, 0x4a, 0x77, 0x87, 0xfe, 0xdd, - 0xa0, 0x74, 0x96, 0x87, 0xcf, 0x69, 0xed, 0x27, 0x29, 0x20, 0xf1, 0x66, 0x90, 0x8f, 0x43, 0x8e, - 0x6d, 0xb0, 0xf6, 0xc8, 0xfb, 0x0a, 0x77, 0x89, 0x60, 0xa1, 0xa1, 0x24, 0xb0, 0x1c, 0x1a, 0x8a, - 0x81, 0x4d, 0xef, 0x2b, 0x3d, 0xf2, 0x45, 0xb8, 0x80, 0xdd, 0x3b, 0x74, 0x46, 0xee, 0xa0, 0x6b, - 0x63, 0x1c, 0xdf, 0x4e, 0x8f, 0xe7, 0xa3, 0x7c, 0x0d, 0x13, 0x27, 0xc7, 0x8b, 0xa7, 0x0c, 0x03, - 0xba, 0x29, 0x36, 0x11, 0xb3, 0xc9, 0x10, 0x49, 0x0b, 0x54, 0x99, 0xfe, 0x78, 0xd2, 0xeb, 0xf1, - 0x91, 0xcd, 0x53, 0x2e, 0x2b, 0x5a, 0x36, 0xa5, 0xe2, 0xd5, 0xa0, 0xe2, 0xd2, 0xa4, 0xd7, 0x23, - 0x6f, 0x02, 0x0c, 0xfa, 0xf6, 0x99, 0xeb, 0x79, 0xec, 0xfe, 0xcc, 0xf7, 0xa8, 0x0e, 0xa0, 0xf2, - 0x60, 0x0c, 0xfa, 0x35, 0x06, 0x24, 0xff, 0x0f, 0x30, 0xa2, 0x04, 0x86, 0x5a, 0x61, 0x16, 0x53, - 0x3c, 0xc3, 0x8c, 0x00, 0x86, 0x1d, 0xb8, 0x4f, 0x1c, 0xcb, 0xfd, 0x9a, 0x70, 0x47, 0xf9, 0x3c, - 0xac, 0x73, 0x03, 0xe7, 0x43, 0x77, 0x7c, 0xca, 0xa5, 0xb7, 0x17, 0x11, 0xfd, 0x24, 0xf1, 0xed, - 0x9f, 0x32, 0x00, 0xfa, 0xa1, 0x25, 0xa2, 0x98, 0xdd, 0x86, 0x79, 0x2a, 0x93, 0x0a, 0xdd, 0x16, - 0x72, 0xba, 0x58, 0xaf, 0xcc, 0xe9, 0x22, 0x06, 0x5d, 0x8d, 0x26, 0x1a, 0xfe, 0x0b, 0xbd, 0x16, - 0xae, 0x46, 0xe6, 0x0b, 0x10, 0x8a, 0x22, 0xcd, 0xb1, 0x48, 0x15, 0x20, 0x88, 0x2b, 0xc6, 0xa5, - 0xac, 0xf5, 0x20, 0x40, 0x0f, 0x2f, 0xe0, 0x99, 0x2c, 0x82, 0xd8, 0x64, 0xf2, 0xf4, 0x09, 0xd0, - 0xc8, 0x3e, 0x64, 0x5a, 0x1d, 0xdf, 0x5f, 0x78, 0x4a, 0xb4, 0xb5, 0x57, 0x79, 0xbe, 0xd0, 0x20, - 0xe2, 0xda, 0xea, 0xb8, 0x13, 0x4a, 0xab, 0x8c, 0x95, 0x10, 0x03, 0x16, 0x78, 0x2e, 0xf8, 0x29, - 0x51, 0x3a, 0x79, 0x2a, 0x78, 0x1e, 0x9b, 0x1b, 0x81, 0x32, 0x4f, 0xc1, 0xb3, 0xbe, 0xdf, 0x83, - 0xb4, 0x65, 0xd5, 0x78, 0x8c, 0x91, 0x95, 0x40, 0xe2, 0xb5, 0xac, 0x1a, 0x63, 0x7e, 0x3d, 0xef, - 0x4c, 0x22, 0xa3, 0xc8, 0xe4, 0x13, 0x90, 0x93, 0x84, 0x18, 0x1e, 0x9d, 0x07, 0xfb, 0x40, 0xf2, - 0xc8, 0x92, 0x37, 0x0d, 0x09, 0x9b, 0x54, 0x41, 0xdd, 0x9f, 0x3c, 0x72, 0xf4, 0xe1, 0x10, 0x5d, - 0x35, 0x1f, 0x3b, 0x23, 0xc6, 0xb6, 0x65, 0x83, 0xb0, 0xd6, 0xe8, 0xc7, 0xd1, 0x15, 0xa5, 0xb2, - 0x7e, 0x2f, 0x4a, 0x49, 0x9a, 0xb0, 0x6e, 0x39, 0xe3, 0xc9, 0x90, 0xd9, 0x00, 0x95, 0x06, 0x23, - 0x2a, 0x90, 0xb2, 0x58, 0x3e, 0x18, 0x01, 0xd8, 0xa3, 0x85, 0xc2, 0xf0, 0xea, 0x78, 0x30, 0x8a, - 0x08, 0xa7, 0x71, 0x62, 0xcd, 0x91, 0x87, 0x9c, 0x9e, 0xaa, 0x61, 0x31, 0x17, 0x4f, 0x55, 0x21, - 0xe6, 0x06, 0xc2, 0xed, 0x87, 0x12, 0xe2, 0xcd, 0xe1, 0x65, 0xac, 0x14, 0x6f, 0x2e, 0x14, 0x65, - 0xee, 0x9d, 0x8c, 0x14, 0xf2, 0x94, 0x8f, 0xc5, 0x5b, 0x00, 0x0f, 0x06, 0x6e, 0xbf, 0xe6, 0x8c, - 0x4f, 0x07, 0x5d, 0x29, 0xec, 0x5d, 0xee, 0x57, 0x06, 0x6e, 0xdf, 0x3e, 0x43, 0xf0, 0x4f, 0xde, - 0xbd, 0x22, 0x21, 0x99, 0xd2, 0x7f, 0xf2, 0x41, 0x58, 0xa2, 0x4f, 0xad, 0xc0, 0x92, 0x89, 0xa9, - 0xc1, 0x91, 0x9a, 0x25, 0x06, 0x09, 0x10, 0xc8, 0x7d, 0x4c, 0x85, 0xe3, 0x0e, 0xc7, 0x12, 0xf3, - 0x2a, 0xf2, 0xde, 0xb8, 0xc3, 0x71, 0x34, 0x8a, 0xb5, 0x84, 0x4c, 0xca, 0x7e, 0xd3, 0x45, 0xf6, - 0x2a, 0x9e, 0x71, 0x07, 0x85, 0x41, 0x3e, 0xd7, 0x6c, 0x11, 0x3e, 0x57, 0x16, 0x06, 0x23, 0x64, - 0xd8, 0x08, 0xab, 0x5c, 0x64, 0x97, 0x73, 0x9c, 0xa9, 0x65, 0x8d, 0xf0, 0x4e, 0xbb, 0xf6, 0x11, - 0x82, 0x43, 0x8d, 0xf0, 0x91, 0xc9, 0x2e, 0xac, 0x31, 0x1e, 0xdf, 0xcf, 0x82, 0xc9, 0x59, 0x5c, - 0xdc, 0xdb, 0x82, 0x34, 0x99, 0xf2, 0xeb, 0x23, 0x04, 0xa4, 0x04, 0xf3, 0xa8, 0x1c, 0xe0, 0xee, - 0x0b, 0xdb, 0xb2, 0x66, 0x26, 0xba, 0x8e, 0x70, 0x5f, 0x41, 0x9d, 0x8c, 0xbc, 0xaf, 0x20, 0x2a, - 0xf9, 0x1c, 0x80, 0xd1, 0x1f, 0x0d, 0x7a, 0x3d, 0x0c, 0xf0, 0x9c, 0x45, 0x51, 0xea, 0x95, 0xf0, - 0x7a, 0xc4, 0x5a, 0x02, 0x24, 0x1e, 0x8c, 0x10, 0x9f, 0xed, 0x48, 0x18, 0x68, 0xa9, 0x2e, 0xad, - 0x02, 0x0b, 0x6c, 0x31, 0x62, 0xb0, 0x74, 0x9e, 0xfe, 0x45, 0x0a, 0xb5, 0xcd, 0x82, 0xa5, 0x73, - 0x78, 0x3c, 0x58, 0xba, 0x44, 0xa0, 0xed, 0xc3, 0x46, 0xd2, 0x87, 0x85, 0xd4, 0x19, 0xca, 0x79, - 0xd5, 0x19, 0x7f, 0x9a, 0x86, 0x65, 0xac, 0x4d, 0xec, 0xc2, 0x3a, 0xac, 0x58, 0x93, 0x47, 0x7e, - 0x24, 0x31, 0xb1, 0x1b, 0x63, 0xfb, 0x3c, 0xb9, 0x40, 0xbe, 0x36, 0x0d, 0x51, 0x10, 0x03, 0x56, - 0xc5, 0x49, 0xb0, 0x27, 0xbc, 0x1b, 0xfc, 0x38, 0xe5, 0x22, 0x1a, 0x66, 0x3c, 0x0b, 0x70, 0x84, - 0x28, 0x38, 0x0f, 0xd2, 0xcf, 0x73, 0x1e, 0x64, 0xce, 0x75, 0x1e, 0xbc, 0x0d, 0xcb, 0xe2, 0x6d, - 0xb8, 0x93, 0xcf, 0xbf, 0xd8, 0x4e, 0x1e, 0xaa, 0x8c, 0x54, 0xfd, 0x1d, 0x7d, 0x61, 0xe6, 0x8e, - 0x8e, 0x77, 0xd1, 0x62, 0x95, 0x0d, 0x11, 0x16, 0xdf, 0xd8, 0x31, 0x4d, 0xe6, 0x5e, 0xa1, 0xf9, - 0x53, 0x9c, 0x92, 0x1f, 0x81, 0xa5, 0xea, 0x40, 0x5c, 0x43, 0x4a, 0xf7, 0x3f, 0x3d, 0x01, 0x94, - 0xd9, 0x05, 0x1f, 0xd3, 0x3f, 0xdd, 0xd2, 0xef, 0xc7, 0xe9, 0x76, 0x1f, 0x80, 0xbb, 0xcd, 0x04, - 0xe9, 0xed, 0x70, 0xc9, 0x88, 0x28, 0x2a, 0xe1, 0x6b, 0x28, 0x09, 0x99, 0xee, 0x4e, 0xdc, 0xc2, - 0x49, 0x3f, 0x3a, 0x1a, 0x4c, 0xfa, 0xe3, 0x50, 0x3e, 0x68, 0xe1, 0x65, 0xdb, 0xe1, 0x65, 0xf2, - 0xf6, 0x10, 0x21, 0x7b, 0x7f, 0x07, 0x84, 0x7c, 0xd6, 0x37, 0xd0, 0x5c, 0x9c, 0xd5, 0x43, 0x5a, - 0xac, 0x87, 0xa6, 0x9a, 0x65, 0x6a, 0x3f, 0x50, 0xe4, 0x24, 0x11, 0x3f, 0xc5, 0x50, 0x7f, 0x0c, - 0xc0, 0xb7, 0x03, 0x11, 0x63, 0xcd, 0xe4, 0x25, 0x1f, 0x2a, 0xf7, 0x72, 0x80, 0x2b, 0x7d, 0x4d, - 0xfa, 0xfd, 0xfa, 0x9a, 0x16, 0xe4, 0x1a, 0x5f, 0x1e, 0x77, 0x02, 0xc3, 0x21, 0xb0, 0x7c, 0x4e, - 0x16, 0x77, 0xa6, 0xf4, 0xee, 0x0d, 0x3c, 0x1b, 0x02, 0x3e, 0x78, 0x0a, 0x0b, 0x2c, 0x11, 0x6a, - 0x7f, 0xa9, 0xc0, 0x9a, 0x1c, 0x1a, 0xe0, 0x69, 0xff, 0x88, 0x7c, 0x8a, 0xc5, 0xac, 0x55, 0x42, - 0x22, 0x8b, 0x84, 0x44, 0xb7, 0xdc, 0xa7, 0xfd, 0x23, 0xc6, 0x00, 0x75, 0x9e, 0xc8, 0x8d, 0xa5, - 0x84, 0xe4, 0x11, 0x2c, 0x37, 0x07, 0xbd, 0x1e, 0x65, 0x6b, 0x46, 0x8f, 0xb9, 0x00, 0x40, 0x2b, - 0x8a, 0xde, 0x46, 0x89, 0x06, 0xed, 0x5e, 0xe3, 0x72, 0xee, 0xa5, 0x21, 0xdd, 0xef, 0x5d, 0x4e, - 0x17, 0x54, 0xfb, 0x1d, 0xf4, 0xe5, 0x93, 0xeb, 0xd4, 0x7e, 0xa4, 0x00, 0x89, 0x37, 0x49, 0xde, - 0xb2, 0x94, 0xff, 0x03, 0x16, 0x36, 0xc2, 0xfa, 0x65, 0x9e, 0x87, 0xf5, 0xcb, 0xff, 0x9e, 0x02, - 0x6b, 0x15, 0xbd, 0xc6, 0xd3, 0x46, 0xb0, 0x4b, 0xb3, 0xab, 0xf0, 0x4a, 0x45, 0xaf, 0xd9, 0xcd, - 0x46, 0xb5, 0x52, 0x78, 0x68, 0x27, 0x46, 0x83, 0x7e, 0x05, 0x5e, 0x8e, 0xa3, 0x04, 0x97, 0x6b, - 0x97, 0x61, 0x33, 0x5e, 0x2c, 0x22, 0x46, 0x27, 0x13, 0x8b, 0xe0, 0xd2, 0xe9, 0xfc, 0xa7, 0x61, - 0x4d, 0x44, 0x47, 0x6e, 0x55, 0x2d, 0xcc, 0xbf, 0xb0, 0x06, 0xb9, 0x03, 0xc3, 0xac, 0x94, 0x1e, - 0xda, 0xa5, 0x76, 0xb5, 0xaa, 0xce, 0x91, 0x15, 0x58, 0xe2, 0x80, 0x82, 0xae, 0x2a, 0x64, 0x19, - 0xb2, 0x95, 0xba, 0x65, 0x14, 0xda, 0xa6, 0xa1, 0xa6, 0xf2, 0x9f, 0x86, 0xd5, 0xe6, 0xc8, 0x7d, - 0xdc, 0x19, 0x3b, 0xfb, 0xce, 0x53, 0xbc, 0x1b, 0x5b, 0x84, 0xb4, 0xa9, 0x1f, 0xaa, 0x73, 0x04, - 0x60, 0xa1, 0xb9, 0x5f, 0xb0, 0xee, 0xde, 0x55, 0x15, 0x92, 0x83, 0xc5, 0xbd, 0x42, 0xd3, 0xde, - 0xaf, 0x59, 0x6a, 0x8a, 0x3e, 0xe8, 0x87, 0x16, 0x3e, 0xa4, 0xf3, 0x1f, 0x86, 0x75, 0x64, 0x48, - 0xaa, 0xae, 0x37, 0x76, 0xfa, 0xce, 0x08, 0xdb, 0xb0, 0x0c, 0x59, 0xcb, 0xa1, 0x3b, 0xc9, 0xd8, - 0x61, 0x0d, 0xa8, 0x4d, 0x7a, 0x63, 0x77, 0xd8, 0x73, 0xbe, 0xaa, 0x2a, 0xf9, 0xfb, 0xb0, 0x66, - 0x0e, 0x26, 0x63, 0xb7, 0x7f, 0x62, 0x8d, 0x29, 0xc6, 0xc9, 0x53, 0xf2, 0x12, 0xac, 0xb7, 0xeb, - 0x7a, 0x6d, 0xb7, 0xb2, 0xd7, 0x6e, 0xb4, 0x2d, 0xbb, 0xa6, 0xb7, 0x0a, 0x65, 0x76, 0x33, 0x57, - 0x6b, 0x58, 0x2d, 0xdb, 0x34, 0x0a, 0x46, 0xbd, 0xa5, 0x2a, 0xf9, 0x6f, 0xa1, 0x6e, 0xe5, 0x68, - 0xd0, 0xef, 0x96, 0x3a, 0x47, 0xe3, 0xc1, 0x08, 0x1b, 0xac, 0xc1, 0x8e, 0x65, 0x14, 0x1a, 0xf5, - 0xa2, 0x5d, 0xd2, 0x0b, 0xad, 0x86, 0x99, 0x14, 0x8e, 0x7c, 0x0b, 0x2e, 0x26, 0xe0, 0x34, 0x5a, - 0x4d, 0x55, 0x21, 0x57, 0x60, 0x3b, 0xa1, 0xec, 0xd0, 0xd8, 0xd5, 0xdb, 0xad, 0x72, 0x5d, 0x4d, - 0x4d, 0x21, 0xb6, 0xac, 0x86, 0x9a, 0xce, 0xff, 0x96, 0x02, 0xab, 0x6d, 0x8f, 0x9b, 0xc5, 0xb7, - 0xd1, 0x23, 0xf6, 0x55, 0xb8, 0xdc, 0xb6, 0x0c, 0xd3, 0x6e, 0x35, 0xf6, 0x8d, 0xba, 0xdd, 0xb6, - 0xf4, 0xbd, 0x68, 0x6b, 0xae, 0xc0, 0xb6, 0x84, 0x61, 0x1a, 0x85, 0xc6, 0x81, 0x61, 0xda, 0x4d, - 0xdd, 0xb2, 0x0e, 0x1b, 0x66, 0x51, 0x55, 0xe8, 0x1b, 0x13, 0x10, 0x6a, 0x25, 0x9d, 0xb5, 0x26, - 0x54, 0x56, 0x37, 0x0e, 0xf5, 0xaa, 0xbd, 0xdb, 0x68, 0xa9, 0xe9, 0x7c, 0x8d, 0x9e, 0xef, 0x18, - 0x14, 0x98, 0x19, 0x73, 0x66, 0x21, 0x53, 0x6f, 0xd4, 0x8d, 0xe8, 0x7d, 0xee, 0x32, 0x64, 0xf5, - 0x66, 0xd3, 0x6c, 0x1c, 0xe0, 0x14, 0x03, 0x58, 0x28, 0x1a, 0x75, 0xda, 0xb2, 0x34, 0x2d, 0x69, - 0x9a, 0x8d, 0x5a, 0xa3, 0x65, 0x14, 0xd5, 0x4c, 0xde, 0x14, 0x4b, 0x58, 0x54, 0x7a, 0x34, 0x60, - 0x97, 0xa7, 0x45, 0xa3, 0xa4, 0xb7, 0xab, 0x2d, 0x3e, 0x44, 0x0f, 0x6d, 0xd3, 0xf8, 0x6c, 0xdb, - 0xb0, 0x5a, 0x96, 0xaa, 0x10, 0x15, 0x96, 0xeb, 0x86, 0x51, 0xb4, 0x6c, 0xd3, 0x38, 0xa8, 0x18, - 0x87, 0x6a, 0x8a, 0xd6, 0xc9, 0xfe, 0xd3, 0x37, 0xe4, 0xdf, 0x51, 0x80, 0xb0, 0x80, 0xca, 0x22, - 0x4b, 0x0f, 0xce, 0x98, 0x1d, 0xd8, 0x2a, 0xd3, 0xa1, 0xc6, 0x4f, 0xab, 0x35, 0x8a, 0xd1, 0x2e, - 0xbb, 0x08, 0x24, 0x52, 0xde, 0x28, 0x95, 0x54, 0x85, 0x6c, 0xc3, 0x85, 0x08, 0xbc, 0x68, 0x36, - 0x9a, 0x6a, 0x6a, 0x2b, 0x95, 0x55, 0xc8, 0xa5, 0x58, 0xe1, 0xbe, 0x61, 0x34, 0xd5, 0x34, 0x1d, - 0xa2, 0x48, 0x81, 0x58, 0x12, 0x8c, 0x3c, 0x93, 0xff, 0x86, 0x02, 0x17, 0x59, 0x33, 0xc5, 0xfa, - 0xf2, 0x9b, 0x7a, 0x19, 0x36, 0x79, 0x98, 0xf8, 0xa4, 0x86, 0x6e, 0x80, 0x1a, 0x2a, 0x65, 0xcd, - 0x7c, 0x09, 0xd6, 0x43, 0x50, 0x6c, 0x47, 0x8a, 0xee, 0x1e, 0x21, 0xf0, 0xae, 0x61, 0xb5, 0x6c, - 0xa3, 0x54, 0x6a, 0x98, 0x2d, 0xd6, 0x90, 0x74, 0x5e, 0x83, 0xf5, 0x82, 0x33, 0x1a, 0x53, 0xd1, - 0xab, 0xef, 0xb9, 0x83, 0x3e, 0x36, 0x61, 0x05, 0x96, 0x8c, 0xcf, 0xb5, 0x8c, 0xba, 0x55, 0x69, - 0xd4, 0xd5, 0xb9, 0xfc, 0xe5, 0x08, 0x8e, 0x58, 0xc7, 0x96, 0x55, 0x56, 0xe7, 0xf2, 0x1d, 0x58, - 0x11, 0x06, 0xe8, 0x6c, 0x56, 0xec, 0xc0, 0x96, 0x98, 0x6b, 0xb8, 0xa3, 0x44, 0x3f, 0x61, 0x13, - 0x36, 0xe2, 0xe5, 0x46, 0x4b, 0x55, 0xe8, 0x28, 0x44, 0x4a, 0x28, 0x3c, 0x95, 0xff, 0x0d, 0x05, - 0x56, 0xfc, 0x4b, 0x13, 0x54, 0xd3, 0x5e, 0x81, 0xed, 0x5a, 0x49, 0xb7, 0x8b, 0xc6, 0x41, 0xa5, - 0x60, 0xd8, 0xfb, 0x95, 0x7a, 0x31, 0xf2, 0x92, 0x97, 0xe1, 0xa5, 0x04, 0x04, 0x7c, 0xcb, 0x26, - 0x6c, 0x44, 0x8b, 0x5a, 0x74, 0xa9, 0xa6, 0x68, 0xd7, 0x47, 0x4b, 0xfc, 0x75, 0x9a, 0xce, 0xff, - 0x89, 0x02, 0x9b, 0xad, 0xd1, 0xc4, 0x1b, 0x3b, 0x5d, 0x7e, 0x7d, 0xc3, 0xf2, 0xe3, 0x60, 0x00, - 0xe9, 0x3c, 0xdc, 0x6c, 0x99, 0x6d, 0xab, 0x65, 0x14, 0x05, 0x39, 0x9d, 0xb4, 0x15, 0xd3, 0xa8, - 0x19, 0xf5, 0x56, 0xa4, 0x6d, 0x77, 0xe0, 0x03, 0x33, 0x70, 0xeb, 0x8d, 0x96, 0x78, 0xa6, 0x6b, - 0xf5, 0x03, 0x70, 0x6d, 0x06, 0xb2, 0x8f, 0x98, 0xca, 0x1f, 0xc0, 0xaa, 0xa5, 0xd7, 0xaa, 0xa5, - 0xc1, 0xe8, 0xc8, 0xd1, 0x27, 0xe3, 0xd3, 0x3e, 0xd9, 0x86, 0x4b, 0xa5, 0x86, 0x59, 0x30, 0x6c, - 0xfc, 0x82, 0x48, 0x23, 0x2e, 0xc0, 0x9a, 0x5c, 0xf8, 0xd0, 0xa0, 0xab, 0x8b, 0xc0, 0xaa, 0x0c, - 0xac, 0x37, 0xd4, 0x54, 0xfe, 0x0b, 0xb0, 0x1c, 0xca, 0x25, 0x78, 0x09, 0x2e, 0xc8, 0xcf, 0x4d, - 0xa7, 0xdf, 0x75, 0xfb, 0x27, 0xea, 0x5c, 0xb4, 0xc0, 0x9c, 0xf4, 0xfb, 0xb4, 0x00, 0xb7, 0x1b, - 0xb9, 0xa0, 0xe5, 0x8c, 0xce, 0xdc, 0x7e, 0x67, 0xec, 0x74, 0xd5, 0x54, 0xfe, 0x75, 0x58, 0x09, - 0x45, 0x30, 0xa7, 0xf3, 0xaa, 0xda, 0xe0, 0xe7, 0x43, 0xcd, 0x28, 0x56, 0xda, 0x35, 0x75, 0x9e, - 0x6e, 0x34, 0xe5, 0xca, 0x5e, 0x59, 0x85, 0xfc, 0xb7, 0x15, 0x2a, 0x06, 0x61, 0xbf, 0xd7, 0x4a, - 0xba, 0x98, 0x89, 0x74, 0x15, 0xb0, 0xbc, 0x08, 0x86, 0x65, 0x31, 0x2b, 0x8b, 0xcb, 0xb0, 0xc9, - 0x1f, 0x6c, 0xbd, 0x5e, 0xb4, 0xcb, 0xba, 0x59, 0x3c, 0xd4, 0x4d, 0xba, 0x34, 0x1e, 0xaa, 0x29, - 0x5c, 0xef, 0x12, 0xc4, 0x6e, 0x35, 0xda, 0x85, 0xb2, 0x9a, 0xa6, 0xcb, 0x2b, 0x04, 0x6f, 0x56, - 0xea, 0x6a, 0x06, 0x77, 0x8f, 0x18, 0x36, 0x56, 0x4b, 0xcb, 0xe7, 0xf3, 0xef, 0x29, 0x70, 0xc9, - 0x72, 0x4f, 0xfa, 0x9d, 0xf1, 0x64, 0xe4, 0xe8, 0xbd, 0x93, 0xc1, 0xc8, 0x1d, 0x9f, 0x9e, 0x59, - 0x13, 0x77, 0xec, 0x90, 0xdb, 0x70, 0xc3, 0xaa, 0xec, 0xd5, 0xf5, 0x16, 0x5d, 0xfd, 0x7a, 0x75, - 0xaf, 0x61, 0x56, 0x5a, 0xe5, 0x9a, 0x6d, 0xb5, 0x2b, 0xb1, 0x85, 0x71, 0x1d, 0x5e, 0x9d, 0x8e, - 0x5a, 0x35, 0xf6, 0xf4, 0xc2, 0x43, 0x55, 0x99, 0x5d, 0xe1, 0xae, 0x5e, 0xd5, 0xeb, 0x05, 0xa3, - 0x68, 0x1f, 0xdc, 0x55, 0x53, 0xe4, 0x06, 0x5c, 0x9d, 0x8e, 0x5a, 0xaa, 0x34, 0x2d, 0x8a, 0x96, - 0x9e, 0xfd, 0xde, 0xb2, 0x55, 0xa3, 0x58, 0x99, 0xfc, 0x1f, 0x2b, 0xb0, 0x39, 0x2d, 0x8c, 0x15, - 0xb9, 0x09, 0x9a, 0x51, 0x6f, 0x99, 0x7a, 0xa5, 0x68, 0x17, 0x4c, 0xa3, 0x68, 0xd4, 0x5b, 0x15, - 0xbd, 0x6a, 0xd9, 0x56, 0xa3, 0x4d, 0x67, 0x53, 0x60, 0x0c, 0x73, 0x0d, 0xae, 0xcc, 0xc0, 0x6b, - 0x54, 0x8a, 0x05, 0x55, 0x21, 0x77, 0xe1, 0xb5, 0x19, 0x48, 0xd6, 0x43, 0xab, 0x65, 0xd4, 0xe4, - 0x12, 0x35, 0x95, 0x2f, 0xc0, 0xd6, 0xf4, 0x38, 0x37, 0xf4, 0x14, 0x09, 0xf7, 0x74, 0x16, 0x32, - 0x45, 0x7a, 0x70, 0x85, 0xd2, 0x67, 0xe4, 0x5d, 0x50, 0xa3, 0xa1, 0x2a, 0x62, 0x56, 0x4b, 0x66, - 0xbb, 0x5e, 0x67, 0xa7, 0xdc, 0x1a, 0xe4, 0x1a, 0xad, 0xb2, 0x61, 0xf2, 0x04, 0x24, 0x98, 0x71, - 0xa4, 0x5d, 0xa7, 0x0b, 0xa7, 0x61, 0x56, 0x3e, 0x8f, 0xc7, 0xdd, 0x26, 0x6c, 0x58, 0x55, 0xbd, - 0xb0, 0x8f, 0x6b, 0xba, 0x52, 0xb7, 0x0b, 0x65, 0xbd, 0x5e, 0x37, 0xaa, 0x2a, 0x60, 0x67, 0x4e, - 0x73, 0x4f, 0x25, 0x1f, 0x84, 0x5b, 0x8d, 0xfd, 0x96, 0x6e, 0x37, 0xab, 0xed, 0xbd, 0x4a, 0xdd, - 0xb6, 0x1e, 0xd6, 0x0b, 0x82, 0x35, 0x2b, 0xc4, 0x4f, 0x84, 0x5b, 0x70, 0x7d, 0x26, 0x76, 0x90, - 0x2a, 0xe4, 0x26, 0x68, 0x33, 0x31, 0xf9, 0x87, 0xe4, 0x7f, 0xa8, 0xc0, 0xf6, 0x8c, 0x2b, 0x6e, - 0xf2, 0x1a, 0xdc, 0x2e, 0x1b, 0x7a, 0xb1, 0x6a, 0x58, 0x16, 0x6e, 0x14, 0x74, 0x18, 0x98, 0x75, - 0x53, 0xe2, 0x7e, 0x7f, 0x1b, 0x6e, 0xcc, 0x46, 0x0f, 0x38, 0x87, 0x5b, 0x70, 0x7d, 0x36, 0x2a, - 0xe7, 0x24, 0x52, 0x74, 0xbf, 0x9d, 0x8d, 0xe9, 0x73, 0x20, 0xe9, 0xfc, 0xef, 0x28, 0x70, 0x31, - 0x59, 0xcf, 0x44, 0xdb, 0x56, 0xa9, 0x5b, 0x2d, 0xbd, 0x5a, 0xb5, 0x9b, 0xba, 0xa9, 0xd7, 0x6c, - 0xa3, 0x6e, 0x36, 0xaa, 0xd5, 0xa4, 0x93, 0xf7, 0x3a, 0xbc, 0x3a, 0x1d, 0xd5, 0x2a, 0x98, 0x95, - 0x26, 0x3d, 0x5c, 0x34, 0xd8, 0x99, 0x8e, 0x65, 0x54, 0x0a, 0x86, 0x9a, 0xda, 0x7d, 0xeb, 0xfb, - 0xff, 0xb2, 0x33, 0xf7, 0xfd, 0xf7, 0x76, 0x94, 0x1f, 0xbd, 0xb7, 0xa3, 0xfc, 0xf3, 0x7b, 0x3b, - 0xca, 0xe7, 0xef, 0x9c, 0x2f, 0xcb, 0x16, 0x8a, 0x25, 0x8f, 0x16, 0x50, 0x80, 0x7a, 0xe3, 0x7f, - 0x02, 0x00, 0x00, 0xff, 0xff, 0xbc, 0xb9, 0x65, 0xe7, 0x39, 0xb3, 0x01, 0x00, + 0xf1, 0xff, 0xb1, 0xf7, 0x2c, 0x31, 0x6e, 0x24, 0xd7, 0x4d, 0x93, 0x9c, 0x11, 0xe7, 0x71, 0x3e, + 0x3d, 0x25, 0xad, 0x34, 0xab, 0xd1, 0x8e, 0x56, 0x2d, 0xad, 0x2c, 0x71, 0xbd, 0x6b, 0x4b, 0x1b, + 0x7b, 0xbd, 0xfe, 0xf7, 0x90, 0xcd, 0x21, 0x25, 0xfe, 0xdc, 0x4d, 0xce, 0x58, 0x5e, 0xdb, 0x9d, + 0x16, 0xd9, 0x33, 0xd3, 0x31, 0x87, 0xa4, 0xd9, 0xe4, 0xae, 0x65, 0x04, 0x48, 0x8c, 0x00, 0x36, + 0x90, 0x9f, 0x13, 0x27, 0x40, 0x8c, 0x20, 0x40, 0x0e, 0x31, 0x82, 0x1c, 0x72, 0x0d, 0x12, 0x24, + 0xb9, 0xf8, 0x66, 0xc0, 0x30, 0x60, 0x20, 0x37, 0x07, 0x58, 0x24, 0x0b, 0x24, 0x87, 0x24, 0xb7, + 0x20, 0x39, 0xf8, 0x14, 0xd4, 0xab, 0xaa, 0xee, 0xea, 0x0f, 0xa9, 0x19, 0x6b, 0x37, 0x89, 0x01, + 0x9f, 0xc8, 0x7e, 0xf5, 0x5e, 0x75, 0x75, 0x7d, 0xdf, 0x7b, 0xf5, 0x3e, 0x14, 0x3f, 0xa8, 0xf5, + 0xa2, 0x93, 0x04, 0xf2, 0x6f, 0xf8, 0x46, 0x46, 0x2c, 0xf5, 0x94, 0xe6, 0xa4, 0x4c, 0x6b, 0x25, + 0x6d, 0x5a, 0x9f, 0x7d, 0x4d, 0x35, 0x81, 0xc8, 0x9b, 0x15, 0xd3, 0x7a, 0x72, 0x83, 0x2a, 0xc1, + 0xa7, 0xf3, 0x86, 0x48, 0x5b, 0x83, 0xc5, 0x92, 0x69, 0x6e, 0xf5, 0xe2, 0x20, 0xb2, 0x03, 0xab, + 0x41, 0xbe, 0x6a, 0x7e, 0x70, 0xe4, 0x19, 0xa0, 0xd6, 0x27, 0x2f, 0xc2, 0x1a, 0x63, 0xc9, 0x23, + 0x6b, 0x0e, 0x10, 0xa6, 0xd3, 0x85, 0x27, 0xfa, 0x40, 0x81, 0x17, 0x9f, 0xd6, 0x87, 0xe4, 0x10, + 0x2e, 0xa3, 0x59, 0x87, 0x3f, 0x0a, 0x86, 0xc1, 0xee, 0x39, 0xbd, 0x13, 0x97, 0xcf, 0x5a, 0x2d, + 0x75, 0x30, 0xc6, 0x63, 0xcb, 0x6a, 0x49, 0xe3, 0x30, 0x1e, 0x5b, 0xfe, 0x48, 0x3c, 0x97, 0x28, + 0x39, 0x6f, 0x43, 0x1f, 0x76, 0x16, 0x50, 0x4a, 0x1b, 0x87, 0x22, 0x6f, 0x1c, 0x77, 0x40, 0x3d, + 0x72, 0xfb, 0x94, 0x27, 0x76, 0xfb, 0xd8, 0xb4, 0xb7, 0xee, 0xb3, 0x0c, 0xed, 0xe6, 0x46, 0x00, + 0xb7, 0xfc, 0xd1, 0xc1, 0x7d, 0xfe, 0x96, 0x53, 0x71, 0xe4, 0xc9, 0x62, 0x05, 0x79, 0x15, 0x2e, + 0xc6, 0x02, 0x8e, 0x84, 0x1e, 0xec, 0xe6, 0x16, 0x2d, 0x8a, 0x86, 0xa7, 0xba, 0x01, 0x6b, 0x62, + 0x56, 0x4c, 0x02, 0x3f, 0x38, 0xb3, 0xc0, 0x61, 0x74, 0xd5, 0xf1, 0xd7, 0xcd, 0xc4, 0x47, 0xa5, + 0x4a, 0x24, 0x67, 0xe0, 0xa5, 0xc9, 0x2b, 0x40, 0x02, 0xbe, 0x3d, 0xd8, 0x28, 0xf8, 0x0b, 0xb7, + 0x44, 0x49, 0xb0, 0xc2, 0xf9, 0x6b, 0xff, 0x3e, 0x03, 0x17, 0x53, 0x44, 0x19, 0x2a, 0x04, 0x78, + 0xc3, 0xa9, 0x7b, 0xcc, 0x44, 0x08, 0xf9, 0x23, 0x37, 0x25, 0x38, 0xd7, 0x4f, 0xad, 0xb0, 0x0c, + 0xe4, 0xfc, 0x5d, 0xfc, 0x89, 0x6e, 0x1e, 0xce, 0x44, 0xa8, 0x5e, 0xe8, 0x5f, 0x52, 0x83, 0x2d, + 0x4c, 0xab, 0xe0, 0x7b, 0x23, 0xcc, 0xce, 0x80, 0x4c, 0x48, 0x2e, 0x22, 0xec, 0x60, 0x2b, 0xda, + 0x12, 0x12, 0xe5, 0x42, 0x4c, 0x75, 0x1c, 0x83, 0x90, 0x4f, 0xc0, 0x55, 0xe9, 0xac, 0xb1, 0x63, + 0x2b, 0x0f, 0x2d, 0xdd, 0xcd, 0x2b, 0x4e, 0x70, 0xea, 0x94, 0x23, 0x6b, 0x70, 0x0f, 0x76, 0x71, + 0x10, 0xbd, 0xfe, 0xd8, 0x4e, 0xe4, 0xe1, 0xc0, 0x4f, 0x65, 0x81, 0xeb, 0xaf, 0x52, 0xac, 0x5a, + 0x7f, 0x1c, 0x4b, 0xc9, 0x41, 0xbf, 0x9a, 0x77, 0xdf, 0x9b, 0xf0, 0x5c, 0x6a, 0x8b, 0xe9, 0x01, + 0x83, 0x86, 0x54, 0x21, 0x6f, 0x74, 0x81, 0x3e, 0x53, 0xe6, 0xe8, 0x06, 0xac, 0x3d, 0x76, 0x9d, + 0x89, 0x3b, 0xe1, 0x27, 0x37, 0x9f, 0x12, 0x0c, 0x26, 0x1f, 0xdc, 0xfd, 0xe8, 0xd0, 0x70, 0x9d, + 0x11, 0x69, 0xc0, 0x45, 0x76, 0x02, 0x7a, 0xa7, 0xc8, 0x0c, 0x72, 0x3d, 0x93, 0x12, 0x61, 0x87, + 0x90, 0x04, 0x8f, 0xa6, 0x1a, 0x62, 0x31, 0x6a, 0x73, 0xeb, 0x38, 0x0e, 0xa2, 0x2b, 0xfa, 0x72, + 0x3a, 0x36, 0xd9, 0x83, 0x02, 0xab, 0x9c, 0x89, 0x05, 0xec, 0x82, 0xe0, 0xc6, 0xc2, 0x37, 0x94, + 0xd0, 0xbe, 0xd8, 0x0f, 0xfe, 0xd3, 0xf3, 0x1a, 0xef, 0x62, 0xed, 0x53, 0xf9, 0xfe, 0xc3, 0x5c, + 0x43, 0x20, 0xbf, 0xf7, 0xd0, 0xfe, 0x41, 0x11, 0x9f, 0x1a, 0x11, 0x8e, 0xe9, 0xd4, 0xf2, 0xdd, + 0xa1, 0xb8, 0x03, 0x5a, 0x35, 0xf9, 0xd3, 0x39, 0xa7, 0x3a, 0x79, 0x1d, 0xd6, 0x68, 0xb5, 0xc7, + 0xb3, 0x21, 0x9b, 0x72, 0xd9, 0x48, 0xa0, 0x9d, 0x06, 0x2b, 0xa2, 0xc3, 0x56, 0x5d, 0x32, 0x0b, + 0xa7, 0xe1, 0x23, 0xe5, 0x96, 0xfd, 0xd3, 0xe9, 0x58, 0x9e, 0xa8, 0x42, 0x51, 0x68, 0x35, 0x3a, + 0x6d, 0x4e, 0x92, 0xa7, 0x38, 0x21, 0xb7, 0xbc, 0xb7, 0xc2, 0x54, 0x85, 0xda, 0xcb, 0x50, 0x90, + 0xea, 0xa6, 0x1f, 0xc3, 0x3c, 0x67, 0xc4, 0xc7, 0xb0, 0x27, 0x3e, 0xd8, 0x8f, 0x21, 0x2f, 0xaa, + 0xa4, 0x62, 0xc1, 0xc9, 0xc8, 0x17, 0x8b, 0x1c, 0xff, 0x53, 0x18, 0xed, 0x65, 0xfc, 0xc8, 0x65, + 0x13, 0xff, 0xe3, 0x59, 0x32, 0x75, 0xa8, 0x3c, 0x30, 0xf0, 0xed, 0x31, 0x5a, 0x60, 0x05, 0xcc, + 0x33, 0x85, 0x77, 0x06, 0x3e, 0xb3, 0xcb, 0xe2, 0xef, 0xf8, 0x9b, 0xe0, 0x10, 0x8e, 0x69, 0x13, + 0xe6, 0xed, 0x99, 0x91, 0x23, 0x23, 0x93, 0x3c, 0x32, 0x58, 0x00, 0x15, 0x4e, 0xc9, 0xde, 0x0c, + 0x08, 0xc3, 0x23, 0x43, 0xda, 0x19, 0x72, 0x91, 0x9d, 0x41, 0x92, 0xc9, 0xc3, 0xd1, 0x63, 0x27, + 0x8e, 0x90, 0xc9, 0xe3, 0xfb, 0xd4, 0x9f, 0x67, 0x84, 0x8a, 0x60, 0x6f, 0x34, 0x9a, 0xfa, 0xd3, + 0x89, 0x33, 0x8e, 0xa8, 0x42, 0xc9, 0x29, 0x3c, 0x8f, 0x1c, 0xf4, 0x7d, 0x4c, 0x61, 0x31, 0x9a, + 0x88, 0x98, 0x1d, 0xc1, 0xcc, 0x2d, 0xdc, 0xff, 0x50, 0x94, 0xc7, 0xd7, 0x29, 0xb6, 0x2e, 0x23, + 0xd3, 0x09, 0x2b, 0xd5, 0x5a, 0x5d, 0x32, 0xaf, 0xb0, 0x3a, 0x13, 0x58, 0xa4, 0x9a, 0xb2, 0x88, + 0xe3, 0xba, 0xd0, 0xbd, 0x70, 0x45, 0x47, 0x6b, 0x95, 0xd7, 0x3a, 0xf9, 0x34, 0xac, 0x7a, 0x7d, + 0x39, 0x53, 0x63, 0x5c, 0x0b, 0x57, 0xeb, 0xb3, 0x68, 0xd1, 0x61, 0x1d, 0x74, 0xce, 0x79, 0x1c, + 0xba, 0xb7, 0x1e, 0x51, 0x1a, 0x6b, 0x7b, 0x42, 0x1a, 0x4d, 0x92, 0x91, 0x0d, 0xc8, 0x04, 0x23, + 0x9c, 0xf1, 0xfa, 0x6c, 0x79, 0x85, 0xf1, 0xaa, 0x4d, 0xfe, 0xa4, 0xfd, 0x2a, 0xdc, 0x39, 0x6b, + 0x1f, 0xd1, 0xa5, 0x38, 0xa7, 0xc3, 0x57, 0xcd, 0x2d, 0x27, 0xd1, 0x6f, 0x37, 0x40, 0x0e, 0xb7, + 0xeb, 0x89, 0xcd, 0x4f, 0xc0, 0xba, 0x13, 0x4f, 0xfb, 0xeb, 0x2c, 0x6c, 0x44, 0xd5, 0xe4, 0xe4, + 0x65, 0xc8, 0x49, 0x3b, 0xd0, 0x95, 0x14, 0x5d, 0x3a, 0xee, 0x3b, 0x88, 0x74, 0xa6, 0x1d, 0x87, + 0x3c, 0x80, 0x0d, 0x34, 0xdc, 0x43, 0xd6, 0x73, 0xea, 0xf1, 0xcb, 0x97, 0xc5, 0xf7, 0x67, 0xf9, + 0x1f, 0xbc, 0x73, 0x7d, 0x09, 0xaf, 0xca, 0xd6, 0x28, 0x2d, 0xe5, 0xfe, 0x68, 0xa1, 0xa4, 0x05, + 0xcd, 0xcd, 0xd7, 0x82, 0xf2, 0x4f, 0x99, 0xa3, 0x05, 0x5d, 0x5e, 0xa0, 0x05, 0x0d, 0x29, 0x65, + 0x2d, 0x28, 0xea, 0xc2, 0x2f, 0xcc, 0xd3, 0x85, 0x87, 0x34, 0x4c, 0x17, 0x1e, 0x6a, 0x31, 0xf3, + 0x73, 0xb5, 0x98, 0x21, 0x0d, 0xd7, 0x62, 0xde, 0xe2, 0x7d, 0x34, 0x71, 0xde, 0xb6, 0xb1, 0xf3, + 0xf8, 0xb1, 0x88, 0x5f, 0x6f, 0x3a, 0x6f, 0xa3, 0x71, 0xcd, 0xde, 0x2a, 0x08, 0x8b, 0x1c, 0xed, + 0x0f, 0x94, 0x98, 0x26, 0x50, 0x8c, 0xdf, 0x4b, 0xb0, 0xc1, 0x0e, 0x2b, 0xb7, 0x2f, 0xc9, 0x9a, + 0xeb, 0xe6, 0xba, 0x80, 0x32, 0x79, 0xf3, 0x03, 0xb0, 0x19, 0xa0, 0x71, 0x91, 0x0b, 0x3d, 0xf5, + 0xcc, 0x80, 0x9a, 0x87, 0x9d, 0x79, 0x19, 0xb6, 0x02, 0x44, 0xae, 0xcd, 0x61, 0xe2, 0xe6, 0xba, + 0xa9, 0x8a, 0x82, 0x36, 0x87, 0x6b, 0xc7, 0x71, 0xc9, 0xe3, 0x7d, 0x6a, 0x95, 0xf6, 0xfd, 0x6c, + 0x44, 0x4b, 0x22, 0x5e, 0x43, 0x4f, 0x51, 0x7f, 0x64, 0xf3, 0x4e, 0xe2, 0x7b, 0xd1, 0x8d, 0x39, + 0x63, 0xc6, 0x6d, 0x9a, 0x2c, 0xab, 0x65, 0x82, 0xef, 0x8f, 0x84, 0x89, 0x93, 0xcd, 0x38, 0x6a, + 0x76, 0xee, 0xe3, 0x9c, 0x15, 0xd5, 0xb1, 0x8d, 0xa7, 0xb8, 0xb8, 0x3a, 0x21, 0xa6, 0xd2, 0x29, + 0x8b, 0x9c, 0x75, 0xf0, 0x24, 0x5e, 0xd0, 0x05, 0x54, 0x2a, 0xfa, 0xd1, 0xca, 0xb3, 0x29, 0xb2, + 0x53, 0xa2, 0x72, 0xec, 0x25, 0xac, 0x59, 0x9d, 0x89, 0xbf, 0xa2, 0x5a, 0x03, 0xd6, 0x50, 0x47, + 0x21, 0x2a, 0xcc, 0xa5, 0xa8, 0xe0, 0x93, 0x1f, 0x5f, 0xaa, 0x35, 0xcc, 0x02, 0xa5, 0x13, 0xd5, + 0x9c, 0xc0, 0xf3, 0xb2, 0x66, 0x21, 0xda, 0xc8, 0x65, 0x11, 0x45, 0x77, 0x61, 0x0f, 0x84, 0x0a, + 0x08, 0x6c, 0xea, 0x65, 0x27, 0x0a, 0xe0, 0x68, 0xda, 0x09, 0x5c, 0x9d, 0x3f, 0x24, 0x0b, 0x32, + 0x34, 0x85, 0x07, 0x68, 0x46, 0x3e, 0x40, 0x65, 0x3d, 0x43, 0x36, 0xa2, 0x67, 0xd0, 0xfe, 0x2c, + 0x0b, 0x37, 0xcf, 0x30, 0x5c, 0x0b, 0xde, 0xf9, 0xd9, 0x28, 0x7b, 0x96, 0x89, 0x48, 0x86, 0xb4, + 0x52, 0xbe, 0x41, 0x52, 0x29, 0x35, 0x9d, 0x39, 0xfb, 0x65, 0xd8, 0x64, 0xbb, 0x20, 0x33, 0x4b, + 0x3c, 0x9a, 0x0d, 0xce, 0xb0, 0x0d, 0xee, 0x08, 0x1f, 0xaa, 0x18, 0x29, 0xee, 0x8c, 0xb8, 0x63, + 0x58, 0x01, 0x8c, 0x74, 0xa0, 0x80, 0x68, 0x47, 0x8e, 0x37, 0x38, 0x93, 0x33, 0x8f, 0xf0, 0xd0, + 0x92, 0xc9, 0x98, 0x35, 0x35, 0x05, 0x54, 0xf0, 0x99, 0xdc, 0x86, 0xcd, 0xe1, 0xec, 0x94, 0x32, + 0x1e, 0x6c, 0x2e, 0x70, 0xeb, 0x8f, 0x65, 0x73, 0x7d, 0x38, 0x3b, 0xd5, 0xc7, 0x63, 0x1c, 0x52, + 0x34, 0x13, 0xd9, 0xa2, 0x78, 0x6c, 0xd5, 0x0a, 0xcc, 0x15, 0xc4, 0xa4, 0x15, 0xb0, 0x75, 0xcb, + 0x71, 0x2f, 0x01, 0x33, 0x1a, 0xe4, 0x19, 0xaa, 0xd8, 0x83, 0xf6, 0xdf, 0x19, 0x21, 0xef, 0xce, + 0x9f, 0xf7, 0xbf, 0x18, 0xa2, 0x94, 0x21, 0xba, 0x03, 0x2a, 0xed, 0xfa, 0x70, 0x53, 0x09, 0xc6, + 0x68, 0x63, 0x38, 0x3b, 0x0d, 0xfa, 0x4e, 0xee, 0xf8, 0x15, 0xb9, 0xe3, 0x5f, 0x17, 0xf2, 0x70, + 0xea, 0xf6, 0x30, 0xbf, 0xcb, 0xb5, 0xff, 0xc8, 0xc2, 0xed, 0xb3, 0x6d, 0x02, 0xbf, 0x18, 0xb7, + 0x94, 0x71, 0x8b, 0xa9, 0x4e, 0x97, 0x13, 0xaa, 0xd3, 0x94, 0xb5, 0xb7, 0x92, 0xb6, 0xf6, 0x12, + 0x8a, 0xda, 0x0b, 0x29, 0x8a, 0xda, 0xd4, 0x05, 0x9a, 0x7f, 0xca, 0x02, 0x5d, 0x95, 0xe7, 0xc9, + 0xbf, 0x06, 0x0a, 0x8c, 0xa8, 0x3c, 0xf0, 0x26, 0x5c, 0x14, 0xf2, 0x00, 0x3b, 0x39, 0x42, 0xfd, + 0x7b, 0xe1, 0xfe, 0xdd, 0x34, 0x49, 0x00, 0xd1, 0x52, 0xb8, 0xf5, 0x2d, 0x2e, 0x03, 0x84, 0xe5, + 0xff, 0x7f, 0xb8, 0x7f, 0xf2, 0x08, 0x2e, 0x63, 0x7c, 0xf7, 0x9e, 0x7c, 0x73, 0x60, 0x4f, 0xdc, + 0x23, 0x3e, 0x1f, 0x6e, 0x24, 0x78, 0x65, 0xaf, 0x27, 0x35, 0xc7, 0x74, 0x8f, 0xaa, 0x4b, 0xe6, + 0x25, 0x3f, 0x05, 0x1e, 0x17, 0x2c, 0xfe, 0x52, 0x01, 0xed, 0xe9, 0xfd, 0x85, 0x8a, 0xaa, 0x78, + 0x87, 0xaf, 0x9a, 0x05, 0x47, 0xea, 0xbd, 0x9b, 0xb0, 0x3e, 0x71, 0x8f, 0x26, 0xae, 0x7f, 0x12, + 0xd1, 0x80, 0xac, 0x71, 0xa0, 0xe8, 0x18, 0x11, 0x65, 0xf2, 0x5c, 0x9c, 0xb9, 0x20, 0xd2, 0x2a, + 0x81, 0xbc, 0x98, 0x3a, 0x0e, 0x74, 0x36, 0xc9, 0x0d, 0x64, 0x0f, 0x0f, 0x72, 0xf9, 0x8c, 0x9a, + 0x35, 0x79, 0x2c, 0xcc, 0x23, 0x6f, 0xe0, 0x6a, 0x7f, 0xab, 0x08, 0x8e, 0x20, 0xad, 0xf3, 0xc8, + 0x9b, 0x92, 0x31, 0x6f, 0x36, 0xc1, 0x86, 0xa4, 0x91, 0xc8, 0x76, 0x8f, 0x3c, 0x3c, 0x23, 0x02, + 0x22, 0xe1, 0x19, 0x11, 0xf2, 0x0c, 0x16, 0x89, 0x5c, 0x6a, 0x7e, 0x43, 0x58, 0x04, 0xd1, 0x3d, + 0xef, 0xe0, 0x1e, 0xb9, 0x0b, 0x17, 0x98, 0x11, 0x90, 0x68, 0xee, 0x66, 0xa4, 0xb9, 0x07, 0xf7, + 0x4c, 0x51, 0xae, 0x7d, 0x37, 0xb8, 0xd7, 0x4a, 0x7c, 0xc4, 0xc1, 0x3d, 0xf2, 0xfa, 0xd9, 0x8c, + 0x73, 0xf3, 0xc2, 0x38, 0x37, 0x30, 0xcc, 0xfd, 0x58, 0xc4, 0x30, 0xf7, 0xd6, 0xe2, 0xde, 0xe2, + 0xb7, 0x91, 0x2c, 0x1c, 0x61, 0x18, 0xa6, 0xea, 0x27, 0x19, 0x78, 0x61, 0x21, 0x05, 0xb9, 0x06, + 0x79, 0xbd, 0x5d, 0xeb, 0x84, 0xe3, 0x4b, 0xd7, 0x8c, 0x80, 0x90, 0x7d, 0x58, 0xdd, 0x73, 0x7c, + 0xaf, 0x47, 0xa7, 0x71, 0xea, 0xf5, 0x40, 0xa2, 0xda, 0x00, 0xbd, 0xba, 0x64, 0x86, 0xb4, 0xc4, + 0x86, 0x2d, 0x5c, 0x0b, 0x91, 0xd4, 0x4f, 0xd9, 0x14, 0x5d, 0x43, 0xa2, 0xc2, 0x04, 0x19, 0xdd, + 0x67, 0x12, 0x40, 0xf2, 0x18, 0x88, 0x65, 0x55, 0x4b, 0xee, 0x64, 0xca, 0x65, 0xf0, 0xa9, 0x17, + 0x58, 0x7a, 0x7e, 0xf8, 0x29, 0x7d, 0x97, 0xa0, 0xab, 0x2e, 0x99, 0x29, 0xb5, 0xc5, 0x97, 0xf9, + 0x5b, 0x82, 0xdf, 0x99, 0xdf, 0x09, 0xe7, 0x88, 0xdd, 0x7a, 0x07, 0xf2, 0x6d, 0x61, 0x8b, 0x20, + 0x59, 0xcc, 0x0b, 0xbb, 0x03, 0x33, 0x28, 0xd5, 0x7e, 0x5b, 0x11, 0x4a, 0x87, 0xa7, 0x77, 0x96, + 0x94, 0x99, 0xab, 0xbf, 0x38, 0x33, 0x57, 0xff, 0x67, 0xcc, 0xcc, 0xa5, 0x79, 0x70, 0xf7, 0xcc, + 0x1d, 0x4b, 0x3e, 0x09, 0x2a, 0x26, 0x31, 0x72, 0xa4, 0x41, 0x62, 0xeb, 0x6b, 0x2b, 0x08, 0xe6, + 0x5d, 0xe5, 0x99, 0xe2, 0xcc, 0xcd, 0x5e, 0x94, 0x5a, 0xfb, 0x0b, 0x1e, 0xc4, 0xbd, 0xd6, 0x6f, + 0xc7, 0x14, 0xcd, 0xcf, 0xea, 0x64, 0x61, 0x44, 0x16, 0xdb, 0x4d, 0x29, 0x89, 0x64, 0xf2, 0x5d, + 0xf3, 0x7d, 0x2d, 0xa4, 0x95, 0xf7, 0x47, 0x59, 0xb8, 0xb6, 0x88, 0x3c, 0x35, 0x4d, 0xb5, 0x72, + 0xbe, 0x34, 0xd5, 0x77, 0x21, 0xcf, 0x60, 0x81, 0x07, 0x01, 0x8e, 0x2d, 0x27, 0xa5, 0x63, 0x2b, + 0x8a, 0xc9, 0x4d, 0x58, 0xd1, 0x4b, 0x56, 0x98, 0x39, 0x0d, 0x4d, 0x7d, 0x9d, 0x9e, 0x8f, 0x46, + 0xa4, 0xbc, 0x88, 0x7c, 0x39, 0x99, 0x2c, 0x90, 0xa7, 0x4c, 0xdb, 0x91, 0x3a, 0x24, 0x91, 0x5f, + 0x01, 0xdb, 0x1b, 0xe6, 0x03, 0xe0, 0x21, 0xb6, 0xcd, 0x64, 0xe2, 0x41, 0x0d, 0x56, 0xda, 0x13, + 0xd7, 0x77, 0xa7, 0xb2, 0x19, 0xee, 0x18, 0x21, 0x26, 0x2f, 0xe1, 0x46, 0xb2, 0xce, 0x13, 0x16, + 0x13, 0x61, 0x45, 0x8e, 0x53, 0x83, 0x56, 0xb5, 0x14, 0x6c, 0x4a, 0x28, 0x94, 0xa0, 0xee, 0xcc, + 0x86, 0xbd, 0x93, 0xae, 0x59, 0xe7, 0x9c, 0x13, 0x23, 0x18, 0x20, 0x94, 0x7e, 0xa0, 0x6f, 0x4a, + 0x28, 0xda, 0xb7, 0x14, 0xb8, 0x94, 0xf6, 0x1d, 0xe4, 0x1a, 0xe4, 0x86, 0xa9, 0x79, 0x11, 0x87, + 0xcc, 0x95, 0xbb, 0x40, 0x7f, 0xed, 0xa3, 0xd1, 0xe4, 0xd4, 0x99, 0xca, 0xc6, 0xca, 0x12, 0xd8, + 0x04, 0xfa, 0x50, 0xc1, 0xff, 0xe4, 0xba, 0x38, 0x72, 0xb2, 0x89, 0x4c, 0x8a, 0xf8, 0xa3, 0xe9, + 0x00, 0xb5, 0x7e, 0xbb, 0x35, 0x66, 0xf1, 0xfd, 0x5f, 0x83, 0x1c, 0x6d, 0x56, 0x6c, 0xf6, 0xd2, + 0xf9, 0xa3, 0x37, 0xea, 0x1c, 0x89, 0xb5, 0xca, 0x77, 0x4e, 0x07, 0x26, 0x22, 0x6b, 0x87, 0xb0, + 0x11, 0xc5, 0x20, 0x46, 0x34, 0x22, 0x6c, 0xe1, 0xbe, 0xca, 0x6b, 0xda, 0x1b, 0x8d, 0x98, 0xc3, + 0xcc, 0xde, 0xf3, 0x3f, 0x79, 0xe7, 0x3a, 0xd0, 0x47, 0x46, 0x93, 0x16, 0x31, 0x56, 0xfb, 0x76, + 0x06, 0x2e, 0x85, 0x3e, 0xfa, 0x62, 0x0d, 0xfd, 0xdc, 0x3a, 0x8c, 0xea, 0x11, 0x87, 0x46, 0xc1, + 0x37, 0x26, 0x3f, 0x70, 0x81, 0x1f, 0xd5, 0x3e, 0x6c, 0xcf, 0xc3, 0x27, 0x2f, 0xc3, 0x2a, 0x86, + 0x75, 0x1a, 0x3b, 0x3d, 0x57, 0xde, 0x66, 0x87, 0x02, 0x68, 0x86, 0xe5, 0xda, 0x8f, 0x14, 0xb8, + 0xca, 0xdd, 0x3c, 0x1a, 0x8e, 0x37, 0xc4, 0x5b, 0x82, 0x9e, 0xfb, 0xde, 0x38, 0x3c, 0xef, 0x47, + 0xf6, 0xb1, 0x97, 0xa2, 0xde, 0x3c, 0x89, 0xb7, 0xcd, 0xff, 0x5a, 0x72, 0x17, 0x43, 0x95, 0xf1, + 0x5b, 0xf4, 0x1c, 0x0b, 0x30, 0x31, 0xa4, 0x00, 0x39, 0xc0, 0x04, 0x62, 0x68, 0xbf, 0x06, 0xbb, + 0x8b, 0x5f, 0x40, 0xbe, 0x04, 0xeb, 0x98, 0xfb, 0xaa, 0x3b, 0x3e, 0x9e, 0x38, 0x7d, 0x57, 0x68, + 0xf6, 0x84, 0x36, 0x56, 0x2e, 0x63, 0x91, 0xd7, 0x78, 0xc0, 0x83, 0x63, 0xcc, 0xaa, 0xc5, 0x89, + 0x22, 0xbe, 0x54, 0x72, 0x6d, 0xda, 0xaf, 0x2b, 0x40, 0x92, 0x75, 0x90, 0x8f, 0xc2, 0x5a, 0xb7, + 0x53, 0xb2, 0xa6, 0xce, 0x64, 0x5a, 0x1d, 0xcd, 0x26, 0x3c, 0xec, 0x19, 0xf3, 0x7f, 0x9f, 0xf6, + 0x6c, 0x76, 0x1f, 0x74, 0x32, 0x9a, 0x4d, 0xcc, 0x08, 0x1e, 0x26, 0x6d, 0x72, 0xdd, 0xaf, 0xf4, + 0x9d, 0x27, 0xd1, 0xa4, 0x4d, 0x1c, 0x16, 0x49, 0xda, 0xc4, 0x61, 0xda, 0xf7, 0x14, 0xd8, 0x11, + 0xc6, 0x91, 0xfd, 0x94, 0xb6, 0x94, 0x30, 0xca, 0xcb, 0x44, 0xc4, 0xd9, 0x5d, 0xc4, 0xa1, 0x6f, + 0x89, 0x40, 0x48, 0xd8, 0x40, 0x64, 0xd5, 0x19, 0x2d, 0xf9, 0x2c, 0xe4, 0xac, 0xe9, 0x68, 0x7c, + 0x86, 0x48, 0x48, 0x6a, 0x30, 0xa2, 0xd3, 0xd1, 0x18, 0xab, 0x40, 0x4a, 0xcd, 0x85, 0x4b, 0x72, + 0xe3, 0x44, 0x8b, 0x49, 0x03, 0x2e, 0xf0, 0x90, 0x77, 0x31, 0xbb, 0x83, 0x05, 0xdf, 0xb4, 0xb7, + 0x29, 0xc2, 0x2d, 0xf1, 0x38, 0xaf, 0xa6, 0xa8, 0x43, 0xfb, 0x5d, 0x05, 0x0a, 0x94, 0xb1, 0x41, + 0xa1, 0xf4, 0x59, 0xa7, 0x74, 0x94, 0x0f, 0x16, 0x66, 0x34, 0x41, 0xf5, 0x67, 0x3a, 0x8d, 0x3f, + 0x02, 0x9b, 0x31, 0x02, 0xa2, 0x61, 0xa0, 0x8d, 0x81, 0xd7, 0x73, 0x58, 0x0e, 0x18, 0x66, 0x82, + 0x12, 0x81, 0x69, 0xbf, 0xa9, 0xc0, 0xa5, 0xd6, 0x57, 0xa6, 0x0e, 0xbb, 0xb6, 0x35, 0x67, 0x03, + 0xb1, 0xde, 0x29, 0xb3, 0x26, 0xac, 0x6c, 0x59, 0x10, 0x00, 0xc6, 0xac, 0x71, 0x98, 0x19, 0x94, + 0x92, 0x2a, 0xe4, 0xf9, 0xf9, 0xe2, 0xf3, 0xf0, 0xac, 0xbb, 0x92, 0x6e, 0x24, 0xac, 0x98, 0x23, + 0xd1, 0x2f, 0xc1, 0x2d, 0x8c, 0xd3, 0x98, 0x01, 0xb5, 0xf6, 0x9f, 0x0a, 0x5c, 0x99, 0x43, 0x43, + 0x3e, 0x05, 0xcb, 0xe8, 0xa0, 0xc8, 0x47, 0xef, 0xda, 0x9c, 0x57, 0x4c, 0x7b, 0x27, 0x07, 0xf7, + 0xd8, 0x41, 0x74, 0x4a, 0x1f, 0x4c, 0x46, 0x45, 0xde, 0x84, 0x55, 0xbd, 0xdf, 0xe7, 0xd2, 0x59, + 0x26, 0x22, 0x9d, 0xcd, 0x79, 0xe3, 0xab, 0x01, 0x3e, 0x93, 0xce, 0x98, 0xab, 0x4c, 0xbf, 0x6f, + 0x73, 0xe7, 0xcb, 0xb0, 0xbe, 0xab, 0x9f, 0x84, 0x8d, 0x28, 0xf2, 0xb9, 0xfc, 0xc5, 0xbe, 0xab, + 0x80, 0x1a, 0x6d, 0xc3, 0xfb, 0x13, 0x28, 0x2a, 0x6d, 0x98, 0x9f, 0x32, 0xa9, 0x7e, 0x3f, 0x03, + 0xcf, 0xa5, 0xf6, 0x30, 0x79, 0x05, 0x56, 0xf4, 0xf1, 0xb8, 0x56, 0xe6, 0xb3, 0x8a, 0x73, 0x48, + 0xa8, 0xf4, 0x8e, 0x08, 0xaf, 0x0c, 0x89, 0xbc, 0x06, 0x79, 0x66, 0x1d, 0x50, 0x16, 0x1b, 0x0e, + 0x46, 0xbe, 0xe1, 0xa6, 0x0b, 0xd1, 0x40, 0xa9, 0x02, 0x91, 0x54, 0x60, 0x83, 0xc7, 0x8c, 0x31, + 0xdd, 0x63, 0xf7, 0x6b, 0x41, 0xc4, 0x7e, 0x4c, 0x2a, 0x20, 0x34, 0xe9, 0xf6, 0x84, 0x95, 0xc9, + 0x51, 0x53, 0xa2, 0x54, 0xa4, 0x0e, 0x2a, 0xd6, 0x29, 0xd7, 0xc4, 0xa2, 0xb5, 0x62, 0x14, 0x1f, + 0xd6, 0x88, 0x39, 0x75, 0x25, 0x28, 0x83, 0xe1, 0xd2, 0x7d, 0xdf, 0x3b, 0x1e, 0x9e, 0xba, 0xc3, + 0xe9, 0xfb, 0x37, 0x5c, 0xe1, 0x3b, 0xce, 0x34, 0x5c, 0x7f, 0x98, 0x63, 0x8b, 0x39, 0x4e, 0x46, + 0x39, 0x1a, 0x29, 0x40, 0x37, 0x72, 0x34, 0x54, 0x3e, 0xe3, 0x51, 0x51, 0xca, 0x70, 0x81, 0x45, + 0xab, 0x11, 0x2b, 0xe3, 0x85, 0xd4, 0x26, 0x30, 0x9c, 0x83, 0x7b, 0x8c, 0x7d, 0x61, 0x9e, 0x92, + 0xbe, 0x29, 0x48, 0xc9, 0x01, 0x14, 0x4a, 0x03, 0xd7, 0x19, 0xce, 0xc6, 0x9d, 0xb3, 0xdd, 0xa0, + 0x6e, 0xf3, 0x6f, 0x59, 0xeb, 0x31, 0x32, 0xbc, 0x79, 0xc5, 0x9d, 0x5c, 0xae, 0x88, 0x74, 0x02, + 0xe7, 0xa9, 0x1c, 0x2a, 0x5e, 0x3f, 0xbc, 0xa0, 0x7f, 0xe2, 0x40, 0xa4, 0x8b, 0x7a, 0x06, 0x72, + 0xef, 0x2a, 0x1b, 0x36, 0xea, 0x8e, 0x3f, 0xed, 0x4c, 0x9c, 0xa1, 0x8f, 0x51, 0x2e, 0xcf, 0x10, + 0x05, 0x6c, 0x47, 0x64, 0x50, 0x46, 0x95, 0xe9, 0x34, 0x20, 0x65, 0x0a, 0xd9, 0x68, 0x75, 0x94, + 0x5f, 0xaa, 0x78, 0x43, 0x67, 0xe0, 0x7d, 0x5d, 0xf8, 0x98, 0x32, 0x7e, 0xe9, 0x48, 0x00, 0xcd, + 0xb0, 0x5c, 0xfb, 0x62, 0x62, 0xdc, 0x58, 0x2b, 0x0b, 0x70, 0x81, 0x47, 0x20, 0x60, 0x1e, 0xf9, + 0x6d, 0xa3, 0x59, 0xae, 0x35, 0xf7, 0x55, 0x85, 0x6c, 0x00, 0xb4, 0xcd, 0x56, 0xc9, 0xb0, 0x2c, + 0xfa, 0x9c, 0xa1, 0xcf, 0xdc, 0x5d, 0xbf, 0xd2, 0xad, 0xab, 0x59, 0xc9, 0x63, 0x3f, 0xa7, 0xfd, + 0x50, 0x81, 0xcb, 0xe9, 0x43, 0x49, 0x3a, 0x80, 0x31, 0x1b, 0xf8, 0x5d, 0xfa, 0x47, 0x17, 0x8e, + 0x7b, 0x2a, 0x38, 0x1e, 0xfb, 0x61, 0xca, 0x62, 0x0a, 0x64, 0xc4, 0xdd, 0x17, 0x73, 0x52, 0xf4, + 0xfa, 0x66, 0xc6, 0xeb, 0x6b, 0x25, 0xd8, 0x9e, 0x57, 0x47, 0xf4, 0x53, 0x37, 0xa1, 0xa0, 0xb7, + 0xdb, 0xf5, 0x5a, 0x49, 0xef, 0xd4, 0x5a, 0x4d, 0x55, 0x21, 0xab, 0xb0, 0xbc, 0x6f, 0xb6, 0xba, + 0x6d, 0x35, 0xa3, 0x7d, 0x47, 0x81, 0xf5, 0x5a, 0x68, 0x75, 0xf6, 0xac, 0x8b, 0xef, 0xe3, 0x91, + 0xc5, 0xb7, 0x1d, 0x44, 0x37, 0x09, 0x5e, 0x70, 0xa6, 0x95, 0xf7, 0x6e, 0x06, 0xb6, 0x12, 0x34, + 0xc4, 0x82, 0x0b, 0xfa, 0xa1, 0xd5, 0xaa, 0x95, 0x4b, 0xbc, 0x65, 0xd7, 0x43, 0x73, 0x29, 0x4c, + 0x60, 0x95, 0x78, 0x0b, 0xf3, 0x08, 0x7e, 0xdb, 0xb7, 0x47, 0x5e, 0x5f, 0x4a, 0x3e, 0x5b, 0x5d, + 0x32, 0x45, 0x4d, 0x78, 0x92, 0x7d, 0x7d, 0x36, 0x71, 0xb1, 0xda, 0x4c, 0x44, 0xaf, 0x1b, 0xc0, + 0x93, 0x15, 0xa3, 0xff, 0x86, 0x43, 0xcb, 0x93, 0x55, 0x87, 0xf5, 0x91, 0x26, 0xac, 0xec, 0x7b, + 0xd3, 0xea, 0xec, 0x31, 0x5f, 0xbf, 0xbb, 0x61, 0x3a, 0xa3, 0xea, 0xec, 0x71, 0xb2, 0x5a, 0x54, + 0x59, 0xb2, 0xe8, 0x3d, 0x91, 0x2a, 0x79, 0x2d, 0x71, 0x27, 0xc6, 0xdc, 0xb9, 0x9c, 0x18, 0xf7, + 0xd6, 0xa1, 0xc0, 0x65, 0x28, 0x14, 0x4f, 0xbe, 0xaf, 0xc0, 0xf6, 0xbc, 0x9e, 0xa3, 0x62, 0x59, + 0x34, 0x58, 0xc1, 0xe5, 0x20, 0x3d, 0x46, 0x34, 0x4a, 0x81, 0x40, 0x23, 0x9f, 0x81, 0x42, 0xcd, + 0xf7, 0x67, 0xee, 0xc4, 0x7a, 0xad, 0x6b, 0xd6, 0xf8, 0x74, 0x7d, 0xe1, 0xdf, 0xde, 0xb9, 0x7e, + 0x05, 0x7d, 0x3e, 0x26, 0xb6, 0xff, 0x9a, 0x3d, 0x9b, 0x78, 0x91, 0x54, 0x02, 0x32, 0x05, 0xe5, + 0xa2, 0x9d, 0x59, 0xdf, 0x73, 0x85, 0x0c, 0x21, 0x1c, 0xba, 0x39, 0x4c, 0x3e, 0xd3, 0x04, 0x4c, + 0xfb, 0xa6, 0x02, 0x57, 0xe7, 0x0f, 0x13, 0x3d, 0x27, 0x3b, 0xcc, 0xa4, 0x4a, 0xb8, 0x54, 0xe3, + 0x39, 0x19, 0xd8, 0x5d, 0xc9, 0x75, 0x0a, 0x44, 0x4a, 0x14, 0xa4, 0xa6, 0xcf, 0x24, 0xf2, 0x51, + 0x47, 0x89, 0x04, 0xa2, 0xf6, 0x08, 0xae, 0xcc, 0x19, 0x54, 0xf2, 0xe9, 0xd4, 0xa4, 0x3b, 0xe8, + 0xa6, 0x24, 0x27, 0xdd, 0x89, 0xa4, 0x63, 0x93, 0xe0, 0xda, 0xbf, 0x67, 0xe0, 0x32, 0x5d, 0x5d, + 0x03, 0xd7, 0xf7, 0xf5, 0xd9, 0xf4, 0x84, 0x0e, 0x27, 0xe3, 0x37, 0xc9, 0xeb, 0xb0, 0x72, 0x72, + 0x3e, 0x55, 0x31, 0x43, 0x27, 0x04, 0xf0, 0xc4, 0x12, 0xce, 0x31, 0xf4, 0x3f, 0xb9, 0x01, 0x72, + 0x72, 0xf1, 0x2c, 0x86, 0x37, 0xcd, 0x6c, 0x2b, 0xe6, 0xea, 0x38, 0xc8, 0x03, 0xfc, 0x31, 0x58, + 0x46, 0x7d, 0x0a, 0x3f, 0x3b, 0x04, 0xcf, 0x9f, 0xde, 0x3a, 0xd4, 0xb6, 0x98, 0x8c, 0x80, 0x7c, + 0x08, 0x20, 0xcc, 0x0c, 0xc1, 0x0f, 0x07, 0xa1, 0x67, 0x08, 0x92, 0x43, 0x98, 0xab, 0xa7, 0x47, + 0x0e, 0x4f, 0xb7, 0x50, 0x84, 0x2d, 0xd1, 0xe3, 0x63, 0x11, 0x15, 0x91, 0xdf, 0x62, 0x6e, 0xb2, + 0x82, 0xda, 0x58, 0x44, 0x46, 0xbc, 0x95, 0x48, 0x90, 0x8c, 0xc1, 0x91, 0x63, 0x59, 0x90, 0x6f, + 0x25, 0xb2, 0x20, 0xe7, 0x19, 0x96, 0x9c, 0xea, 0x58, 0xfb, 0x97, 0x0c, 0xac, 0x1e, 0x52, 0xae, + 0x0c, 0x75, 0x0d, 0x8b, 0x75, 0x17, 0xf7, 0xa1, 0x50, 0x1f, 0x39, 0xfc, 0xba, 0x88, 0xfb, 0x94, + 0x30, 0x9f, 0xee, 0xc1, 0xc8, 0x11, 0x37, 0x4f, 0xbe, 0x29, 0x23, 0x3d, 0xc5, 0x1f, 0xfd, 0x01, + 0xac, 0xb0, 0xeb, 0x3b, 0xae, 0x46, 0x13, 0x7c, 0x79, 0xd0, 0xa2, 0x57, 0x59, 0xb1, 0x74, 0xc3, + 0xc1, 0xae, 0x00, 0x65, 0x26, 0x91, 0xc7, 0x78, 0x95, 0x34, 0x2b, 0xcb, 0x67, 0xd3, 0xac, 0x48, + 0xb1, 0xec, 0x56, 0xce, 0x12, 0xcb, 0xee, 0xea, 0x1b, 0x50, 0x90, 0xda, 0x73, 0x2e, 0x36, 0xfd, + 0x1b, 0x19, 0x58, 0xc7, 0xaf, 0x0a, 0x6c, 0x79, 0x7e, 0x3e, 0xf5, 0x44, 0x1f, 0x8f, 0xe8, 0x89, + 0xb6, 0xe5, 0xf1, 0x62, 0x5f, 0xb6, 0x40, 0x41, 0xf4, 0x00, 0xb6, 0x12, 0x88, 0xe4, 0x23, 0xb0, + 0x4c, 0x9b, 0x2f, 0xe4, 0x6a, 0x35, 0x3e, 0x03, 0xc2, 0xb8, 0xc7, 0xf4, 0xc3, 0x7d, 0x93, 0x61, + 0x6b, 0xff, 0xa5, 0xc0, 0x1a, 0x4f, 0x3b, 0x32, 0x3c, 0x1a, 0x3d, 0xb5, 0x3b, 0x6f, 0xc7, 0xbb, + 0x93, 0x45, 0x57, 0xe1, 0xdd, 0xf9, 0xbf, 0xdd, 0x89, 0x6f, 0x44, 0x3a, 0xf1, 0x4a, 0x10, 0x05, + 0x51, 0x7c, 0xce, 0x82, 0x3e, 0xfc, 0x3b, 0x8c, 0x0b, 0x1c, 0x45, 0x24, 0x5f, 0x86, 0xd5, 0xa6, + 0xfb, 0x76, 0x44, 0x3c, 0xbd, 0x3d, 0xa7, 0xd2, 0x57, 0x03, 0x44, 0xb6, 0xa6, 0xf0, 0x64, 0x1f, + 0xba, 0x6f, 0xdb, 0x89, 0x9b, 0xc3, 0xb0, 0x4a, 0x2a, 0xa1, 0x46, 0xc9, 0xce, 0x33, 0xf5, 0xb9, + 0x83, 0x2b, 0x06, 0x0c, 0xfa, 0x56, 0x16, 0x20, 0xf4, 0x0d, 0xa4, 0x0b, 0x30, 0x62, 0x34, 0x21, + 0x34, 0xfb, 0x08, 0x92, 0xe7, 0xb8, 0xb0, 0xa5, 0xb8, 0xcd, 0x35, 0xd0, 0x99, 0xf9, 0x51, 0x2a, + 0x51, 0x17, 0x5d, 0xe2, 0xce, 0x68, 0x7d, 0x77, 0xe0, 0xb0, 0xbd, 0x3d, 0xbb, 0x77, 0x0b, 0x83, + 0x12, 0x07, 0xd0, 0x39, 0xf9, 0xa3, 0xd1, 0x65, 0xad, 0x4c, 0x11, 0x12, 0xfe, 0xb6, 0xb9, 0xf3, + 0xf9, 0xdb, 0xb6, 0x61, 0xd5, 0x1b, 0xbe, 0xe5, 0x0e, 0xa7, 0xa3, 0xc9, 0x13, 0x54, 0xbb, 0x87, + 0xfa, 0x3c, 0xda, 0x05, 0x35, 0x51, 0xc6, 0xc6, 0x01, 0xcf, 0xdc, 0x00, 0x5f, 0x1e, 0x86, 0x00, + 0x18, 0xf8, 0x0b, 0x2f, 0xab, 0x2b, 0x0f, 0x72, 0xf9, 0x15, 0xf5, 0xc2, 0x83, 0x5c, 0x3e, 0xaf, + 0xae, 0x3e, 0xc8, 0xe5, 0x57, 0x55, 0x30, 0xa5, 0x3b, 0xb3, 0xe0, 0x4e, 0x4c, 0xba, 0xc6, 0x8a, + 0x5e, 0x51, 0x69, 0x3f, 0xcd, 0x00, 0x49, 0x36, 0x83, 0x7c, 0x1c, 0x0a, 0x6c, 0x83, 0xb5, 0x27, + 0xfe, 0x57, 0xb9, 0xbb, 0x01, 0x0b, 0xbb, 0x24, 0x81, 0xe5, 0xb0, 0x4b, 0x0c, 0x6c, 0xfa, 0x5f, + 0x1d, 0x90, 0x2f, 0xc1, 0x45, 0xec, 0xde, 0xb1, 0x3b, 0xf1, 0x46, 0x7d, 0x1b, 0x63, 0xe4, 0x3a, + 0x03, 0x9e, 0xeb, 0xf1, 0x15, 0x4c, 0x4a, 0x9c, 0x2c, 0x9e, 0x33, 0x0c, 0xe8, 0x02, 0xd8, 0x46, + 0xcc, 0x36, 0x43, 0x24, 0x1d, 0x50, 0x65, 0xfa, 0xa3, 0xd9, 0x60, 0xc0, 0x47, 0xb6, 0x48, 0x25, + 0xfa, 0x78, 0xd9, 0x9c, 0x8a, 0x37, 0xc2, 0x8a, 0x2b, 0xb3, 0xc1, 0x80, 0xbc, 0x0e, 0x30, 0x1a, + 0xda, 0xa7, 0x9e, 0xef, 0xb3, 0xcb, 0x9c, 0xc0, 0x5b, 0x39, 0x84, 0xca, 0x83, 0x31, 0x1a, 0x36, + 0x18, 0x90, 0xfc, 0x12, 0x60, 0xb4, 0x06, 0x0c, 0x63, 0xc2, 0xac, 0x91, 0x78, 0xf6, 0x16, 0x01, + 0x8c, 0x3a, 0x47, 0x1f, 0xbb, 0x96, 0xf7, 0x75, 0xe1, 0xea, 0xf1, 0x05, 0xd8, 0xe2, 0xc6, 0xc3, + 0x87, 0xde, 0xf4, 0x84, 0x8b, 0x12, 0xcf, 0x22, 0x87, 0x48, 0xb2, 0xc4, 0x3f, 0xe6, 0x00, 0xf4, + 0x43, 0x4b, 0x44, 0x08, 0xbb, 0x0b, 0xcb, 0x54, 0x40, 0x12, 0x8a, 0x16, 0x54, 0x53, 0x63, 0xbd, + 0xb2, 0x9a, 0x1a, 0x31, 0xe8, 0x6a, 0x34, 0xd1, 0xa8, 0x5e, 0x28, 0x59, 0x70, 0x35, 0x32, 0x3b, + 0xfb, 0x48, 0x84, 0x66, 0x8e, 0x45, 0xea, 0x00, 0x61, 0xcc, 0x2e, 0xce, 0xf2, 0x6f, 0x85, 0xc1, + 0x6f, 0x78, 0x01, 0xcf, 0x12, 0x11, 0xc6, 0xfd, 0x92, 0xa7, 0x4f, 0x88, 0x46, 0x1e, 0x42, 0xae, + 0xe3, 0x04, 0xbe, 0xb8, 0x73, 0x22, 0x99, 0xbd, 0xc8, 0x73, 0x71, 0x86, 0xd1, 0xcc, 0x36, 0xa6, + 0x4e, 0x24, 0x65, 0x31, 0x56, 0x42, 0x0c, 0x58, 0xe1, 0x79, 0xd6, 0xe7, 0x44, 0xc0, 0xe4, 0x69, + 0xd6, 0x79, 0xdc, 0x6b, 0x04, 0xca, 0x3c, 0x05, 0xcf, 0xa8, 0x7e, 0x1f, 0xb2, 0x96, 0xd5, 0xe0, + 0xf1, 0x3b, 0xd6, 0x43, 0xf1, 0xcb, 0xb2, 0x1a, 0xec, 0xde, 0xd7, 0xf7, 0x4f, 0x25, 0x32, 0x8a, + 0x4c, 0x3e, 0x01, 0x05, 0x89, 0x29, 0xe6, 0x91, 0x6f, 0xb0, 0x0f, 0x24, 0x6f, 0x27, 0x79, 0xd3, + 0x90, 0xb0, 0x49, 0x1d, 0xd4, 0x87, 0xb3, 0xc7, 0xae, 0x3e, 0x1e, 0xa3, 0x1b, 0xe4, 0x5b, 0xee, + 0x84, 0xb1, 0x6d, 0xf9, 0x30, 0x64, 0x34, 0xfa, 0x48, 0xf4, 0x45, 0xa9, 0xac, 0x6c, 0x8a, 0x53, + 0x92, 0x36, 0x6c, 0x59, 0xee, 0x74, 0x36, 0x66, 0xf6, 0x35, 0x95, 0xd1, 0x84, 0xca, 0x37, 0x2c, + 0x4e, 0x0e, 0x46, 0xd7, 0xf5, 0x69, 0xa1, 0x30, 0x6a, 0x3a, 0x1a, 0x4d, 0x62, 0xb2, 0x4e, 0x92, + 0x58, 0x73, 0xe5, 0x21, 0xa7, 0xa7, 0x6a, 0x54, 0x6a, 0xc2, 0x53, 0x55, 0x48, 0x4d, 0xa1, 0xac, + 0xf4, 0xa1, 0x94, 0x58, 0x6e, 0x78, 0x33, 0x28, 0xc5, 0x72, 0x8b, 0x44, 0x70, 0xfb, 0x5e, 0x4e, + 0x0a, 0x27, 0xca, 0xc7, 0xe2, 0x53, 0x00, 0x0f, 0x46, 0xde, 0xb0, 0xe1, 0x4e, 0x4f, 0x46, 0x7d, + 0x29, 0xa4, 0x5c, 0xe1, 0x57, 0x46, 0xde, 0xd0, 0x3e, 0x45, 0xf0, 0x4f, 0xdf, 0xb9, 0x2e, 0x21, + 0x99, 0xd2, 0x7f, 0xf2, 0x41, 0x58, 0xa5, 0x4f, 0x9d, 0xd0, 0x4a, 0x88, 0xe9, 0x64, 0x91, 0x9a, + 0x25, 0xdd, 0x08, 0x11, 0xc8, 0x1b, 0x98, 0x66, 0xc6, 0x1b, 0x4f, 0x25, 0xe6, 0x55, 0xe4, 0x94, + 0xf1, 0xc6, 0xd3, 0x78, 0x84, 0x68, 0x09, 0x99, 0x54, 0x83, 0xa6, 0x8b, 0xcc, 0x50, 0x3c, 0x9b, + 0x0d, 0x2a, 0x1e, 0xf9, 0x5c, 0xb3, 0x45, 0x68, 0x5a, 0x39, 0x87, 0x6f, 0x8c, 0x0c, 0x1b, 0x61, + 0x55, 0xcb, 0xec, 0xa6, 0x88, 0x33, 0xb5, 0xac, 0x11, 0xfe, 0x49, 0xdf, 0xee, 0x21, 0x38, 0xd2, + 0x88, 0x00, 0x99, 0xec, 0xc1, 0x26, 0xe3, 0xf1, 0x83, 0x0c, 0x93, 0x9c, 0xc5, 0xc5, 0xbd, 0x2d, + 0x4c, 0x41, 0x29, 0xbf, 0x3e, 0x46, 0x40, 0x2a, 0xb0, 0x8c, 0xb2, 0x26, 0x77, 0x0d, 0xd8, 0x91, + 0xd5, 0x04, 0xf1, 0x75, 0x84, 0xfb, 0x0a, 0x2a, 0x08, 0xe4, 0x7d, 0x05, 0x51, 0xc9, 0xe7, 0x01, + 0x8c, 0xe1, 0x64, 0x34, 0x18, 0x60, 0xf0, 0xe4, 0x3c, 0x8a, 0x52, 0x2f, 0x44, 0xd7, 0x23, 0xd6, + 0x12, 0x22, 0xf1, 0x40, 0x7f, 0xf8, 0x6c, 0xc7, 0x42, 0x2c, 0x4b, 0x75, 0x69, 0x35, 0x58, 0x61, + 0x8b, 0x11, 0x03, 0x91, 0xf3, 0xd4, 0x2a, 0x52, 0x18, 0x6b, 0x16, 0x88, 0x9c, 0xc3, 0x93, 0x81, + 0xc8, 0x25, 0x02, 0xed, 0x21, 0x5c, 0x4a, 0xfb, 0xb0, 0x88, 0x74, 0xac, 0x9c, 0x55, 0x3a, 0xfe, + 0xd3, 0x2c, 0xac, 0x61, 0x6d, 0x62, 0x17, 0xd6, 0x61, 0xdd, 0x9a, 0x3d, 0x0e, 0xa2, 0x74, 0x89, + 0xdd, 0x18, 0xdb, 0xe7, 0xcb, 0x05, 0xf2, 0x1d, 0x5e, 0x84, 0x82, 0x18, 0xb0, 0x21, 0x4e, 0x82, + 0x7d, 0xe1, 0x39, 0x10, 0xc4, 0x00, 0x17, 0x91, 0x26, 0x93, 0x19, 0x76, 0x63, 0x44, 0xe1, 0x79, + 0x90, 0x3d, 0xcf, 0x79, 0x90, 0x3b, 0xd3, 0x79, 0xf0, 0x26, 0xac, 0x89, 0xb7, 0xe1, 0x4e, 0xbe, + 0xfc, 0x6c, 0x3b, 0x79, 0xa4, 0x32, 0x52, 0x0f, 0x76, 0xf4, 0x95, 0x85, 0x3b, 0x3a, 0x5e, 0x8c, + 0x8a, 0x55, 0x36, 0x46, 0x58, 0x72, 0x63, 0xc7, 0x14, 0x94, 0xfb, 0xa5, 0xf6, 0xcf, 0x70, 0x4a, + 0x7e, 0x04, 0x56, 0xeb, 0x23, 0x71, 0x27, 0x26, 0x5d, 0x46, 0x0c, 0x04, 0x50, 0x66, 0x17, 0x02, + 0xcc, 0xe0, 0x74, 0xcb, 0xbe, 0x17, 0xa7, 0xdb, 0x1b, 0x00, 0xdc, 0x25, 0x25, 0x4c, 0x1d, 0x87, + 0x4b, 0x46, 0x44, 0x28, 0x89, 0xde, 0x89, 0x48, 0xc8, 0x74, 0x77, 0xe2, 0xe6, 0x36, 0x7a, 0xaf, + 0x37, 0x9a, 0x0d, 0xa7, 0x91, 0x5c, 0xcb, 0xc2, 0x83, 0xd5, 0xe1, 0x65, 0xf2, 0xf6, 0x10, 0x23, + 0x7b, 0x6f, 0x07, 0x84, 0x7c, 0x2e, 0x30, 0x7e, 0xbc, 0xb0, 0xa8, 0x87, 0xb4, 0x44, 0x0f, 0xcd, + 0x35, 0x79, 0xd4, 0x7e, 0xa8, 0xc8, 0x09, 0x18, 0x7e, 0x86, 0xa1, 0xfe, 0x18, 0x40, 0x60, 0x94, + 0x20, 0xc6, 0x9a, 0xc9, 0x4b, 0x01, 0x54, 0xee, 0xe5, 0x10, 0x57, 0xfa, 0x9a, 0xec, 0x7b, 0xf5, + 0x35, 0x1d, 0x28, 0xb4, 0xbe, 0x32, 0x75, 0x42, 0x2b, 0x16, 0xb0, 0x02, 0x4e, 0x16, 0x77, 0xa6, + 0xec, 0xde, 0x4b, 0x78, 0x36, 0x84, 0x7c, 0xf0, 0x1c, 0x16, 0x58, 0x22, 0xd4, 0xfe, 0x4a, 0x81, + 0x4d, 0xd9, 0xed, 0xfe, 0xc9, 0xb0, 0x47, 0x3e, 0xcd, 0xe2, 0xc1, 0x2a, 0x11, 0x91, 0x45, 0x42, + 0xa2, 0x5b, 0xee, 0x93, 0x61, 0x8f, 0x31, 0x40, 0xce, 0xdb, 0x72, 0x63, 0x29, 0x21, 0x79, 0x0c, + 0x6b, 0xed, 0xd1, 0x60, 0x40, 0xd9, 0x9a, 0xc9, 0x5b, 0x5c, 0x00, 0xa0, 0x15, 0xc5, 0xaf, 0x46, + 0x44, 0x83, 0xf6, 0x6e, 0x72, 0x39, 0xf7, 0xca, 0x98, 0xee, 0xf7, 0x1e, 0xa7, 0x0b, 0xab, 0xfd, + 0x2e, 0xfa, 0xc9, 0xc9, 0x75, 0x6a, 0x3f, 0x56, 0x80, 0x24, 0x9b, 0x24, 0x6f, 0x59, 0xca, 0xff, + 0x01, 0x0b, 0x1b, 0x63, 0xfd, 0x72, 0xe7, 0x61, 0xfd, 0x8a, 0xbf, 0xa7, 0xc0, 0x66, 0x4d, 0x6f, + 0xf0, 0x94, 0x0c, 0xec, 0x06, 0xe7, 0x06, 0xbc, 0x50, 0xd3, 0x1b, 0x76, 0xbb, 0x55, 0xaf, 0x95, + 0x1e, 0xd9, 0xa9, 0x91, 0x96, 0x5f, 0x80, 0xe7, 0x93, 0x28, 0xe1, 0x4d, 0xcf, 0x35, 0xd8, 0x4e, + 0x16, 0x8b, 0x68, 0xcc, 0xe9, 0xc4, 0x22, 0x70, 0x73, 0xb6, 0xf8, 0x19, 0xd8, 0x14, 0x91, 0x87, + 0x3b, 0x75, 0x0b, 0x73, 0x1b, 0x6c, 0x42, 0xe1, 0xc0, 0x30, 0x6b, 0x95, 0x47, 0x76, 0xa5, 0x5b, + 0xaf, 0xab, 0x4b, 0x64, 0x1d, 0x56, 0x39, 0xa0, 0xa4, 0xab, 0x0a, 0x59, 0x83, 0x7c, 0xad, 0x69, + 0x19, 0xa5, 0xae, 0x69, 0xa8, 0x99, 0xe2, 0x67, 0x60, 0xa3, 0x3d, 0xf1, 0xde, 0x72, 0xa6, 0xee, + 0x43, 0xf7, 0x09, 0x5e, 0xd4, 0x5c, 0x80, 0xac, 0xa9, 0x1f, 0xaa, 0x4b, 0x04, 0x60, 0xa5, 0xfd, + 0xb0, 0x64, 0xdd, 0xbb, 0xa7, 0x2a, 0xa4, 0x00, 0x17, 0xf6, 0x4b, 0x6d, 0xfb, 0x61, 0xc3, 0x52, + 0x33, 0xf4, 0x41, 0x3f, 0xb4, 0xf0, 0x21, 0x5b, 0xfc, 0x30, 0x6c, 0x21, 0x43, 0x52, 0xf7, 0xfc, + 0xa9, 0x3b, 0x74, 0x27, 0xd8, 0x86, 0x35, 0xc8, 0x5b, 0x2e, 0xdd, 0x49, 0xa6, 0x2e, 0x6b, 0x40, + 0x63, 0x36, 0x98, 0x7a, 0xe3, 0x81, 0xfb, 0x35, 0x55, 0x29, 0xbe, 0x01, 0x9b, 0xe6, 0x68, 0x36, + 0xf5, 0x86, 0xc7, 0xd6, 0x94, 0x62, 0x1c, 0x3f, 0x21, 0xcf, 0xc1, 0x56, 0xb7, 0xa9, 0x37, 0xf6, + 0x6a, 0xfb, 0xdd, 0x56, 0xd7, 0xb2, 0x1b, 0x7a, 0xa7, 0x54, 0x65, 0xd7, 0x44, 0x8d, 0x96, 0xd5, + 0xb1, 0x4d, 0xa3, 0x64, 0x34, 0x3b, 0xaa, 0x52, 0xfc, 0x36, 0xea, 0x56, 0x7a, 0xa3, 0x61, 0xbf, + 0xe2, 0xf4, 0xa6, 0xa3, 0x09, 0x36, 0x58, 0x83, 0x5d, 0xcb, 0x28, 0xb5, 0x9a, 0x65, 0xbb, 0xa2, + 0x97, 0x3a, 0x2d, 0x33, 0x2d, 0xd4, 0xf7, 0x55, 0xb8, 0x9c, 0x82, 0xd3, 0xea, 0xb4, 0x55, 0x85, + 0x5c, 0x87, 0x9d, 0x94, 0xb2, 0x43, 0x63, 0x4f, 0xef, 0x76, 0xaa, 0x4d, 0x35, 0x33, 0x87, 0xd8, + 0xb2, 0x5a, 0x6a, 0xb6, 0xf8, 0x5b, 0x0a, 0x6c, 0x74, 0x7d, 0x6e, 0x72, 0xde, 0x45, 0x6f, 0xd3, + 0x17, 0xe1, 0x5a, 0xd7, 0x32, 0x4c, 0xbb, 0xd3, 0x7a, 0x68, 0x34, 0xed, 0xae, 0xa5, 0xef, 0xc7, + 0x5b, 0x73, 0x1d, 0x76, 0x24, 0x0c, 0xd3, 0x28, 0xb5, 0x0e, 0x0c, 0xd3, 0x6e, 0xeb, 0x96, 0x75, + 0xd8, 0x32, 0xcb, 0xaa, 0x42, 0xdf, 0x98, 0x82, 0xd0, 0xa8, 0xe8, 0xac, 0x35, 0x91, 0xb2, 0xa6, + 0x71, 0xa8, 0xd7, 0xed, 0xbd, 0x56, 0x47, 0xcd, 0x16, 0x1b, 0xf4, 0x7c, 0xc7, 0x80, 0xbb, 0xcc, + 0xb2, 0x30, 0x0f, 0xb9, 0x66, 0xab, 0x69, 0xc4, 0x2f, 0x17, 0xd7, 0x20, 0xaf, 0xb7, 0xdb, 0x66, + 0xeb, 0x00, 0xa7, 0x18, 0xc0, 0x4a, 0xd9, 0x68, 0xd2, 0x96, 0x65, 0x69, 0x49, 0xdb, 0x6c, 0x35, + 0x5a, 0x1d, 0xa3, 0xac, 0xe6, 0x8a, 0xa6, 0x58, 0xc2, 0xa2, 0xd2, 0xde, 0x88, 0xdd, 0xe4, 0x95, + 0x8d, 0x8a, 0xde, 0xad, 0x77, 0xf8, 0x10, 0x3d, 0xb2, 0x4d, 0xe3, 0x73, 0x5d, 0xc3, 0xea, 0x58, + 0xaa, 0x42, 0x54, 0x58, 0x6b, 0x1a, 0x46, 0xd9, 0xb2, 0x4d, 0xe3, 0xa0, 0x66, 0x1c, 0xaa, 0x19, + 0x5a, 0x27, 0xfb, 0x4f, 0xdf, 0x50, 0xfc, 0x9e, 0x02, 0x84, 0x05, 0x2b, 0x16, 0x19, 0x70, 0x70, + 0xc6, 0xec, 0xc2, 0xd5, 0x2a, 0x1d, 0x6a, 0xfc, 0xb4, 0x46, 0xab, 0x1c, 0xef, 0xb2, 0xcb, 0x40, + 0x62, 0xe5, 0xad, 0x4a, 0x45, 0x55, 0xc8, 0x0e, 0x5c, 0x8c, 0xc1, 0xcb, 0x66, 0xab, 0xad, 0x66, + 0xae, 0x66, 0xf2, 0x0a, 0xb9, 0x92, 0x28, 0x7c, 0x68, 0x18, 0x6d, 0x35, 0x4b, 0x87, 0x28, 0x56, + 0x20, 0x96, 0x04, 0x23, 0xcf, 0x15, 0xbf, 0xa9, 0xc0, 0x65, 0xd6, 0x4c, 0xb1, 0xbe, 0x82, 0xa6, + 0x5e, 0x83, 0x6d, 0x1e, 0x82, 0x3d, 0xad, 0xa1, 0x97, 0x40, 0x8d, 0x94, 0xb2, 0x66, 0x3e, 0x07, + 0x5b, 0x11, 0x28, 0xb6, 0x23, 0x43, 0x77, 0x8f, 0x08, 0x78, 0xcf, 0xb0, 0x3a, 0xb6, 0x51, 0xa9, + 0xb4, 0xcc, 0x0e, 0x6b, 0x48, 0xb6, 0xa8, 0xc1, 0x56, 0xc9, 0x9d, 0x4c, 0xa9, 0xe8, 0x35, 0xf4, + 0xbd, 0xd1, 0x10, 0x9b, 0xb0, 0x0e, 0xab, 0xc6, 0xe7, 0x3b, 0x46, 0xd3, 0xaa, 0xb5, 0x9a, 0xea, + 0x52, 0xf1, 0x5a, 0x0c, 0x47, 0xac, 0x63, 0xcb, 0xaa, 0xaa, 0x4b, 0x45, 0x07, 0xd6, 0x85, 0xe1, + 0x35, 0x9b, 0x15, 0xbb, 0x70, 0x55, 0xcc, 0x35, 0xdc, 0x51, 0xe2, 0x9f, 0xb0, 0x0d, 0x97, 0x92, + 0xe5, 0x46, 0x47, 0x55, 0xe8, 0x28, 0xc4, 0x4a, 0x28, 0x3c, 0x53, 0xfc, 0x0d, 0x05, 0xd6, 0x83, + 0x4b, 0x13, 0x54, 0xd3, 0x5e, 0x87, 0x9d, 0x46, 0x45, 0xb7, 0xcb, 0xc6, 0x41, 0xad, 0x64, 0xd8, + 0x0f, 0x6b, 0xcd, 0x72, 0xec, 0x25, 0xcf, 0xc3, 0x73, 0x29, 0x08, 0xf8, 0x96, 0x6d, 0xb8, 0x14, + 0x2f, 0xea, 0xd0, 0xa5, 0x9a, 0xa1, 0x5d, 0x1f, 0x2f, 0x09, 0xd6, 0x69, 0xb6, 0xf8, 0x27, 0x0a, + 0x6c, 0x77, 0x26, 0x33, 0x7f, 0xea, 0xf6, 0xf9, 0xf5, 0x0d, 0xcb, 0x3d, 0x83, 0xc1, 0x99, 0x8b, + 0x70, 0xbb, 0x63, 0x76, 0xad, 0x8e, 0x51, 0x16, 0xe4, 0x74, 0xd2, 0xd6, 0x4c, 0xa3, 0x61, 0x34, + 0x3b, 0xb1, 0xb6, 0xbd, 0x0c, 0x1f, 0x58, 0x80, 0xdb, 0x6c, 0x75, 0xc4, 0x33, 0x5d, 0xab, 0x1f, + 0x80, 0x9b, 0x0b, 0x90, 0x03, 0xc4, 0x4c, 0xf1, 0x00, 0x36, 0x2c, 0xbd, 0x51, 0xaf, 0x8c, 0x26, + 0x3d, 0x57, 0x9f, 0x4d, 0x4f, 0x86, 0x64, 0x07, 0xae, 0x54, 0x5a, 0x66, 0xc9, 0xb0, 0xf1, 0x0b, + 0x62, 0x8d, 0xb8, 0x08, 0x9b, 0x72, 0xe1, 0x23, 0x83, 0xae, 0x2e, 0x02, 0x1b, 0x32, 0xb0, 0xd9, + 0x52, 0x33, 0xc5, 0x2f, 0xc2, 0x5a, 0x24, 0x4f, 0xdf, 0x15, 0xb8, 0x28, 0x3f, 0xb7, 0xdd, 0x61, + 0xdf, 0x1b, 0x1e, 0xab, 0x4b, 0xf1, 0x02, 0x73, 0x36, 0x1c, 0xd2, 0x02, 0xdc, 0x6e, 0xe4, 0x82, + 0x8e, 0x3b, 0x39, 0xf5, 0x86, 0xce, 0xd4, 0xed, 0xab, 0x99, 0xe2, 0xab, 0xb0, 0x1e, 0x89, 0x0e, + 0x4e, 0xe7, 0x55, 0xbd, 0xc5, 0xcf, 0x87, 0x86, 0x51, 0xae, 0x75, 0x1b, 0xea, 0x32, 0xdd, 0x68, + 0xaa, 0xb5, 0xfd, 0xaa, 0x0a, 0xc5, 0xef, 0x28, 0x54, 0x0c, 0xc2, 0x7e, 0x6f, 0x54, 0x74, 0x31, + 0x13, 0xe9, 0x2a, 0x60, 0x39, 0x07, 0x0c, 0xcb, 0x62, 0x57, 0xfe, 0xd7, 0x60, 0x9b, 0x3f, 0xd8, + 0x7a, 0xb3, 0x6c, 0x57, 0x75, 0xb3, 0x7c, 0xa8, 0x9b, 0x74, 0x69, 0x3c, 0x52, 0x33, 0xb8, 0xde, + 0x25, 0x88, 0xdd, 0x69, 0x75, 0x4b, 0x55, 0x35, 0x4b, 0x97, 0x57, 0x04, 0xde, 0xae, 0x35, 0xd5, + 0x1c, 0xee, 0x1e, 0x09, 0x6c, 0xac, 0x96, 0x96, 0x2f, 0x17, 0xdf, 0x55, 0xe0, 0x8a, 0xe5, 0x1d, + 0x0f, 0x9d, 0xe9, 0x6c, 0xe2, 0xea, 0x83, 0xe3, 0xd1, 0xc4, 0x9b, 0x9e, 0x9c, 0x5a, 0x33, 0x6f, + 0xea, 0x92, 0xbb, 0xf0, 0x92, 0x55, 0xdb, 0x6f, 0xea, 0x1d, 0xba, 0xfa, 0xf5, 0xfa, 0x7e, 0xcb, + 0xac, 0x75, 0xaa, 0x0d, 0xdb, 0xea, 0xd6, 0x12, 0x0b, 0xe3, 0x16, 0xbc, 0x38, 0x1f, 0xb5, 0x6e, + 0xec, 0xeb, 0xa5, 0x47, 0xaa, 0xb2, 0xb8, 0xc2, 0x3d, 0xbd, 0xae, 0x37, 0x4b, 0x46, 0xd9, 0x3e, + 0xb8, 0xa7, 0x66, 0xc8, 0x4b, 0x70, 0x63, 0x3e, 0x6a, 0xa5, 0xd6, 0xb6, 0x28, 0x5a, 0x76, 0xf1, + 0x7b, 0xab, 0x56, 0x83, 0x62, 0xe5, 0x8a, 0x7f, 0xac, 0xc0, 0xf6, 0xbc, 0x10, 0x51, 0xe4, 0x36, + 0x68, 0x46, 0xb3, 0x63, 0xea, 0xb5, 0xb2, 0x5d, 0x32, 0x8d, 0xb2, 0xd1, 0xec, 0xd4, 0xf4, 0xba, + 0x65, 0x5b, 0xad, 0x2e, 0x9d, 0x4d, 0xa1, 0x65, 0xc6, 0x4d, 0xb8, 0xbe, 0x00, 0xaf, 0x55, 0x2b, + 0x97, 0x54, 0x85, 0xdc, 0x83, 0x57, 0x16, 0x20, 0x59, 0x8f, 0xac, 0x8e, 0xd1, 0x90, 0x4b, 0xd4, + 0x4c, 0xb1, 0x04, 0x57, 0xe7, 0xc7, 0x90, 0xa1, 0xa7, 0x48, 0xb4, 0xa7, 0xf3, 0x90, 0x2b, 0xd3, + 0x83, 0x2b, 0x92, 0x9a, 0xa2, 0xe8, 0x81, 0x1a, 0x0f, 0x03, 0x91, 0x30, 0xa1, 0x31, 0xbb, 0xcd, + 0x26, 0x3b, 0xe5, 0x36, 0xa1, 0xd0, 0xea, 0x54, 0x0d, 0x93, 0x27, 0xf7, 0xc0, 0x6c, 0x1e, 0xdd, + 0x26, 0x5d, 0x38, 0x2d, 0xb3, 0xf6, 0x05, 0x3c, 0xee, 0xb6, 0xe1, 0x92, 0x55, 0xd7, 0x4b, 0x0f, + 0x71, 0x4d, 0xd7, 0x9a, 0x76, 0xa9, 0xaa, 0x37, 0x9b, 0x46, 0x5d, 0x05, 0xec, 0xcc, 0x79, 0xae, + 0x9f, 0xe4, 0x83, 0x70, 0xa7, 0xf5, 0xb0, 0xa3, 0xdb, 0xed, 0x7a, 0x77, 0xbf, 0xd6, 0xb4, 0xad, + 0x47, 0xcd, 0x92, 0x60, 0xcd, 0x4a, 0xc9, 0x13, 0xe1, 0x0e, 0xdc, 0x5a, 0x88, 0x1d, 0xa6, 0xe1, + 0xb8, 0x0d, 0xda, 0x42, 0x4c, 0xfe, 0x21, 0xc5, 0x1f, 0x29, 0xb0, 0xb3, 0xe0, 0x8a, 0x9b, 0xbc, + 0x02, 0x77, 0xab, 0x86, 0x5e, 0xae, 0x1b, 0x96, 0x85, 0x1b, 0x05, 0x1d, 0x06, 0x66, 0x6a, 0x93, + 0xba, 0xdf, 0xdf, 0x85, 0x97, 0x16, 0xa3, 0x87, 0x9c, 0xc3, 0x1d, 0xb8, 0xb5, 0x18, 0x95, 0x73, + 0x12, 0x19, 0xba, 0xdf, 0x2e, 0xc6, 0x0c, 0x38, 0x90, 0x6c, 0xf1, 0x77, 0x14, 0xb8, 0x9c, 0xae, + 0x67, 0xa2, 0x6d, 0xab, 0x35, 0xad, 0x8e, 0x5e, 0xaf, 0xdb, 0x6d, 0xdd, 0xd4, 0x1b, 0xb6, 0xd1, + 0x34, 0x5b, 0xf5, 0x7a, 0xda, 0xc9, 0x7b, 0x0b, 0x5e, 0x9c, 0x8f, 0x6a, 0x95, 0xcc, 0x5a, 0x9b, + 0x1e, 0x2e, 0x1a, 0xec, 0xce, 0xc7, 0x32, 0x6a, 0x25, 0x43, 0xcd, 0xec, 0x7d, 0xea, 0x07, 0xff, + 0xbc, 0xbb, 0xf4, 0x83, 0x77, 0x77, 0x95, 0x1f, 0xbf, 0xbb, 0xab, 0xfc, 0xd3, 0xbb, 0xbb, 0xca, + 0x17, 0x5e, 0x3e, 0x5b, 0x06, 0x2b, 0x14, 0x4b, 0x1e, 0xaf, 0xa0, 0x00, 0xf5, 0xda, 0xff, 0x04, + 0x00, 0x00, 0xff, 0xff, 0x51, 0xe2, 0x0a, 0xe4, 0x95, 0xb2, 0x01, 0x00, } func (this *PluginSpecV1) Equal(that interface{}) bool { @@ -46457,6 +46420,27 @@ func (m *PluginStaticCredentialsSpecV1_OAuthClientSecret) MarshalToSizedBuffer(d } return len(dAtA) - i, nil } +func (m *PluginStaticCredentialsSpecV1_SSHCertAuthorities) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PluginStaticCredentialsSpecV1_SSHCertAuthorities) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.SSHCertAuthorities != nil { + { + size, err := m.SSHCertAuthorities.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + return len(dAtA) - i, nil +} func (m *PluginStaticCredentialsBasicAuth) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -46539,6 +46523,47 @@ func (m *PluginStaticCredentialsOAuthClientSecret) MarshalToSizedBuffer(dAtA []b return len(dAtA) - i, nil } +func (m *PluginStaticCredentialsSSHCertAuthorities) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PluginStaticCredentialsSSHCertAuthorities) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PluginStaticCredentialsSSHCertAuthorities) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.CertAuthorities) > 0 { + for iNdEx := len(m.CertAuthorities) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.CertAuthorities[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *SAMLIdPServiceProviderV1) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -47055,21 +47080,21 @@ func (m *ScheduledAgentUpgradeWindow) MarshalToSizedBuffer(dAtA []byte) (int, er i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n383, err383 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Stop, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Stop):]) - if err383 != nil { - return 0, err383 - } - i -= n383 - i = encodeVarintTypes(dAtA, i, uint64(n383)) - i-- - dAtA[i] = 0x12 - n384, err384 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Start, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Start):]) + n384, err384 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Stop, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Stop):]) if err384 != nil { return 0, err384 } i -= n384 i = encodeVarintTypes(dAtA, i, uint64(n384)) i-- + dAtA[i] = 0x12 + n385, err385 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Start, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Start):]) + if err385 != nil { + return 0, err385 + } + i -= n385 + i = encodeVarintTypes(dAtA, i, uint64(n385)) + i-- dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -47495,12 +47520,12 @@ func (m *OktaAssignmentSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x30 } - n391, err391 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastTransition, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastTransition):]) - if err391 != nil { - return 0, err391 + n392, err392 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastTransition, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastTransition):]) + if err392 != nil { + return 0, err392 } - i -= n391 - i = encodeVarintTypes(dAtA, i, uint64(n391)) + i -= n392 + i = encodeVarintTypes(dAtA, i, uint64(n392)) i-- dAtA[i] = 0x2a if m.Status != 0 { @@ -47508,12 +47533,12 @@ func (m *OktaAssignmentSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x20 } - n392, err392 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CleanupTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CleanupTime):]) - if err392 != nil { - return 0, err392 + n393, err393 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CleanupTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CleanupTime):]) + if err393 != nil { + return 0, err393 } - i -= n392 - i = encodeVarintTypes(dAtA, i, uint64(n392)) + i -= n393 + i = encodeVarintTypes(dAtA, i, uint64(n393)) i-- dAtA[i] = 0x1a if len(m.Targets) > 0 { @@ -47650,6 +47675,18 @@ func (m *IntegrationSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if m.Credentials != nil { + { + size, err := m.Credentials.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } if m.SubKindSpec != nil { { size := m.SubKindSpec.Size() @@ -47838,18 +47875,6 @@ func (m *GitHubIntegrationSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - if m.Proxy != nil { - { - size, err := m.Proxy.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } if len(m.Organization) > 0 { i -= len(m.Organization) copy(dAtA[i:], m.Organization) @@ -47860,107 +47885,6 @@ func (m *GitHubIntegrationSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *GitHubProxy) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GitHubProxy) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GitHubProxy) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i -= len(m.XXX_unrecognized) - copy(dAtA[i:], m.XXX_unrecognized) - } - if m.Connector != nil { - { - size, err := m.Connector.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - if len(m.CertAuthorities) > 0 { - for iNdEx := len(m.CertAuthorities) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.CertAuthorities[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTypes(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func (m *GitHubProxyConnector) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *GitHubProxyConnector) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *GitHubProxyConnector) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i -= len(m.XXX_unrecognized) - copy(dAtA[i:], m.XXX_unrecognized) - } - if len(m.RedirectURL) > 0 { - i -= len(m.RedirectURL) - copy(dAtA[i:], m.RedirectURL) - i = encodeVarintTypes(dAtA, i, uint64(len(m.RedirectURL))) - i-- - dAtA[i] = 0x1a - } - if len(m.ClientSecret) > 0 { - i -= len(m.ClientSecret) - copy(dAtA[i:], m.ClientSecret) - i = encodeVarintTypes(dAtA, i, uint64(len(m.ClientSecret))) - i-- - dAtA[i] = 0x12 - } - if len(m.ClientID) > 0 { - i -= len(m.ClientID) - copy(dAtA[i:], m.ClientID) - i = encodeVarintTypes(dAtA, i, uint64(len(m.ClientID))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - func (m *HeadlessAuthentication) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -59085,6 +59009,18 @@ func (m *PluginStaticCredentialsSpecV1_OAuthClientSecret) Size() (n int) { } return n } +func (m *PluginStaticCredentialsSpecV1_SSHCertAuthorities) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.SSHCertAuthorities != nil { + l = m.SSHCertAuthorities.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} func (m *PluginStaticCredentialsBasicAuth) Size() (n int) { if m == nil { return 0 @@ -59125,6 +59061,24 @@ func (m *PluginStaticCredentialsOAuthClientSecret) Size() (n int) { return n } +func (m *PluginStaticCredentialsSSHCertAuthorities) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.CertAuthorities) > 0 { + for _, e := range m.CertAuthorities { + l = e.Size() + n += 1 + l + sovTypes(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *SAMLIdPServiceProviderV1) Size() (n int) { if m == nil { return 0 @@ -59600,6 +59554,10 @@ func (m *IntegrationSpecV1) Size() (n int) { if m.SubKindSpec != nil { n += m.SubKindSpec.Size() } + if m.Credentials != nil { + l = m.Credentials.Size() + n += 1 + l + sovTypes(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -59696,56 +59654,6 @@ func (m *GitHubIntegrationSpecV1) Size() (n int) { if l > 0 { n += 1 + l + sovTypes(uint64(l)) } - if m.Proxy != nil { - l = m.Proxy.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *GitHubProxy) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.CertAuthorities) > 0 { - for _, e := range m.CertAuthorities { - l = e.Size() - n += 1 + l + sovTypes(uint64(l)) - } - } - if m.Connector != nil { - l = m.Connector.Size() - n += 1 + l + sovTypes(uint64(l)) - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *GitHubProxyConnector) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.ClientID) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.ClientSecret) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } - l = len(m.RedirectURL) - if l > 0 { - n += 1 + l + sovTypes(uint64(l)) - } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -123441,6 +123349,41 @@ func (m *PluginStaticCredentialsSpecV1) Unmarshal(dAtA []byte) error { } m.Credentials = &PluginStaticCredentialsSpecV1_OAuthClientSecret{v} iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SSHCertAuthorities", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &PluginStaticCredentialsSSHCertAuthorities{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Credentials = &PluginStaticCredentialsSpecV1_SSHCertAuthorities{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -123693,7 +123636,7 @@ func (m *PluginStaticCredentialsOAuthClientSecret) Unmarshal(dAtA []byte) error } return nil } -func (m *SAMLIdPServiceProviderV1) Unmarshal(dAtA []byte) error { +func (m *PluginStaticCredentialsSSHCertAuthorities) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -123716,48 +123659,133 @@ func (m *SAMLIdPServiceProviderV1) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: SAMLIdPServiceProviderV1: wiretype end group for non-group") + return fmt.Errorf("proto: PluginStaticCredentialsSSHCertAuthorities: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: SAMLIdPServiceProviderV1: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PluginStaticCredentialsSSHCertAuthorities: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ResourceHeader", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ResourceHeader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field CertAuthorities", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CertAuthorities = append(m.CertAuthorities, &SSHKeyPair{}) + if err := m.CertAuthorities[len(m.CertAuthorities)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SAMLIdPServiceProviderV1) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SAMLIdPServiceProviderV1: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SAMLIdPServiceProviderV1: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceHeader", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ResourceHeader.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -126735,6 +126763,42 @@ func (m *IntegrationSpecV1) Unmarshal(dAtA []byte) error { } m.SubKindSpec = &IntegrationSpecV1_GitHub{v} iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Credentials", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Credentials == nil { + m.Credentials = &PluginCredentialsV1{} + } + if err := m.Credentials.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -127080,310 +127144,6 @@ func (m *GitHubIntegrationSpecV1) Unmarshal(dAtA []byte) error { } m.Organization = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Proxy", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Proxy == nil { - m.Proxy = &GitHubProxy{} - } - if err := m.Proxy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GitHubProxy) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GitHubProxy: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GitHubProxy: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CertAuthorities", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.CertAuthorities = append(m.CertAuthorities, &SSHKeyPair{}) - if err := m.CertAuthorities[len(m.CertAuthorities)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Connector", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthTypes - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthTypes - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Connector == nil { - m.Connector = &GitHubProxyConnector{} - } - if err := m.Connector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTypes - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *GitHubProxyConnector) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: GitHubProxyConnector: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: GitHubProxyConnector: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClientID", 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.ClientID = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ClientSecret", 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.ClientSecret = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RedirectURL", 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.RedirectURL = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) diff --git a/lib/auth/auth.go b/lib/auth/auth.go index dcbcf632b598d..e8fb01a506f58 100644 --- a/lib/auth/auth.go +++ b/lib/auth/auth.go @@ -329,6 +329,12 @@ func NewServer(cfg *InitConfig, opts ...ServerOption) (*Server, error) { return nil, trace.Wrap(err) } } + if cfg.PluginStaticCredentials == nil { + cfg.PluginStaticCredentials, err = local.NewPluginStaticCredentialsService(cfg.Backend) + if err != nil { + return nil, trace.Wrap(err) + } + } if cfg.UserTasks == nil { cfg.UserTasks, err = local.NewUserTasksService(cfg.Backend) if err != nil { @@ -483,6 +489,7 @@ func NewServer(cfg *InitConfig, opts ...ServerOption) (*Server, error) { StaticHostUser: cfg.StaticHostUsers, ProvisioningStates: cfg.ProvisioningStates, IdentityCenter: cfg.IdentityCenter, + PluginStaticCredentials: cfg.PluginStaticCredentials, } as := Server{ @@ -693,6 +700,7 @@ type Services struct { services.AutoUpdateService services.ProvisioningStates services.IdentityCenter + services.PluginStaticCredentials } // GetWebSession returns existing web session described by req. diff --git a/lib/auth/init.go b/lib/auth/init.go index 36ca37518e68b..16316c2b173c4 100644 --- a/lib/auth/init.go +++ b/lib/auth/init.go @@ -335,6 +335,9 @@ type InitConfig struct { // IdentityCenter is the Identity Center state storage service to use in // this node. IdentityCenter services.IdentityCenter + + // PluginStaticCredentials handles credentials for integrations and plugins. + PluginStaticCredentials services.PluginStaticCredentials } // Init instantiates and configures an instance of AuthServer diff --git a/lib/auth/integration/integrationv1/credentials.go b/lib/auth/integration/integrationv1/credentials.go new file mode 100644 index 0000000000000..f3e3b765aec81 --- /dev/null +++ b/lib/auth/integration/integrationv1/credentials.go @@ -0,0 +1,227 @@ +/* + * 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 integrationv1 + +import ( + "context" + "maps" + + "github.com/google/uuid" + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/lib/cryptosuites" + "github.com/gravitational/trace" +) + +const ( + // labelStaticCredentialsIntegration is the label used to store the + // UUID ref in the static credentials. + labelStaticCredentialsIntegration = types.TeleportInternalLabelPrefix + types.KindIntegration + // labelStaticCredentialsPurpose is the label used to store the purpose of + // the static credentials. + labelStaticCredentialsPurpose = "purpose" + + // purposeGitHubSSHCA is the label value that indicates the static + // credentials contains the GitHub SSH CA. + purposeGitHubSSHCA = "github-sshca" + // purposeGitHubOAuth is the label value that indicates the static + // credentials contains the GitHub OAuth ID and secret. + purposeGitHubOAuth = "github-oauth" +) + +func newStaticCredentialsRef(uuid string) *types.PluginStaticCredentialsRef { + return &types.PluginStaticCredentialsRef{ + Labels: map[string]string{ + labelStaticCredentialsIntegration: uuid, + }, + } +} + +func copyRefLabels(cred types.PluginStaticCredentials, ref *types.PluginStaticCredentialsRef) { + labels := cred.GetStaticLabels() + if labels == nil { + labels = make(map[string]string) + } + maps.Copy(labels, ref.Labels) + + cred.SetStaticLabels(labels) +} + +func buildGitHubOAuthCredentials(ig types.Integration) (*types.PluginStaticCredentialsV1, error) { + if ig.GetCredentials() == nil || ig.GetCredentials().GetIdSecret() == nil { + return nil, trace.BadParameter("GitHub integration requires OAuth ID and secret for credentials") + } + + return &types.PluginStaticCredentialsV1{ + ResourceHeader: types.ResourceHeader{ + Metadata: types.Metadata{ + Name: uuid.NewString(), + Labels: map[string]string{ + labelStaticCredentialsPurpose: purposeGitHubOAuth, + }, + }, + }, + Spec: &types.PluginStaticCredentialsSpecV1{ + Credentials: &types.PluginStaticCredentialsSpecV1_OAuthClientSecret{ + OAuthClientSecret: &types.PluginStaticCredentialsOAuthClientSecret{ + ClientId: ig.GetCredentials().GetIdSecret().Id, + ClientSecret: ig.GetCredentials().GetIdSecret().Secret, + }, + }, + }, + }, nil +} + +func (s *Service) newGitHubSSHCA(ctx context.Context) (*types.PluginStaticCredentialsV1, error) { + ca, err := s.keyStoreManager.NewSSHKeyPair(ctx, cryptosuites.GitHubProxyCASSH) + if err != nil { + return nil, trace.Wrap(err) + } + return &types.PluginStaticCredentialsV1{ + ResourceHeader: types.ResourceHeader{ + Metadata: types.Metadata{ + Name: uuid.NewString(), + Labels: map[string]string{ + labelStaticCredentialsPurpose: purposeGitHubSSHCA, + }, + }, + }, + Spec: &types.PluginStaticCredentialsSpecV1{ + Credentials: &types.PluginStaticCredentialsSpecV1_SSHCertAuthorities{ + SSHCertAuthorities: &types.PluginStaticCredentialsSSHCertAuthorities{ + CertAuthorities: []*types.SSHKeyPair{ca}, + }, + }, + }, + }, nil +} + +func (s *Service) createGitHubCredentials(ctx context.Context, ig types.Integration) error { + var creds []types.PluginStaticCredentials + + if oauthCred, err := buildGitHubOAuthCredentials(ig); err != nil { + return trace.Wrap(err) + } else { + creds = append(creds, oauthCred) + } + + // TODO(greedy52) support per auth CA like HSM. + if caCred, err := s.newGitHubSSHCA(ctx); err != nil { + return trace.Wrap(err) + } else { + creds = append(creds, caCred) + } + + return trace.Wrap(s.createStaticCredentials(ctx, ig, creds...)) +} + +func (s *Service) createStaticCredentials(ctx context.Context, ig types.Integration, creds ...types.PluginStaticCredentials) error { + ref := newStaticCredentialsRef(uuid.NewString()) + + for _, cred := range creds { + s.logger.DebugContext(ctx, "Creating static credentials.", "integration", ig.GetName(), "labels", cred.GetStaticLabels()) + copyRefLabels(cred, ref) + if err := s.backend.CreatePluginStaticCredentials(ctx, cred); err != nil { + return trace.Wrap(err) + } + } + + ig.SetCredentials(&types.PluginCredentialsV1{ + Credentials: &types.PluginCredentialsV1_StaticCredentialsRef{ + StaticCredentialsRef: ref, + }, + }) + return nil +} + +func (s *Service) maybeUpdateStaticCredentials(ctx context.Context, newIg types.Integration) error { + oldIg, err := s.backend.GetIntegration(ctx, newIg.GetName()) + if err != nil { + return trace.Wrap(err) + } + + // Preserve existing credentials. + if newIg.GetCredentials() == nil { + newIg.SetCredentials(oldIg.GetCredentials()) + return nil + } + + switch newIg.GetSubKind() { + case types.IntegrationSubKindGitHub: + if oauthCred, err := buildGitHubOAuthCredentials(newIg); err != nil { + return trace.Wrap(err) + } else { + // Copy ref. + newIg.SetCredentials(oldIg.GetCredentials()) + return trace.Wrap(s.updateStaticCredentials(ctx, newIg, oauthCred)) + } + } + return nil +} + +func (s *Service) updateStaticCredentials(ctx context.Context, ig types.Integration, creds ...types.PluginStaticCredentials) error { + if ig.GetCredentials() == nil || ig.GetCredentials().GetStaticCredentialsRef() == nil { + return trace.BadParameter("missing credentials ref") + } + + ref := ig.GetCredentials().GetStaticCredentialsRef() + for _, cred := range creds { + s.logger.DebugContext(ctx, "Updating static credentials.", "integration", ig.GetName(), "labels", cred.GetStaticLabels()) + + // Use same labels to find existing credentials. + copyRefLabels(cred, ref) + oldCreds, err := s.backend.GetPluginStaticCredentialsByLabels(ctx, cred.GetStaticLabels()) + if err != nil { + return trace.Wrap(err) + } + if len(oldCreds) != 1 { + return trace.CompareFailed("expecting one credential but got %v", len(oldCreds)) + } + + cred.SetName(oldCreds[0].GetName()) + cred.SetRevision(oldCreds[0].GetRevision()) + if _, err := s.backend.UpdatePluginStaticCredentials(ctx, cred); err != nil { + return trace.Wrap(err) + } + } + return nil +} + +func (s *Service) removeStaticCredentials(ctx context.Context, ig types.Integration) error { + if ig.GetCredentials() == nil { + return nil + } + + ref := ig.GetCredentials().GetStaticCredentialsRef() + if ref == nil { + return trace.NotFound("missing static credentials ref") + } + + staticCreds, err := s.backend.GetPluginStaticCredentialsByLabels(ctx, ref.Labels) + if err != nil { + return trace.Wrap(err) + } + var errors []error + for _, cred := range staticCreds { + s.logger.DebugContext(ctx, "Removing static credentials.", "integration", ig.GetName(), "labels", cred.GetStaticLabels()) + if err := s.backend.DeletePluginStaticCredentials(ctx, cred.GetName()); err != nil { + errors = append(errors, err) + } + } + return trace.NewAggregate(err) +} diff --git a/lib/auth/integration/integrationv1/service.go b/lib/auth/integration/integrationv1/service.go index 4400768078f26..1587ed1135950 100644 --- a/lib/auth/integration/integrationv1/service.go +++ b/lib/auth/integration/integrationv1/service.go @@ -65,11 +65,18 @@ type KeyStoreManager interface { GetSSHSignerFromKeySet(ctx context.Context, keySet types.CAKeySet) (ssh.Signer, error) } +// Backend defines the interface for all the backend services that the +// integration service needs. +type Backend interface { + services.Integrations + services.PluginStaticCredentials +} + // ServiceConfig holds configuration options for // the Integration gRPC service. type ServiceConfig struct { Authorizer authz.Authorizer - Backend services.Integrations + Backend Backend Cache Cache KeyStoreManager KeyStoreManager Logger *slog.Logger @@ -118,7 +125,7 @@ type Service struct { authorizer authz.Authorizer cache Cache keyStoreManager KeyStoreManager - backend services.Integrations + backend Backend logger *slog.Logger clock clockwork.Clock emitter apievents.Emitter @@ -161,6 +168,7 @@ func (s *Service) ListIntegrations(ctx context.Context, req *integrationpb.ListI igs := make([]*types.IntegrationV1, len(results)) for i, r := range results { + r = r.WithoutCredentials() v1, ok := r.(*types.IntegrationV1) if !ok { return nil, trace.BadParameter("unexpected Integration type %T", r) @@ -184,12 +192,13 @@ func (s *Service) GetIntegration(ctx context.Context, req *integrationpb.GetInte if err := authCtx.CheckAccessToKind(types.KindIntegration, types.VerbRead); err != nil { return nil, trace.Wrap(err) } - integration, err := s.cache.GetIntegration(ctx, req.GetName()) if err != nil { return nil, trace.Wrap(err) } + // Credentials are not used outside of Auth service. + integration = integration.WithoutCredentials() igV1, ok := integration.(*types.IntegrationV1) if !ok { return nil, trace.BadParameter("unexpected Integration type %T", integration) @@ -198,25 +207,6 @@ func (s *Service) GetIntegration(ctx context.Context, req *integrationpb.GetInte return igV1, nil } -func (s *Service) initIntegrationResource(ctx context.Context, req *integrationpb.CreateIntegrationRequest) (*types.IntegrationV1, error) { - ig := req.GetIntegration() - switch ig.GetSubKind() { - case types.IntegrationSubKindGitHub: - spec := ig.GetGitHubIntegrationSpec() - if spec.Proxy == nil { - spec.Proxy = &types.GitHubProxy{} - } - // Generate SSH CA for the integration. - // TODO(greedy52) support per auth CA like HSM. - ca, err := s.keyStoreManager.NewSSHKeyPair(ctx, cryptosuites.GitHubProxyCASSH) - if err != nil { - return nil, trace.Wrap(err) - } - spec.Proxy.CertAuthorities = append(spec.Proxy.CertAuthorities, ca) - } - return ig, nil -} - // CreateIntegration creates a new Okta import rule resource. func (s *Service) CreateIntegration(ctx context.Context, req *integrationpb.CreateIntegrationRequest) (*types.IntegrationV1, error) { authCtx, err := s.authorizer.Authorize(ctx) @@ -228,11 +218,15 @@ func (s *Service) CreateIntegration(ctx context.Context, req *integrationpb.Crea return nil, trace.Wrap(err) } - reqIg, err := s.initIntegrationResource(ctx, req) - if err != nil { - return nil, trace.Wrap(err) + switch req.Integration.GetSubKind() { + case types.IntegrationSubKindGitHub: + // TODO(greedy52) add entitlement check + if err := s.createGitHubCredentials(ctx, req.Integration); err != nil { + return nil, trace.Wrap(err) + } } - ig, err := s.backend.CreateIntegration(ctx, reqIg) + + ig, err := s.backend.CreateIntegration(ctx, req.Integration) if err != nil { return nil, trace.Wrap(err) } @@ -258,6 +252,7 @@ func (s *Service) CreateIntegration(ctx context.Context, req *integrationpb.Crea s.logger.WarnContext(ctx, "Failed to emit integration create event.", "error", err) } + ig = ig.WithoutCredentials() igV1, ok := ig.(*types.IntegrationV1) if !ok { return nil, trace.BadParameter("unexpected Integration type %T", ig) @@ -266,7 +261,7 @@ func (s *Service) CreateIntegration(ctx context.Context, req *integrationpb.Crea return igV1, nil } -// UpdateIntegration updates an existing Okta import rule resource. +// UpdateIntegration updates an existing integration. func (s *Service) UpdateIntegration(ctx context.Context, req *integrationpb.UpdateIntegrationRequest) (*types.IntegrationV1, error) { authCtx, err := s.authorizer.Authorize(ctx) if err != nil { @@ -277,11 +272,16 @@ func (s *Service) UpdateIntegration(ctx context.Context, req *integrationpb.Upda return nil, trace.Wrap(err) } - ig, err := s.backend.UpdateIntegration(ctx, req.GetIntegration()) + if err := s.maybeUpdateStaticCredentials(ctx, req.Integration); err != nil { + return nil, trace.Wrap(err) + } + + ig, err := s.backend.UpdateIntegration(ctx, req.Integration) if err != nil { return nil, trace.Wrap(err) } + ig = ig.WithoutCredentials() igMeta, err := getIntegrationMetadata(ig) if err != nil { s.logger.WarnContext(ctx, "Failed to build all integration metadata for audit event.", "error", err) @@ -327,6 +327,10 @@ func (s *Service) DeleteIntegration(ctx context.Context, req *integrationpb.Dele return nil, trace.Wrap(err) } + if err := s.removeStaticCredentials(ctx, ig); err != nil { + return nil, trace.Wrap(err) + } + if err := s.backend.DeleteIntegration(ctx, req.GetName()); err != nil { return nil, trace.Wrap(err) } diff --git a/lib/auth/integration/integrationv1/service_test.go b/lib/auth/integration/integrationv1/service_test.go index 5e8af860e5ffb..6bf73b4897157 100644 --- a/lib/auth/integration/integrationv1/service_test.go +++ b/lib/auth/integration/integrationv1/service_test.go @@ -24,6 +24,7 @@ import ( "github.com/google/uuid" "github.com/gravitational/trace" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" integrationpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/integration/v1" @@ -62,37 +63,44 @@ func TestIntegrationCRUD(t *testing.T) { return ig } + newGitHubIntegration := func(name, id, secret string) (*types.IntegrationV1, error) { + ig, err := types.NewIntegrationGitHub( + types.Metadata{ + Name: name, + }, + &types.GitHubIntegrationSpecV1{ + Organization: "my-org", + }, + ) + if err != nil { + return nil, trace.Wrap(err) + } + + if secret != "" { + ig.SetCredentials(&types.PluginCredentialsV1{ + Credentials: &types.PluginCredentialsV1_IdSecret{ + IdSecret: &types.PluginIdSecretCredential{ + Id: id, + Secret: secret, + }, + }, + }) + } + return ig, nil + } + tt := []struct { Name string Role types.RoleSpecV6 Setup func(t *testing.T, igName string) Test func(ctx context.Context, resourceSvc *Service, igName string) error + Validate func(t *testing.T, igName string) Cleanup func(t *testing.T, igName string) ErrAssertion func(error) bool }{ // Read { Name: "allowed read access to integrations", - Role: types.RoleSpecV6{ - Allow: types.RoleConditions{Rules: []types.Rule{{ - Resources: []string{types.KindIntegration}, - Verbs: []string{types.VerbReadNoSecrets}, - }}}, - }, - Setup: func(t *testing.T, igName string) { - _, err := localClient.CreateIntegration(ctx, sampleIntegrationFn(t, igName)) - require.NoError(t, err) - }, - Test: func(ctx context.Context, resourceSvc *Service, igName string) error { - _, err := resourceSvc.GetIntegration(ctx, &integrationpb.GetIntegrationRequest{ - Name: igName, - }) - return err - }, - ErrAssertion: noError, - }, - { - Name: "allowed read access to integrations with secrets", Role: types.RoleSpecV6{ Allow: types.RoleConditions{Rules: []types.Rule{{ Resources: []string{types.KindIntegration}, @@ -105,8 +113,7 @@ func TestIntegrationCRUD(t *testing.T) { }, Test: func(ctx context.Context, resourceSvc *Service, igName string) error { _, err := resourceSvc.GetIntegration(ctx, &integrationpb.GetIntegrationRequest{ - Name: igName, - WithSecrets: true, + Name: igName, }) return err }, @@ -123,23 +130,6 @@ func TestIntegrationCRUD(t *testing.T) { }, ErrAssertion: trace.IsAccessDenied, }, - { - Name: "no access to read integrations with secrets", - Role: types.RoleSpecV6{ - Allow: types.RoleConditions{Rules: []types.Rule{{ - Resources: []string{types.KindIntegration}, - Verbs: []string{types.VerbReadNoSecrets}, - }}}, - }, - Test: func(ctx context.Context, resourceSvc *Service, igName string) error { - _, err := resourceSvc.GetIntegration(ctx, &integrationpb.GetIntegrationRequest{ - Name: igName, - WithSecrets: true, - }) - return err - }, - ErrAssertion: trace.IsAccessDenied, - }, { Name: "denied access to read integrations", Role: types.RoleSpecV6{ @@ -198,24 +188,6 @@ func TestIntegrationCRUD(t *testing.T) { }, ErrAssertion: trace.IsAccessDenied, }, - { - Name: "no list access to integrations with secrets", - Role: types.RoleSpecV6{ - Allow: types.RoleConditions{Rules: []types.Rule{{ - Resources: []string{types.KindIntegration}, - Verbs: []string{types.VerbList, types.VerbReadNoSecrets}, - }}}, - }, - Test: func(ctx context.Context, resourceSvc *Service, igName string) error { - _, err := resourceSvc.ListIntegrations(ctx, &integrationpb.ListIntegrationsRequest{ - Limit: 0, - NextKey: "", - WithSecrets: true, - }) - return err - }, - ErrAssertion: trace.IsAccessDenied, - }, // Create { @@ -244,7 +216,7 @@ func TestIntegrationCRUD(t *testing.T) { ErrAssertion: noError, }, { - Name: "create github integrations with generated CAs", + Name: "create github integrations", Role: types.RoleSpecV6{ Allow: types.RoleConditions{Rules: []types.Rule{{ Resources: []string{types.KindIntegration}, @@ -252,30 +224,16 @@ func TestIntegrationCRUD(t *testing.T) { }}}, }, Test: func(ctx context.Context, resourceSvc *Service, igName string) error { - ig, err := types.NewIntegrationGitHub( - types.Metadata{Name: igName}, - &types.GitHubIntegrationSpecV1{ - Organization: "my-org", - }, - ) + ig, err := newGitHubIntegration(igName, "id", "secret") if err != nil { return trace.Wrap(err) } - created, err := resourceSvc.CreateIntegration(ctx, &integrationpb.CreateIntegrationRequest{Integration: ig}) - if err != nil { - return trace.Wrap(err) - } - spec := created.GetGitHubIntegrationSpec() - if spec == nil || spec.Proxy == nil || len(spec.Proxy.CertAuthorities) == 0 { - return trace.BadParameter("missing CAs") - } - for _, ca := range spec.Proxy.CertAuthorities { - if len(ca.PublicKey) == 0 || len(ca.PrivateKey) == 0 { - return trace.BadParameter("missing CA keys") - } - } - return nil + _, err = resourceSvc.CreateIntegration(ctx, &integrationpb.CreateIntegrationRequest{Integration: ig}) + return trace.Wrap(err) + }, + Validate: func(t *testing.T, igName string) { + mustFindGitHubCredentials(t, localClient, igName, "id", "secret") }, ErrAssertion: noError, }, @@ -310,6 +268,66 @@ func TestIntegrationCRUD(t *testing.T) { }, ErrAssertion: noError, }, + { + Name: "credentials updated", + Role: types.RoleSpecV6{ + Allow: types.RoleConditions{Rules: []types.Rule{{ + Resources: []string{types.KindIntegration}, + Verbs: []string{types.VerbUpdate, types.VerbCreate}, + }}}, + }, + Test: func(ctx context.Context, resourceSvc *Service, igName string) error { + oldIg, err := newGitHubIntegration(igName, "id", "secret") + if err != nil { + return trace.Wrap(err) + } + _, err = resourceSvc.CreateIntegration(ctx, &integrationpb.CreateIntegrationRequest{Integration: oldIg}) + if err != nil { + return trace.Wrap(err) + } + + newIg, err := newGitHubIntegration(igName, "new-id", "new-secret") + if err != nil { + return trace.Wrap(err) + } + _, err = resourceSvc.UpdateIntegration(ctx, &integrationpb.UpdateIntegrationRequest{Integration: newIg}) + return err + }, + Validate: func(t *testing.T, igName string) { + mustFindGitHubCredentials(t, localClient, igName, "new-id", "new-secret") + }, + ErrAssertion: noError, + }, + { + Name: "credentials preserved", + Role: types.RoleSpecV6{ + Allow: types.RoleConditions{Rules: []types.Rule{{ + Resources: []string{types.KindIntegration}, + Verbs: []string{types.VerbUpdate, types.VerbCreate}, + }}}, + }, + Test: func(ctx context.Context, resourceSvc *Service, igName string) error { + oldIg, err := newGitHubIntegration(igName, "id", "secret") + if err != nil { + return trace.Wrap(err) + } + _, err = resourceSvc.CreateIntegration(ctx, &integrationpb.CreateIntegrationRequest{Integration: oldIg}) + if err != nil { + return trace.Wrap(err) + } + + newIg, err := newGitHubIntegration(igName, "", "") + if err != nil { + return trace.Wrap(err) + } + _, err = resourceSvc.UpdateIntegration(ctx, &integrationpb.UpdateIntegrationRequest{Integration: newIg}) + return err + }, + Validate: func(t *testing.T, igName string) { + mustFindGitHubCredentials(t, localClient, igName, "id", "secret") + }, + ErrAssertion: noError, + }, // Delete { @@ -413,6 +431,68 @@ func TestIntegrationCRUD(t *testing.T) { }, ErrAssertion: noError, }, + { + Name: "credentials are also deleted", + Role: types.RoleSpecV6{ + Allow: types.RoleConditions{Rules: []types.Rule{{ + Resources: []string{types.KindIntegration}, + Verbs: []string{types.VerbDelete}, + }}}, + }, + Setup: func(t *testing.T, igName string) { + t.Helper() + + ig := sampleIntegrationFn(t, igName) + refUUID := uuid.NewString() + ig.SetCredentials(&types.PluginCredentialsV1{ + Credentials: &types.PluginCredentialsV1_StaticCredentialsRef{ + StaticCredentialsRef: newStaticCredentialsRef(refUUID), + }, + }) + + _, err := localClient.CreateIntegration(ctx, ig) + require.NoError(t, err) + + // Save a fake credentials that can be found using igName. + cred := &types.PluginStaticCredentialsV1{ + ResourceHeader: types.ResourceHeader{ + Metadata: types.Metadata{ + Name: igName, + Labels: map[string]string{ + labelStaticCredentialsIntegration: refUUID, + labelStaticCredentialsPurpose: "test", + }, + }, + }, + Spec: &types.PluginStaticCredentialsSpecV1{ + Credentials: &types.PluginStaticCredentialsSpecV1_OAuthClientSecret{ + OAuthClientSecret: &types.PluginStaticCredentialsOAuthClientSecret{ + ClientId: "id", + ClientSecret: "secret", + }, + }, + }, + } + err = localClient.CreatePluginStaticCredentials(ctx, cred) + require.NoError(t, err) + + // double-check + staticCreds, err := localClient.GetPluginStaticCredentials(context.Background(), igName) + require.NoError(t, err) + require.NotNil(t, staticCreds) + }, + Test: func(ctx context.Context, resourceSvc *Service, igName string) error { + _, err := resourceSvc.DeleteIntegration(ctx, &integrationpb.DeleteIntegrationRequest{Name: igName}) + return err + }, + Validate: func(t *testing.T, igName string) { + t.Helper() + _, err := localClient.GetPluginStaticCredentials(context.Background(), igName) + require.Error(t, err) + require.True(t, trace.IsNotFound(err)) + }, + ErrAssertion: noError, + }, // Delete all { @@ -447,6 +527,11 @@ func TestIntegrationCRUD(t *testing.T) { err := tc.Test(localCtx, resourceSvc, igName) require.True(t, tc.ErrAssertion(err), err) + + // Extra validation + if tc.Validate != nil { + tc.Validate(t, igName) + } }) } } @@ -479,13 +564,14 @@ func authorizerForDummyUser(t *testing.T, ctx context.Context, roleSpec types.Ro type localClient interface { CreateUser(ctx context.Context, user types.User) (types.User, error) CreateRole(ctx context.Context, role types.Role) (types.Role, error) - CreateIntegration(ctx context.Context, ig types.Integration) (types.Integration, error) GenerateDraftExternalAuditStorage(ctx context.Context, integrationName, region string) (*externalauditstorage.ExternalAuditStorage, error) DeleteDraftExternalAuditStorage(ctx context.Context) error PromoteToClusterExternalAuditStorage(ctx context.Context) error DisableClusterExternalAuditStorage(ctx context.Context) error CreatePlugin(ctx context.Context, plugin types.Plugin) error DeletePlugin(ctx context.Context, name string) error + services.PluginStaticCredentials + services.Integrations } type testClient struct { @@ -544,6 +630,16 @@ func initSvc(t *testing.T, ca types.CertAuthority, clusterName string, proxyPubl localResourceService, err := local.NewIntegrationsService(backend) require.NoError(t, err) + localCredService, err := local.NewPluginStaticCredentialsService(backend) + require.NoError(t, err) + + backendSvc := struct { + services.Integrations + services.PluginStaticCredentials + }{ + Integrations: localResourceService, + PluginStaticCredentials: localCredService, + } cacheResourceService, err := local.NewIntegrationsService(backend, local.WithIntegrationsServiceCacheMode(true)) require.NoError(t, err) @@ -560,7 +656,7 @@ func initSvc(t *testing.T, ca types.CertAuthority, clusterName string, proxyPubl } resourceSvc, err := NewService(&ServiceConfig{ - Backend: localResourceService, + Backend: backendSvc, Authorizer: authorizer, Cache: cache, KeyStoreManager: keystore.NewSoftwareKeystoreForTests(t), @@ -574,12 +670,14 @@ func initSvc(t *testing.T, ca types.CertAuthority, clusterName string, proxyPubl *local.ExternalAuditStorageService *local.IntegrationsService *local.PluginsService + *local.PluginStaticCredentialsService }{ - AccessService: roleSvc, - IdentityService: userSvc, - ExternalAuditStorageService: easSvc, - IntegrationsService: localResourceService, - PluginsService: pluginSvc, + AccessService: roleSvc, + IdentityService: userSvc, + ExternalAuditStorageService: easSvc, + IntegrationsService: localResourceService, + PluginsService: pluginSvc, + PluginStaticCredentialsService: localCredService, }, resourceSvc } @@ -670,3 +768,33 @@ func newPlugin(t *testing.T, integrationName string) *types.PluginV1 { }, } } + +func mustFindGitHubCredentials(t *testing.T, localClient Backend, igName, wantId, wantSecret string) { + t.Helper() + + ig, err := localClient.GetIntegration(context.Background(), igName) + require.NoError(t, err) + + creds := ig.GetCredentials() + require.NotNil(t, creds) + require.NotNil(t, creds.GetStaticCredentialsRef()) + + staticCreds, err := localClient.GetPluginStaticCredentialsByLabels(context.Background(), creds.GetStaticCredentialsRef().Labels) + require.NoError(t, err) + require.Len(t, staticCreds, 2) + + var seenSSHCA, seenOAuth bool + for _, cred := range staticCreds { + if len(cred.GetSSHCertAuthorities()) != 0 { + seenSSHCA = true + continue + } + if id, secret := cred.GetOAuthClientSecret(); id != "" { + assert.Equal(t, wantId, id) + assert.Equal(t, wantSecret, secret) + seenOAuth = true + } + } + assert.True(t, seenSSHCA) + assert.True(t, seenOAuth) +} diff --git a/lib/cache/cache.go b/lib/cache/cache.go index 6105f79955887..2ba3dbebfbbf5 100644 --- a/lib/cache/cache.go +++ b/lib/cache/cache.go @@ -172,7 +172,7 @@ func ForAuth(cfg Config) Config { {Kind: types.KindUserGroup}, {Kind: types.KindOktaImportRule}, {Kind: types.KindOktaAssignment}, - {Kind: types.KindIntegration, LoadSecrets: true}, + {Kind: types.KindIntegration}, {Kind: types.KindHeadlessAuthentication}, {Kind: types.KindUserLoginState}, {Kind: types.KindDiscoveryConfig}, diff --git a/lib/cache/cache_test.go b/lib/cache/cache_test.go index bdc1f7f0107e9..2bfb56ae2916e 100644 --- a/lib/cache/cache_test.go +++ b/lib/cache/cache_test.go @@ -2291,9 +2291,7 @@ func TestIntegrations(t *testing.T) { results, _, err := p.integrations.ListIntegrations(ctx, 0, "") return results, err }, - cacheGet: func(ctx context.Context, name string) (types.Integration, error) { - return p.cache.GetIntegration(ctx, name) - }, + cacheGet: p.cache.GetIntegration, cacheList: func(ctx context.Context) ([]types.Integration, error) { results, _, err := p.cache.ListIntegrations(ctx, 0, "") return results, err diff --git a/lib/integrations/awsoidc/credprovider/integration_config_provider.go b/lib/integrations/awsoidc/credprovider/integration_config_provider.go index f19aed7ae704b..a98ba7a2b55ff 100644 --- a/lib/integrations/awsoidc/credprovider/integration_config_provider.go +++ b/lib/integrations/awsoidc/credprovider/integration_config_provider.go @@ -83,7 +83,7 @@ type Config struct { type integrationGetter interface { // GetIntegration returns an integration by name from the backend. - GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) + GetIntegration(ctx context.Context, name string) (types.Integration, error) } type tokenGenerator interface { @@ -115,7 +115,7 @@ func (c *Config) checkAndSetDefaults() error { } func newAWSCredCache(ctx context.Context, cfg Config, stsClient stscreds.AssumeRoleWithWebIdentityAPIClient) (*CredentialsCache, error) { - integration, err := cfg.IntegrationGetter.GetIntegration(ctx, cfg.IntegrationName, false) + integration, err := cfg.IntegrationGetter.GetIntegration(ctx, cfg.IntegrationName) if err != nil { return nil, trace.Wrap(err) } diff --git a/tool/tctl/common/plugin/plugins_command_test.go b/tool/tctl/common/plugin/plugins_command_test.go index 4f838c74a13d0..3254e813ee205 100644 --- a/tool/tctl/common/plugin/plugins_command_test.go +++ b/tool/tctl/common/plugin/plugins_command_test.go @@ -485,7 +485,7 @@ func (m *mockAuthClient) UpdateIntegration(ctx context.Context, ig types.Integra return result.Get(0).(types.Integration), result.Error(1) } -func (m *mockAuthClient) GetIntegration(ctx context.Context, name string, withSecrets bool) (types.Integration, error) { +func (m *mockAuthClient) GetIntegration(ctx context.Context, name string) (types.Integration, error) { result := m.Called(ctx, name) return result.Get(0).(types.Integration), result.Error(1) } From 29552cd0a0f1a15b96d62c2947747d159955a7a5 Mon Sep 17 00:00:00 2001 From: STeve Huang Date: Sat, 23 Nov 2024 13:31:12 -0500 Subject: [PATCH 5/6] address review comments --- api/types/integration.go | 13 +++++-------- lib/auth/integration/integrationv1/credentials.go | 6 +++--- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/api/types/integration.go b/api/types/integration.go index 36f8779ba4571..7999765930a71 100644 --- a/api/types/integration.go +++ b/api/types/integration.go @@ -276,10 +276,10 @@ func (s *IntegrationSpecV1_AzureOIDC) Validate() error { // CheckAndSetDefaults validates the configuration for GitHub integration subkind. func (s *IntegrationSpecV1_GitHub) CheckAndSetDefaults() error { if s == nil || s.GitHub == nil { - return trace.BadParameter("github is required for %q subkind", IntegrationSubKindGitHub) + return trace.BadParameter("github spec must be set for GitHub integrations", IntegrationSubKindGitHub) } if err := ValidateGitHubOrganizationName(s.GitHub.Organization); err != nil { - return trace.Wrap(err, "invalid organization name") + return trace.Wrap(err, "invalid GitHub organization name") } return nil } @@ -482,19 +482,19 @@ func (ig *IntegrationV1) MarshalJSON() ([]byte, error) { switch ig.SubKind { case IntegrationSubKindAWSOIDC: if ig.GetAWSOIDCIntegrationSpec() == nil { - return nil, trace.BadParameter("missing subkind data for %q subkind", ig.SubKind) + return nil, trace.BadParameter("missing spec for %q subkind", ig.SubKind) } d.Spec.AWSOIDC = *ig.GetAWSOIDCIntegrationSpec() case IntegrationSubKindAzureOIDC: if ig.GetAzureOIDCIntegrationSpec() == nil { - return nil, trace.BadParameter("missing subkind data for %q subkind", ig.SubKind) + return nil, trace.BadParameter("missing spec for %q subkind", ig.SubKind) } d.Spec.AzureOIDC = *ig.GetAzureOIDCIntegrationSpec() case IntegrationSubKindGitHub: if ig.GetGitHubIntegrationSpec() == nil { - return nil, trace.BadParameter("missing subkind data for %q subkind", ig.SubKind) + return nil, trace.BadParameter("missing spec for %q subkind", ig.SubKind) } d.Spec.GitHub = *ig.GetGitHubIntegrationSpec() default: @@ -522,9 +522,6 @@ func (ig *IntegrationV1) SetCredentials(creds PluginCredentials) error { // GetCredentials retrieves credentials. func (ig *IntegrationV1) GetCredentials() PluginCredentials { - if ig.Spec.Credentials == nil { - return nil - } return ig.Spec.Credentials } diff --git a/lib/auth/integration/integrationv1/credentials.go b/lib/auth/integration/integrationv1/credentials.go index f3e3b765aec81..08618938db2a8 100644 --- a/lib/auth/integration/integrationv1/credentials.go +++ b/lib/auth/integration/integrationv1/credentials.go @@ -134,7 +134,7 @@ func (s *Service) createStaticCredentials(ctx context.Context, ig types.Integrat ref := newStaticCredentialsRef(uuid.NewString()) for _, cred := range creds { - s.logger.DebugContext(ctx, "Creating static credentials.", "integration", ig.GetName(), "labels", cred.GetStaticLabels()) + s.logger.DebugContext(ctx, "Creating static credentials", "integration", ig.GetName(), "labels", cred.GetStaticLabels()) copyRefLabels(cred, ref) if err := s.backend.CreatePluginStaticCredentials(ctx, cred); err != nil { return trace.Wrap(err) @@ -181,7 +181,7 @@ func (s *Service) updateStaticCredentials(ctx context.Context, ig types.Integrat ref := ig.GetCredentials().GetStaticCredentialsRef() for _, cred := range creds { - s.logger.DebugContext(ctx, "Updating static credentials.", "integration", ig.GetName(), "labels", cred.GetStaticLabels()) + s.logger.DebugContext(ctx, "Updating static credentials", "integration", ig.GetName(), "labels", cred.GetStaticLabels()) // Use same labels to find existing credentials. copyRefLabels(cred, ref) @@ -218,7 +218,7 @@ func (s *Service) removeStaticCredentials(ctx context.Context, ig types.Integrat } var errors []error for _, cred := range staticCreds { - s.logger.DebugContext(ctx, "Removing static credentials.", "integration", ig.GetName(), "labels", cred.GetStaticLabels()) + s.logger.DebugContext(ctx, "Removing static credentials", "integration", ig.GetName(), "labels", cred.GetStaticLabels()) if err := s.backend.DeletePluginStaticCredentials(ctx, cred.GetName()); err != nil { errors = append(errors, err) } From 9a1609e4c7e8770963c137aa990513f07fd40ec2 Mon Sep 17 00:00:00 2001 From: STeve Huang Date: Sat, 23 Nov 2024 13:48:12 -0500 Subject: [PATCH 6/6] fix ut --- api/types/integration.go | 6 +++++- lib/auth/integration/integrationv1/credentials.go | 5 +++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/api/types/integration.go b/api/types/integration.go index 7999765930a71..175d6f2df4c10 100644 --- a/api/types/integration.go +++ b/api/types/integration.go @@ -276,7 +276,7 @@ func (s *IntegrationSpecV1_AzureOIDC) Validate() error { // CheckAndSetDefaults validates the configuration for GitHub integration subkind. func (s *IntegrationSpecV1_GitHub) CheckAndSetDefaults() error { if s == nil || s.GitHub == nil { - return trace.BadParameter("github spec must be set for GitHub integrations", IntegrationSubKindGitHub) + return trace.BadParameter("github spec must be set for GitHub integrations") } if err := ValidateGitHubOrganizationName(s.GitHub.Organization); err != nil { return trace.Wrap(err, "invalid GitHub organization name") @@ -522,6 +522,10 @@ func (ig *IntegrationV1) SetCredentials(creds PluginCredentials) error { // GetCredentials retrieves credentials. func (ig *IntegrationV1) GetCredentials() PluginCredentials { + // This function returns an interface so return nil explicitly. + if ig.Spec.Credentials == nil { + return nil + } return ig.Spec.Credentials } diff --git a/lib/auth/integration/integrationv1/credentials.go b/lib/auth/integration/integrationv1/credentials.go index 08618938db2a8..7ea4935461b42 100644 --- a/lib/auth/integration/integrationv1/credentials.go +++ b/lib/auth/integration/integrationv1/credentials.go @@ -23,9 +23,10 @@ import ( "maps" "github.com/google/uuid" + "github.com/gravitational/trace" + "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/lib/cryptosuites" - "github.com/gravitational/trace" ) const ( @@ -223,5 +224,5 @@ func (s *Service) removeStaticCredentials(ctx context.Context, ig types.Integrat errors = append(errors, err) } } - return trace.NewAggregate(err) + return trace.NewAggregate(errors...) }