diff --git a/.github/ISSUE_TEMPLATE/testplan.md b/.github/ISSUE_TEMPLATE/testplan.md index 7e461a7ee7038..b70df9c90ef6d 100644 --- a/.github/ISSUE_TEMPLATE/testplan.md +++ b/.github/ISSUE_TEMPLATE/testplan.md @@ -1141,6 +1141,7 @@ tsh bench sessions --max=5000 --web user ls - [ ] Azure Cache for Redis. - [ ] Elasticsearch. - [ ] Cassandra/ScyllaDB. + - [ ] Dynamodb. - [ ] Connect to a database within a remote cluster via a trusted cluster. - [ ] Self-hosted Postgres. - [ ] Self-hosted MySQL. @@ -1161,6 +1162,7 @@ tsh bench sessions --max=5000 --web user ls - [ ] Azure Cache for Redis. - [ ] Elasticsearch. - [ ] Cassandra/ScyllaDB. + - [ ] Dynamodb. - [ ] Verify audit events. - [ ] `db.session.start` is emitted when you connect. - [ ] `db.session.end` is emitted when you disconnect. diff --git a/api/proto/teleport/legacy/types/types.proto b/api/proto/teleport/legacy/types/types.proto index 5d1e5941d2a4e..a8f4f7b9f774e 100644 --- a/api/proto/teleport/legacy/types/types.proto +++ b/api/proto/teleport/legacy/types/types.proto @@ -399,6 +399,8 @@ message AWS { (gogoproto.nullable) = false, (gogoproto.jsontag) = "redshift_serverless,omitempty" ]; + // ExternalID is an optional AWS external ID used to enable assuming an AWS role across accounts. + string ExternalID = 10 [(gogoproto.jsontag) = "external_id,omitempty"]; } // SecretStore contains secret store configurations. diff --git a/api/types/database.go b/api/types/database.go index 2cd5df5731cd0..ee94aed36002a 100644 --- a/api/types/database.go +++ b/api/types/database.go @@ -390,6 +390,10 @@ func (d *DatabaseV3) IsAWSKeyspaces() bool { return d.GetType() == DatabaseTypeAWSKeyspaces } +func (d *DatabaseV3) IsDynamoDB() bool { + return d.GetType() == DatabaseTypeDynamoDB +} + // IsAWSHosted returns true if database is hosted by AWS. func (d *DatabaseV3) IsAWSHosted() bool { _, ok := d.getAWSType() @@ -405,8 +409,13 @@ func (d *DatabaseV3) IsCloudHosted() bool { // getAWSType returns the database type. func (d *DatabaseV3) getAWSType() (string, bool) { aws := d.GetAWS() - if aws.AccountID != "" && d.Spec.Protocol == DatabaseTypeCassandra { - return DatabaseTypeAWSKeyspaces, true + switch d.Spec.Protocol { + case DatabaseTypeCassandra: + if aws.AccountID != "" { + return DatabaseTypeAWSKeyspaces, true + } + case DatabaseTypeDynamoDB: + return DatabaseTypeDynamoDB, true } if aws.Redshift.ClusterID != "" { return DatabaseTypeRedshift, true @@ -491,6 +500,10 @@ func (d *DatabaseV3) CheckAndSetDefaults() error { if d.Spec.Protocol == "" { return trace.BadParameter("database %q protocol is empty", d.GetName()) } + if d.IsDynamoDB() { + // DynamoDB gets its own checking logic for its unusual config. + return trace.Wrap(d.handleDynamoDBConfig()) + } if d.Spec.URI == "" { switch { case d.IsAWSKeyspaces() && d.GetAWS().Region != "": @@ -604,11 +617,16 @@ func (d *DatabaseV3) CheckAndSetDefaults() error { return trace.BadParameter("database %q AWS account ID is empty", d.GetName()) } if d.Spec.AWS.Region == "" { - region, err := awsutils.CassandraEndpointRegion(d.Spec.URI) - if err != nil { - return trace.Wrap(err) + switch { + case d.IsAWSKeyspaces(): + region, err := awsutils.CassandraEndpointRegion(d.Spec.URI) + if err != nil { + return trace.Wrap(err) + } + d.Spec.AWS.Region = region + default: + return trace.BadParameter("database %q AWS region is empty", d.GetName()) } - d.Spec.AWS.Region = region } case azureutils.IsCacheForRedisEndpoint(d.Spec.URI): // ResourceID is required for fetching Redis tokens. @@ -651,6 +669,43 @@ func (d *DatabaseV3) CheckAndSetDefaults() error { return nil } +// handleDynamoDBConfig handles DynamoDB configuration checking. +func (d *DatabaseV3) handleDynamoDBConfig() error { + if d.Spec.AWS.AccountID == "" { + return trace.BadParameter("database %q AWS account ID is empty", d.GetName()) + } + + info, err := awsutils.ParseDynamoDBEndpoint(d.Spec.URI) + switch { + case err != nil: + // when region parsing returns an error but the region is set, it's ok because we can just construct the URI using the region, + // so we check if the region is configured to see if this is really a configuration error. + if d.Spec.AWS.Region == "" { + // the AWS region is empty and we can't derive it from the URI, so this is a config error. + return trace.BadParameter("database %q AWS region is empty and cannot be derived from the URI %q", + d.GetName(), d.Spec.URI) + } + if awsutils.IsAWSEndpoint(d.Spec.URI) { + // The user configured an AWS URI that which doesn't look like a DynamoDB endpoint. + // The URI must look like .. or . + return trace.Wrap(err) + } + case d.Spec.AWS.Region == "": + // if the AWS region is empty we can just use the region extracted from the URI. + d.Spec.AWS.Region = info.Region + case d.Spec.AWS.Region != info.Region: + // if the AWS region is not empty but doesn't match the URI, this may indicate a user configuration mistake. + return trace.BadParameter("database %q AWS region %q does not match the configured URI region %q, "+ + " omit the URI and it will be derived automatically for the configured AWS region", + d.GetName(), d.Spec.AWS.Region, info.Region) + } + + if d.Spec.URI == "" { + d.Spec.URI = awsutils.DynamoDBURIForRegion(d.Spec.AWS.Region) + } + return nil +} + // GetSecretStore returns secret store configurations. func (d *DatabaseV3) GetSecretStore() SecretStore { return d.Spec.AWS.SecretStore @@ -689,6 +744,8 @@ const ( DatabaseTypeAWSKeyspaces = "keyspace" // DatabaseTypeCassandra is AWS-hosted Keyspace database. DatabaseTypeCassandra = "cassandra" + // DatabaseTypeDynamoDB is a DynamoDB database. + DatabaseTypeDynamoDB = "dynamodb" ) // GetServerName returns the GCP database project and instance as ":". diff --git a/api/types/database_test.go b/api/types/database_test.go index aa3bd95e59e0e..3d9a00c12e8bf 100644 --- a/api/types/database_test.go +++ b/api/types/database_test.go @@ -19,6 +19,8 @@ package types import ( "testing" + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" "github.com/gravitational/trace" "github.com/stretchr/testify/require" ) @@ -538,3 +540,145 @@ func TestDatabaseSelfHosted(t *testing.T) { }) } } + +func TestDynamoDBConfig(t *testing.T) { + t.Parallel() + + tests := []struct { + desc string + uri string + region string + account string + wantSpec DatabaseSpecV3 + wantErrMsg string + }{ + { + desc: "account and region and empty URI is correct", + region: "us-west-1", + account: "12345", + wantSpec: DatabaseSpecV3{ + URI: "aws://dynamodb.us-west-1.amazonaws.com", + AWS: AWS{ + Region: "us-west-1", + AccountID: "12345", + }, + }, + }, + { + desc: "account and AWS URI and empty region is correct", + uri: "dynamodb.us-west-1.amazonaws.com", + account: "12345", + wantSpec: DatabaseSpecV3{ + URI: "dynamodb.us-west-1.amazonaws.com", + AWS: AWS{ + Region: "us-west-1", + AccountID: "12345", + }, + }, + }, + { + desc: "account and AWS streams dynamodb URI and empty region is correct", + uri: "streams.dynamodb.us-west-1.amazonaws.com", + account: "12345", + wantSpec: DatabaseSpecV3{ + URI: "streams.dynamodb.us-west-1.amazonaws.com", + AWS: AWS{ + Region: "us-west-1", + AccountID: "12345", + }, + }, + }, + { + desc: "account and AWS dax URI and empty region is correct", + uri: "dax.us-west-1.amazonaws.com", + account: "12345", + wantSpec: DatabaseSpecV3{ + URI: "dax.us-west-1.amazonaws.com", + AWS: AWS{ + Region: "us-west-1", + AccountID: "12345", + }, + }, + }, + { + desc: "account and region and matching AWS URI region is correct", + uri: "dynamodb.us-west-1.amazonaws.com", + region: "us-west-1", + account: "12345", + wantSpec: DatabaseSpecV3{ + URI: "dynamodb.us-west-1.amazonaws.com", + AWS: AWS{ + Region: "us-west-1", + AccountID: "12345", + }, + }, + }, + { + desc: "account and region and custom URI is correct", + uri: "localhost:8080", + region: "us-west-1", + account: "12345", + wantSpec: DatabaseSpecV3{ + URI: "localhost:8080", + AWS: AWS{ + Region: "us-west-1", + AccountID: "12345", + }, + }, + }, + { + desc: "region and different AWS URI region is an error", + uri: "dynamodb.us-west-2.amazonaws.com", + region: "us-west-1", + account: "12345", + wantErrMsg: "does not match the configured URI", + }, + { + desc: "invalid AWS URI is an error", + uri: "a.streams.dynamodb.us-west-1.amazonaws.com", + region: "us-west-1", + account: "12345", + wantErrMsg: "invalid DynamoDB endpoint", + }, + { + desc: "custom URI and empty region is an error", + uri: "localhost:8080", + account: "12345", + wantErrMsg: "region is empty", + }, + { + desc: "empty URI and empty region is an error", + account: "12345", + wantErrMsg: "region is empty", + }, + { + desc: "missing account id", + wantErrMsg: "account ID is empty", + }, + } + + for _, tt := range tests { + tt := tt + t.Run(tt.desc, func(t *testing.T) { + t.Parallel() + database, err := NewDatabaseV3(Metadata{ + Name: "test", + }, DatabaseSpecV3{ + Protocol: "dynamodb", + URI: tt.uri, + AWS: AWS{ + Region: tt.region, + AccountID: tt.account, + }, + }) + if tt.wantErrMsg != "" { + require.Error(t, err) + require.ErrorContains(t, err, tt.wantErrMsg) + return + } + require.NoError(t, err) + diff := cmp.Diff(tt.wantSpec, database.Spec, cmpopts.IgnoreFields(DatabaseSpecV3{}, "Protocol")) + require.Empty(t, diff) + }) + } +} diff --git a/api/types/types.pb.go b/api/types/types.pb.go index 2df9a18d2fffa..d18c11d3a5281 100644 --- a/api/types/types.pb.go +++ b/api/types/types.pb.go @@ -1203,10 +1203,12 @@ type AWS struct { // RDSProxy contains AWS Proxy specific metadata. RDSProxy RDSProxy `protobuf:"bytes,8,opt,name=RDSProxy,proto3" json:"rdsproxy,omitempty"` // RedshiftServerless contains AWS Redshift Serverless specific metadata. - RedshiftServerless RedshiftServerless `protobuf:"bytes,9,opt,name=RedshiftServerless,proto3" json:"redshift_serverless,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + RedshiftServerless RedshiftServerless `protobuf:"bytes,9,opt,name=RedshiftServerless,proto3" json:"redshift_serverless,omitempty"` + // ExternalID is an optional AWS external ID used to enable assuming an AWS role across accounts. + ExternalID string `protobuf:"bytes,10,opt,name=ExternalID,proto3" json:"external_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *AWS) Reset() { *m = AWS{} } @@ -11849,1026 +11851,1027 @@ func init() { func init() { proto.RegisterFile("teleport/legacy/types/types.proto", fileDescriptor_9198ee693835762e) } var fileDescriptor_9198ee693835762e = []byte{ - // 16298 bytes of a gzipped FileDescriptorProto + // 16307 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6d, 0x6c, 0x1c, 0x49, 0x96, 0x20, 0xa6, 0xac, 0x2a, 0x92, 0xc5, 0xc7, 0x22, 0x59, 0x0c, 0x52, 0x12, 0xa5, 0xfe, 0xa0, 0x3a, 0x7b, 0x5a, 0xad, 0x56, 0x77, 0x4b, 0x23, 0x6a, 0x5a, 0x33, 0x3d, 0xfd, 0x35, 0xf5, 0x25, 0x91, 0x2d, 0x7e, 0x75, 0x16, 0x3f, 0xa6, 0x77, 0x3e, 0x72, 0x92, 0x55, 0x41, 0x32, 0x47, 0x55, 0x95, 0xb5, 0x99, 0x59, 0x92, 0xb8, 0x7b, 0x8b, 0xbb, 0x85, 0xbd, 0x37, 0x5e, 0xac, 0x6f, 0x66, 0xd7, 0x9e, 0xdb, 0xdd, 0x33, 0xee, 0x70, 0xe7, 0x85, 0xcf, 0x9f, 0xb7, 0x8b, 0xf5, 0xde, 0x0f, - 0xdb, 0x38, 0xe0, 0xec, 0x05, 0x8c, 0xc5, 0xd8, 0x86, 0x7d, 0x6b, 0xf8, 0x87, 0xe1, 0xb1, 0x41, - 0xfb, 0x76, 0xef, 0x97, 0x7e, 0x18, 0x06, 0x0c, 0xd8, 0xb8, 0x3e, 0xaf, 0x61, 0xc4, 0x8b, 0x88, - 0xcc, 0x88, 0xac, 0xac, 0x62, 0xb1, 0xa5, 0xb6, 0x57, 0x0d, 0xff, 0x91, 0x58, 0x2f, 0xde, 0x7b, - 0x11, 0x19, 0xf1, 0xe2, 0xc5, 0x8b, 0x17, 0x2f, 0x5e, 0xc0, 0x2b, 0x21, 0x6d, 0xd1, 0xae, 0xe7, - 0x87, 0x37, 0x5b, 0xf4, 0xd0, 0x69, 0x1c, 0xdf, 0x0c, 0x8f, 0xbb, 0x34, 0xe0, 0xff, 0xde, 0xe8, - 0xfa, 0x5e, 0xe8, 0x91, 0x31, 0xfc, 0x71, 0x79, 0xe1, 0xd0, 0x3b, 0xf4, 0x10, 0x72, 0x93, 0xfd, - 0xc5, 0x0b, 0x2f, 0x2f, 0x1d, 0x7a, 0xde, 0x61, 0x8b, 0xde, 0xc4, 0x5f, 0xfb, 0xbd, 0x83, 0x9b, - 0xa1, 0xdb, 0xa6, 0x41, 0xe8, 0xb4, 0xbb, 0x02, 0xe1, 0x8d, 0xa8, 0x02, 0x27, 0x0c, 0x59, 0x49, - 0xe8, 0x7a, 0x9d, 0x9b, 0x0f, 0x6f, 0xa9, 0x3f, 0x05, 0xea, 0xdb, 0xe9, 0x6d, 0x79, 0xe4, 0x3b, - 0xdd, 0x2e, 0xf5, 0xe3, 0x3f, 0x38, 0xba, 0xf9, 0x6f, 0x66, 0x61, 0xf2, 0x3e, 0xa5, 0xdd, 0x52, - 0xcb, 0x7d, 0x48, 0xc9, 0xab, 0x90, 0xdb, 0x70, 0xda, 0x74, 0xd1, 0xb8, 0x62, 0x5c, 0x9b, 0x2c, - 0xcf, 0x3e, 0x39, 0x59, 0x9a, 0x0a, 0xa8, 0xff, 0x90, 0xfa, 0x76, 0xc7, 0x69, 0x53, 0x0b, 0x0b, - 0xc9, 0x9b, 0x30, 0xc9, 0xfe, 0x0f, 0xba, 0x4e, 0x83, 0x2e, 0x66, 0x10, 0x73, 0xfa, 0xc9, 0xc9, - 0xd2, 0x64, 0x47, 0x02, 0xad, 0xb8, 0x9c, 0x5c, 0x85, 0x89, 0x35, 0xea, 0x04, 0x74, 0xb5, 0xba, - 0x98, 0xbd, 0x62, 0x5c, 0xcb, 0x96, 0x0b, 0x4f, 0x4e, 0x96, 0xf2, 0x2d, 0x06, 0xb2, 0xdd, 0xa6, - 0x25, 0x0b, 0xc9, 0x2a, 0x4c, 0xd4, 0x1e, 0x77, 0x5d, 0x9f, 0x06, 0x8b, 0xb9, 0x2b, 0xc6, 0xb5, - 0xa9, 0xe5, 0xcb, 0x37, 0x78, 0xa7, 0xdc, 0x90, 0x9d, 0x72, 0x63, 0x5b, 0x76, 0x4a, 0x79, 0xfe, - 0x67, 0x27, 0x4b, 0xe7, 0x9e, 0x9c, 0x2c, 0x4d, 0x50, 0x4e, 0xf2, 0x9b, 0xff, 0xf3, 0x92, 0x61, - 0x49, 0x7a, 0xf2, 0x3e, 0xe4, 0xb6, 0x8f, 0xbb, 0x74, 0x71, 0xf2, 0x8a, 0x71, 0x6d, 0x66, 0xf9, - 0xe5, 0x1b, 0x7c, 0x18, 0xa2, 0x8f, 0x8c, 0xff, 0x62, 0x58, 0xe5, 0xfc, 0x93, 0x93, 0xa5, 0x1c, - 0x43, 0xb1, 0x90, 0x8a, 0xbc, 0x0d, 0xe3, 0x2b, 0x5e, 0x10, 0xae, 0x56, 0x17, 0x01, 0x3f, 0xed, - 0xfc, 0x93, 0x93, 0xa5, 0xb9, 0x23, 0x2f, 0x08, 0x6d, 0xb7, 0xf9, 0x96, 0xd7, 0x76, 0x43, 0xda, - 0xee, 0x86, 0xc7, 0x96, 0x40, 0x32, 0xf7, 0x61, 0x5a, 0xe3, 0x47, 0xa6, 0x60, 0x62, 0x67, 0xe3, - 0xfe, 0xc6, 0xe6, 0xde, 0x46, 0xf1, 0x1c, 0xc9, 0x43, 0x6e, 0x63, 0xb3, 0x5a, 0x2b, 0x1a, 0x64, - 0x02, 0xb2, 0xa5, 0xad, 0xad, 0x62, 0x86, 0x14, 0x20, 0x5f, 0x2d, 0x6d, 0x97, 0xca, 0xa5, 0x7a, - 0xad, 0x98, 0x25, 0xf3, 0x30, 0xbb, 0xb7, 0xba, 0x51, 0xdd, 0xdc, 0xab, 0xdb, 0xd5, 0x5a, 0xfd, - 0xfe, 0xf6, 0xe6, 0x56, 0x31, 0x47, 0x66, 0x00, 0xee, 0xef, 0x94, 0x6b, 0xd6, 0x46, 0x6d, 0xbb, - 0x56, 0x2f, 0x8e, 0x99, 0x3f, 0xca, 0x42, 0x7e, 0x9d, 0x86, 0x4e, 0xd3, 0x09, 0x1d, 0xf2, 0xa2, - 0x36, 0x44, 0xd8, 0x7a, 0x65, 0x6c, 0x5e, 0xed, 0x1f, 0x9b, 0xb1, 0x27, 0x27, 0x4b, 0xc6, 0xdb, - 0xea, 0x98, 0xbc, 0x07, 0x53, 0x55, 0x1a, 0x34, 0x7c, 0xb7, 0xcb, 0xe4, 0x06, 0xc7, 0x65, 0xb2, - 0x7c, 0xe9, 0xc9, 0xc9, 0xd2, 0xf9, 0x66, 0x0c, 0x56, 0xbe, 0x55, 0xc5, 0x26, 0xab, 0x30, 0xbe, - 0xe6, 0xec, 0xd3, 0x56, 0xb0, 0x38, 0x76, 0x25, 0x7b, 0x6d, 0x6a, 0xf9, 0x05, 0xd1, 0xbf, 0xb2, - 0x81, 0x37, 0x78, 0x69, 0xad, 0x13, 0xfa, 0xc7, 0xe5, 0x85, 0x27, 0x27, 0x4b, 0xc5, 0x16, 0x02, - 0xd4, 0xbe, 0xe3, 0x28, 0xa4, 0x1e, 0x8f, 0xf9, 0xf8, 0xa9, 0x63, 0xfe, 0xd2, 0xcf, 0x4e, 0x96, - 0x0c, 0x36, 0x16, 0x62, 0xcc, 0x63, 0x7e, 0xfa, 0xe8, 0x5f, 0x81, 0xcc, 0x6a, 0x75, 0x71, 0x02, - 0x65, 0xad, 0xf8, 0xe4, 0x64, 0xa9, 0xa0, 0x0d, 0x5b, 0x66, 0xb5, 0x7a, 0xf9, 0x5d, 0x98, 0x52, - 0xda, 0x48, 0x8a, 0x90, 0x7d, 0x40, 0x8f, 0x79, 0x7f, 0x5a, 0xec, 0x4f, 0xb2, 0x00, 0x63, 0x0f, - 0x9d, 0x56, 0x4f, 0x74, 0xa0, 0xc5, 0x7f, 0x7c, 0x33, 0xf3, 0x0d, 0xc3, 0xfc, 0xd7, 0x72, 0x90, - 0xb7, 0x3c, 0x3e, 0xdf, 0xc8, 0x1b, 0x30, 0x56, 0x0f, 0x9d, 0x50, 0x0e, 0xc5, 0xfc, 0x93, 0x93, - 0xa5, 0x59, 0x36, 0x17, 0xa9, 0x52, 0x1f, 0xc7, 0x60, 0xa8, 0x5b, 0x47, 0x4e, 0x20, 0x87, 0x04, - 0x51, 0xbb, 0x0c, 0xa0, 0xa2, 0x22, 0x06, 0xb9, 0x0a, 0xb9, 0x75, 0xaf, 0x49, 0xc5, 0xa8, 0x90, - 0x27, 0x27, 0x4b, 0x33, 0x6d, 0xaf, 0xa9, 0x22, 0x62, 0x39, 0x79, 0x0b, 0x26, 0x2b, 0x3d, 0xdf, - 0xa7, 0x1d, 0x26, 0xaa, 0x39, 0x44, 0x9e, 0x79, 0x72, 0xb2, 0x04, 0x0d, 0x0e, 0x64, 0x93, 0x2b, - 0x46, 0x60, 0x5d, 0x5d, 0x0f, 0x1d, 0x3f, 0xa4, 0xcd, 0xc5, 0xb1, 0x91, 0xba, 0x9a, 0x4d, 0xaf, - 0xb9, 0x80, 0x93, 0x24, 0xbb, 0x5a, 0x70, 0x22, 0x2b, 0x30, 0x75, 0xcf, 0x77, 0x1a, 0x74, 0x8b, - 0xfa, 0xae, 0xd7, 0xc4, 0x31, 0xcc, 0x96, 0xaf, 0x3e, 0x39, 0x59, 0xba, 0x70, 0xc8, 0xc0, 0x76, - 0x17, 0xe1, 0x31, 0xf5, 0x67, 0x27, 0x4b, 0xf9, 0x6a, 0xcf, 0xc7, 0xde, 0xb3, 0x54, 0x52, 0xf2, - 0x03, 0x36, 0x24, 0x41, 0x88, 0x5d, 0x4b, 0x9b, 0x38, 0x7a, 0xc3, 0x9b, 0x68, 0x8a, 0x26, 0x5e, - 0x68, 0x39, 0x41, 0x68, 0xfb, 0x9c, 0x2e, 0xd1, 0x4e, 0x95, 0x25, 0xd9, 0x84, 0x7c, 0xbd, 0x71, - 0x44, 0x9b, 0xbd, 0x16, 0x5d, 0xcc, 0x23, 0xfb, 0x8b, 0x42, 0x70, 0xe5, 0x78, 0xca, 0xe2, 0xf2, - 0x65, 0xc1, 0x9b, 0x04, 0x02, 0xa2, 0xf4, 0x7d, 0xc4, 0xe4, 0x9b, 0xf9, 0xdf, 0xfd, 0x7b, 0x4b, - 0xe7, 0xfe, 0xda, 0xff, 0x74, 0xe5, 0x9c, 0xf9, 0x1f, 0x65, 0xa0, 0x98, 0x64, 0x42, 0x0e, 0x60, - 0x7a, 0xa7, 0xdb, 0x74, 0x42, 0x5a, 0x69, 0xb9, 0xb4, 0x13, 0x06, 0x28, 0x24, 0xc3, 0xbf, 0xe9, - 0x2b, 0xa2, 0xde, 0xc5, 0x1e, 0x12, 0xda, 0x0d, 0x4e, 0x99, 0xf8, 0x2a, 0x9d, 0x6d, 0x5c, 0x4f, - 0x1d, 0xf5, 0x74, 0x80, 0x12, 0x76, 0xb6, 0x7a, 0xb8, 0x86, 0x1f, 0x50, 0x8f, 0x60, 0x2b, 0x04, - 0xa8, 0xd3, 0xdc, 0x3f, 0x46, 0xc9, 0x1c, 0x5d, 0x80, 0x18, 0x49, 0x8a, 0x00, 0x31, 0xb0, 0xf9, - 0xcf, 0x0c, 0x98, 0xb1, 0x68, 0xe0, 0xf5, 0xfc, 0x06, 0x5d, 0xa1, 0x4e, 0x93, 0xfa, 0x4c, 0xfc, - 0xef, 0xbb, 0x9d, 0xa6, 0x98, 0x53, 0x28, 0xfe, 0x0f, 0xdc, 0x8e, 0x3a, 0x85, 0xb1, 0x9c, 0x7c, - 0x15, 0x26, 0xea, 0xbd, 0x7d, 0x44, 0xe5, 0x73, 0xea, 0x02, 0x8e, 0x58, 0x6f, 0xdf, 0x4e, 0xa0, - 0x4b, 0x34, 0x72, 0x13, 0x26, 0x76, 0xa9, 0x1f, 0xc4, 0x1a, 0x0f, 0x35, 0xfb, 0x43, 0x0e, 0x52, - 0x09, 0x04, 0x16, 0xb9, 0x17, 0x6b, 0x5d, 0xb1, 0x26, 0xcd, 0x26, 0x74, 0x5d, 0x2c, 0x2a, 0x6d, - 0x01, 0x51, 0x45, 0x45, 0x62, 0x99, 0xbf, 0x95, 0x81, 0x62, 0xd5, 0x09, 0x9d, 0x7d, 0x27, 0x10, - 0xfd, 0xb9, 0x7b, 0x9b, 0xe9, 0x71, 0xe5, 0x43, 0x51, 0x8f, 0xb3, 0x96, 0x7f, 0xee, 0xcf, 0x7b, - 0x2d, 0xf9, 0x79, 0x53, 0x6c, 0x81, 0x14, 0x9f, 0x17, 0x7f, 0xd4, 0x07, 0xa7, 0x7f, 0x54, 0x51, - 0x7c, 0x54, 0x5e, 0x7e, 0x54, 0xfc, 0x29, 0xe4, 0x03, 0xc8, 0xd5, 0xbb, 0xb4, 0x21, 0x94, 0x88, - 0xd4, 0xfd, 0xfa, 0xc7, 0x31, 0x84, 0xdd, 0xdb, 0xe5, 0x82, 0x60, 0x93, 0x0b, 0xba, 0xb4, 0x61, - 0x21, 0x99, 0x32, 0x69, 0xfe, 0x8b, 0x71, 0x58, 0x48, 0x23, 0x23, 0x1f, 0xe8, 0x8b, 0x13, 0xef, - 0x9e, 0x17, 0x06, 0x2e, 0x4e, 0x8b, 0x86, 0xbe, 0x3c, 0x5d, 0x87, 0xfc, 0x16, 0x13, 0xc8, 0x86, - 0xd7, 0x12, 0x3d, 0xc7, 0xb4, 0x62, 0xbe, 0x2b, 0x61, 0x86, 0x15, 0x95, 0x93, 0x17, 0x20, 0xbb, - 0x63, 0xad, 0x8a, 0xee, 0x9a, 0x7c, 0x72, 0xb2, 0x94, 0xed, 0xf9, 0xee, 0xa2, 0x61, 0x31, 0x28, - 0xb9, 0x09, 0xe3, 0x95, 0x52, 0x85, 0xfa, 0x21, 0x76, 0x53, 0xa1, 0x7c, 0x91, 0x49, 0x4b, 0xc3, - 0xb1, 0x1b, 0xd4, 0x0f, 0xb5, 0xea, 0x05, 0x1a, 0x79, 0x13, 0xb2, 0xa5, 0xbd, 0xba, 0xe8, 0x19, - 0x10, 0x3d, 0x53, 0xda, 0xab, 0x97, 0xa7, 0x45, 0x47, 0x64, 0x9d, 0x47, 0x01, 0xe3, 0x5e, 0xda, - 0xab, 0xab, 0xa3, 0x35, 0x3e, 0x64, 0xb4, 0xae, 0x41, 0x9e, 0xd9, 0x19, 0x6c, 0x81, 0x47, 0xa5, - 0x38, 0xc9, 0xcd, 0xa7, 0x23, 0x01, 0xb3, 0xa2, 0x52, 0xf2, 0x6a, 0x64, 0xb6, 0xe4, 0x63, 0x7e, - 0xc2, 0x6c, 0x91, 0xc6, 0x0a, 0x79, 0x0c, 0xd3, 0xd5, 0xe3, 0x8e, 0xd3, 0x76, 0x1b, 0x62, 0x09, - 0x9f, 0xc4, 0x25, 0xfc, 0xc6, 0x90, 0x61, 0xbc, 0xa1, 0x11, 0xf0, 0x55, 0x5d, 0x2a, 0xdf, 0xc5, - 0x26, 0x2f, 0xb3, 0x93, 0x2b, 0xfc, 0xa2, 0x61, 0xe9, 0x15, 0xb1, 0xb9, 0x24, 0x55, 0x24, 0xda, - 0x55, 0xb1, 0xd8, 0x49, 0x70, 0x3c, 0x97, 0x7c, 0x01, 0x51, 0xe7, 0x52, 0xb4, 0xe8, 0x7e, 0x00, - 0xd9, 0x7b, 0x95, 0xad, 0xc5, 0x29, 0xe4, 0x41, 0x04, 0x8f, 0x7b, 0x95, 0xad, 0x4a, 0xcb, 0xeb, - 0x35, 0xeb, 0x9f, 0xac, 0x95, 0x2f, 0x0a, 0x36, 0xd3, 0x87, 0x8d, 0xae, 0xd6, 0x22, 0x46, 0x47, - 0x6a, 0x90, 0x97, 0x5f, 0xb9, 0x58, 0x40, 0x1e, 0x73, 0x89, 0x8f, 0xdf, 0xbd, 0xcd, 0xe7, 0x5a, - 0x53, 0xfc, 0x56, 0x5b, 0x21, 0x71, 0xc8, 0x6d, 0x94, 0xb2, 0xc7, 0xc7, 0xab, 0xd5, 0x60, 0x71, - 0xfa, 0x4a, 0xf6, 0xda, 0x24, 0x8a, 0xc7, 0x7c, 0x97, 0xc1, 0x6c, 0xb7, 0xa9, 0x1a, 0x3b, 0x11, - 0xe2, 0xe5, 0x3d, 0x20, 0xfd, 0x9d, 0x99, 0x62, 0x7e, 0xbc, 0xa9, 0x9a, 0x1f, 0x53, 0xcb, 0xe7, - 0x45, 0x03, 0x2b, 0x5e, 0xbb, 0xed, 0x74, 0x9a, 0x48, 0xbb, 0xbb, 0xac, 0x5a, 0x25, 0x25, 0x98, - 0x89, 0x5b, 0xbf, 0xe6, 0x06, 0x21, 0xb9, 0x09, 0x93, 0x12, 0xc2, 0x56, 0x9e, 0x6c, 0xea, 0x77, - 0x5a, 0x31, 0x8e, 0xf9, 0x27, 0x19, 0x80, 0xb8, 0xe4, 0x39, 0x55, 0x4e, 0x5f, 0xd7, 0x94, 0xd3, - 0xf9, 0xa4, 0x54, 0x0f, 0x54, 0x4b, 0xe4, 0x23, 0x18, 0x67, 0x76, 0x5a, 0x4f, 0xda, 0xa1, 0x17, - 0x93, 0xa4, 0x58, 0xb8, 0x7b, 0xbb, 0x3c, 0x23, 0x88, 0xc7, 0x03, 0x84, 0x58, 0x82, 0x4c, 0xd1, - 0x6b, 0x7f, 0x34, 0x16, 0x0f, 0x86, 0xd0, 0x68, 0xd7, 0x14, 0x95, 0x64, 0xc4, 0x93, 0x58, 0xaa, - 0x24, 0x45, 0x21, 0x5d, 0xe2, 0x0a, 0x89, 0x77, 0xea, 0x84, 0x50, 0x48, 0x49, 0x75, 0xc4, 0x3b, - 0xf0, 0x54, 0x75, 0xd4, 0x4d, 0xce, 0xf5, 0x1c, 0x8a, 0xc1, 0xb5, 0xd4, 0x5e, 0x49, 0x9b, 0xe5, - 0x57, 0x4e, 0x9b, 0xe5, 0xc9, 0x39, 0x7e, 0x7b, 0x90, 0x02, 0x3c, 0x2f, 0xa7, 0xa4, 0xf3, 0x48, - 0x25, 0x47, 0x45, 0xf8, 0x1e, 0x9f, 0xcf, 0xe3, 0x03, 0xe7, 0xf3, 0xf9, 0xd4, 0xf9, 0xcc, 0x67, - 0xf3, 0x7b, 0x30, 0x56, 0xfa, 0xa5, 0x9e, 0x4f, 0x85, 0xc1, 0x58, 0x90, 0x75, 0x32, 0x58, 0xa4, - 0x08, 0x66, 0x1d, 0xf6, 0x53, 0x35, 0xb4, 0xb1, 0x9c, 0xd5, 0xbc, 0xbd, 0x56, 0x17, 0xc6, 0x20, - 0x49, 0x74, 0xcb, 0xf6, 0x9a, 0xd2, 0xec, 0x50, 0xfb, 0x6a, 0x46, 0x45, 0x6e, 0x42, 0xa6, 0x54, - 0xc5, 0x1d, 0xe6, 0xd4, 0xf2, 0xa4, 0xac, 0xb6, 0x5a, 0x5e, 0x10, 0x24, 0x05, 0x47, 0xdb, 0x74, - 0x94, 0xaa, 0xa4, 0x0c, 0x63, 0xeb, 0xc7, 0xf5, 0x4f, 0xd6, 0x84, 0xf6, 0x9b, 0x97, 0x72, 0xcd, - 0x60, 0x9b, 0xb8, 0x74, 0x05, 0x71, 0x8b, 0xdb, 0xc7, 0xc1, 0x2f, 0xb6, 0xd4, 0x16, 0x23, 0xda, - 0x17, 0xa7, 0x40, 0xfe, 0x2d, 0xd5, 0x40, 0x11, 0xb2, 0xce, 0x36, 0xc2, 0x42, 0xe2, 0x8c, 0xd8, - 0x5c, 0xea, 0x93, 0xb8, 0x48, 0xde, 0xde, 0xe0, 0xa3, 0x9f, 0xe9, 0x1b, 0xfd, 0x29, 0x65, 0xf9, - 0xe3, 0x63, 0x1e, 0xf5, 0x45, 0xf6, 0x73, 0xf7, 0x05, 0xf9, 0x08, 0x0a, 0xeb, 0x4e, 0xc7, 0x39, - 0xa4, 0xcd, 0x9d, 0x80, 0x99, 0xbd, 0x39, 0xd4, 0xc2, 0xcc, 0x4e, 0xb8, 0xd8, 0xe6, 0x70, 0xbb, - 0x17, 0x68, 0x56, 0xad, 0xa5, 0x11, 0x90, 0x5b, 0x52, 0x76, 0xc6, 0x52, 0x64, 0x47, 0x2e, 0xd9, - 0x63, 0x28, 0x3b, 0x42, 0x62, 0xcc, 0xdf, 0x1d, 0xc3, 0x6f, 0x24, 0x6f, 0xc1, 0xb8, 0x45, 0x0f, - 0x63, 0xeb, 0x04, 0x77, 0xb9, 0x3e, 0x42, 0xd4, 0x8e, 0xe1, 0x38, 0xb8, 0xf4, 0xd1, 0x66, 0x70, - 0xe4, 0x1e, 0x84, 0xa2, 0x77, 0xa2, 0xa5, 0x4f, 0x80, 0x95, 0xa5, 0x4f, 0x40, 0xb4, 0xa5, 0x4f, - 0xc0, 0xd8, 0xfc, 0xb2, 0xaa, 0x75, 0xd1, 0x69, 0xb2, 0x87, 0xad, 0xaa, 0x22, 0xa8, 0xbe, 0xb6, - 0xf2, 0x30, 0x6c, 0x72, 0x07, 0x26, 0x4b, 0x8d, 0x86, 0xd7, 0x53, 0xb6, 0x89, 0x8b, 0x4f, 0x4e, - 0x96, 0x16, 0x1c, 0x0e, 0xd4, 0x9d, 0x1a, 0x31, 0x2a, 0xa9, 0xc3, 0x54, 0x8d, 0xed, 0xad, 0xdc, - 0x8a, 0xd3, 0x38, 0x92, 0x9d, 0x24, 0x67, 0x89, 0x52, 0x12, 0xd9, 0xfa, 0xe7, 0x29, 0x02, 0x1b, - 0x0c, 0xa8, 0xfa, 0x0e, 0x14, 0x5c, 0xb2, 0x0d, 0x53, 0x75, 0xda, 0xf0, 0x69, 0x58, 0x0f, 0x3d, - 0x9f, 0x26, 0x26, 0xbd, 0x52, 0x52, 0x7e, 0x59, 0x6e, 0xef, 0x02, 0x04, 0xda, 0x01, 0x83, 0xaa, - 0x5c, 0x15, 0x64, 0x6e, 0xa7, 0xb7, 0x3d, 0xff, 0xb8, 0x5a, 0x16, 0x8a, 0x20, 0x5e, 0x35, 0x38, - 0x58, 0xb5, 0xd3, 0x19, 0xa4, 0xb9, 0xaf, 0xdb, 0xe9, 0x1c, 0x0b, 0x47, 0xaa, 0x5a, 0xc7, 0xf5, - 0x5a, 0xa8, 0x85, 0xd9, 0xb8, 0x97, 0x11, 0xac, 0x8c, 0x54, 0x33, 0xc0, 0xd5, 0x5e, 0x1b, 0x29, - 0x81, 0x45, 0xba, 0x40, 0xe4, 0xa8, 0x71, 0x5b, 0xaa, 0x45, 0x83, 0x40, 0x68, 0x8b, 0x4b, 0x89, - 0xc1, 0x8f, 0x11, 0xca, 0xaf, 0x09, 0xe6, 0x2f, 0x49, 0x31, 0x10, 0x5b, 0x33, 0x56, 0xa8, 0xd4, - 0x93, 0xc2, 0xdb, 0xfc, 0x65, 0xad, 0x67, 0xd9, 0xa8, 0xdf, 0xa7, 0xc7, 0x5b, 0x3e, 0x3d, 0x70, - 0x1f, 0x0b, 0x21, 0xc5, 0x51, 0x7f, 0x40, 0x8f, 0xed, 0x2e, 0x42, 0xd5, 0x51, 0x8f, 0x50, 0xc9, - 0xd7, 0x20, 0x7f, 0x7f, 0xbd, 0x7e, 0x9f, 0x1e, 0xaf, 0x56, 0xc5, 0x2a, 0xc4, 0xc9, 0xda, 0x81, - 0xcd, 0x48, 0x35, 0x61, 0x89, 0x30, 0xcd, 0x72, 0x2c, 0xe1, 0xac, 0xe6, 0x4a, 0xab, 0x17, 0x84, - 0xd4, 0x5f, 0xad, 0xaa, 0x35, 0x37, 0x38, 0x30, 0x21, 0x6f, 0x11, 0xaa, 0xf9, 0x3f, 0x1a, 0x28, - 0xdd, 0xe4, 0x5d, 0x80, 0xd5, 0x0e, 0xdb, 0x36, 0x36, 0x68, 0xc4, 0x00, 0x5d, 0x53, 0xae, 0x80, - 0xea, 0x1c, 0x14, 0x64, 0xbd, 0xea, 0xcc, 0xc8, 0x55, 0xb3, 0x2a, 0xe5, 0x26, 0x54, 0x78, 0x29, - 0x45, 0x95, 0xbe, 0x80, 0x26, 0xaa, 0x8c, 0x91, 0xc9, 0x55, 0x98, 0x58, 0x2d, 0xad, 0x97, 0x7a, - 0xe1, 0x11, 0xce, 0xad, 0x3c, 0x5f, 0xd9, 0x5d, 0xa7, 0x6d, 0x3b, 0xbd, 0xf0, 0xc8, 0x92, 0x85, - 0xe6, 0x1f, 0x1b, 0xb1, 0x68, 0xb1, 0x2d, 0xae, 0xe2, 0xc1, 0xc3, 0x2d, 0x2e, 0x33, 0xe1, 0xd5, - 0x2d, 0x2e, 0xfa, 0xf2, 0x2c, 0x20, 0x95, 0x5e, 0x10, 0x7a, 0xed, 0x5a, 0xa7, 0xd9, 0xf5, 0xdc, - 0x4e, 0x88, 0x54, 0xfc, 0xc3, 0xcc, 0x27, 0x27, 0x4b, 0x2f, 0x37, 0xb0, 0xd4, 0xa6, 0xa2, 0xd8, - 0x4e, 0x70, 0x49, 0xa1, 0x7e, 0x8a, 0x6f, 0x35, 0xff, 0xcb, 0x8c, 0xa6, 0x12, 0x58, 0xf3, 0x2c, - 0xda, 0x6d, 0xb9, 0x0d, 0x34, 0xcc, 0xef, 0xf9, 0x5e, 0xaf, 0x1b, 0x8d, 0x18, 0x36, 0xcf, 0x8f, - 0x4b, 0xed, 0x43, 0x56, 0xac, 0xf3, 0x4e, 0xa1, 0x26, 0xdf, 0x82, 0x02, 0xd3, 0xce, 0xe2, 0x67, - 0xb0, 0x98, 0x41, 0xad, 0xfe, 0x22, 0x3a, 0x2b, 0x02, 0xea, 0x47, 0x6c, 0x34, 0xb5, 0xae, 0x52, - 0x90, 0x26, 0x2c, 0x6e, 0xfb, 0x4e, 0x27, 0x70, 0xc3, 0x5a, 0xa7, 0xe1, 0x1f, 0xe3, 0x6a, 0x52, - 0xeb, 0x38, 0xfb, 0x2d, 0xda, 0xc4, 0xcf, 0xcd, 0x97, 0xaf, 0x3d, 0x39, 0x59, 0xfa, 0x4a, 0xc8, - 0x71, 0x6c, 0x1a, 0x21, 0xd9, 0x94, 0x63, 0x29, 0x9c, 0x07, 0x72, 0x62, 0xab, 0x8f, 0xec, 0x56, - 0x74, 0x35, 0xe7, 0xa2, 0x5d, 0xea, 0xc5, 0x68, 0x34, 0xd8, 0x34, 0x57, 0x9b, 0xa9, 0x12, 0x98, - 0xff, 0x87, 0x11, 0x2b, 0x2d, 0xf2, 0x3e, 0x4c, 0x09, 0x69, 0x54, 0xe4, 0xe2, 0x32, 0x53, 0x7f, - 0x52, 0x74, 0x13, 0x23, 0xab, 0xa2, 0x33, 0x6b, 0xbc, 0x54, 0x59, 0x53, 0x64, 0x03, 0xad, 0x71, - 0xa7, 0xd1, 0x4a, 0x52, 0x49, 0x34, 0x26, 0x04, 0xdb, 0x6b, 0x75, 0xbd, 0x57, 0x50, 0x08, 0xc2, - 0x56, 0x90, 0xd2, 0x0d, 0x0a, 0xf2, 0xd3, 0x7f, 0xf8, 0x7f, 0x6f, 0xa4, 0xe9, 0x46, 0x52, 0x86, - 0xe9, 0x3d, 0xcf, 0x7f, 0x80, 0xe3, 0xab, 0x74, 0x02, 0x8e, 0xfc, 0x23, 0x59, 0x90, 0xfc, 0x20, - 0x9d, 0x44, 0x6d, 0x9b, 0xd2, 0x1b, 0x7a, 0xdb, 0x12, 0x1c, 0x34, 0x02, 0x36, 0x0e, 0x11, 0xc7, - 0x68, 0x76, 0xe0, 0x38, 0xc4, 0x4d, 0xd0, 0x44, 0x58, 0x45, 0x37, 0xff, 0x9a, 0x01, 0x53, 0x8a, - 0xe1, 0xca, 0xd4, 0xd1, 0x96, 0xef, 0xfd, 0x90, 0x36, 0x42, 0x5d, 0x13, 0x76, 0x39, 0x30, 0xa1, - 0x8e, 0x22, 0xd4, 0x84, 0x06, 0xcc, 0x9c, 0x41, 0x03, 0x9a, 0xff, 0xc0, 0x10, 0x46, 0xcd, 0xc8, - 0x3a, 0x46, 0xd7, 0x07, 0x99, 0xb3, 0xe8, 0xbe, 0x6f, 0xc1, 0x98, 0x45, 0x9b, 0x6e, 0x20, 0x0c, - 0x92, 0x39, 0xd5, 0x80, 0xc2, 0x82, 0xd8, 0x86, 0xf3, 0xd9, 0x4f, 0xd5, 0x86, 0xc3, 0x72, 0xf3, - 0x53, 0x80, 0x18, 0x9b, 0xdc, 0x87, 0xa2, 0x10, 0x6b, 0xb7, 0x73, 0xb8, 0xe5, 0xb5, 0xdc, 0x86, - 0x30, 0x6a, 0xcb, 0x4b, 0x4f, 0x4e, 0x96, 0x5e, 0x68, 0x44, 0x65, 0x76, 0x17, 0x0b, 0x15, 0x7e, - 0x7d, 0x84, 0xe6, 0xbf, 0x93, 0x61, 0x06, 0x3a, 0xfb, 0xbc, 0xfb, 0xf4, 0x38, 0x74, 0xf6, 0xef, - 0xba, 0x2d, 0xaa, 0xae, 0x26, 0x0f, 0x10, 0x6a, 0x1f, 0xb8, 0x9a, 0x77, 0x57, 0x41, 0x66, 0x5b, - 0xfc, 0xfb, 0xfe, 0xfe, 0x3b, 0x48, 0x98, 0x89, 0xb6, 0x5c, 0xf3, 0x0f, 0xfc, 0xfd, 0x77, 0x92, - 0x64, 0x11, 0x22, 0x31, 0x61, 0xbc, 0xea, 0xb5, 0x1d, 0x57, 0x6e, 0x73, 0x81, 0xed, 0x15, 0x9b, - 0x08, 0xb1, 0x44, 0x09, 0xdb, 0xe4, 0xd5, 0xb7, 0x36, 0xc4, 0xcc, 0xc1, 0x4d, 0x5e, 0xd0, 0xed, - 0x58, 0x0c, 0xc6, 0xea, 0x5c, 0xab, 0x96, 0xb6, 0xd0, 0xe8, 0x1e, 0x8b, 0xeb, 0x6c, 0x35, 0x9d, - 0x6e, 0xd2, 0xec, 0x8e, 0x10, 0xc9, 0x07, 0x30, 0x75, 0xbf, 0x5a, 0x59, 0xf1, 0x02, 0x2e, 0xf5, - 0xe3, 0xb1, 0xd4, 0x3f, 0x68, 0x36, 0x6c, 0x74, 0x01, 0x25, 0xd5, 0x87, 0x82, 0x6f, 0xfe, 0xbe, - 0x01, 0x53, 0xca, 0xae, 0x87, 0x7c, 0x4d, 0x9c, 0x3f, 0x18, 0x78, 0x7a, 0x76, 0xa1, 0x7f, 0x5f, - 0xc4, 0x4a, 0xb9, 0x4b, 0xa0, 0xed, 0x35, 0xa9, 0x38, 0x8d, 0x88, 0x37, 0x0b, 0x99, 0x51, 0x36, - 0x0b, 0xef, 0x02, 0xf0, 0xc9, 0x8f, 0x4d, 0x56, 0x96, 0x21, 0xe5, 0xb4, 0x51, 0x1d, 0x97, 0x18, - 0xd9, 0xb4, 0xa0, 0xa0, 0x6e, 0x14, 0x98, 0xe6, 0x10, 0x3e, 0x55, 0xe1, 0x60, 0x50, 0x34, 0x87, - 0xe0, 0xd6, 0xef, 0xe3, 0xd5, 0x49, 0xcc, 0x5f, 0xcd, 0x40, 0x5e, 0x40, 0x96, 0x9f, 0x53, 0xdf, - 0xc7, 0x3b, 0x9a, 0xef, 0x63, 0x3e, 0xb2, 0xa9, 0x23, 0x4f, 0xde, 0xf2, 0x29, 0x0e, 0xd9, 0x77, - 0xa1, 0x20, 0xbb, 0x00, 0x5d, 0x48, 0x6f, 0xc0, 0x84, 0x3c, 0x52, 0xe0, 0x0e, 0xa4, 0x59, 0x8d, - 0xe7, 0xee, 0xb2, 0x25, 0xcb, 0xcd, 0x7f, 0x31, 0x26, 0x69, 0x79, 0x4d, 0xac, 0x0b, 0x4b, 0xcd, - 0xa6, 0xaf, 0x76, 0xa1, 0xd3, 0x6c, 0xfa, 0x16, 0x42, 0xd9, 0xe0, 0x6f, 0xf5, 0xf6, 0x5b, 0x6e, - 0x03, 0x71, 0x14, 0x9d, 0xd3, 0x45, 0xa8, 0xcd, 0x50, 0xd5, 0xc1, 0x8f, 0x91, 0x35, 0x7f, 0x68, - 0x76, 0xa8, 0x3f, 0xf4, 0xfb, 0x30, 0x59, 0x69, 0x37, 0x35, 0xd7, 0x87, 0x99, 0xd2, 0x29, 0x37, - 0x22, 0x24, 0xee, 0xf4, 0x78, 0x51, 0xf4, 0xd1, 0x42, 0xa3, 0xdd, 0xec, 0x77, 0x78, 0xc4, 0x2c, - 0x35, 0x87, 0xe6, 0xd8, 0xd3, 0x38, 0x34, 0xef, 0xc0, 0xe4, 0x4e, 0x40, 0xb7, 0x7b, 0x9d, 0x0e, - 0x6d, 0xe1, 0xe4, 0xcd, 0xf3, 0x65, 0xa2, 0x17, 0x50, 0x3b, 0x44, 0xa8, 0xda, 0x80, 0x08, 0x55, - 0x15, 0xab, 0x89, 0x21, 0x62, 0xf5, 0x35, 0xc8, 0x95, 0xba, 0x5d, 0xe9, 0xe9, 0x8d, 0xf6, 0xe5, - 0xdd, 0x2e, 0xee, 0x5a, 0x67, 0x9c, 0x6e, 0x57, 0xf7, 0xdb, 0x22, 0x36, 0xa1, 0x40, 0xee, 0xf7, - 0xf6, 0xa9, 0xdf, 0xa1, 0x21, 0x0d, 0x84, 0x72, 0x0d, 0x16, 0x01, 0x79, 0x2c, 0xca, 0x03, 0xf5, - 0x24, 0x82, 0x50, 0x3a, 0xbd, 0x7d, 0x6a, 0x0b, 0x65, 0xad, 0xed, 0x5a, 0xfa, 0x19, 0xa2, 0x1b, - 0x95, 0x52, 0x1f, 0xe5, 0x60, 0x2a, 0xd6, 0x77, 0x5d, 0x4a, 0xfd, 0xa4, 0x14, 0x44, 0x88, 0x9a, - 0xef, 0xb5, 0x30, 0xaa, 0xef, 0xb5, 0x0e, 0x33, 0xfa, 0x48, 0x3f, 0x03, 0xb7, 0xc9, 0xc7, 0xb9, - 0x7c, 0xbe, 0x38, 0x69, 0xfe, 0x28, 0x03, 0x53, 0xa5, 0x6e, 0xf7, 0x39, 0x3f, 0xd8, 0xf9, 0x86, - 0xa6, 0x3f, 0x2e, 0xc4, 0x72, 0x72, 0x86, 0x33, 0x9d, 0x3f, 0xc8, 0xc0, 0x6c, 0x82, 0x42, 0x6d, - 0xbd, 0x31, 0xe2, 0x41, 0x47, 0x66, 0xc4, 0x83, 0x8e, 0xec, 0xe0, 0x83, 0x0e, 0x75, 0x76, 0xe6, - 0x9e, 0x66, 0x76, 0xbe, 0x0e, 0xd9, 0x52, 0xb7, 0x9b, 0xf4, 0x11, 0x75, 0xbb, 0xbb, 0xb7, 0xf9, - 0xd2, 0xed, 0x74, 0xbb, 0x16, 0xc3, 0xd0, 0xa4, 0x72, 0x7c, 0x44, 0xa9, 0x34, 0xdf, 0x86, 0x49, - 0xe4, 0x85, 0x0a, 0xf7, 0x8a, 0x98, 0xa9, 0x5c, 0xdb, 0x6a, 0x75, 0xf1, 0x59, 0x69, 0xfe, 0x0b, - 0x66, 0xde, 0xb1, 0xdf, 0xcf, 0xa9, 0x8c, 0x2d, 0x6b, 0x32, 0x56, 0x54, 0x64, 0x6c, 0x14, 0xe9, - 0xfa, 0xad, 0x1c, 0xf6, 0x96, 0x90, 0x2b, 0xe1, 0x2a, 0x37, 0x52, 0x5c, 0xe5, 0x4f, 0xb1, 0xbe, - 0x3c, 0x48, 0x3a, 0xcd, 0xb3, 0x38, 0x18, 0xaf, 0x26, 0x9b, 0xfa, 0x4c, 0xfc, 0xe5, 0x2b, 0x40, - 0x56, 0x3b, 0x01, 0x6d, 0xf4, 0x7c, 0x5a, 0x7f, 0xe0, 0x76, 0x77, 0xa9, 0xef, 0x1e, 0x1c, 0x0b, - 0x3f, 0x02, 0x2e, 0x01, 0xae, 0x28, 0xb5, 0x83, 0x07, 0x6e, 0x97, 0x59, 0x31, 0xee, 0xc1, 0xb1, - 0x95, 0x42, 0x43, 0x3e, 0x82, 0x09, 0x8b, 0x3e, 0xf2, 0xdd, 0x50, 0x3a, 0xea, 0x66, 0x22, 0x27, - 0x13, 0x42, 0xb9, 0x39, 0xe6, 0xf3, 0x1f, 0xea, 0xf8, 0x8b, 0x72, 0xb2, 0xcc, 0x9d, 0xb7, 0xdc, - 0x21, 0x37, 0x1d, 0x7f, 0x6d, 0x69, 0xaf, 0x5e, 0x9e, 0x1b, 0xe0, 0xb9, 0x7f, 0x03, 0xc6, 0x70, - 0xaf, 0x23, 0x96, 0x1f, 0x8c, 0x69, 0x69, 0x30, 0x80, 0x6a, 0xe8, 0x23, 0xc6, 0x17, 0xe7, 0xb8, - 0xfe, 0xe9, 0x18, 0xce, 0xcf, 0x53, 0x82, 0xa2, 0x86, 0x1c, 0xab, 0xe8, 0xb2, 0x92, 0x3d, 0x8b, - 0xac, 0xec, 0x42, 0xa1, 0xce, 0xb4, 0x84, 0x7e, 0xbe, 0xf2, 0x62, 0xdc, 0x79, 0x37, 0xd4, 0xe2, - 0x61, 0xf1, 0x50, 0x1a, 0x1f, 0x62, 0x27, 0x65, 0x90, 0xc7, 0x59, 0xbd, 0xa4, 0x30, 0x4e, 0x91, - 0xbe, 0x48, 0x9d, 0x35, 0x78, 0x67, 0x9d, 0x59, 0xee, 0xc6, 0x9f, 0x4e, 0xee, 0x26, 0x3e, 0x97, - 0xdc, 0x25, 0x22, 0xd1, 0xf2, 0x67, 0x89, 0x44, 0xbb, 0xfc, 0x11, 0xcc, 0xf5, 0xf5, 0xf0, 0x59, - 0xa2, 0xb9, 0xbe, 0x38, 0xb1, 0xfc, 0x15, 0x50, 0x66, 0x56, 0x9e, 0x6d, 0x6f, 0x7d, 0xda, 0x08, - 0x51, 0xb3, 0x0b, 0x65, 0xec, 0x0b, 0x58, 0xc2, 0xd1, 0x8f, 0x30, 0xf2, 0x21, 0x4c, 0xf0, 0x68, - 0x18, 0xee, 0x00, 0x8b, 0x67, 0x24, 0x87, 0x8a, 0x90, 0x44, 0x8e, 0xa1, 0xf6, 0xaa, 0x20, 0x32, - 0xef, 0xc1, 0xb8, 0x88, 0xa6, 0x19, 0x3e, 0x2f, 0x96, 0x60, 0x6c, 0x37, 0xee, 0x19, 0x8c, 0x80, - 0xe0, 0x1f, 0x61, 0x71, 0xb8, 0xf9, 0x1b, 0x06, 0xcc, 0xe8, 0x5f, 0x49, 0x6e, 0xc0, 0xb8, 0x08, - 0xf7, 0x32, 0x30, 0xdc, 0x8b, 0x7d, 0xcd, 0x38, 0x0f, 0xf4, 0xd2, 0xc2, 0xbb, 0x04, 0x16, 0x5b, - 0x59, 0x04, 0x07, 0xe1, 0xcc, 0xc3, 0x95, 0x45, 0x08, 0xa9, 0x25, 0xcb, 0xd8, 0xc6, 0xd9, 0xa2, - 0x41, 0xaf, 0x15, 0xaa, 0x1b, 0x67, 0x1f, 0x21, 0x96, 0x28, 0x31, 0x2b, 0x30, 0xce, 0x55, 0x12, - 0x9b, 0xb5, 0xb5, 0xc7, 0x21, 0xf5, 0x3b, 0x4e, 0x4b, 0x77, 0x12, 0x53, 0x01, 0x4d, 0x78, 0x2d, - 0x62, 0x64, 0xf3, 0xc4, 0x00, 0xa8, 0xd7, 0x57, 0xee, 0xd3, 0xe3, 0x2d, 0xc7, 0xf5, 0xd1, 0x49, - 0x83, 0x53, 0xfa, 0xbe, 0x18, 0xf2, 0x82, 0x70, 0xd2, 0xf0, 0xe9, 0xff, 0x80, 0x1e, 0x6b, 0x4e, - 0x1a, 0x89, 0x8a, 0x7a, 0xc3, 0x77, 0x1f, 0x3a, 0x21, 0x65, 0x84, 0x19, 0x24, 0xe4, 0x7a, 0x83, - 0x43, 0x13, 0x94, 0x0a, 0x32, 0xf9, 0x1e, 0xcc, 0xc4, 0xbf, 0xd0, 0x89, 0x96, 0xc5, 0xad, 0xb6, - 0x14, 0x2b, 0xbd, 0xb0, 0xfc, 0xf2, 0x93, 0x93, 0xa5, 0xcb, 0x0a, 0xd7, 0xa4, 0x7b, 0x2d, 0xc1, - 0xcc, 0xfc, 0x3d, 0x03, 0xbd, 0x7b, 0xf2, 0x03, 0xaf, 0x42, 0x2e, 0x3a, 0xc3, 0x2b, 0x70, 0x47, - 0x50, 0x62, 0x4f, 0x8e, 0xe5, 0xe4, 0x55, 0xc8, 0xc6, 0x5f, 0x82, 0x2a, 0x5f, 0xff, 0x02, 0x56, - 0x4a, 0xee, 0xc1, 0xc4, 0x48, 0x6d, 0x46, 0x11, 0x4f, 0x69, 0xab, 0xa4, 0xc6, 0x51, 0xf8, 0x78, - 0x6f, 0xfb, 0xcb, 0x3b, 0x0a, 0x3f, 0xc9, 0xc0, 0x2c, 0xeb, 0xd7, 0x52, 0x2f, 0x3c, 0xf2, 0x7c, - 0x37, 0x3c, 0x7e, 0x6e, 0x1d, 0x0b, 0xef, 0x6b, 0x46, 0xdb, 0x65, 0xa9, 0xfb, 0xd4, 0x6f, 0x1b, - 0xc9, 0xbf, 0xf0, 0x27, 0x63, 0x30, 0x9f, 0x42, 0x45, 0xde, 0x12, 0xd1, 0xda, 0xb1, 0x87, 0x14, - 0xa3, 0xb1, 0x3f, 0x3b, 0x59, 0x2a, 0x48, 0xf4, 0xed, 0x38, 0x3a, 0x7b, 0x59, 0x77, 0x95, 0xf3, - 0x9e, 0xc2, 0x30, 0x5f, 0xd5, 0x55, 0xae, 0x3b, 0xc8, 0xdf, 0x80, 0x31, 0xcb, 0x6b, 0x51, 0xbe, - 0x90, 0x0a, 0x43, 0xc5, 0x67, 0x00, 0xcd, 0x23, 0xc9, 0x00, 0x64, 0x05, 0x26, 0xd8, 0x1f, 0xeb, - 0x4e, 0x17, 0x8d, 0xf8, 0xf8, 0x70, 0x52, 0x40, 0xbb, 0x6e, 0xe7, 0x50, 0xdd, 0x39, 0xb4, 0xa8, - 0xdd, 0x76, 0xba, 0xda, 0xca, 0xc6, 0x11, 0xb5, 0x1d, 0x48, 0x7e, 0xf0, 0x0e, 0xc4, 0x38, 0x75, - 0x07, 0xd2, 0x04, 0xa8, 0xbb, 0x87, 0x1d, 0xb7, 0x73, 0x58, 0x6a, 0x1d, 0x8a, 0x98, 0xf6, 0x37, - 0x06, 0x8f, 0xc2, 0x8d, 0x18, 0x19, 0x05, 0x97, 0x7b, 0xd5, 0x38, 0xcc, 0x76, 0x5a, 0x87, 0x9a, - 0x57, 0x2d, 0x42, 0x25, 0x1b, 0x00, 0xa5, 0x46, 0xe8, 0x3e, 0x64, 0x02, 0x1c, 0x88, 0xe8, 0x2a, - 0xd9, 0xe0, 0x4a, 0xe9, 0x3e, 0x3d, 0xae, 0xd3, 0x30, 0x3e, 0xea, 0x75, 0x10, 0x95, 0xcd, 0x03, - 0xb5, 0x0f, 0x15, 0x0e, 0xa4, 0x0b, 0xe7, 0x4b, 0xcd, 0xa6, 0xcb, 0xbe, 0xc0, 0x69, 0x6d, 0xfb, - 0x6c, 0x30, 0x9a, 0xc8, 0xba, 0x90, 0xce, 0xfa, 0x0d, 0xc1, 0xfa, 0x15, 0x27, 0xa2, 0xb2, 0x43, - 0x4e, 0x96, 0xac, 0x26, 0x9d, 0xb1, 0xb9, 0x09, 0x33, 0xfa, 0xa7, 0xeb, 0x91, 0xf8, 0x05, 0xc8, - 0x5b, 0xf5, 0x92, 0x5d, 0x5f, 0x29, 0xdd, 0x2a, 0x1a, 0xa4, 0x08, 0x05, 0xf1, 0x6b, 0xd9, 0x5e, - 0x7e, 0xe7, 0x4e, 0x31, 0xa3, 0x41, 0xde, 0xb9, 0xb5, 0x5c, 0xcc, 0x7e, 0x9c, 0xcb, 0x67, 0x8b, - 0xb9, 0x8f, 0x73, 0xf9, 0x5c, 0x71, 0xec, 0xe3, 0x5c, 0x7e, 0xa2, 0x98, 0xff, 0x38, 0x97, 0x87, - 0xe2, 0x94, 0xf9, 0x47, 0x06, 0xe4, 0x65, 0xbb, 0xc9, 0x1d, 0xc8, 0xd6, 0xeb, 0x2b, 0x89, 0x10, - 0xab, 0x78, 0x7d, 0xe1, 0x9a, 0x34, 0x08, 0x8e, 0x54, 0x4d, 0x5a, 0xaf, 0xaf, 0x30, 0xba, 0xed, - 0xb5, 0xba, 0x58, 0xde, 0x25, 0x5d, 0xac, 0xb6, 0x39, 0x5d, 0x4a, 0xdc, 0xc9, 0x1d, 0xc8, 0x7e, - 0xbc, 0xb7, 0x2d, 0xb6, 0x25, 0x92, 0x2e, 0xd6, 0xa4, 0x9c, 0xee, 0x87, 0x8f, 0x54, 0xfd, 0xce, - 0x08, 0x4c, 0x0b, 0xa6, 0x14, 0x11, 0xe6, 0xcb, 0x6d, 0xdb, 0x8b, 0x62, 0xd7, 0xc5, 0x72, 0xcb, - 0x20, 0x96, 0x28, 0x61, 0xd6, 0xc1, 0x9a, 0xd7, 0x70, 0x5a, 0x62, 0xdd, 0x46, 0xeb, 0xa0, 0xc5, - 0x00, 0x16, 0x87, 0x9b, 0x7f, 0x6c, 0x40, 0x71, 0xcb, 0xf7, 0x1e, 0xba, 0x4c, 0xcd, 0x6c, 0x7b, - 0x0f, 0x68, 0x67, 0xf7, 0x16, 0x79, 0x5b, 0x4e, 0x36, 0x23, 0xda, 0x04, 0x8f, 0xe1, 0x64, 0xfb, - 0xec, 0x64, 0x09, 0xea, 0xc7, 0x41, 0x48, 0xdb, 0xac, 0x5c, 0x4e, 0x38, 0xe5, 0x0a, 0x40, 0x66, - 0xf4, 0xb0, 0xe2, 0x53, 0xae, 0x00, 0x2c, 0xc1, 0x18, 0x36, 0x47, 0x89, 0xec, 0x1c, 0x0b, 0x19, - 0xc0, 0xe2, 0x70, 0x75, 0x53, 0x99, 0xe9, 0xfb, 0x86, 0xe5, 0x2f, 0x55, 0x68, 0xae, 0xfe, 0x71, - 0x23, 0x69, 0xea, 0x4f, 0x61, 0x21, 0xd9, 0x25, 0xe8, 0xa0, 0x28, 0xc1, 0xac, 0x0e, 0x97, 0xbe, - 0x8a, 0x8b, 0xa9, 0x75, 0xed, 0x2e, 0x5b, 0x49, 0x7c, 0xf3, 0xcf, 0x0c, 0x98, 0xc4, 0x3f, 0xad, - 0x5e, 0x0b, 0x0f, 0x9f, 0x4a, 0x7b, 0x75, 0x11, 0x73, 0xa2, 0x9a, 0x71, 0xce, 0xa3, 0xc0, 0x16, - 0x01, 0x2a, 0x9a, 0x7e, 0x89, 0x90, 0x05, 0x29, 0x8f, 0xb0, 0x91, 0xc7, 0xc4, 0x11, 0x29, 0x0f, - 0xc5, 0x09, 0x12, 0xa4, 0x02, 0x19, 0xcf, 0x4b, 0xf7, 0xea, 0x4c, 0xfc, 0xc4, 0x68, 0xf0, 0xf3, - 0x52, 0x46, 0xe7, 0xb5, 0xf4, 0xf3, 0x52, 0x8e, 0x46, 0xde, 0x86, 0x71, 0x56, 0xb5, 0x25, 0x0f, - 0x6d, 0xd0, 0xfe, 0xc6, 0x36, 0xfa, 0x5a, 0xc0, 0x0f, 0x47, 0x32, 0x7f, 0x36, 0x9e, 0xec, 0x40, - 0xb1, 0xd4, 0x9d, 0x71, 0x6e, 0xbc, 0x07, 0x63, 0xa5, 0x56, 0xcb, 0x7b, 0x24, 0xb4, 0x84, 0xf4, - 0x97, 0x44, 0xfd, 0xc7, 0x57, 0x32, 0x87, 0xa1, 0x68, 0xd1, 0x6d, 0x0c, 0x40, 0x2a, 0x30, 0x59, - 0xda, 0xab, 0xaf, 0xae, 0x56, 0xb7, 0xb7, 0xd7, 0xc4, 0xcd, 0xab, 0xd7, 0x64, 0xff, 0xb8, 0x6e, - 0xd3, 0x0e, 0xc3, 0xd6, 0x80, 0x8b, 0x19, 0x31, 0x1d, 0xf9, 0x00, 0xe0, 0x63, 0xcf, 0xed, 0xac, - 0xd3, 0xf0, 0xc8, 0x6b, 0x8a, 0x8f, 0x7f, 0xe9, 0xc9, 0xc9, 0xd2, 0xd4, 0x0f, 0x3d, 0xb7, 0x63, - 0xb7, 0x11, 0xcc, 0xda, 0x1e, 0x23, 0x59, 0xca, 0xdf, 0xac, 0xa7, 0xcb, 0x1e, 0x3f, 0x95, 0x1a, - 0x8b, 0x7b, 0x7a, 0xdf, 0xeb, 0x3b, 0x90, 0x92, 0x68, 0xa4, 0x0d, 0xb3, 0xf5, 0xde, 0xe1, 0x21, - 0x65, 0x5a, 0x5d, 0xec, 0x7e, 0xc7, 0xc5, 0x9e, 0x2b, 0xba, 0xb7, 0xc6, 0x77, 0x22, 0x6c, 0x7f, - 0x12, 0x94, 0xdf, 0x62, 0x82, 0xfc, 0xf3, 0x93, 0x25, 0x71, 0xa3, 0x88, 0x19, 0x69, 0x81, 0xa4, - 0xef, 0xf7, 0xbf, 0x24, 0x79, 0x93, 0x4d, 0x18, 0xbf, 0xe7, 0x86, 0x2b, 0xbd, 0x7d, 0xb1, 0x7d, - 0x7d, 0x65, 0xc8, 0xa4, 0xe1, 0x88, 0x7c, 0x07, 0x7f, 0xe8, 0x86, 0x47, 0x3d, 0x35, 0x86, 0x48, - 0xb0, 0x21, 0x7b, 0x90, 0xaf, 0xb8, 0x7e, 0xa3, 0x45, 0x2b, 0xab, 0x62, 0xd5, 0x7f, 0x75, 0x08, - 0x4b, 0x89, 0xca, 0xfb, 0xa5, 0x81, 0xbf, 0x1a, 0xae, 0x6a, 0x05, 0x48, 0x0c, 0xf2, 0xaf, 0x1b, - 0xf0, 0x42, 0xd4, 0xfa, 0xd2, 0x21, 0xed, 0x84, 0xeb, 0x4e, 0xd8, 0x38, 0xa2, 0x7e, 0x14, 0xc8, - 0x3d, 0xa4, 0x97, 0xbe, 0xd9, 0xd7, 0x4b, 0xd7, 0xe2, 0x5e, 0x72, 0x18, 0x33, 0xbb, 0xcd, 0xb9, - 0xf5, 0xf7, 0xd9, 0xb0, 0x5a, 0x89, 0x0d, 0x10, 0x7b, 0xf5, 0x45, 0x64, 0xe3, 0x6b, 0x43, 0x3e, - 0x38, 0x46, 0x16, 0x71, 0x45, 0xd1, 0x6f, 0xed, 0x10, 0x36, 0x82, 0x9a, 0xff, 0x6b, 0x0e, 0x2e, - 0x0f, 0x1e, 0x0c, 0xf2, 0x89, 0x9c, 0x21, 0x5c, 0x0f, 0x5d, 0x3d, 0x75, 0xf8, 0x6e, 0x9c, 0x3a, - 0x6f, 0xbe, 0x0d, 0x0b, 0xb5, 0x4e, 0x48, 0xfd, 0xae, 0xef, 0xca, 0x40, 0xf8, 0x15, 0x2f, 0x90, - 0xc7, 0x9a, 0x5f, 0x79, 0x72, 0xb2, 0x74, 0x85, 0x46, 0xe5, 0x22, 0x3e, 0x0b, 0x0f, 0x59, 0x15, - 0x56, 0xa9, 0x1c, 0x2e, 0xff, 0x5e, 0x16, 0x72, 0xa8, 0xf6, 0x5e, 0x85, 0x6c, 0xbd, 0xb7, 0x2f, - 0xf4, 0x1d, 0x37, 0x10, 0x34, 0x61, 0x62, 0xa5, 0xe4, 0x1b, 0x00, 0x16, 0xed, 0x7a, 0x81, 0x1b, - 0x7a, 0xfe, 0xb1, 0x1a, 0xcd, 0xe4, 0x47, 0x50, 0xfd, 0x5c, 0x5e, 0x42, 0xc9, 0x0a, 0xcc, 0xc6, - 0xbf, 0x36, 0x1f, 0x75, 0xa8, 0xf4, 0x6b, 0xe1, 0x1e, 0x26, 0x26, 0xb7, 0x3d, 0x56, 0xa6, 0x4e, - 0x8f, 0x04, 0x19, 0x59, 0x86, 0xfc, 0x9e, 0xe7, 0x3f, 0x38, 0x60, 0x3d, 0x9c, 0x8b, 0x27, 0xf0, - 0x23, 0x01, 0x53, 0x05, 0x55, 0xe2, 0x91, 0xf7, 0x60, 0xaa, 0xd6, 0x79, 0xe8, 0xfa, 0x5e, 0xa7, - 0x4d, 0x3b, 0xf2, 0x14, 0x9b, 0xef, 0xcd, 0x63, 0xb0, 0x16, 0x1f, 0x18, 0x83, 0x99, 0xa5, 0x5e, - 0x6a, 0x84, 0x9e, 0x2f, 0x0e, 0xb1, 0xf9, 0x38, 0x31, 0x80, 0x36, 0x4e, 0x0c, 0xc0, 0x3a, 0xd1, - 0xa2, 0x07, 0xc2, 0xf7, 0x88, 0x9d, 0xe8, 0xd3, 0x03, 0x2d, 0xf8, 0x91, 0x1e, 0x30, 0x05, 0x64, - 0xd1, 0x03, 0xdc, 0x5e, 0xe4, 0xe3, 0xf6, 0xfb, 0xf4, 0xa0, 0x6f, 0x63, 0x2a, 0xd0, 0xcc, 0x3f, - 0xca, 0xc0, 0x8b, 0xc3, 0xa6, 0x2a, 0xa9, 0xeb, 0x22, 0x77, 0x6d, 0x84, 0xe9, 0x7d, 0xba, 0xd0, - 0xd5, 0x60, 0x66, 0xd3, 0x3f, 0x74, 0x3a, 0xee, 0x2f, 0xa1, 0x0a, 0x8e, 0x22, 0x31, 0x98, 0xae, - 0xbd, 0xe4, 0x29, 0x25, 0xba, 0x5f, 0x23, 0x41, 0x74, 0xf9, 0xa1, 0x10, 0xb0, 0xcf, 0x1b, 0x79, - 0x72, 0x07, 0x26, 0x2b, 0x5e, 0x27, 0xa4, 0x8f, 0xc3, 0x44, 0x00, 0x1d, 0x07, 0x26, 0x03, 0xe8, - 0x24, 0xaa, 0xf9, 0x27, 0x06, 0xbc, 0x3c, 0x7c, 0xba, 0x93, 0x1d, 0xbd, 0xdb, 0xae, 0x8f, 0xa4, - 0x24, 0x4e, 0xed, 0xb8, 0xcb, 0xeb, 0xe2, 0x8b, 0x6b, 0x30, 0xc3, 0x66, 0x9a, 0xdb, 0xa0, 0xba, - 0x35, 0x81, 0x1d, 0x18, 0xf0, 0x92, 0x14, 0x8b, 0x22, 0x41, 0x64, 0xfe, 0x8d, 0x0c, 0xcc, 0x70, - 0x97, 0x22, 0xb7, 0x57, 0x9e, 0x5b, 0x5b, 0xf0, 0x3d, 0xcd, 0x16, 0x94, 0x21, 0xa7, 0xea, 0xa7, - 0x8d, 0x64, 0x09, 0x1e, 0x01, 0xe9, 0xa7, 0x21, 0x96, 0x74, 0x7c, 0x8f, 0x62, 0x04, 0xde, 0x8a, - 0xa3, 0x93, 0xf1, 0x9e, 0x7a, 0xc3, 0x46, 0x4b, 0x3c, 0xb0, 0x34, 0x1e, 0xe6, 0x6f, 0x64, 0x60, - 0x5a, 0xd9, 0xb3, 0x3f, 0xb7, 0x1d, 0xff, 0x4d, 0xad, 0xe3, 0xe5, 0x51, 0xb9, 0xf2, 0x65, 0x23, - 0xf5, 0x7b, 0x0f, 0xe6, 0xfa, 0x48, 0x92, 0xae, 0x0f, 0x63, 0x14, 0xd7, 0xc7, 0x5b, 0xfd, 0x21, - 0xb1, 0xfc, 0x92, 0x70, 0x14, 0x12, 0xab, 0xc6, 0xe0, 0xfe, 0x24, 0x03, 0x0b, 0xe2, 0x57, 0xa9, - 0xd7, 0x74, 0xc3, 0x8a, 0xd7, 0x39, 0x70, 0x0f, 0x9f, 0xdb, 0xb1, 0x28, 0x69, 0x63, 0xb1, 0xa4, - 0x8f, 0x85, 0xf2, 0x81, 0x83, 0x87, 0xc4, 0xfc, 0x97, 0x01, 0x16, 0x07, 0x11, 0x90, 0xab, 0x9a, - 0xe7, 0x0a, 0x5d, 0xab, 0x89, 0x65, 0x85, 0xfb, 0xac, 0xe2, 0xeb, 0x02, 0x99, 0x11, 0xae, 0x0b, - 0xac, 0x41, 0x11, 0xab, 0xaa, 0xd3, 0x80, 0x75, 0x42, 0x10, 0xdf, 0x50, 0xbc, 0xf2, 0xe4, 0x64, - 0xe9, 0x45, 0x87, 0x95, 0xd9, 0x81, 0x28, 0xb4, 0x7b, 0xbe, 0x6a, 0x2f, 0xf6, 0x51, 0x92, 0xdf, - 0x33, 0x60, 0x06, 0x81, 0xb5, 0x87, 0xb4, 0x13, 0x22, 0xb3, 0x9c, 0x38, 0xe1, 0x8f, 0x4c, 0xc5, - 0x7a, 0xe8, 0xbb, 0x9d, 0x43, 0x61, 0x2b, 0xee, 0x0b, 0x5b, 0xf1, 0x7d, 0x6e, 0xe3, 0xde, 0x68, - 0x78, 0xed, 0x9b, 0x87, 0xbe, 0xf3, 0xd0, 0xe5, 0xee, 0x28, 0xa7, 0x75, 0x33, 0x4e, 0x45, 0xd1, - 0x75, 0x13, 0xc9, 0x25, 0x04, 0x2b, 0xb4, 0xc3, 0x79, 0x43, 0x29, 0x56, 0x9b, 0x68, 0x66, 0xa2, - 0x45, 0xe4, 0x17, 0xe0, 0x22, 0x8f, 0x2f, 0x65, 0x4b, 0x8a, 0xdb, 0xe9, 0x79, 0xbd, 0xa0, 0xec, - 0x34, 0x1e, 0xf4, 0xba, 0x81, 0x38, 0x95, 0xc2, 0x2f, 0x6f, 0x44, 0x85, 0xf6, 0x3e, 0x2f, 0x55, - 0x58, 0x0e, 0x62, 0x40, 0x56, 0x60, 0x8e, 0x17, 0x95, 0x7a, 0xa1, 0x57, 0x6f, 0x38, 0x2d, 0xb7, - 0x73, 0x88, 0x56, 0x43, 0x9e, 0x47, 0x76, 0x3a, 0xbd, 0xd0, 0xb3, 0x03, 0x0e, 0x57, 0xf8, 0xf5, - 0x13, 0x91, 0x55, 0x66, 0x57, 0x39, 0xcd, 0x75, 0xe7, 0x71, 0xc5, 0xe9, 0x3a, 0x0d, 0x37, 0xe4, - 0x97, 0x04, 0xb2, 0x3c, 0x3c, 0xd1, 0xa7, 0x4e, 0xd3, 0x6e, 0x3b, 0x8f, 0xed, 0x86, 0x28, 0xd4, - 0x0d, 0x2b, 0x8d, 0x2e, 0x62, 0xe5, 0x76, 0x22, 0x56, 0x93, 0x49, 0x56, 0x6e, 0x67, 0x30, 0xab, - 0x98, 0x4e, 0xb2, 0xda, 0x76, 0xfc, 0x43, 0x1a, 0xf2, 0xd3, 0x1c, 0x66, 0x87, 0x1b, 0x0a, 0xab, - 0x10, 0xcb, 0x6c, 0x3c, 0xd9, 0x49, 0xb2, 0x52, 0xe8, 0x98, 0xe4, 0xed, 0xf9, 0x6e, 0x48, 0xd5, - 0x2f, 0x9c, 0xc2, 0x66, 0x61, 0xff, 0xe3, 0x79, 0xd6, 0xa0, 0x4f, 0xec, 0xa3, 0x8c, 0xb9, 0x29, - 0x1f, 0x59, 0xe8, 0xe3, 0x96, 0xfe, 0x95, 0x7d, 0x94, 0x11, 0x37, 0xf5, 0x3b, 0xa7, 0xf1, 0x3b, - 0x15, 0x6e, 0x03, 0x3e, 0xb4, 0x8f, 0x92, 0x6c, 0xb0, 0x4e, 0x0b, 0x69, 0x87, 0x49, 0xb4, 0x38, - 0xcd, 0x9a, 0xc1, 0xa6, 0x7d, 0x45, 0xb8, 0x64, 0x8b, 0xbe, 0x2c, 0xb6, 0x53, 0xce, 0xb6, 0x92, - 0xc4, 0xe4, 0xaf, 0xc0, 0xec, 0x4e, 0x40, 0xef, 0xae, 0x6e, 0xd5, 0x65, 0x3c, 0xf1, 0xe2, 0x2c, - 0x3a, 0x6a, 0x6f, 0x9d, 0xa2, 0x74, 0x6e, 0xa8, 0x34, 0x98, 0x2a, 0x82, 0x8f, 0x5b, 0x2f, 0xa0, - 0xf6, 0x81, 0xdb, 0x0d, 0xa2, 0xd8, 0x7e, 0x75, 0xdc, 0x12, 0x55, 0x99, 0x2b, 0x30, 0xd7, 0xc7, - 0x86, 0xcc, 0x00, 0x30, 0xa0, 0xbd, 0xb3, 0x51, 0xaf, 0x6d, 0x17, 0xcf, 0x91, 0x22, 0x14, 0xf0, - 0x77, 0x6d, 0xa3, 0x54, 0x5e, 0xab, 0x55, 0x8b, 0x06, 0x99, 0x83, 0x69, 0x84, 0x54, 0x57, 0xeb, - 0x1c, 0x94, 0xf9, 0x38, 0x97, 0x1f, 0x2b, 0x8e, 0x5b, 0x45, 0x3e, 0x75, 0x43, 0x36, 0x01, 0x70, - 0x4d, 0x31, 0xff, 0x56, 0x06, 0x2e, 0xc9, 0x65, 0x85, 0x86, 0xcc, 0xfe, 0x77, 0x3b, 0x87, 0xcf, - 0xf9, 0xea, 0x70, 0x57, 0x5b, 0x1d, 0xbe, 0x92, 0x58, 0xa9, 0x13, 0x5f, 0x39, 0x64, 0x89, 0xf8, - 0xed, 0x09, 0x78, 0x69, 0x28, 0x15, 0xf9, 0x84, 0xad, 0xe6, 0x2e, 0xed, 0x84, 0xab, 0xcd, 0x16, - 0xdd, 0x76, 0xdb, 0xd4, 0xeb, 0x85, 0xe2, 0xf4, 0xf4, 0xd5, 0x27, 0x27, 0x4b, 0xf3, 0x3c, 0xcf, - 0x83, 0xed, 0x36, 0x5b, 0xd4, 0x0e, 0x79, 0xb1, 0x26, 0x6e, 0xfd, 0xd4, 0x8c, 0x65, 0x94, 0x75, - 0x66, 0x95, 0x6d, 0x36, 0x1f, 0x3a, 0xfc, 0xba, 0xbb, 0x60, 0xf9, 0x80, 0xd2, 0xae, 0xed, 0xb0, - 0x52, 0xdb, 0x15, 0xc5, 0x3a, 0xcb, 0x3e, 0x6a, 0x72, 0x57, 0x61, 0x59, 0x61, 0xd6, 0xf0, 0xba, - 0xf3, 0x58, 0x38, 0x8e, 0xc4, 0xd5, 0xa1, 0x88, 0x25, 0xbf, 0x39, 0xd6, 0x76, 0x1e, 0x5b, 0xfd, - 0x24, 0xe4, 0x7b, 0x70, 0x5e, 0x2c, 0x40, 0x4c, 0x19, 0xfb, 0x5e, 0x4b, 0x7e, 0x71, 0x0e, 0x79, - 0xbd, 0xfe, 0xe4, 0x64, 0xe9, 0xa2, 0x58, 0xbe, 0xec, 0x06, 0xc7, 0x48, 0xfd, 0xea, 0x74, 0x2e, - 0x64, 0x9b, 0x2d, 0xc8, 0x89, 0xee, 0x58, 0xa7, 0x41, 0xe0, 0x1c, 0x4a, 0x27, 0x13, 0x0f, 0x61, - 0x50, 0x3a, 0xd3, 0x6e, 0xf3, 0x72, 0x6b, 0x20, 0x25, 0x59, 0x81, 0x99, 0x3d, 0xba, 0xaf, 0x8e, - 0xcf, 0x78, 0xa4, 0xaa, 0x8a, 0x8f, 0xe8, 0xfe, 0xe0, 0xc1, 0x49, 0xd0, 0x11, 0x17, 0xe6, 0x30, - 0xbc, 0x6b, 0xcd, 0x0d, 0x42, 0xda, 0xa1, 0x3e, 0xc6, 0x52, 0x4f, 0xa0, 0x32, 0x58, 0x8c, 0x2d, - 0x64, 0xbd, 0xbc, 0xfc, 0xca, 0x93, 0x93, 0xa5, 0x97, 0x78, 0xa8, 0x58, 0x4b, 0xc0, 0xed, 0x44, - 0xd2, 0x97, 0x7e, 0xae, 0xe4, 0x07, 0x30, 0x6b, 0x79, 0xbd, 0xd0, 0xed, 0x1c, 0xd6, 0x43, 0xdf, - 0x09, 0xe9, 0x21, 0x5f, 0x90, 0xe2, 0xa0, 0xed, 0x44, 0xa9, 0x70, 0x00, 0x70, 0xa0, 0x1d, 0x08, - 0xa8, 0xb6, 0x22, 0xe8, 0x04, 0xe4, 0xfb, 0x30, 0xc3, 0xa3, 0x4d, 0xa3, 0x0a, 0x26, 0xb5, 0xfb, - 0xd1, 0x7a, 0xe1, 0xee, 0x2d, 0xbe, 0xdf, 0xe2, 0x51, 0xab, 0x69, 0x15, 0x24, 0xb8, 0x91, 0xef, - 0x88, 0xce, 0xda, 0x72, 0x3b, 0x87, 0x91, 0x18, 0x03, 0xf6, 0xfc, 0xdb, 0x71, 0x97, 0x74, 0x59, - 0x73, 0xa5, 0x18, 0x0f, 0x70, 0x5a, 0xf6, 0xf3, 0x31, 0x4f, 0x0c, 0x28, 0x26, 0x1b, 0x48, 0xbe, - 0x0d, 0x93, 0xdc, 0x8f, 0x45, 0x83, 0x23, 0x91, 0x92, 0x45, 0x26, 0x88, 0x8a, 0xe0, 0x3a, 0x91, - 0xb8, 0x2e, 0xc9, 0xbd, 0x64, 0x54, 0x3d, 0xc9, 0x59, 0x39, 0x67, 0xc5, 0xcc, 0x48, 0x13, 0x0a, - 0xbc, 0x0d, 0x14, 0xef, 0x21, 0x88, 0xe3, 0x8c, 0x57, 0xd4, 0x31, 0x17, 0x45, 0x09, 0xfe, 0x18, - 0x35, 0x2b, 0xbe, 0x94, 0x23, 0x68, 0x55, 0x68, 0x5c, 0xcb, 0x00, 0x79, 0x49, 0x68, 0x5e, 0x82, - 0x8b, 0x03, 0xda, 0x6c, 0x3e, 0x44, 0xb7, 0xd9, 0x80, 0x1a, 0xc9, 0xb7, 0x61, 0x01, 0x09, 0x2b, - 0x5e, 0xa7, 0x43, 0x1b, 0x21, 0x4e, 0x32, 0xb9, 0x67, 0xce, 0x72, 0x1f, 0x17, 0xff, 0xde, 0x46, - 0x84, 0x60, 0x27, 0xb7, 0xce, 0xa9, 0x1c, 0xcc, 0xdf, 0xc9, 0xc0, 0xa2, 0x98, 0xb7, 0x16, 0x6d, - 0x78, 0x7e, 0xf3, 0xf9, 0x5f, 0x27, 0x6a, 0xda, 0x3a, 0xf1, 0x6a, 0x14, 0x43, 0x9e, 0xf6, 0x91, - 0x43, 0x96, 0x89, 0x3f, 0x30, 0xe0, 0xc5, 0x61, 0x44, 0xac, 0x77, 0xa2, 0x7b, 0x17, 0x93, 0x7d, - 0xf7, 0x2b, 0xba, 0x30, 0x8f, 0x03, 0x5a, 0x39, 0xa2, 0x8d, 0x07, 0xc1, 0x8a, 0x17, 0x84, 0x78, - 0x9a, 0x9a, 0xd1, 0x22, 0x29, 0xcb, 0x9e, 0xc7, 0x5d, 0xbe, 0xe8, 0x17, 0x37, 0x7e, 0x7e, 0xb2, - 0x04, 0x0c, 0xc4, 0x6f, 0x4a, 0x30, 0x63, 0x97, 0x4b, 0x59, 0x03, 0x79, 0xf0, 0x9b, 0x21, 0x0f, - 0xe8, 0x71, 0x60, 0xa5, 0xb1, 0xc6, 0x93, 0xb1, 0x52, 0x2f, 0x3c, 0xda, 0xf2, 0xe9, 0x01, 0xf5, - 0x69, 0xa7, 0x41, 0xbf, 0x64, 0x27, 0x63, 0xfa, 0xc7, 0x8d, 0xb4, 0x2f, 0xff, 0x8d, 0x49, 0x58, - 0x48, 0x23, 0x63, 0xfd, 0xa2, 0x6c, 0x05, 0x93, 0x29, 0xe5, 0xfe, 0x25, 0x03, 0x0a, 0x75, 0xda, - 0xf0, 0x3a, 0xcd, 0xbb, 0xe8, 0xcd, 0x14, 0xbd, 0x63, 0xf3, 0xa5, 0x90, 0xc1, 0xed, 0x83, 0x84, - 0x9b, 0xf3, 0xb3, 0x93, 0xa5, 0x6f, 0x8d, 0xb6, 0x03, 0x6b, 0x78, 0x78, 0xff, 0x2b, 0xc4, 0x0b, - 0xd4, 0x51, 0x15, 0x18, 0x32, 0xa1, 0x55, 0x4a, 0xca, 0x30, 0x2d, 0xa6, 0xab, 0xa7, 0x5e, 0xbb, - 0xc1, 0x8b, 0x32, 0x0d, 0x59, 0xd0, 0x77, 0xc5, 0x4e, 0x23, 0x21, 0xb7, 0x21, 0xbb, 0xb3, 0x7c, - 0x57, 0x8c, 0x81, 0xbc, 0x4c, 0xb0, 0xb3, 0x7c, 0x17, 0x9d, 0x3c, 0xcc, 0x70, 0x9e, 0xee, 0x2d, - 0x6b, 0x5e, 0xd8, 0x9d, 0xe5, 0xbb, 0xe4, 0x36, 0xcc, 0x59, 0xf4, 0x17, 0x7b, 0xae, 0x4f, 0xc5, - 0x04, 0x58, 0xbf, 0x5b, 0xc2, 0xb1, 0xc8, 0xcb, 0xdc, 0x74, 0xfd, 0xe5, 0xe4, 0xaf, 0xc2, 0xf9, - 0xaa, 0x1b, 0x88, 0x76, 0xf1, 0x83, 0xdd, 0x26, 0x06, 0x32, 0x8d, 0x0f, 0x10, 0xf9, 0xaf, 0xa7, - 0x8a, 0xfc, 0x2b, 0xcd, 0x88, 0x89, 0xcd, 0x4f, 0x8d, 0x9b, 0xc9, 0x3b, 0x49, 0xe9, 0xf5, 0x90, - 0x1f, 0xc2, 0x0c, 0xfa, 0x18, 0xf1, 0xac, 0x1b, 0x6f, 0xf8, 0x4e, 0x0c, 0xa8, 0xf9, 0xab, 0xa9, - 0x35, 0x5f, 0x46, 0x97, 0xa5, 0x8d, 0x27, 0xe6, 0x78, 0x1b, 0x58, 0xdb, 0x00, 0x6b, 0x9c, 0xc9, - 0xc7, 0x30, 0x2b, 0x2c, 0x91, 0xcd, 0x83, 0xed, 0x23, 0x5a, 0x75, 0x8e, 0x85, 0xbf, 0x1a, 0x37, - 0x37, 0xc2, 0x7c, 0xb1, 0xbd, 0x03, 0x3b, 0x3c, 0xa2, 0x76, 0xd3, 0xd1, 0xd6, 0xec, 0x04, 0x21, - 0xf9, 0x65, 0x98, 0x5a, 0xf3, 0x1a, 0xcc, 0x08, 0x45, 0x75, 0x32, 0x89, 0x7c, 0x3e, 0xc5, 0x54, - 0x69, 0x1c, 0x9c, 0xb0, 0x2c, 0x3e, 0x3b, 0x59, 0x7a, 0xef, 0xac, 0x92, 0xa6, 0x54, 0x60, 0xa9, - 0xb5, 0x91, 0x0a, 0xe4, 0xf7, 0xe8, 0x3e, 0xfb, 0xda, 0x64, 0x9a, 0x1f, 0x09, 0x16, 0x47, 0x08, - 0xe2, 0x97, 0x76, 0x84, 0x20, 0x60, 0xc4, 0x87, 0x39, 0xec, 0x9f, 0x2d, 0x27, 0x08, 0x1e, 0x79, - 0x7e, 0x13, 0x2f, 0xcf, 0x4f, 0x0d, 0xe8, 0xfc, 0xe5, 0xd4, 0xce, 0x7f, 0x91, 0x77, 0x7e, 0x57, - 0xe1, 0xa0, 0xda, 0x52, 0x7d, 0xec, 0xc9, 0x0f, 0x60, 0x46, 0xc8, 0xe0, 0xfa, 0xdd, 0x12, 0x4e, - 0xe5, 0x82, 0x16, 0x0e, 0xa6, 0x17, 0x72, 0x83, 0xcd, 0xe7, 0x30, 0xe9, 0x8c, 0xb1, 0xdb, 0x07, - 0x6a, 0xfa, 0xaf, 0x04, 0x3f, 0xb2, 0x05, 0x53, 0x55, 0xfa, 0xd0, 0x6d, 0x50, 0x0c, 0x5a, 0xc1, - 0xcd, 0xab, 0x92, 0x76, 0x24, 0x2e, 0xe1, 0x6e, 0x89, 0x26, 0x02, 0x78, 0x08, 0x8c, 0x1e, 0xff, - 0x1a, 0x21, 0x9a, 0xff, 0x89, 0x81, 0xb3, 0x91, 0x5c, 0xc7, 0x5b, 0x01, 0x91, 0xab, 0x1f, 0xdd, - 0x4b, 0x4e, 0x37, 0x71, 0x55, 0x95, 0xa3, 0x90, 0xb7, 0x60, 0xfc, 0xae, 0xd3, 0xa0, 0xa1, 0x3c, - 0x33, 0x47, 0xe4, 0x03, 0x84, 0xa8, 0xbe, 0x28, 0x8e, 0xc3, 0x0c, 0x05, 0x5e, 0x61, 0x29, 0x4e, - 0x33, 0x5a, 0x29, 0xf1, 0xa8, 0x78, 0x71, 0x18, 0x26, 0x1a, 0xaa, 0xe4, 0x21, 0xb5, 0x1b, 0x8e, - 0xca, 0x2b, 0x95, 0x83, 0xf9, 0xbf, 0x19, 0xb1, 0xa4, 0x90, 0xd7, 0x21, 0x67, 0x6d, 0x45, 0xed, - 0xe7, 0xf1, 0x59, 0x89, 0xe6, 0x23, 0x02, 0xf9, 0x0e, 0x9c, 0x57, 0xf8, 0xe0, 0x28, 0xd2, 0x26, - 0x6b, 0x10, 0xff, 0x98, 0xd7, 0x30, 0x80, 0x48, 0x69, 0x89, 0xc3, 0x31, 0x12, 0x2d, 0x4a, 0xe7, - 0x81, 0x56, 0x51, 0x5c, 0x50, 0xa5, 0x1d, 0x97, 0xf3, 0x56, 0x3e, 0x56, 0xe5, 0xdd, 0x44, 0x84, - 0xe4, 0xc7, 0xa6, 0x71, 0xe0, 0x31, 0x44, 0xe6, 0x3b, 0x9a, 0x00, 0x44, 0x79, 0x1e, 0x8d, 0xe1, - 0x79, 0x1e, 0xcd, 0x7f, 0x6e, 0x28, 0x29, 0x3d, 0x9f, 0xd3, 0x05, 0xf8, 0x8e, 0xb6, 0x00, 0x2f, - 0x08, 0xd2, 0xe8, 0xab, 0x58, 0x59, 0xaa, 0xd1, 0x34, 0x0b, 0xd3, 0x1a, 0x12, 0xde, 0xb5, 0xda, - 0x09, 0xa8, 0xcf, 0xcf, 0x16, 0xbe, 0x5c, 0x77, 0xad, 0xa2, 0xef, 0x1a, 0xe9, 0x36, 0xcc, 0x3f, - 0x35, 0xd0, 0xe7, 0xa4, 0x52, 0xb0, 0xde, 0x60, 0x20, 0xb5, 0x37, 0x7a, 0x01, 0xf5, 0x2d, 0x84, - 0xf2, 0x5b, 0x10, 0x6b, 0xfa, 0x2d, 0x88, 0x96, 0xc5, 0x60, 0xe4, 0x5b, 0x30, 0xb6, 0x83, 0x3b, - 0x68, 0x3d, 0x06, 0x36, 0xe2, 0x8f, 0x85, 0x7c, 0x62, 0xf6, 0xd8, 0x9f, 0xaa, 0x5e, 0xc1, 0x32, - 0x52, 0x87, 0x89, 0x8a, 0x4f, 0x31, 0x79, 0x67, 0x6e, 0xf4, 0x38, 0xae, 0x06, 0x27, 0x49, 0xc6, - 0x71, 0x09, 0x4e, 0xe6, 0xdf, 0xcc, 0x00, 0x89, 0xbf, 0x11, 0xd3, 0x9b, 0x04, 0xcf, 0xed, 0xa0, - 0x7f, 0xa4, 0x0d, 0xfa, 0x4b, 0x7d, 0x83, 0xce, 0x3f, 0x6f, 0xa4, 0xb1, 0xff, 0x63, 0x03, 0x2e, - 0xa4, 0x13, 0x92, 0x57, 0x61, 0x7c, 0x73, 0x7b, 0x4b, 0x86, 0x51, 0x8b, 0x4f, 0xf1, 0xba, 0x68, - 0xe8, 0x5b, 0xa2, 0x88, 0xbc, 0x0d, 0xe3, 0x9f, 0x58, 0x15, 0xa6, 0x7c, 0x94, 0xcb, 0xda, 0xbf, - 0xe8, 0xdb, 0x0d, 0x5d, 0xff, 0x08, 0x24, 0x75, 0x6c, 0xb3, 0xcf, 0x6c, 0x6c, 0x7f, 0x92, 0x81, - 0xd9, 0x52, 0xa3, 0x41, 0x83, 0x80, 0xad, 0x93, 0x34, 0x08, 0x9f, 0xdb, 0x81, 0x4d, 0x0f, 0x90, - 0xd6, 0xbe, 0x6d, 0xa4, 0x51, 0xfd, 0x13, 0x03, 0xce, 0x4b, 0xaa, 0x87, 0x2e, 0x7d, 0xb4, 0x7d, - 0xe4, 0xd3, 0xe0, 0xc8, 0x6b, 0x35, 0x47, 0x4e, 0xe6, 0xc0, 0x16, 0x77, 0xb7, 0x15, 0x52, 0x5f, - 0x3d, 0x68, 0x3a, 0x40, 0x88, 0xb6, 0xb8, 0x23, 0x84, 0xdc, 0x84, 0x89, 0x52, 0xb7, 0xeb, 0x7b, - 0x0f, 0xf9, 0xb4, 0x9f, 0x16, 0x61, 0x6d, 0x1c, 0xa4, 0x85, 0xc1, 0x71, 0x10, 0x6b, 0x46, 0x95, - 0x76, 0xf8, 0x0d, 0xb5, 0x69, 0xde, 0x8c, 0x26, 0xed, 0xa8, 0xc6, 0x28, 0x96, 0x9b, 0x3f, 0xce, - 0x41, 0x41, 0xfd, 0x10, 0x62, 0xc2, 0x38, 0x8f, 0x52, 0x56, 0xa3, 0x4d, 0x1d, 0x84, 0x58, 0xa2, - 0x24, 0x0e, 0xd2, 0xce, 0x9c, 0x1a, 0xa4, 0xbd, 0x07, 0xd3, 0x5b, 0xbe, 0xd7, 0xf5, 0x02, 0xda, - 0xe4, 0xf9, 0x97, 0xb9, 0xd6, 0x9a, 0x57, 0x4c, 0x35, 0xd6, 0xe7, 0xe8, 0x4d, 0xc7, 0xdd, 0x4d, - 0x57, 0x60, 0xdb, 0xc9, 0xec, 0xcc, 0x3a, 0x1f, 0x7e, 0x50, 0xe7, 0x04, 0xe2, 0xce, 0x68, 0x74, - 0x50, 0xc7, 0x20, 0xfa, 0x41, 0x1d, 0x83, 0xa8, 0xd3, 0x62, 0xec, 0x59, 0x4d, 0x0b, 0xf2, 0x37, - 0x0d, 0x98, 0x2a, 0x75, 0x3a, 0x22, 0xf8, 0xfb, 0x94, 0xe8, 0xb7, 0xef, 0x8a, 0xb3, 0xba, 0xf7, - 0x3e, 0xd7, 0x59, 0xdd, 0xb6, 0xef, 0xb8, 0x61, 0x80, 0x31, 0x81, 0x71, 0x85, 0xaa, 0xad, 0xa9, - 0xb4, 0x83, 0xbc, 0x07, 0xc5, 0x48, 0x1e, 0x57, 0x3b, 0x4d, 0xfa, 0x98, 0x06, 0x8b, 0x13, 0x57, - 0xb2, 0xd7, 0xa6, 0x79, 0x92, 0x78, 0xed, 0x10, 0x32, 0x89, 0x68, 0xfe, 0xc4, 0x80, 0x0b, 0xaa, - 0x40, 0xd4, 0x7b, 0xfb, 0x6d, 0x17, 0x6d, 0x66, 0x72, 0x03, 0x26, 0xc5, 0x78, 0x45, 0xf6, 0x5f, - 0x7f, 0xd2, 0xee, 0x18, 0x85, 0xd4, 0xd8, 0x10, 0x31, 0x1e, 0xc2, 0xf5, 0x31, 0x9f, 0x98, 0x6e, - 0xac, 0xa8, 0xbc, 0x28, 0x3a, 0xbb, 0xe8, 0xe3, 0x6f, 0x7d, 0xec, 0x18, 0xc4, 0xfc, 0x10, 0xe6, - 0xf4, 0x56, 0xd6, 0x29, 0x66, 0x3c, 0x90, 0x9f, 0x66, 0xa4, 0x7f, 0x9a, 0x2c, 0x37, 0xf7, 0x80, - 0xf4, 0xd1, 0x07, 0x78, 0xe0, 0x4c, 0x43, 0x19, 0x10, 0x21, 0xdd, 0xbd, 0x7d, 0x88, 0x51, 0xfa, - 0xfa, 0x29, 0xb5, 0xbb, 0x91, 0xd4, 0xfc, 0xaf, 0xa6, 0x60, 0x3e, 0x45, 0x75, 0x9c, 0xb2, 0xb4, - 0x2f, 0xe9, 0x93, 0x67, 0x32, 0x0a, 0x2c, 0x95, 0x53, 0xe6, 0x43, 0x99, 0xaa, 0x7c, 0xc8, 0x54, - 0x19, 0x96, 0xbf, 0xfc, 0x8b, 0x58, 0xde, 0xd5, 0xd8, 0xef, 0xb1, 0x67, 0x16, 0xfb, 0x5d, 0x86, - 0x69, 0xf1, 0x55, 0x62, 0x2a, 0x8f, 0xc7, 0x5e, 0x0e, 0x9f, 0x17, 0xd8, 0x7d, 0x53, 0x5a, 0x27, - 0xe1, 0x3c, 0x02, 0xaf, 0xf5, 0x90, 0x0a, 0x1e, 0x13, 0x2a, 0x0f, 0x2c, 0x48, 0xe5, 0xa1, 0x90, - 0x90, 0xff, 0x00, 0xf3, 0x1c, 0x21, 0x44, 0x9d, 0xcf, 0xf9, 0x61, 0xf3, 0xb9, 0xf9, 0x6c, 0xe6, - 0xf3, 0x4b, 0xb2, 0x8d, 0xe9, 0xf3, 0x3a, 0xa5, 0x59, 0xe4, 0xdf, 0x35, 0x60, 0x8e, 0x07, 0x20, - 0xab, 0x8d, 0x1d, 0x1a, 0x54, 0xda, 0x78, 0x36, 0x8d, 0x7d, 0x31, 0xc0, 0x6a, 0x07, 0xb4, 0xb5, - 0xbf, 0x51, 0xe4, 0x17, 0x00, 0xa2, 0x19, 0x25, 0x53, 0x52, 0xbc, 0x98, 0xa2, 0x05, 0x22, 0xa4, - 0x38, 0xa7, 0x47, 0x18, 0xd1, 0x69, 0xd9, 0xad, 0x22, 0x28, 0xf9, 0xab, 0xb0, 0xc0, 0xe6, 0x4b, - 0x04, 0x11, 0xd7, 0x25, 0x16, 0xa7, 0xb0, 0x96, 0xaf, 0x0d, 0x5e, 0xda, 0x6f, 0xa4, 0x91, 0xf1, - 0x8b, 0xb9, 0x71, 0x72, 0xc6, 0xb0, 0xad, 0xee, 0x14, 0xd3, 0x28, 0xf0, 0xfe, 0x11, 0xb6, 0x9e, - 0xa7, 0xb6, 0x18, 0xa0, 0xdf, 0x2e, 0xc9, 0xb9, 0xc0, 0xf5, 0x5b, 0xa0, 0x07, 0x32, 0x22, 0x88, - 0x7c, 0x02, 0x24, 0x8a, 0xdc, 0xe5, 0x30, 0xea, 0xcb, 0x5c, 0xc5, 0xe8, 0xbd, 0x88, 0x23, 0x80, - 0x7d, 0x59, 0xac, 0x0a, 0x49, 0x3f, 0x31, 0xa1, 0xb0, 0x20, 0x3e, 0x9a, 0x41, 0x65, 0x1e, 0xa8, - 0x60, 0x71, 0x46, 0xbb, 0x8c, 0x12, 0x97, 0xc4, 0x59, 0x1c, 0x95, 0x64, 0x52, 0xda, 0x6e, 0x39, - 0x8d, 0x1d, 0xb9, 0x03, 0x93, 0x6b, 0xde, 0xa1, 0xdb, 0x59, 0x91, 0xc7, 0xe8, 0xe2, 0x48, 0xaf, - 0xc5, 0x80, 0xf6, 0x91, 0x7e, 0x18, 0x1e, 0xa3, 0x32, 0xab, 0xb6, 0xea, 0x1f, 0x5b, 0xbd, 0xce, - 0x62, 0x11, 0x7d, 0x8b, 0x68, 0xce, 0x34, 0xfd, 0x63, 0xdb, 0xef, 0x69, 0xcb, 0x37, 0x47, 0xba, - 0xbc, 0x0f, 0x97, 0x06, 0x0e, 0x5a, 0xca, 0x1d, 0xe0, 0x9b, 0xfa, 0x1d, 0xe0, 0x4b, 0x83, 0x94, - 0x7b, 0xa0, 0xde, 0x03, 0xfe, 0xbb, 0x46, 0x42, 0x9b, 0x0b, 0xd3, 0x8b, 0xbf, 0x51, 0x31, 0x68, - 0xb9, 0xcb, 0x60, 0x62, 0x41, 0xae, 0xef, 0x33, 0xb1, 0xc9, 0xc7, 0xf4, 0xbd, 0xba, 0x5e, 0xa0, - 0xe6, 0x7f, 0x4a, 0xc5, 0x6e, 0xfe, 0x76, 0x06, 0x08, 0x6f, 0x61, 0xc5, 0xe9, 0x3a, 0xfb, 0x6e, - 0xcb, 0x0d, 0x5d, 0x8a, 0xb9, 0xb8, 0x04, 0x0b, 0x67, 0xbf, 0x45, 0xd5, 0x4b, 0x0b, 0x22, 0xac, - 0x24, 0x2a, 0xb3, 0x93, 0x46, 0x5a, 0x1f, 0xe1, 0x00, 0x51, 0xcc, 0x3c, 0x8d, 0x28, 0xfe, 0x00, - 0x5e, 0x28, 0x75, 0x31, 0x7b, 0xa0, 0xac, 0xe5, 0xae, 0xe7, 0x4b, 0x21, 0x92, 0x2e, 0x1b, 0x3c, - 0xee, 0x74, 0x22, 0xb4, 0xbe, 0x96, 0x0e, 0x63, 0x61, 0xfe, 0xc7, 0x19, 0xb8, 0xd4, 0xdf, 0x31, - 0xe2, 0xdb, 0xa2, 0xe1, 0x31, 0x4e, 0x19, 0x9e, 0xb4, 0x7e, 0xcc, 0xa0, 0x74, 0x3e, 0xb3, 0x7e, - 0xe4, 0xe9, 0xfb, 0x3e, 0x67, 0x3f, 0xd6, 0x61, 0x4a, 0x9d, 0xc9, 0xb9, 0xcf, 0x3b, 0x93, 0x55, - 0x2e, 0xe6, 0x23, 0x35, 0xa7, 0x1c, 0x79, 0x3b, 0x2d, 0x6c, 0x91, 0x5f, 0x02, 0xe7, 0x60, 0x3d, - 0x62, 0x51, 0xee, 0x01, 0x33, 0xa9, 0x7b, 0x40, 0x79, 0x9f, 0x3d, 0x9b, 0x76, 0x9f, 0xdd, 0xfc, - 0xf5, 0x0c, 0x14, 0xb6, 0x5a, 0xbd, 0x43, 0xb7, 0x53, 0x75, 0x42, 0xe7, 0xb9, 0xdd, 0x50, 0xbe, - 0xab, 0x6d, 0x28, 0xa3, 0xb8, 0xda, 0xe8, 0xc3, 0x46, 0xda, 0x4d, 0xfe, 0xd4, 0x80, 0xd9, 0x98, - 0x84, 0x6b, 0xb5, 0x15, 0xc8, 0xb1, 0x1f, 0xc2, 0x3e, 0xbd, 0xd2, 0xc7, 0x18, 0xb1, 0x6e, 0x44, - 0x7f, 0x89, 0x2d, 0x9e, 0xfe, 0xaa, 0x05, 0x72, 0xb8, 0xfc, 0x75, 0x9e, 0x5f, 0xfe, 0xec, 0x0f, - 0xe8, 0xfc, 0x43, 0x03, 0x8a, 0xc9, 0x2f, 0x21, 0xf7, 0x61, 0x82, 0x71, 0x72, 0xa3, 0x5c, 0xf5, - 0x5f, 0x19, 0xf0, 0xcd, 0x37, 0x04, 0x1a, 0x6f, 0x1e, 0x76, 0x3e, 0xe5, 0x10, 0x4b, 0x72, 0xb8, - 0x6c, 0x41, 0x41, 0xc5, 0x4a, 0x69, 0xdd, 0x5b, 0xba, 0x2a, 0xbf, 0x90, 0xde, 0x0f, 0x6a, 0xab, - 0xff, 0xb6, 0xd6, 0x6a, 0xa1, 0xc4, 0x47, 0x7d, 0xa9, 0x04, 0x33, 0x40, 0xf0, 0xe9, 0xa0, 0xca, - 0x99, 0x9c, 0x49, 0x7a, 0x06, 0x08, 0x0e, 0x63, 0x3b, 0x51, 0x5e, 0x9f, 0x90, 0x33, 0xdc, 0x89, - 0x76, 0x11, 0xa2, 0x2e, 0x65, 0x1c, 0xc7, 0xfc, 0x3b, 0x59, 0xb8, 0x10, 0x37, 0x8f, 0xbf, 0xdb, - 0xb2, 0xe5, 0xf8, 0x4e, 0x3b, 0x38, 0x65, 0x06, 0x5c, 0xeb, 0x6b, 0x1a, 0x66, 0x5d, 0x92, 0x4d, - 0x53, 0x1a, 0x64, 0x26, 0x1a, 0x84, 0x5b, 0x78, 0xde, 0x20, 0xd9, 0x0c, 0x72, 0x1f, 0xb2, 0x75, - 0x1a, 0x0a, 0x25, 0x72, 0xb5, 0xaf, 0x57, 0xd5, 0x76, 0xdd, 0xa8, 0xd3, 0x90, 0x0f, 0x22, 0xbf, - 0xff, 0x42, 0xb5, 0x0b, 0xab, 0x6c, 0x33, 0xb6, 0x07, 0xe3, 0xb5, 0xc7, 0x5d, 0xda, 0x08, 0x45, - 0xfa, 0x93, 0x37, 0x86, 0xf3, 0xe3, 0xb8, 0x4a, 0x92, 0x15, 0x8a, 0x00, 0xb5, 0xb3, 0x38, 0xca, - 0xe5, 0x3b, 0x90, 0x97, 0x95, 0x9f, 0x29, 0x59, 0xc8, 0xbb, 0x30, 0xa5, 0x54, 0x72, 0x26, 0xa1, - 0xff, 0x0b, 0x03, 0xc6, 0x99, 0x0a, 0xdf, 0x7d, 0xe7, 0x39, 0xd5, 0x48, 0xb7, 0x35, 0x8d, 0x34, - 0xa7, 0xdc, 0x89, 0xc7, 0x79, 0xf9, 0xce, 0x29, 0xba, 0xe8, 0xc4, 0x00, 0x88, 0x91, 0xc9, 0x3d, - 0x98, 0x10, 0xc9, 0x1b, 0x45, 0x04, 0x8e, 0x7a, 0xc9, 0x5e, 0xe6, 0x7f, 0x8f, 0x6c, 0x5c, 0xaf, - 0x9b, 0xdc, 0x14, 0x48, 0x6a, 0x52, 0x8d, 0x2f, 0x48, 0xaa, 0x79, 0x59, 0x18, 0x9b, 0x8a, 0xd7, - 0xe1, 0x97, 0xc4, 0x95, 0x2c, 0xa4, 0x03, 0x2e, 0xdf, 0x94, 0x84, 0x5b, 0x2b, 0x3b, 0x8c, 0xc9, - 0x05, 0xc1, 0x24, 0xdd, 0xe3, 0xf5, 0x1f, 0xce, 0xf2, 0xeb, 0xd5, 0xb2, 0x61, 0x1f, 0x40, 0xe1, - 0xae, 0xe7, 0x3f, 0x72, 0x7c, 0x7e, 0x69, 0x0e, 0x3f, 0x93, 0xa7, 0xd8, 0x9d, 0x3e, 0xe0, 0x70, - 0x7e, 0xed, 0xee, 0xb3, 0x93, 0xa5, 0x5c, 0xd9, 0xf3, 0x5a, 0x96, 0x86, 0x4e, 0x36, 0x61, 0x7a, - 0xdd, 0x79, 0x2c, 0x0e, 0xc3, 0xb7, 0xb7, 0xd7, 0x44, 0x64, 0xdf, 0x1b, 0x4f, 0x4e, 0x96, 0x2e, - 0xb5, 0x9d, 0xc7, 0xd1, 0x81, 0xe3, 0xe0, 0x3b, 0x9c, 0x3a, 0x3d, 0x71, 0x61, 0x66, 0xcb, 0xf3, - 0x43, 0x51, 0x09, 0xdb, 0xd1, 0x64, 0x07, 0x1c, 0xa7, 0xde, 0x4c, 0x3d, 0x4e, 0xbd, 0xc4, 0xb6, - 0x71, 0xf6, 0x41, 0x44, 0xae, 0x25, 0xbe, 0xd0, 0x18, 0x93, 0x0f, 0x60, 0xae, 0x42, 0xfd, 0xd0, - 0x3d, 0x70, 0x1b, 0x4e, 0x48, 0xef, 0x7a, 0x7e, 0xdb, 0x09, 0x85, 0x3b, 0x0d, 0xdd, 0x29, 0x0d, - 0xca, 0x39, 0xb5, 0x9d, 0xd0, 0xea, 0xc7, 0x24, 0xdf, 0x49, 0x8b, 0x95, 0x1c, 0x8b, 0x23, 0xc2, - 0x52, 0x62, 0x25, 0x07, 0x45, 0x84, 0xf5, 0x47, 0x4d, 0x1e, 0x0e, 0x8b, 0x29, 0xc8, 0x97, 0x6f, - 0x89, 0x18, 0x86, 0xd3, 0x63, 0x06, 0xa2, 0x71, 0x1b, 0x10, 0x3b, 0xb0, 0x0c, 0xd9, 0xf2, 0xd6, - 0x5d, 0x74, 0x90, 0x89, 0x33, 0x7c, 0xda, 0x39, 0x72, 0x3a, 0x0d, 0xb4, 0xcc, 0x44, 0xf0, 0x8f, - 0xaa, 0xf0, 0xca, 0x5b, 0x77, 0x89, 0x03, 0xf3, 0x5b, 0xd4, 0x6f, 0xbb, 0xe1, 0xb7, 0x6f, 0xdd, - 0x52, 0x06, 0x2a, 0x8f, 0x4d, 0xbb, 0x29, 0x9a, 0xb6, 0xd4, 0x45, 0x14, 0xfb, 0xf1, 0xad, 0x5b, - 0xa9, 0xc3, 0x11, 0x35, 0x2c, 0x8d, 0x17, 0xa9, 0xc1, 0xcc, 0xba, 0xf3, 0x38, 0x8e, 0xd9, 0x0a, - 0x44, 0xd4, 0xf9, 0x4b, 0x52, 0xb0, 0xe2, 0x78, 0x2f, 0x75, 0xbe, 0x25, 0x88, 0xc8, 0xfb, 0x30, - 0x15, 0x8b, 0x57, 0x20, 0xe2, 0xf5, 0xf0, 0xd4, 0x5a, 0x11, 0x4e, 0xcd, 0x3a, 0x54, 0xd0, 0xc9, - 0x4e, 0xe4, 0xa0, 0xe1, 0xe6, 0xb5, 0x48, 0xfc, 0x78, 0x53, 0x75, 0xd0, 0x38, 0x58, 0xa2, 0x7d, - 0xd6, 0x6c, 0xb4, 0xa5, 0xe1, 0x41, 0x6c, 0x96, 0xce, 0x45, 0xf1, 0xfb, 0x6c, 0xf9, 0x5e, 0xbb, - 0x1b, 0xe2, 0xf9, 0x7d, 0xc2, 0xef, 0xd3, 0xc5, 0x92, 0x14, 0xbf, 0x0f, 0x27, 0x49, 0x0f, 0x54, - 0x99, 0x3e, 0x25, 0x50, 0x85, 0x42, 0x6e, 0xcd, 0x6b, 0x3c, 0xc0, 0x00, 0xf2, 0xc9, 0xf2, 0x27, - 0x4c, 0x47, 0xb4, 0xbc, 0xc6, 0x83, 0x67, 0x17, 0x60, 0x81, 0xec, 0xc9, 0x06, 0xfb, 0x3e, 0x26, - 0x3a, 0xa2, 0x6a, 0xdc, 0x19, 0xc7, 0x67, 0xa9, 0x5a, 0x19, 0x37, 0x46, 0xb8, 0xa4, 0xc9, 0xf1, - 0xb0, 0x74, 0x72, 0x42, 0xa1, 0x58, 0xa5, 0xc1, 0x83, 0xd0, 0xeb, 0x56, 0x5a, 0x6e, 0x77, 0xdf, - 0x73, 0xfc, 0x26, 0xee, 0x9b, 0xd3, 0x94, 0xc2, 0xeb, 0xa9, 0x4a, 0x61, 0xae, 0xc9, 0xe9, 0xed, - 0x86, 0x64, 0x60, 0xf5, 0xb1, 0x24, 0xdf, 0x81, 0x19, 0x36, 0x23, 0x6a, 0x8f, 0x43, 0xda, 0xe1, - 0xe2, 0x32, 0x87, 0xcb, 0xf9, 0x82, 0x92, 0xc1, 0x24, 0x2a, 0xe4, 0x82, 0x88, 0x1a, 0x82, 0x46, - 0x04, 0xaa, 0x20, 0xea, 0xac, 0x48, 0x13, 0x16, 0xd7, 0x9d, 0xc7, 0x4a, 0x5e, 0x51, 0x45, 0xb2, - 0x09, 0x4a, 0x25, 0xe6, 0x7a, 0x67, 0x52, 0x19, 0xdf, 0x34, 0x1e, 0x20, 0xe4, 0x03, 0x39, 0x91, - 0x5f, 0x86, 0x8b, 0xe2, 0xb3, 0xaa, 0x98, 0x9e, 0xcb, 0xf3, 0x8f, 0xeb, 0x47, 0x0e, 0xc6, 0x78, - 0xce, 0x9f, 0x4d, 0x8b, 0xca, 0x0e, 0x6b, 0x4a, 0x3e, 0x76, 0xc0, 0x19, 0x59, 0x83, 0x6a, 0x20, - 0x3f, 0x80, 0x19, 0xee, 0x2e, 0x5d, 0xf1, 0x82, 0x10, 0xb7, 0x9c, 0x0b, 0x03, 0xea, 0xbc, 0x9a, - 0x5a, 0x67, 0x91, 0xfb, 0x60, 0x79, 0xb0, 0x1f, 0x7a, 0x8c, 0x13, 0xfc, 0xc8, 0x7b, 0x30, 0xb5, - 0xe5, 0x76, 0xea, 0x7c, 0xbb, 0xb6, 0xb5, 0x78, 0x3e, 0x5e, 0xaa, 0xba, 0x6e, 0xc7, 0x96, 0xbb, - 0xbd, 0x6e, 0xa4, 0x59, 0x54, 0x6c, 0xb2, 0x07, 0x53, 0xf5, 0xfa, 0xca, 0x5d, 0x97, 0xad, 0x95, - 0xdd, 0xe3, 0xc5, 0x0b, 0x03, 0xda, 0xf6, 0x6a, 0x6a, 0xdb, 0xa6, 0x83, 0xe0, 0x08, 0x53, 0x69, - 0xdb, 0x0d, 0xaf, 0x7b, 0x6c, 0xa9, 0x9c, 0x52, 0xe2, 0x71, 0x2e, 0x3e, 0xdb, 0x78, 0x1c, 0xf3, - 0x3f, 0xcb, 0x24, 0x66, 0x14, 0x59, 0x85, 0x09, 0x31, 0x0c, 0xc2, 0x2e, 0xe9, 0xff, 0x90, 0x97, - 0x52, 0x3f, 0x64, 0x42, 0x0c, 0xac, 0x25, 0xe9, 0xc9, 0x23, 0xc6, 0xea, 0xc0, 0xe9, 0xb5, 0xe4, - 0xc5, 0xf1, 0xef, 0xf1, 0x09, 0x83, 0x20, 0x4d, 0x35, 0x54, 0xcf, 0x1e, 0xe5, 0xa7, 0x07, 0x91, - 0xa2, 0x8e, 0x90, 0xb5, 0x91, 0x07, 0x3c, 0x1f, 0x4d, 0x36, 0x8a, 0xfa, 0xd2, 0x93, 0xcf, 0x3c, - 0xb3, 0x0a, 0x59, 0x2d, 0xe6, 0x3f, 0x36, 0x60, 0x5a, 0x9b, 0x92, 0xe4, 0x8e, 0x12, 0x07, 0x19, - 0x07, 0xbc, 0x6b, 0x38, 0xa9, 0x8f, 0xee, 0xde, 0x11, 0xc1, 0x30, 0x99, 0xc1, 0x74, 0xa9, 0x69, - 0xc7, 0x87, 0xfa, 0x03, 0xe2, 0xfc, 0x76, 0xb9, 0x01, 0xf9, 0xed, 0xfe, 0xbb, 0x19, 0x98, 0xd1, - 0x0d, 0x3d, 0xb6, 0xf3, 0x42, 0x97, 0xa2, 0xf4, 0x77, 0xf1, 0x8c, 0x8d, 0x08, 0xd1, 0x5e, 0xb0, - 0x45, 0x08, 0x79, 0x0d, 0x20, 0x0a, 0x50, 0x91, 0x2e, 0x2d, 0xb1, 0x54, 0x28, 0x05, 0xe4, 0xfb, - 0x00, 0x1b, 0x5e, 0x93, 0x46, 0x39, 0x45, 0x87, 0xb8, 0xd5, 0x5f, 0xef, 0xcb, 0xd5, 0x70, 0xbe, - 0xe3, 0x35, 0x69, 0x7f, 0x62, 0x06, 0x85, 0x23, 0xf9, 0x26, 0x8c, 0x59, 0xbd, 0x16, 0x95, 0x0e, - 0x9c, 0x29, 0x39, 0x49, 0x7a, 0x2d, 0xe5, 0x19, 0x2c, 0xbf, 0x97, 0x3c, 0x4d, 0x65, 0x00, 0xf2, - 0x11, 0xcf, 0xe1, 0x80, 0x0f, 0x68, 0xc8, 0x14, 0x59, 0xe8, 0x9c, 0x52, 0x54, 0x26, 0x3e, 0x71, - 0xd0, 0x97, 0xa3, 0x81, 0x93, 0x90, 0x4d, 0x98, 0x10, 0xcb, 0xa8, 0x38, 0xad, 0x7c, 0x39, 0xcd, - 0x4f, 0xae, 0xd8, 0xd2, 0x22, 0x29, 0x24, 0x82, 0x75, 0xd7, 0x35, 0x77, 0xae, 0xbd, 0x0f, 0x93, - 0x8c, 0x3d, 0x7f, 0xd7, 0x69, 0x22, 0x76, 0xe5, 0x29, 0x0d, 0x4a, 0x3e, 0xed, 0x14, 0x13, 0x90, - 0xef, 0x60, 0x96, 0x58, 0xd1, 0xd5, 0x43, 0x8f, 0x5b, 0xae, 0xf6, 0x75, 0xf5, 0x82, 0xd3, 0xed, - 0xa6, 0x64, 0xfd, 0x8e, 0xf8, 0x91, 0xc3, 0xe8, 0x96, 0xf2, 0x28, 0x79, 0x37, 0xae, 0xf7, 0x55, - 0xb0, 0x28, 0x2f, 0xde, 0xf6, 0xe7, 0x86, 0xd5, 0xf8, 0x92, 0x2e, 0x14, 0xe3, 0xd5, 0x48, 0xd4, - 0x05, 0xc3, 0xea, 0x7a, 0xbb, 0xaf, 0x2e, 0x75, 0x00, 0xfb, 0xaa, 0xeb, 0xe3, 0x4e, 0x9a, 0xf1, - 0xbb, 0x75, 0xa2, 0xbe, 0xa9, 0x61, 0xf5, 0xbd, 0xd6, 0x57, 0xdf, 0x7c, 0x73, 0xbf, 0xbf, 0x9e, - 0x04, 0x4f, 0xf2, 0x3e, 0x4c, 0x4b, 0x08, 0xce, 0x0f, 0x91, 0xc1, 0x9b, 0xbf, 0xb8, 0xb8, 0x8f, - 0xd1, 0xc7, 0x7a, 0xe6, 0x52, 0x15, 0x59, 0xa5, 0xe6, 0xd2, 0x31, 0xad, 0x51, 0x27, 0xa5, 0x42, - 0x47, 0x26, 0x9f, 0xc2, 0xd4, 0x6a, 0x9b, 0x7d, 0x88, 0xd7, 0x71, 0x42, 0x8a, 0x06, 0x5b, 0x7c, - 0x74, 0xa4, 0x94, 0x28, 0xa2, 0xca, 0xdf, 0xdd, 0x88, 0x8b, 0x54, 0xa3, 0x56, 0xa1, 0x60, 0x9d, - 0xc7, 0x9d, 0xaa, 0x42, 0x86, 0x03, 0x61, 0x9e, 0xbd, 0x94, 0x72, 0x7c, 0xa3, 0xb0, 0x47, 0x7b, - 0x87, 0xfb, 0x6a, 0x6d, 0x31, 0x21, 0x02, 0x7d, 0xc9, 0x52, 0x79, 0x92, 0x0f, 0x60, 0x4a, 0xa4, - 0x24, 0x2a, 0x59, 0x1b, 0xc1, 0x62, 0x31, 0x7e, 0xf2, 0x4c, 0x66, 0x2f, 0xb2, 0x1d, 0x3f, 0x71, - 0x86, 0x1f, 0xe3, 0x93, 0x6f, 0xc3, 0xc2, 0x9e, 0xdb, 0x69, 0x7a, 0x8f, 0x02, 0xb1, 0x4c, 0x09, - 0x45, 0x37, 0x17, 0x07, 0x38, 0x3e, 0xe2, 0xe5, 0xb6, 0xb4, 0x54, 0xfa, 0x14, 0x5f, 0x2a, 0x07, - 0xf2, 0x2b, 0x7d, 0x9c, 0xb9, 0x04, 0x91, 0x61, 0x12, 0xb4, 0xdc, 0x27, 0x41, 0xfd, 0xd5, 0x27, - 0xc5, 0x29, 0xb5, 0x1a, 0xe2, 0x01, 0xd1, 0xed, 0xf2, 0x8f, 0x3d, 0xb7, 0xb3, 0x38, 0xaf, 0x3d, - 0x4f, 0x1e, 0xad, 0x62, 0x88, 0xc7, 0x5f, 0x09, 0x91, 0xcf, 0x14, 0xe9, 0x66, 0xc3, 0x0f, 0x3d, - 0xcd, 0xc9, 0x96, 0xc2, 0x9a, 0x7c, 0x0a, 0x05, 0xf6, 0x7f, 0xb4, 0x05, 0x5a, 0xd0, 0x0e, 0xfc, - 0x15, 0x4c, 0x51, 0x0f, 0x8e, 0x11, 0xe6, 0x4c, 0x4a, 0xd9, 0x1d, 0x69, 0xac, 0xc8, 0xbb, 0x00, - 0xcc, 0x34, 0x13, 0xea, 0xf8, 0x7c, 0x9c, 0xd8, 0x0a, 0x2d, 0xb8, 0x7e, 0x45, 0x1c, 0x23, 0xb3, - 0x7d, 0x19, 0xfb, 0x55, 0xef, 0x35, 0x3d, 0x36, 0x37, 0x2e, 0x20, 0x2d, 0xee, 0xcb, 0x90, 0x36, - 0xe0, 0x70, 0x55, 0x3a, 0x14, 0x74, 0xb2, 0x02, 0xb3, 0xf8, 0x18, 0xcb, 0x6a, 0x93, 0x76, 0x42, - 0x3c, 0xec, 0x58, 0xbc, 0xa8, 0x1c, 0xa3, 0xb0, 0x22, 0xdb, 0x8d, 0xca, 0xd4, 0x08, 0xf4, 0x04, - 0x99, 0xf9, 0xe7, 0x06, 0x2c, 0xa4, 0x75, 0xf7, 0x29, 0xd9, 0x68, 0xcd, 0x44, 0xf4, 0x12, 0xba, - 0x18, 0x79, 0xf4, 0x52, 0x14, 0xb3, 0xb4, 0x04, 0x63, 0xf7, 0xdd, 0x4e, 0x53, 0x9e, 0xf0, 0xe0, - 0x8a, 0xfe, 0x80, 0x01, 0x2c, 0x0e, 0x67, 0x08, 0xfc, 0x2e, 0x13, 0x5b, 0xf2, 0xc7, 0x38, 0x02, - 0x5e, 0x5d, 0xb2, 0x38, 0x9c, 0x21, 0x30, 0xcb, 0x41, 0xae, 0x74, 0x88, 0xc0, 0x0c, 0x8a, 0xc0, - 0xe2, 0x70, 0x72, 0x15, 0x26, 0x36, 0x3b, 0x6b, 0xd4, 0x79, 0x28, 0x9f, 0x52, 0x41, 0x97, 0xa8, - 0xd7, 0xb1, 0x5b, 0x0c, 0x66, 0xc9, 0x42, 0xf3, 0xa7, 0x06, 0xcc, 0xf5, 0x8d, 0xf4, 0xe9, 0x09, - 0x77, 0x87, 0xc7, 0x69, 0x8c, 0xf2, 0x7d, 0xbc, 0xf9, 0xb9, 0xf4, 0xe6, 0x9b, 0x7f, 0x90, 0x83, - 0x8b, 0x03, 0x16, 0xde, 0x38, 0xc6, 0xca, 0x38, 0x35, 0xc6, 0xea, 0xbb, 0x6c, 0xa1, 0x73, 0xdc, - 0x76, 0xb0, 0xed, 0xc5, 0x2d, 0x8e, 0x8f, 0xa3, 0xb1, 0x4c, 0xe6, 0xc3, 0x7c, 0x45, 0x58, 0x18, - 0x97, 0x1a, 0x48, 0x61, 0x87, 0x5e, 0xdf, 0x61, 0x96, 0xce, 0xac, 0x2f, 0xca, 0x29, 0xfb, 0x97, - 0x24, 0xca, 0x49, 0x8f, 0x2d, 0xc8, 0x3d, 0xd3, 0xd8, 0x82, 0xf4, 0xd3, 0xbb, 0xb1, 0xa7, 0x39, - 0x05, 0xad, 0xc0, 0x74, 0x9d, 0x3a, 0x7e, 0xe3, 0xa8, 0x14, 0xf0, 0x41, 0xe2, 0x0f, 0x0f, 0x88, - 0xa4, 0x37, 0xac, 0xc0, 0x76, 0x82, 0xfe, 0xb1, 0xd0, 0x68, 0xcc, 0x9f, 0x66, 0xf4, 0xe0, 0xac, - 0xbf, 0x8c, 0xf2, 0xf2, 0x06, 0x8c, 0xed, 0x1d, 0x51, 0x5f, 0xda, 0xf9, 0xd8, 0x90, 0x47, 0x0c, - 0xa0, 0x36, 0x04, 0x31, 0xc8, 0x5d, 0x98, 0xd9, 0xe2, 0xfd, 0x27, 0x3b, 0x25, 0x17, 0x6b, 0xb1, - 0xae, 0x58, 0x6b, 0x53, 0x7a, 0x25, 0x41, 0x65, 0xfe, 0x32, 0x14, 0xd4, 0x46, 0xa3, 0x62, 0x61, - 0xbf, 0xc5, 0xcc, 0xe6, 0x8a, 0x85, 0x01, 0x2c, 0x0e, 0x3f, 0x35, 0x99, 0x76, 0xdc, 0x9b, 0xd9, - 0xd3, 0x7a, 0x93, 0x55, 0x8e, 0x72, 0xab, 0x54, 0x8e, 0xbf, 0xd5, 0xca, 0x43, 0x06, 0xb0, 0x38, - 0xfc, 0x99, 0x56, 0xfe, 0x9f, 0x1b, 0x22, 0xa9, 0xd2, 0x3b, 0x30, 0x19, 0x1f, 0xa9, 0xc7, 0x29, - 0x0b, 0xe7, 0xe5, 0xf1, 0x50, 0xa0, 0x87, 0xe8, 0x09, 0x20, 0xab, 0x6a, 0x97, 0xfa, 0xfb, 0x5a, - 0x24, 0xe7, 0x43, 0x06, 0x50, 0xab, 0x42, 0x8c, 0xb3, 0x8c, 0xeb, 0x4d, 0x98, 0x28, 0x09, 0xd7, - 0x0e, 0x1f, 0x50, 0x1e, 0xad, 0xda, 0xe7, 0xc7, 0x91, 0x58, 0xe6, 0xef, 0x1a, 0x70, 0x3e, 0xd5, - 0xa8, 0x63, 0xb5, 0x72, 0xeb, 0x51, 0x11, 0xeb, 0xa4, 0xe9, 0xc8, 0x31, 0xce, 0x12, 0x95, 0x3a, - 0xfa, 0xb7, 0x98, 0xaf, 0xc0, 0x64, 0xe4, 0x52, 0x20, 0x0b, 0x72, 0xe8, 0xf0, 0x90, 0x40, 0xee, - 0x4c, 0xff, 0xc2, 0x80, 0x71, 0xd6, 0x84, 0xe7, 0xf6, 0xce, 0x65, 0xfa, 0x91, 0x11, 0xfb, 0xa4, - 0x91, 0x6e, 0x5a, 0xfe, 0xde, 0x38, 0x40, 0x8c, 0x4c, 0xf6, 0x61, 0x66, 0x73, 0xb5, 0x5a, 0x51, - 0x6c, 0x13, 0x3d, 0xe9, 0x54, 0x94, 0xe0, 0x9d, 0x23, 0x1c, 0xc7, 0x3a, 0xc6, 0x73, 0x9b, 0x8d, - 0x74, 0xbb, 0x25, 0xc1, 0x91, 0xd5, 0x51, 0x2f, 0xad, 0xaf, 0x29, 0x75, 0x64, 0x46, 0xac, 0x23, - 0x70, 0xda, 0xad, 0x01, 0x75, 0xe8, 0x1c, 0xc9, 0x11, 0x14, 0xef, 0xe1, 0x2a, 0xa6, 0xd4, 0x92, - 0x1d, 0x5e, 0xcb, 0xab, 0xa2, 0x96, 0x17, 0xf8, 0xf2, 0x97, 0x5e, 0x4f, 0x1f, 0xd7, 0x58, 0x72, - 0x73, 0xa7, 0x4a, 0xee, 0x5f, 0x37, 0x60, 0x9c, 0x2f, 0x93, 0xd1, 0xcb, 0xe9, 0xa9, 0x0b, 0xf1, - 0xde, 0xb3, 0x59, 0x88, 0x8b, 0xa8, 0xb9, 0x34, 0x6f, 0x0a, 0x2f, 0x23, 0xd5, 0xc4, 0x33, 0xec, - 0xf2, 0x5c, 0x10, 0x77, 0x19, 0xbc, 0x24, 0x8e, 0xed, 0xe5, 0x2f, 0xb0, 0xab, 0x5c, 0x38, 0x06, - 0x59, 0x8d, 0xc3, 0x4a, 0x27, 0x4e, 0x0d, 0x2b, 0x95, 0xa1, 0xb8, 0x13, 0x22, 0xac, 0x54, 0x0f, - 0x26, 0x5d, 0x83, 0x49, 0x11, 0xac, 0x5a, 0x96, 0x2f, 0x02, 0x4b, 0x9f, 0x60, 0x04, 0x57, 0x9e, - 0x0c, 0xe3, 0x20, 0x7b, 0x5f, 0xcb, 0x56, 0x1f, 0x21, 0x92, 0x4d, 0x98, 0x8c, 0x2f, 0x93, 0xea, - 0x89, 0x14, 0x22, 0xb8, 0xb8, 0xcd, 0x21, 0x23, 0xde, 0x52, 0xee, 0x8e, 0xc6, 0x3c, 0xcc, 0x1f, - 0x1b, 0x50, 0x4c, 0xca, 0x0b, 0x3e, 0x26, 0x2a, 0xef, 0xec, 0x46, 0x41, 0x66, 0xfc, 0x31, 0xd1, - 0xe8, 0x92, 0xaf, 0xfe, 0x88, 0xa5, 0x82, 0x4e, 0x96, 0x21, 0xcf, 0xa6, 0x5d, 0x27, 0xf1, 0x9a, - 0x68, 0x4f, 0xc0, 0xd4, 0x60, 0x05, 0x89, 0xa7, 0xcc, 0xda, 0x7f, 0x92, 0x85, 0x29, 0x65, 0xb0, - 0xc8, 0x1b, 0x90, 0x5f, 0x0d, 0xd6, 0xbc, 0xc6, 0x03, 0xda, 0x14, 0x67, 0xa0, 0xd3, 0x4f, 0x4e, - 0x96, 0x26, 0xdd, 0xc0, 0x6e, 0x21, 0xd0, 0x8a, 0x8a, 0x49, 0x19, 0xa6, 0xf9, 0x5f, 0x32, 0x99, - 0x47, 0x26, 0x3e, 0xbf, 0xe1, 0xc8, 0x32, 0x8d, 0x87, 0x6a, 0x26, 0x68, 0x24, 0xe4, 0x7b, 0x00, - 0x1c, 0xc0, 0xc6, 0x77, 0x84, 0xbb, 0x2a, 0x72, 0x02, 0x9f, 0x17, 0x15, 0x84, 0xae, 0xfa, 0x85, - 0x28, 0x0a, 0x0a, 0x43, 0xf2, 0x03, 0x7e, 0xb3, 0x56, 0x0a, 0xd7, 0xe9, 0x81, 0xd0, 0xa6, 0x8c, - 0x9a, 0x62, 0xfc, 0xed, 0xf4, 0xc0, 0x65, 0x95, 0x25, 0xf9, 0x89, 0x01, 0x97, 0x2d, 0xda, 0xf0, - 0x1e, 0x52, 0xff, 0xb8, 0x14, 0x22, 0x96, 0x5a, 0xe3, 0xe9, 0x51, 0xd2, 0xb7, 0x45, 0x8d, 0xaf, - 0xfb, 0x82, 0x0b, 0x5e, 0xcc, 0x6c, 0x77, 0x43, 0x7b, 0x48, 0x13, 0x86, 0x54, 0x69, 0xfe, 0x0f, - 0x86, 0x32, 0x05, 0xc8, 0x06, 0x26, 0x88, 0xe4, 0xc2, 0x22, 0x7c, 0xe4, 0x91, 0x85, 0x27, 0xe1, - 0x16, 0x3d, 0x28, 0xbf, 0x20, 0x8e, 0x2b, 0xe7, 0x23, 0x91, 0x4b, 0x24, 0x8e, 0xe4, 0x40, 0xf2, - 0x2d, 0xc8, 0xe1, 0x50, 0x9d, 0x9e, 0xfa, 0x5b, 0x2e, 0x35, 0x39, 0x36, 0x46, 0xd8, 0x6a, 0xa4, - 0x24, 0x5f, 0x15, 0x81, 0x78, 0x59, 0xed, 0xf9, 0x19, 0x06, 0x62, 0xed, 0x88, 0xd6, 0x98, 0x38, - 0x56, 0x5e, 0x91, 0xd6, 0xdf, 0xce, 0x40, 0x31, 0x39, 0xf1, 0xc8, 0x47, 0x50, 0x90, 0x17, 0x83, - 0x57, 0x1c, 0x91, 0x23, 0xa4, 0x20, 0x72, 0x74, 0x08, 0xb8, 0x7d, 0xe4, 0x68, 0x09, 0xdd, 0x35, - 0x02, 0xb6, 0x20, 0x6f, 0x8b, 0x2b, 0x58, 0xca, 0x04, 0x0a, 0xbd, 0xb0, 0x9b, 0x78, 0x8d, 0x42, - 0xa2, 0x91, 0x77, 0x20, 0xcb, 0x6f, 0xc4, 0xab, 0x59, 0x9e, 0xd7, 0xef, 0x96, 0xf8, 0x6d, 0x51, - 0x1e, 0x21, 0xa3, 0x9f, 0x65, 0x30, 0x7c, 0xb2, 0xa6, 0xdc, 0xb5, 0x1e, 0xd7, 0xd2, 0x0d, 0x4a, - 0x70, 0xf4, 0x71, 0xa7, 0x5f, 0xba, 0x56, 0xb3, 0xdd, 0x9b, 0xff, 0x5e, 0x16, 0x26, 0xa3, 0xfa, - 0x09, 0x01, 0xb4, 0x37, 0x44, 0xa8, 0x0b, 0xfe, 0x4d, 0x2e, 0x41, 0x5e, 0x9a, 0x18, 0x22, 0xdc, - 0x65, 0x22, 0x10, 0xe6, 0xc5, 0x22, 0x48, 0x5b, 0x82, 0x9b, 0x17, 0x96, 0xfc, 0x49, 0x6e, 0x41, - 0x64, 0x28, 0x0c, 0xb2, 0x28, 0x72, 0x6c, 0xc0, 0xac, 0x08, 0x8d, 0xcc, 0x40, 0xc6, 0xe5, 0xd7, - 0x6b, 0x26, 0xad, 0x8c, 0xdb, 0x24, 0x1f, 0x41, 0xde, 0x69, 0x36, 0x69, 0xd3, 0x76, 0xa4, 0xb3, - 0x79, 0x98, 0xd0, 0xe4, 0x19, 0x37, 0xae, 0xd1, 0x91, 0xaa, 0x14, 0x92, 0x12, 0x4c, 0xb6, 0x1c, - 0x7e, 0x14, 0xd6, 0x1c, 0x61, 0x79, 0x88, 0x39, 0xe4, 0x19, 0xd9, 0x4e, 0x40, 0x9b, 0xe4, 0x75, - 0xc8, 0xb1, 0xd1, 0x14, 0xeb, 0x41, 0x94, 0xbb, 0x7f, 0x73, 0x7b, 0x8b, 0x77, 0xd8, 0xca, 0x39, - 0x0b, 0x11, 0xc8, 0x57, 0x20, 0xdb, 0x5b, 0x3e, 0x10, 0x9a, 0xbe, 0x18, 0x27, 0x4b, 0x88, 0xd0, - 0x58, 0x31, 0xb9, 0x0d, 0xf9, 0x47, 0xfa, 0x95, 0xf9, 0xf3, 0x89, 0x61, 0x8c, 0xf0, 0x23, 0xc4, - 0x72, 0x1e, 0xc6, 0xf9, 0xc5, 0x6b, 0xf3, 0x65, 0x80, 0xb8, 0xea, 0xfe, 0xa8, 0x24, 0xf3, 0x7b, - 0x30, 0x19, 0x55, 0x49, 0x5e, 0x02, 0x78, 0x40, 0x8f, 0xed, 0x23, 0xa7, 0xd3, 0x14, 0xcf, 0xe1, - 0x16, 0xac, 0xc9, 0x07, 0xf4, 0x78, 0x05, 0x01, 0xe4, 0x22, 0x4c, 0x74, 0xd9, 0xa8, 0xca, 0xb7, - 0x54, 0xac, 0xf1, 0x6e, 0x6f, 0x9f, 0x49, 0xe8, 0x22, 0x4c, 0xa0, 0x13, 0x45, 0x4c, 0xb4, 0x69, - 0x4b, 0xfe, 0x34, 0xff, 0x6e, 0x06, 0x33, 0x27, 0x29, 0xed, 0x24, 0xaf, 0xc2, 0x74, 0xc3, 0xa7, - 0xb8, 0x1c, 0xe1, 0x43, 0x3c, 0xa2, 0x9e, 0x42, 0x0c, 0x5c, 0x6d, 0x92, 0xab, 0x30, 0x1b, 0x3f, - 0xee, 0x62, 0x37, 0xf6, 0x45, 0x52, 0x8c, 0x82, 0x35, 0xdd, 0x95, 0xaf, 0xbb, 0x54, 0xf6, 0xf1, - 0x5a, 0x58, 0x51, 0xbd, 0x74, 0x1d, 0xca, 0x87, 0x5a, 0x26, 0xad, 0x59, 0x05, 0x8e, 0x67, 0x48, - 0x17, 0x60, 0xdc, 0x71, 0x0e, 0x7b, 0x2e, 0xbf, 0xa2, 0x52, 0xb0, 0xc4, 0x2f, 0xf2, 0x26, 0xcc, - 0x05, 0xee, 0x61, 0xc7, 0x09, 0x7b, 0xbe, 0x48, 0x5d, 0x45, 0x7d, 0x14, 0xa9, 0x69, 0xab, 0x18, - 0x15, 0x54, 0x38, 0x9c, 0xbc, 0x0d, 0x44, 0xad, 0xcf, 0xdb, 0xff, 0x21, 0x6d, 0x70, 0x51, 0x2b, - 0x58, 0x73, 0x4a, 0xc9, 0x26, 0x16, 0x90, 0x57, 0xa0, 0xe0, 0xd3, 0x00, 0x4d, 0x32, 0xec, 0x36, - 0x4c, 0x2c, 0x68, 0x4d, 0x49, 0xd8, 0x7d, 0x7a, 0x6c, 0x96, 0x61, 0xae, 0x6f, 0x3e, 0x92, 0xb7, - 0xb9, 0x75, 0x2f, 0xd6, 0xe7, 0x02, 0xdf, 0xcc, 0xe0, 0x0b, 0xe7, 0xda, 0xd2, 0x2c, 0x90, 0xcc, - 0x0e, 0x14, 0x54, 0xfd, 0x7a, 0x4a, 0xba, 0x91, 0x0b, 0x18, 0x5d, 0xce, 0x95, 0xcf, 0xf8, 0x93, - 0x93, 0xa5, 0x8c, 0xdb, 0xc4, 0x98, 0xf2, 0x6b, 0x90, 0x97, 0x56, 0x82, 0xfa, 0x78, 0xaa, 0x30, - 0x28, 0x8f, 0xad, 0xa8, 0xd4, 0x7c, 0x1d, 0x26, 0x84, 0x0a, 0x1d, 0xee, 0xd0, 0x32, 0x7f, 0x2d, - 0x03, 0xb3, 0x16, 0x65, 0x13, 0x5c, 0x3c, 0x4b, 0xfa, 0x25, 0x7b, 0xe6, 0x46, 0xfb, 0xb6, 0x21, - 0xd9, 0x7d, 0x7e, 0xdf, 0x80, 0xf9, 0x14, 0xdc, 0xcf, 0x95, 0xb3, 0xf5, 0x0e, 0x4c, 0x56, 0x5d, - 0xa7, 0x55, 0x6a, 0x36, 0xa3, 0x28, 0x79, 0xb4, 0x06, 0x9b, 0x6c, 0x3a, 0x39, 0x0c, 0xaa, 0x2e, - 0xa6, 0x11, 0x2a, 0xb9, 0x2e, 0x84, 0x22, 0x7e, 0xd4, 0x40, 0x3e, 0xa4, 0x03, 0xbc, 0x4d, 0xf1, - 0x33, 0x3a, 0x78, 0xb3, 0x9a, 0x03, 0xe3, 0x48, 0x87, 0xe7, 0x76, 0xe8, 0xd2, 0x6f, 0x56, 0x27, - 0x3f, 0x6f, 0xa4, 0x6d, 0xe7, 0x8f, 0x33, 0x70, 0x21, 0x9d, 0xf0, 0xf3, 0xa6, 0xdf, 0xc5, 0xd4, - 0x4a, 0xca, 0x5b, 0x45, 0x98, 0x7e, 0x97, 0xe7, 0x61, 0x42, 0xfc, 0x18, 0x81, 0x1c, 0xc0, 0xf4, - 0x9a, 0x13, 0x84, 0x2b, 0xd4, 0xf1, 0xc3, 0x7d, 0xea, 0x84, 0x23, 0x58, 0xb0, 0x5f, 0x91, 0x6f, - 0x4e, 0xe2, 0xa2, 0x76, 0x24, 0x29, 0x13, 0x06, 0x9e, 0xce, 0x36, 0x12, 0x94, 0xdc, 0x08, 0x82, - 0xf2, 0x8b, 0x30, 0x5b, 0xa7, 0x6d, 0xa7, 0x7b, 0xe4, 0xf9, 0x54, 0xf8, 0xe0, 0x6f, 0xc0, 0x74, - 0x04, 0x4a, 0x95, 0x16, 0xbd, 0x58, 0xc3, 0x57, 0x3a, 0x22, 0x56, 0x25, 0x7a, 0xb1, 0xf9, 0xb7, - 0x32, 0x70, 0xb1, 0xd4, 0x10, 0x67, 0x2e, 0xa2, 0x40, 0x1e, 0x0d, 0x7f, 0xc1, 0x75, 0x93, 0x9b, - 0x30, 0xb9, 0xee, 0x3c, 0x5e, 0xa3, 0x4e, 0x40, 0x03, 0x91, 0xfc, 0x90, 0x9b, 0x5f, 0xce, 0x63, - 0x3b, 0x72, 0x7b, 0x59, 0x31, 0x8e, 0xba, 0xd9, 0xcc, 0x3d, 0xe5, 0x66, 0xd3, 0x84, 0xf1, 0x15, - 0xaf, 0xd5, 0x14, 0x8b, 0x93, 0x38, 0xff, 0x38, 0x42, 0x88, 0x25, 0x4a, 0xcc, 0x3f, 0x37, 0x60, - 0x26, 0x6a, 0x31, 0x36, 0xe1, 0x0b, 0xef, 0x92, 0xab, 0x30, 0x81, 0x15, 0x45, 0x0f, 0xee, 0xe2, - 0xa2, 0xd1, 0x62, 0x20, 0xdb, 0x6d, 0x5a, 0xb2, 0x50, 0xed, 0x89, 0xb1, 0xa7, 0xeb, 0x09, 0xf3, - 0xdf, 0xc7, 0xa3, 0x15, 0xf5, 0x2b, 0xd9, 0x4a, 0xa4, 0x34, 0xc4, 0x18, 0xb1, 0x21, 0x99, 0x67, - 0x36, 0x24, 0xd9, 0x81, 0x43, 0xf2, 0xa3, 0x0c, 0x4c, 0x45, 0x8d, 0xfd, 0x92, 0xa5, 0x24, 0x89, - 0xbe, 0x6b, 0xa4, 0x2b, 0x27, 0x75, 0x45, 0x57, 0x88, 0x9b, 0x1d, 0xdf, 0x82, 0x71, 0x31, 0x99, - 0x8c, 0xc4, 0x11, 0x69, 0x62, 0x74, 0xcb, 0x33, 0x82, 0xf5, 0x38, 0x0e, 0x68, 0x60, 0x09, 0x3a, - 0xbc, 0xd3, 0xb3, 0x47, 0xf7, 0xc5, 0x49, 0xdb, 0x73, 0xbb, 0x46, 0xa5, 0xdf, 0xe9, 0x89, 0x3f, - 0x6c, 0xa4, 0xd5, 0xe9, 0x5f, 0x19, 0x83, 0x62, 0x92, 0xe4, 0xf4, 0xa4, 0x2f, 0x5b, 0xbd, 0x7d, - 0xf1, 0x34, 0x22, 0x26, 0x7d, 0xe9, 0xf6, 0xf6, 0x2d, 0x06, 0x23, 0x57, 0x21, 0xb7, 0xe5, 0xbb, - 0x0f, 0xf1, 0xab, 0xc5, 0xcb, 0x90, 0x5d, 0xdf, 0x7d, 0xa8, 0x06, 0xb7, 0xb3, 0x72, 0xdc, 0xd0, - 0xae, 0xd5, 0x31, 0x4e, 0x1a, 0x0d, 0x6b, 0xb1, 0xa1, 0x6d, 0x05, 0xc9, 0x44, 0x6a, 0x12, 0x8d, - 0x2d, 0x95, 0x65, 0xea, 0xf8, 0x22, 0x41, 0x89, 0x50, 0x67, 0xb8, 0x54, 0xee, 0x23, 0x98, 0x3f, - 0x01, 0x60, 0xa9, 0x48, 0xa4, 0x05, 0x44, 0xf9, 0x29, 0x27, 0xf0, 0xe9, 0x7b, 0x3c, 0xf9, 0xea, - 0xf2, 0x82, 0xca, 0xda, 0x56, 0x67, 0x73, 0x0a, 0xdf, 0x67, 0xe9, 0x23, 0xdc, 0x12, 0xd7, 0x55, - 0xd1, 0x91, 0x91, 0x3f, 0x95, 0x99, 0xbc, 0x48, 0x00, 0xfc, 0x3a, 0x6b, 0xe4, 0xce, 0x88, 0x99, - 0x90, 0x0f, 0x61, 0x4a, 0x8d, 0x7e, 0xe7, 0x31, 0xda, 0x2f, 0xf2, 0x6b, 0xa2, 0x03, 0xb2, 0xd0, - 0xaa, 0x04, 0x64, 0x1f, 0x2e, 0x56, 0xbc, 0x4e, 0xd0, 0x6b, 0xd3, 0xa6, 0x76, 0x12, 0xbc, 0x5a, - 0xc5, 0x0d, 0xe6, 0x24, 0x8f, 0x8a, 0x6d, 0x08, 0x14, 0x11, 0x6c, 0x2d, 0xe3, 0x4f, 0xf4, 0x0d, - 0xc8, 0x20, 0x46, 0xe6, 0x57, 0x55, 0x49, 0x14, 0x86, 0xc1, 0x50, 0x49, 0x34, 0x7f, 0x07, 0xb7, - 0x0a, 0x6d, 0x2f, 0xa4, 0xc2, 0x42, 0x7a, 0x6e, 0x75, 0x65, 0xec, 0xa6, 0x1e, 0xd3, 0x42, 0x88, - 0xb4, 0xaf, 0xe3, 0x18, 0xbb, 0xb7, 0x63, 0xc5, 0xc6, 0x1d, 0xd6, 0xd2, 0x4d, 0xad, 0x4c, 0xeb, - 0xbf, 0x6f, 0xc0, 0xf9, 0x54, 0x5a, 0x72, 0x03, 0x20, 0xb6, 0x43, 0x45, 0x2f, 0xf1, 0xf7, 0x1b, - 0x22, 0xa8, 0xa5, 0x60, 0x90, 0xef, 0x26, 0x2d, 0xc8, 0xd3, 0x17, 0x40, 0xf9, 0x98, 0xe5, 0x8c, - 0x6e, 0x41, 0xa6, 0xd8, 0x8d, 0xe6, 0xef, 0x67, 0x61, 0x4e, 0x09, 0x91, 0xe6, 0x6d, 0x3d, 0x25, - 0xe2, 0xe1, 0x41, 0xe2, 0x91, 0xec, 0x8c, 0xf6, 0xfc, 0x4b, 0x1f, 0xb7, 0x94, 0x27, 0xb3, 0xd1, - 0xf5, 0x26, 0x9e, 0x0e, 0x39, 0xe5, 0xe5, 0xec, 0x20, 0xfd, 0xf5, 0xf6, 0x37, 0x07, 0xd6, 0xf6, - 0x0c, 0x5e, 0x71, 0xff, 0x4b, 0xfc, 0x0a, 0xf5, 0xef, 0x64, 0x60, 0xbe, 0xef, 0x9b, 0x9f, 0xdb, - 0x59, 0xf7, 0x2d, 0x6d, 0x05, 0x7d, 0x79, 0xd0, 0x98, 0x8e, 0x64, 0xa9, 0xfc, 0x3c, 0x0b, 0x17, - 0x07, 0x50, 0x92, 0xe3, 0xa4, 0x10, 0x71, 0xcb, 0xe5, 0xd6, 0xf0, 0x0a, 0x9f, 0x85, 0x28, 0x91, - 0x6f, 0xf0, 0x50, 0xdc, 0x06, 0xa6, 0x05, 0x16, 0x6b, 0x76, 0xf4, 0x4e, 0x1a, 0x87, 0x26, 0x63, - 0x70, 0x39, 0x94, 0x7c, 0x04, 0x63, 0x18, 0x85, 0x95, 0xb8, 0xd7, 0xc5, 0x30, 0x10, 0xae, 0x5c, - 0x82, 0x63, 0x3f, 0xb5, 0x4b, 0x70, 0x0c, 0x40, 0xbe, 0x0e, 0xd9, 0xd2, 0x5e, 0x5d, 0x8c, 0xcb, - 0x8c, 0x4a, 0xbe, 0x57, 0x8f, 0x53, 0x58, 0x38, 0x5a, 0xae, 0x09, 0x46, 0xc1, 0x08, 0xef, 0x55, - 0xb6, 0xc4, 0xa8, 0xa8, 0x84, 0xf7, 0x2a, 0x5b, 0x31, 0xe1, 0x61, 0x43, 0x7d, 0x24, 0x97, 0x51, - 0x7c, 0x71, 0x62, 0xff, 0xaf, 0x66, 0x78, 0xfc, 0x30, 0xff, 0xb0, 0x8f, 0xa0, 0x20, 0x43, 0x13, - 0x14, 0x35, 0x85, 0x4a, 0x25, 0xba, 0xcb, 0x9e, 0x38, 0xd9, 0xd2, 0x08, 0x64, 0x32, 0x18, 0xf6, - 0x1b, 0xe3, 0xec, 0xd4, 0x83, 0xa9, 0x88, 0x03, 0xc6, 0xe5, 0x25, 0x93, 0xc1, 0x44, 0x24, 0xe4, - 0x36, 0xe4, 0xb7, 0x69, 0xc7, 0xe9, 0x84, 0xd1, 0x26, 0x0a, 0x03, 0x29, 0x42, 0x84, 0xe9, 0x2b, - 0x6e, 0x84, 0x88, 0x6f, 0x5a, 0xf5, 0xf6, 0xa3, 0xe7, 0xee, 0x57, 0xab, 0xca, 0x03, 0x8c, 0x97, - 0x02, 0xa5, 0x24, 0xf1, 0x28, 0x98, 0x4e, 0x64, 0xfe, 0x8e, 0x01, 0x13, 0x62, 0x20, 0x95, 0x97, - 0x68, 0x8c, 0x11, 0x5e, 0xa2, 0xb9, 0x03, 0x93, 0xe2, 0x61, 0x2c, 0xfd, 0x39, 0x30, 0xf1, 0x8e, - 0x56, 0xe2, 0x39, 0xb0, 0x08, 0x35, 0x4a, 0x57, 0x96, 0x1d, 0x9e, 0xae, 0xcc, 0xfc, 0x3b, 0xa2, - 0x65, 0xf7, 0x2a, 0x5b, 0x64, 0x19, 0xf2, 0x6b, 0x5e, 0xc3, 0x51, 0xd6, 0x39, 0x54, 0x3b, 0x2d, - 0x01, 0x53, 0x3b, 0x48, 0xe2, 0xe9, 0xcf, 0x9c, 0x65, 0x46, 0x7f, 0xe6, 0x6c, 0xd4, 0xf6, 0xd1, - 0x14, 0x25, 0xb1, 0x7b, 0x1b, 0x9f, 0x42, 0xfd, 0x18, 0x48, 0x5f, 0x91, 0xd4, 0x14, 0x97, 0x07, - 0x69, 0x8a, 0xdd, 0xdb, 0x56, 0x0a, 0x15, 0xfa, 0xe2, 0x62, 0x30, 0x7f, 0x30, 0xf0, 0x4b, 0x96, - 0xe5, 0x30, 0xf9, 0x79, 0x23, 0x29, 0xe9, 0x7f, 0x92, 0x81, 0x0b, 0xe9, 0x84, 0xea, 0xb7, 0x18, - 0x43, 0xbe, 0xe5, 0x1a, 0xe4, 0x57, 0xbc, 0x20, 0x54, 0x0e, 0xb3, 0xd1, 0x65, 0x70, 0x24, 0x60, - 0x56, 0x54, 0x4a, 0x5e, 0x65, 0x1b, 0xfd, 0x20, 0x9e, 0x9e, 0xc8, 0x0f, 0xa3, 0x66, 0xdd, 0xa6, - 0x25, 0x8a, 0xb4, 0x27, 0xbd, 0x73, 0x83, 0x9f, 0xf4, 0x3e, 0x77, 0xea, 0x93, 0xde, 0x25, 0x98, - 0x10, 0xa3, 0x9f, 0x70, 0x37, 0xa7, 0x88, 0x8c, 0x9e, 0x2a, 0x43, 0xd2, 0x31, 0x8d, 0x82, 0x8e, - 0xc3, 0xd5, 0xaa, 0x8c, 0xfa, 0x43, 0x8d, 0xc2, 0x1d, 0x8b, 0x7a, 0x6e, 0x8e, 0x08, 0xd1, 0xfc, - 0xb5, 0x0c, 0xc0, 0x1e, 0xdd, 0x7f, 0xbe, 0x93, 0xa7, 0x7e, 0x5d, 0x93, 0x30, 0xe5, 0xac, 0x6c, - 0xf4, 0xdc, 0xa9, 0x9b, 0x78, 0x66, 0x35, 0x7a, 0xe6, 0xd4, 0xe8, 0x3d, 0xe9, 0x4c, 0xfa, 0x7b, - 0xd2, 0xe6, 0x3e, 0x2c, 0xdc, 0xa3, 0x61, 0xbc, 0x21, 0x92, 0xee, 0xca, 0xe1, 0x6c, 0xdf, 0x82, - 0x49, 0x81, 0xaf, 0x3f, 0xce, 0x26, 0x03, 0xd1, 0xdd, 0xa6, 0x15, 0x23, 0x30, 0x6d, 0x54, 0xa5, - 0x2d, 0x1a, 0xd2, 0x2f, 0xb6, 0x9a, 0x3a, 0x10, 0xfe, 0x29, 0xfc, 0x99, 0xe1, 0x91, 0x6a, 0x38, - 0xb5, 0x7f, 0x76, 0xe1, 0x7c, 0xd4, 0xf6, 0x67, 0xc9, 0xf7, 0x26, 0xdb, 0x52, 0x8a, 0x5c, 0x15, - 0x31, 0xc7, 0x21, 0xe7, 0x55, 0x8f, 0xe1, 0xb2, 0x24, 0xd8, 0x73, 0xa3, 0x43, 0xff, 0x91, 0x68, - 0xc9, 0xfb, 0x30, 0xa5, 0xd0, 0x88, 0x34, 0x3e, 0x18, 0x58, 0xf3, 0xc8, 0x0d, 0x8f, 0xec, 0x80, - 0xc3, 0xd5, 0xc0, 0x1a, 0x05, 0xdd, 0xfc, 0x0e, 0xbc, 0x10, 0x85, 0x48, 0xa6, 0x54, 0x9d, 0x60, - 0x6e, 0x9c, 0x8d, 0xf9, 0x46, 0xfc, 0x59, 0xab, 0x9d, 0xe8, 0xde, 0x99, 0xe4, 0x4d, 0xd4, 0xcf, - 0x12, 0x1f, 0xf3, 0xa2, 0x92, 0x54, 0x5a, 0x6c, 0x49, 0x62, 0x80, 0xf9, 0x9e, 0xd2, 0xd8, 0x14, - 0x86, 0x1a, 0xb1, 0x91, 0x24, 0xfe, 0xb5, 0x0c, 0xcc, 0x6e, 0xae, 0x56, 0x2b, 0xd1, 0x89, 0xe5, - 0x97, 0x2c, 0xb3, 0xab, 0xf6, 0x6d, 0x83, 0xf5, 0x8d, 0xb9, 0x03, 0xf3, 0x89, 0x6e, 0x40, 0xd3, - 0xe1, 0x43, 0x1e, 0xca, 0x18, 0x81, 0xa5, 0xd9, 0x70, 0x21, 0x8d, 0xfd, 0xee, 0x6d, 0x2b, 0x81, - 0x6d, 0xfe, 0x61, 0x3e, 0xc1, 0x57, 0xa8, 0xb0, 0xb7, 0x60, 0x72, 0x35, 0x08, 0x7a, 0xd4, 0xdf, - 0xb1, 0xd6, 0x54, 0x57, 0x81, 0x8b, 0x40, 0xbb, 0xe7, 0xb7, 0xac, 0x18, 0x81, 0xbc, 0x01, 0x79, - 0x91, 0x1f, 0x41, 0xea, 0x04, 0x8c, 0xcc, 0x8a, 0xd2, 0x2b, 0x58, 0x51, 0x31, 0x79, 0x07, 0x0a, - 0xfc, 0x6f, 0x2e, 0x6d, 0xa2, 0xc3, 0xf1, 0x58, 0x44, 0xa0, 0x73, 0xe9, 0xb4, 0x34, 0x34, 0x72, - 0x1d, 0xb2, 0xa5, 0x8a, 0xa5, 0xbe, 0xc9, 0xe4, 0x34, 0x7c, 0xfe, 0x36, 0x9b, 0xbe, 0x89, 0xa8, - 0x58, 0xcc, 0xfa, 0xc3, 0x67, 0x43, 0x9b, 0x54, 0x3e, 0xfd, 0x8b, 0x12, 0xd0, 0x15, 0xb0, 0xc4, - 0x62, 0x86, 0x30, 0x72, 0x13, 0x26, 0xaa, 0x6e, 0xd0, 0x6d, 0x39, 0xc7, 0x22, 0x3d, 0x23, 0xcf, - 0xf7, 0xc6, 0x41, 0xaa, 0xcc, 0x08, 0x2c, 0xf2, 0x06, 0x8c, 0xd5, 0x1b, 0x1e, 0x3e, 0x05, 0x1c, - 0x45, 0x44, 0x06, 0x0c, 0xa0, 0x65, 0x45, 0x63, 0x00, 0x4c, 0xbf, 0xc3, 0xb3, 0x08, 0x4c, 0x2a, - 0xe9, 0x77, 0x92, 0xd9, 0x03, 0x04, 0x4e, 0x7f, 0xec, 0x3b, 0x3c, 0xcb, 0xd8, 0xf7, 0x7d, 0xb8, - 0x78, 0x0f, 0xbd, 0x37, 0xfa, 0x5b, 0xb5, 0x3b, 0xd6, 0xaa, 0xc8, 0x9c, 0x80, 0xde, 0x3c, 0xee, - 0xe0, 0xb1, 0x13, 0x4f, 0xdd, 0x26, 0xde, 0x5d, 0x1c, 0xc4, 0x88, 0x7c, 0x1b, 0x16, 0xd2, 0x8a, - 0x44, 0x0e, 0x05, 0xbc, 0x19, 0x96, 0x5e, 0x81, 0x7a, 0x35, 0x2b, 0x8d, 0x03, 0x59, 0x83, 0x22, - 0x87, 0x97, 0x9a, 0x6d, 0xb7, 0x53, 0x6b, 0x3b, 0x6e, 0x0b, 0x33, 0x2a, 0x88, 0xb4, 0x18, 0x82, - 0xab, 0xc3, 0x0a, 0x6d, 0xca, 0x4a, 0xb5, 0xa0, 0xd6, 0x04, 0x25, 0xf9, 0x4d, 0x83, 0xed, 0xe6, - 0xf8, 0xf5, 0xf9, 0x1d, 0x6b, 0x2d, 0x10, 0x77, 0xf8, 0x06, 0xbd, 0x65, 0xb9, 0xfd, 0x8c, 0xde, - 0xb2, 0x2c, 0xf8, 0xa2, 0x4e, 0x9c, 0x45, 0x5a, 0x0b, 0xf0, 0xd5, 0x80, 0x56, 0xcb, 0x7b, 0xb4, - 0xd3, 0x79, 0x48, 0x7d, 0xf7, 0xc0, 0xa5, 0x4d, 0xfe, 0x91, 0xb3, 0xa8, 0xc1, 0xf9, 0xab, 0x01, - 0xf8, 0x16, 0x45, 0x2f, 0x42, 0xe8, 0xfb, 0xd0, 0x54, 0x0e, 0x6c, 0xe3, 0x29, 0x43, 0x2c, 0xf9, - 0xcd, 0x83, 0x62, 0xbc, 0xf1, 0x94, 0xf1, 0x98, 0x36, 0x8a, 0x91, 0x2a, 0x3c, 0x1a, 0x89, 0x88, - 0xe7, 0xfa, 0x6f, 0xf3, 0x5c, 0x23, 0x97, 0x7a, 0xe1, 0x91, 0xd4, 0xe1, 0xcb, 0x69, 0x61, 0xa2, - 0xfc, 0x38, 0x5b, 0x09, 0x13, 0xd5, 0x83, 0x43, 0x65, 0xd8, 0x49, 0x26, 0x35, 0xec, 0xe4, 0x2d, - 0x98, 0xc4, 0x27, 0x84, 0xa2, 0x78, 0xbc, 0xbc, 0xf0, 0x55, 0x32, 0x20, 0xcf, 0x3d, 0x10, 0x23, - 0x90, 0x9b, 0x00, 0x98, 0x81, 0x90, 0x2f, 0xf0, 0x4a, 0x82, 0x18, 0x4c, 0x54, 0x28, 0x4e, 0x08, - 0x14, 0x14, 0x64, 0x5f, 0xb7, 0xee, 0xaa, 0x47, 0x0a, 0x9c, 0x7d, 0xe0, 0x1f, 0x08, 0xf4, 0x18, - 0x81, 0x7d, 0x9e, 0x32, 0x4c, 0x42, 0xa9, 0x14, 0xfb, 0xc6, 0x52, 0x45, 0xc2, 0xd3, 0x7a, 0x19, - 0x7c, 0x84, 0x3a, 0xa5, 0x20, 0x4e, 0xeb, 0xa3, 0x40, 0x25, 0x2b, 0x46, 0x20, 0x5f, 0x87, 0x89, - 0x0a, 0xf5, 0xc3, 0xed, 0xed, 0x35, 0xf1, 0x0c, 0x28, 0xdb, 0x97, 0xe7, 0x31, 0x79, 0x45, 0x18, - 0xb6, 0x3e, 0x3b, 0x59, 0x9a, 0x0e, 0xdd, 0x36, 0xbd, 0x11, 0xb9, 0xe8, 0x25, 0x36, 0x29, 0x43, - 0x91, 0x47, 0x54, 0xc6, 0x86, 0x1c, 0xaa, 0x99, 0x3c, 0x57, 0x7a, 0x22, 0x61, 0xc3, 0x23, 0xba, - 0x1f, 0xa5, 0xee, 0xe8, 0xc3, 0x27, 0x35, 0x99, 0x26, 0x47, 0xfd, 0x48, 0x88, 0x3d, 0x0b, 0x42, - 0x31, 0x6b, 0xdf, 0xda, 0x4f, 0x41, 0x4a, 0x30, 0x5d, 0xf1, 0xda, 0x5d, 0x27, 0x74, 0x31, 0xc1, - 0xe1, 0xb1, 0xd0, 0x28, 0xe8, 0x1d, 0x69, 0xa8, 0x05, 0xfa, 0x8b, 0x40, 0x4a, 0x01, 0xb9, 0x0b, - 0x33, 0x96, 0xd7, 0x63, 0x83, 0x24, 0xb7, 0x34, 0x05, 0xe5, 0xb1, 0x79, 0x56, 0xc2, 0x74, 0x9c, - 0xd8, 0xbf, 0x68, 0x77, 0x5b, 0x35, 0x2a, 0xb2, 0x91, 0xe2, 0x5b, 0x56, 0x35, 0x85, 0x9a, 0xc0, - 0xa3, 0x8f, 0x59, 0x8a, 0x5b, 0xfa, 0x36, 0x4c, 0xd5, 0xeb, 0x9b, 0xdb, 0x34, 0x08, 0xef, 0xb6, - 0xbc, 0x47, 0xa8, 0x28, 0xf2, 0x22, 0xd9, 0x58, 0xe0, 0xd9, 0x21, 0x0d, 0x42, 0xfb, 0xa0, 0xe5, - 0x3d, 0xb2, 0x54, 0x2c, 0xf2, 0x7d, 0xe5, 0x89, 0x24, 0x5c, 0xf9, 0x67, 0x4f, 0x5d, 0xf9, 0x13, - 0xcf, 0x27, 0xb1, 0xf5, 0x3f, 0xf5, 0xf9, 0x24, 0x86, 0x8e, 0xc1, 0xa5, 0x6c, 0x33, 0x56, 0x6a, - 0x36, 0x7d, 0x1a, 0x04, 0x62, 0x46, 0x2b, 0x0f, 0xc0, 0x39, 0xbc, 0x40, 0x0b, 0x2e, 0x55, 0x08, - 0xc8, 0x8f, 0x0c, 0x38, 0xaf, 0xc6, 0xa7, 0xe1, 0x64, 0xc1, 0x87, 0xf6, 0xe7, 0xb0, 0xa5, 0x6f, - 0xdf, 0x90, 0x1a, 0xed, 0x86, 0x82, 0x76, 0xe3, 0xe1, 0xad, 0x1b, 0xca, 0xc3, 0x24, 0x75, 0x49, - 0x84, 0x6f, 0x45, 0x2e, 0xa5, 0xf2, 0x53, 0xb5, 0x93, 0x93, 0x42, 0x8a, 0x56, 0x5e, 0xbd, 0xb4, - 0xbe, 0x16, 0x9b, 0x2a, 0x5f, 0xae, 0xc8, 0x2f, 0xed, 0xdb, 0x86, 0x44, 0x7e, 0xed, 0xc0, 0x7c, - 0xa2, 0x1b, 0xa4, 0x95, 0xa7, 0x81, 0x93, 0x56, 0x5e, 0x82, 0xc6, 0x4a, 0x60, 0x9b, 0xff, 0x60, - 0x22, 0xc1, 0x57, 0x9c, 0xf6, 0x9a, 0x30, 0xce, 0x8d, 0x38, 0x35, 0x95, 0x3e, 0x37, 0xf1, 0x2c, - 0x51, 0x42, 0x2e, 0x41, 0xb6, 0x5e, 0xdf, 0x54, 0x1f, 0xfa, 0x08, 0x02, 0xcf, 0x62, 0x30, 0x36, - 0x42, 0x78, 0x90, 0xab, 0xe4, 0xcb, 0x60, 0x1a, 0xcb, 0x42, 0x28, 0xeb, 0x6f, 0x69, 0x52, 0xe5, - 0xe2, 0xfe, 0x16, 0x26, 0x55, 0x6c, 0x48, 0x55, 0x60, 0xb1, 0x14, 0x04, 0xd4, 0xe7, 0xcf, 0xfe, - 0xe1, 0xf9, 0xa0, 0x2f, 0x96, 0x7d, 0xa1, 0x98, 0xb1, 0x52, 0xa7, 0x11, 0x58, 0x03, 0x11, 0xc9, - 0x35, 0xc8, 0x97, 0x7a, 0x4d, 0x97, 0x76, 0x1a, 0xda, 0x3d, 0x5b, 0x47, 0xc0, 0xac, 0xa8, 0x94, - 0x7c, 0x02, 0xe7, 0x05, 0x91, 0xb4, 0xfd, 0x44, 0x0f, 0x4c, 0xc4, 0xb3, 0x47, 0x9a, 0x25, 0xd2, - 0x62, 0xb4, 0x45, 0x97, 0xa4, 0x53, 0x92, 0x12, 0x14, 0x6b, 0x18, 0xe9, 0x58, 0xa5, 0xdc, 0x55, - 0xea, 0xf9, 0xe2, 0xc1, 0x2d, 0x34, 0x22, 0x79, 0x14, 0xa4, 0xdd, 0x8c, 0x0a, 0xad, 0x3e, 0x74, - 0x72, 0x1f, 0xe6, 0x93, 0x30, 0xa6, 0x83, 0xb9, 0xbd, 0x88, 0x17, 0xb6, 0xfb, 0xb8, 0xa0, 0x16, - 0x4e, 0xa3, 0x22, 0xfb, 0x30, 0x57, 0x0a, 0x43, 0xdf, 0xdd, 0xef, 0x85, 0x34, 0x61, 0x45, 0xca, - 0x50, 0x81, 0xa8, 0x5c, 0x5a, 0x92, 0x2f, 0x08, 0x61, 0x9c, 0x77, 0x22, 0xca, 0xc8, 0x9a, 0xb4, - 0xfa, 0xd9, 0x91, 0x26, 0xcc, 0xd4, 0xdd, 0xc3, 0x8e, 0xdb, 0x39, 0xbc, 0x4f, 0x8f, 0xb7, 0x1c, - 0xd7, 0x17, 0xf9, 0x1d, 0x64, 0x48, 0x46, 0x29, 0x38, 0x6e, 0xb7, 0x69, 0xe8, 0xe3, 0xea, 0xc6, - 0xca, 0xf1, 0xfa, 0x82, 0xc1, 0xd4, 0x78, 0xc0, 0xe9, 0x30, 0x54, 0xb7, 0xeb, 0xb8, 0x9a, 0x1a, - 0xd7, 0x79, 0x6a, 0x96, 0x7c, 0x61, 0x44, 0x4b, 0xbe, 0x05, 0x73, 0xb5, 0x4e, 0xc3, 0x3f, 0x46, - 0x8f, 0xb5, 0x6c, 0xdc, 0xf4, 0x29, 0x8d, 0x93, 0x2f, 0x35, 0xbf, 0xe8, 0x48, 0x09, 0x4b, 0x6b, - 0x5e, 0x3f, 0x63, 0x52, 0x17, 0xaf, 0x8b, 0xad, 0x56, 0xb7, 0x56, 0x3b, 0x6e, 0xe8, 0x62, 0x52, - 0x7b, 0xbe, 0x3c, 0xbc, 0x26, 0x78, 0xbe, 0xc4, 0x2d, 0x36, 0xb7, 0xd9, 0xb5, 0x5d, 0x89, 0xd2, - 0xf7, 0x7c, 0x98, 0x4a, 0x6f, 0xfe, 0x9f, 0x13, 0x5c, 0x1b, 0xaa, 0x16, 0xd6, 0x05, 0x25, 0xc9, - 0xb3, 0x1a, 0x86, 0x9b, 0xb0, 0xbc, 0x32, 0x67, 0xb1, 0xbc, 0xb2, 0xa7, 0x5b, 0x5e, 0xb9, 0xd3, - 0x2c, 0xaf, 0x84, 0x69, 0x34, 0x76, 0x66, 0xd3, 0x68, 0xfc, 0x0c, 0xa6, 0xd1, 0xc4, 0x99, 0x4c, - 0x23, 0xcd, 0xc6, 0xcb, 0x9f, 0x66, 0xe3, 0xfd, 0xff, 0x86, 0xd4, 0xf3, 0x6a, 0x48, 0xa5, 0x2d, - 0xae, 0x67, 0x32, 0xa4, 0x06, 0xdb, 0x41, 0xc5, 0xff, 0x97, 0xed, 0xa0, 0xbf, 0x02, 0xc5, 0xa4, - 0x6a, 0x3e, 0x3d, 0x09, 0xc4, 0x33, 0xbb, 0xab, 0xcd, 0x16, 0x8e, 0xa4, 0x6a, 0x64, 0x5b, 0xab, - 0x2d, 0xdf, 0x7d, 0xe8, 0x84, 0x34, 0x7e, 0x07, 0x0a, 0xb7, 0x56, 0x5d, 0x0e, 0xc5, 0xe9, 0xaa, - 0xa0, 0x44, 0x56, 0x41, 0x26, 0xcd, 0x2a, 0x30, 0x7f, 0x3d, 0x03, 0x73, 0xfc, 0x7a, 0xe9, 0xf3, - 0xef, 0xd1, 0xfb, 0x50, 0xb3, 0xf5, 0x64, 0xe0, 0x4e, 0xe2, 0xeb, 0x86, 0xf8, 0xf4, 0xbe, 0x07, - 0xe7, 0xfb, 0xba, 0x02, 0xed, 0xbd, 0xaa, 0xbc, 0xd8, 0xdb, 0x67, 0xf1, 0x2d, 0xa6, 0x57, 0xb2, - 0x7b, 0xdb, 0xea, 0xa3, 0x30, 0xff, 0x30, 0xdb, 0xc7, 0x5f, 0x78, 0xf7, 0x54, 0x7f, 0x9d, 0x71, - 0x36, 0x7f, 0x5d, 0x66, 0x34, 0x7f, 0x5d, 0x62, 0x59, 0xc8, 0x8e, 0xb2, 0x2c, 0x7c, 0x02, 0xd3, - 0xdb, 0xd4, 0x69, 0x07, 0xdb, 0x9e, 0x48, 0x25, 0xc4, 0x53, 0x66, 0xc8, 0x7b, 0xbb, 0xac, 0x4c, - 0x9a, 0x2b, 0x51, 0x00, 0x42, 0xc8, 0x08, 0x98, 0x2a, 0xe3, 0xb9, 0x85, 0x2c, 0x9d, 0x83, 0x6a, - 0x83, 0x8e, 0x0d, 0xb1, 0x41, 0xeb, 0x50, 0x10, 0x74, 0x71, 0xe6, 0x0b, 0xe5, 0x5d, 0x72, 0xea, - 0xb4, 0x11, 0x2e, 0x6b, 0x8f, 0xd2, 0xf7, 0x46, 0xb5, 0x73, 0x3b, 0x49, 0x63, 0xc2, 0xba, 0xa0, - 0xd6, 0x69, 0x76, 0x3d, 0xb7, 0x83, 0x5d, 0x30, 0x11, 0x77, 0x01, 0x15, 0x60, 0xde, 0x05, 0x0a, - 0x92, 0xf9, 0x8f, 0xf2, 0x72, 0x76, 0x7c, 0xb1, 0xde, 0x15, 0xdd, 0x5f, 0x92, 0x3d, 0xa3, 0xbf, - 0x24, 0x77, 0xda, 0x5a, 0xaa, 0x2d, 0xf0, 0x63, 0x67, 0x58, 0xe0, 0xc7, 0x9f, 0xda, 0xf7, 0x31, - 0x71, 0xc6, 0x25, 0x3b, 0x21, 0xa8, 0xf9, 0x51, 0x04, 0x35, 0x75, 0x99, 0x9f, 0x7c, 0xfa, 0x65, - 0x1e, 0xce, 0xbc, 0xcc, 0x2b, 0x8f, 0x1e, 0x4d, 0x8d, 0xf4, 0xe8, 0x91, 0x31, 0xc2, 0xa3, 0x47, - 0x5f, 0x2a, 0xdb, 0xe1, 0x07, 0xe9, 0xb6, 0xc3, 0x70, 0x65, 0xfd, 0x9c, 0x5a, 0x0f, 0x3e, 0x76, - 0xd0, 0x9e, 0xe3, 0xb3, 0x3d, 0x54, 0x40, 0x6e, 0xc2, 0x84, 0xbc, 0xfe, 0x6e, 0xc4, 0xdb, 0xd1, - 0xfe, 0x7b, 0xef, 0x12, 0x8b, 0x6d, 0xb7, 0x24, 0xb1, 0xb8, 0x2a, 0xc6, 0x6f, 0xfa, 0x0a, 0x98, - 0x76, 0xd3, 0x57, 0xc0, 0xcc, 0x7f, 0x3b, 0x27, 0x27, 0x21, 0xdb, 0x0e, 0x88, 0x77, 0x02, 0xfa, - 0x1e, 0x07, 0x37, 0xce, 0xfe, 0x38, 0xf8, 0xe7, 0xc8, 0x1d, 0xa0, 0xa4, 0xdb, 0xcc, 0x8e, 0x90, - 0x6e, 0xf3, 0x5d, 0x2d, 0x57, 0x65, 0x2e, 0x4e, 0x8e, 0xc6, 0x04, 0x73, 0x78, 0x96, 0xca, 0x3b, - 0x6a, 0x52, 0xc9, 0xb1, 0xf8, 0x56, 0x1d, 0x52, 0x0e, 0x49, 0x27, 0x19, 0x19, 0x63, 0xe3, 0x67, - 0xc9, 0xa3, 0x31, 0xf1, 0xff, 0x69, 0x1e, 0x8d, 0x1a, 0x80, 0x92, 0x3c, 0x9e, 0x7b, 0xa7, 0x5f, - 0x63, 0xdd, 0x74, 0x7a, 0xe2, 0x78, 0x85, 0xd0, 0xfc, 0xe7, 0x73, 0x30, 0x57, 0xaf, 0x6f, 0x56, - 0x5d, 0xe7, 0xb0, 0xe3, 0x05, 0xa1, 0xdb, 0x58, 0xed, 0x1c, 0x78, 0xcc, 0x12, 0x89, 0x26, 0xb4, - 0x92, 0xd3, 0x21, 0x9e, 0xcc, 0x51, 0x31, 0xb3, 0x74, 0x6b, 0xbe, 0x1f, 0xbd, 0x77, 0x8f, 0x96, - 0x2e, 0x65, 0x00, 0x8b, 0xc3, 0xd9, 0x62, 0x5f, 0xef, 0xf1, 0x2c, 0xe0, 0xfc, 0xc0, 0x00, 0x17, - 0xfb, 0x80, 0x83, 0x2c, 0x59, 0x46, 0x68, 0xbf, 0xc0, 0x0a, 0xe3, 0xef, 0xa2, 0x96, 0x8d, 0x23, - 0x2e, 0xe6, 0xea, 0x4a, 0x2c, 0x27, 0x78, 0xaf, 0xb6, 0x8b, 0x70, 0xf5, 0x74, 0xa9, 0x6f, 0x0e, - 0x1c, 0xc3, 0x79, 0xdc, 0xc3, 0x9f, 0xd5, 0x13, 0x73, 0x5d, 0x18, 0x17, 0x26, 0xe6, 0x81, 0x49, - 0x71, 0xc7, 0xa8, 0x6f, 0x4f, 0xa7, 0xd6, 0x40, 0x7e, 0xdd, 0x80, 0x97, 0x52, 0x4b, 0xa2, 0xd9, - 0x3d, 0xa5, 0x65, 0x44, 0x51, 0x94, 0x06, 0x66, 0x4e, 0x7f, 0x73, 0x50, 0xd5, 0x76, 0x8a, 0x2a, - 0x18, 0x5e, 0x13, 0xf9, 0x47, 0x06, 0x5c, 0xd4, 0x30, 0x22, 0x75, 0x15, 0xe0, 0xb2, 0x32, 0x50, - 0xae, 0x7f, 0xf8, 0x6c, 0xe4, 0xfa, 0x55, 0xfd, 0x5b, 0x62, 0x6d, 0xaa, 0x7e, 0xc3, 0xa0, 0x16, - 0x92, 0x87, 0x30, 0x87, 0x45, 0xd2, 0x2b, 0xc4, 0x64, 0x56, 0x38, 0x93, 0x16, 0xe2, 0x66, 0x57, - 0x7a, 0x41, 0xe8, 0xb5, 0x31, 0x15, 0xf1, 0xf2, 0xcf, 0x4f, 0x96, 0xa6, 0x35, 0x74, 0x4c, 0xc6, - 0x86, 0x6d, 0x88, 0x5c, 0x4b, 0x6e, 0xe7, 0xc0, 0xd3, 0x9e, 0xa5, 0x4b, 0x56, 0x41, 0xfe, 0x53, - 0x03, 0x16, 0x19, 0x94, 0x7f, 0xc6, 0x5d, 0xdf, 0x6b, 0x47, 0xe5, 0xf2, 0x98, 0x72, 0x40, 0xb7, - 0xb5, 0x9e, 0x4d, 0xb7, 0xbd, 0x86, 0x4d, 0xe6, 0x3a, 0xc1, 0x3e, 0xf0, 0xbd, 0x76, 0xdc, 0x7c, - 0x2d, 0xcf, 0xf9, 0xa0, 0x46, 0x92, 0x5f, 0x35, 0xe0, 0x92, 0xb6, 0x31, 0x57, 0x53, 0x90, 0x2d, - 0xce, 0x6a, 0x67, 0xda, 0x6a, 0x51, 0xf9, 0x86, 0x90, 0xff, 0xab, 0xd8, 0x82, 0x78, 0xb5, 0xc0, - 0xb6, 0xd8, 0x6d, 0x8e, 0xa5, 0x34, 0x61, 0x70, 0x2d, 0xc4, 0x85, 0x39, 0x3c, 0x64, 0xd1, 0x8e, - 0xd3, 0x17, 0x06, 0x1f, 0xa7, 0x5f, 0x15, 0x55, 0xbf, 0x8c, 0x69, 0x9e, 0x06, 0x9f, 0xa9, 0xf7, - 0x73, 0x25, 0xbf, 0x02, 0x97, 0xfa, 0x80, 0xd1, 0x6c, 0x3b, 0x3f, 0x70, 0xb6, 0xbd, 0xf9, 0xe4, - 0x64, 0xe9, 0xf5, 0xb4, 0xda, 0xd2, 0x66, 0xda, 0xe0, 0x1a, 0x88, 0x03, 0x10, 0x17, 0x8a, 0xc4, - 0xe9, 0xe9, 0x02, 0xfa, 0xa6, 0x90, 0x0f, 0x05, 0x9f, 0xe9, 0x72, 0xa5, 0x0d, 0xea, 0x92, 0x17, - 0x23, 0x11, 0x0a, 0x05, 0x25, 0xc5, 0xd5, 0x31, 0x66, 0x50, 0x1f, 0x58, 0xc9, 0xcf, 0x4f, 0x96, - 0x34, 0x6c, 0x66, 0xd2, 0xaa, 0xb9, 0xb3, 0x54, 0x93, 0x56, 0x43, 0x24, 0xff, 0xd0, 0x80, 0x05, - 0x06, 0x88, 0x85, 0x4a, 0x7c, 0xd4, 0xe2, 0x30, 0xa9, 0x3f, 0x7a, 0x36, 0x52, 0xff, 0x0a, 0xb6, - 0x51, 0x95, 0xfa, 0xbe, 0x2e, 0x49, 0x6d, 0x1c, 0x4a, 0xbb, 0x76, 0x9e, 0xa7, 0x49, 0xfb, 0xa5, - 0x11, 0xa4, 0x9d, 0x0f, 0xc0, 0xe9, 0xd2, 0x3e, 0xb0, 0x16, 0xb2, 0x0d, 0x05, 0x61, 0xcd, 0xf2, - 0x0e, 0x7b, 0x59, 0xcb, 0xa8, 0xa3, 0x16, 0xf1, 0x2d, 0x86, 0xc8, 0x00, 0xd6, 0xf7, 0x85, 0x1a, - 0x17, 0xd2, 0x81, 0x79, 0xfe, 0x5b, 0xdf, 0x9a, 0x2f, 0x0d, 0xdc, 0x9a, 0x5f, 0x13, 0x5f, 0x74, - 0x45, 0xf0, 0x4f, 0xec, 0xd0, 0x95, 0x8a, 0xd2, 0x18, 0x93, 0x2e, 0x10, 0x0d, 0xcc, 0x27, 0xed, - 0x95, 0xe1, 0x1b, 0xf2, 0xd7, 0x45, 0x9d, 0x4b, 0xc9, 0x3a, 0x93, 0x33, 0x37, 0x85, 0x37, 0x71, - 0x60, 0x56, 0x40, 0xd9, 0xde, 0x15, 0x35, 0xfc, 0x2b, 0xda, 0xbd, 0xd5, 0x44, 0x29, 0xcf, 0x67, - 0x2e, 0x6b, 0xc2, 0x0b, 0x82, 0x09, 0x85, 0x9e, 0xe4, 0x67, 0xfe, 0xc8, 0xe8, 0xab, 0x83, 0xed, - 0x91, 0xf1, 0x87, 0x92, 0x7a, 0x03, 0xf7, 0xc8, 0x9c, 0x23, 0xee, 0xd5, 0x63, 0x04, 0x66, 0xdb, - 0xa8, 0xd7, 0x90, 0xb3, 0xe2, 0xb9, 0x32, 0x0e, 0x8a, 0xb7, 0x6e, 0x4b, 0x32, 0x2a, 0x29, 0x1b, - 0xdb, 0x48, 0x18, 0x95, 0x24, 0x62, 0x91, 0xcc, 0x5f, 0xcd, 0xe8, 0x52, 0x42, 0xae, 0x29, 0x66, - 0xb6, 0x72, 0x11, 0x5a, 0x9a, 0xd9, 0x8a, 0x71, 0xfd, 0xf7, 0x0d, 0x98, 0xdf, 0xf4, 0x0f, 0x9d, - 0x8e, 0xfb, 0x4b, 0x3c, 0x4d, 0x8a, 0x87, 0xdd, 0x18, 0xdd, 0xa4, 0xf8, 0x42, 0xd3, 0xad, 0x7a, - 0x4a, 0xc5, 0x6c, 0x60, 0x71, 0x84, 0xad, 0xb4, 0xf6, 0x60, 0x9c, 0x27, 0x36, 0x4c, 0xc9, 0x7a, - 0xcb, 0xd1, 0x39, 0xdc, 0xfc, 0x71, 0x06, 0xa6, 0x14, 0x89, 0x25, 0x5f, 0x83, 0x82, 0xca, 0x47, - 0xf5, 0xaf, 0xa8, 0xd5, 0x5a, 0x1a, 0x16, 0x3a, 0x58, 0xa8, 0xd3, 0xd6, 0x1c, 0x2c, 0x4c, 0x2e, - 0x11, 0x7a, 0xc6, 0x9d, 0xc8, 0x47, 0x29, 0x3b, 0x91, 0x33, 0x65, 0xcd, 0x7f, 0xbf, 0x7f, 0x3f, - 0x32, 0x7a, 0x92, 0x7b, 0xf3, 0xb7, 0x0c, 0x28, 0x26, 0xe7, 0xd4, 0x17, 0xd2, 0x2b, 0x67, 0xf0, - 0x45, 0xff, 0x8d, 0x0c, 0x14, 0xb7, 0x7d, 0xb6, 0xf1, 0x6f, 0xca, 0xe8, 0xf5, 0xe7, 0x35, 0x24, - 0xe0, 0x03, 0xcd, 0x4d, 0xfc, 0x42, 0xb4, 0x0c, 0xa8, 0x1f, 0x37, 0xe4, 0xc6, 0x76, 0xee, 0x77, - 0xff, 0xde, 0xd2, 0x39, 0xf3, 0x53, 0x58, 0x48, 0x76, 0x07, 0xba, 0x8a, 0x4b, 0x30, 0xab, 0xc3, - 0x93, 0xc9, 0x2c, 0x93, 0x54, 0x56, 0x12, 0xdf, 0xfc, 0xd3, 0x4c, 0x92, 0xb7, 0x08, 0x0f, 0x60, - 0x4a, 0xa7, 0xe3, 0xec, 0xb7, 0xa2, 0x7c, 0x7b, 0xe2, 0x8d, 0x44, 0x04, 0x59, 0xb2, 0xec, 0x2c, - 0x69, 0x4d, 0xa3, 0x18, 0xec, 0x6c, 0x7a, 0x0c, 0x36, 0xb9, 0x93, 0x88, 0x69, 0xc9, 0xc5, 0xb7, - 0x6a, 0x1e, 0xd1, 0x7d, 0x3b, 0x8e, 0x6b, 0x49, 0x84, 0xb2, 0x54, 0x60, 0x41, 0xcb, 0x98, 0x23, - 0xe9, 0xc7, 0x62, 0xd7, 0x66, 0x88, 0x05, 0x9c, 0x38, 0x15, 0x19, 0xdf, 0x4b, 0xf6, 0x5a, 0x6c, - 0x27, 0x26, 0x3c, 0xc0, 0xea, 0x53, 0x72, 0x72, 0xad, 0x51, 0x2e, 0x65, 0xb4, 0x28, 0x5b, 0xa1, - 0xb5, 0x47, 0x27, 0x38, 0xa2, 0xf9, 0xbf, 0x1b, 0x6c, 0xfe, 0x37, 0x1e, 0x7c, 0xc9, 0x12, 0xae, - 0xb2, 0x4f, 0x1a, 0x12, 0xbd, 0xf2, 0x5f, 0x1b, 0x3c, 0x65, 0xa2, 0x10, 0x9f, 0x77, 0x61, 0x7c, - 0xdb, 0xf1, 0x0f, 0x69, 0x28, 0x92, 0xfb, 0xa9, 0x5c, 0x78, 0x41, 0x7c, 0x9d, 0x39, 0xc4, 0xdf, - 0x96, 0x20, 0x50, 0x5d, 0x57, 0x99, 0x91, 0x5c, 0x57, 0x8a, 0x23, 0x34, 0xfb, 0xac, 0x1c, 0xa1, - 0xe6, 0xff, 0x95, 0xe1, 0xdf, 0x23, 0x1a, 0x35, 0xea, 0x33, 0xbd, 0x57, 0x21, 0xc7, 0xe4, 0x40, - 0x7d, 0x6d, 0x99, 0xc9, 0x8a, 0x8a, 0xc7, 0xca, 0xd9, 0xbc, 0x41, 0xfd, 0xaf, 0xe6, 0xf8, 0xc5, - 0x25, 0x42, 0x9d, 0x37, 0x88, 0x81, 0x97, 0xcc, 0xbc, 0x26, 0x55, 0xa7, 0x43, 0xc7, 0x6b, 0xea, - 0x97, 0xcc, 0xbc, 0x26, 0x66, 0x7b, 0x8a, 0x52, 0xed, 0xa9, 0xc1, 0xd2, 0xed, 0x03, 0xc7, 0xe6, - 0x29, 0xde, 0xd4, 0x15, 0x20, 0xce, 0xca, 0x57, 0x83, 0x19, 0xfd, 0x2d, 0x04, 0x11, 0x45, 0x83, - 0xb7, 0x03, 0x13, 0xef, 0x28, 0xa8, 0x1e, 0x5f, 0x9d, 0x88, 0x94, 0x61, 0x5a, 0xbb, 0xda, 0xaf, - 0x3e, 0x75, 0xaf, 0x27, 0x06, 0x50, 0xfd, 0x7e, 0x1a, 0x89, 0x72, 0xb1, 0xe6, 0xab, 0x50, 0x14, - 0x33, 0x33, 0x4a, 0xb7, 0x8c, 0x87, 0x8b, 0xab, 0x55, 0x4b, 0x9d, 0x4d, 0x0d, 0xb7, 0xe9, 0x5b, - 0x08, 0x35, 0x7f, 0x6a, 0xc0, 0xa5, 0x0d, 0x1a, 0x3e, 0xf2, 0xfc, 0x07, 0x16, 0x0d, 0x42, 0xdf, - 0xe5, 0xd9, 0x9b, 0x51, 0x1e, 0xbf, 0x46, 0xde, 0x97, 0x0f, 0x3c, 0xea, 0x0a, 0x32, 0x59, 0x47, - 0x79, 0x5a, 0x08, 0xe5, 0x18, 0x06, 0x6e, 0xc8, 0x87, 0x1d, 0xdf, 0x15, 0x0f, 0x3b, 0x66, 0x86, - 0x13, 0x47, 0xf3, 0xa2, 0x49, 0x3b, 0xf2, 0x41, 0xc7, 0xdf, 0xca, 0xc0, 0xf9, 0x94, 0x66, 0xed, - 0x7e, 0xed, 0x39, 0x55, 0x0e, 0x65, 0x4d, 0x39, 0xc8, 0x97, 0x7f, 0x07, 0x76, 0x7c, 0xaa, 0xae, - 0xf8, 0xdb, 0x06, 0x5c, 0xd4, 0xa5, 0x47, 0x04, 0x57, 0xed, 0xde, 0x26, 0xef, 0xc1, 0xf8, 0x0a, - 0x75, 0x9a, 0x54, 0x66, 0x05, 0x3d, 0x9f, 0x78, 0x42, 0x9a, 0x17, 0x72, 0xb6, 0x7f, 0xca, 0xa7, - 0xf2, 0x39, 0x4b, 0x90, 0x90, 0xaa, 0x68, 0x1c, 0x37, 0x4b, 0x4d, 0x79, 0xa3, 0x2b, 0xad, 0xaa, - 0x21, 0x47, 0xb3, 0x3f, 0x37, 0xe0, 0x85, 0x21, 0x34, 0x6c, 0xe0, 0xd8, 0xd0, 0xab, 0x03, 0x87, - 0x0b, 0x0b, 0x42, 0xc9, 0x87, 0x30, 0xbb, 0x2d, 0xcc, 0x5a, 0x39, 0x1c, 0x99, 0x38, 0xf4, 0x5f, - 0x5a, 0xbc, 0xb6, 0x1c, 0x97, 0x24, 0xb2, 0x76, 0xd5, 0x30, 0x3b, 0xf4, 0xaa, 0xa1, 0x7a, 0x73, - 0x2f, 0x37, 0xea, 0xcd, 0xbd, 0x4f, 0x93, 0x0f, 0xac, 0x88, 0x94, 0x1b, 0xf1, 0xbd, 0x45, 0x63, - 0xf0, 0xbd, 0x45, 0x19, 0x8e, 0x90, 0x49, 0xbd, 0x12, 0xf5, 0x63, 0x03, 0x8a, 0x3a, 0xef, 0xa7, - 0x1d, 0xcf, 0x0f, 0xb4, 0xf1, 0x7c, 0x21, 0x7d, 0x3c, 0x07, 0x0f, 0x64, 0xdf, 0x63, 0x32, 0x23, - 0x0d, 0xa0, 0x09, 0xe3, 0x55, 0xaf, 0xed, 0xb8, 0x1d, 0xf5, 0xf5, 0x90, 0x26, 0x42, 0x2c, 0x51, - 0x32, 0xd2, 0x2d, 0x4f, 0xf3, 0xd7, 0xc7, 0xe0, 0x92, 0x45, 0x0f, 0x5d, 0x66, 0x55, 0xed, 0x04, - 0x6e, 0xe7, 0x50, 0xbb, 0xb0, 0x66, 0x26, 0x3a, 0x5c, 0x64, 0x84, 0x62, 0x90, 0xa8, 0xbf, 0xdf, - 0x80, 0x3c, 0x53, 0xed, 0x4a, 0x9f, 0xa3, 0x87, 0x1c, 0x9f, 0xf1, 0xe2, 0xc2, 0x20, 0x8b, 0xc9, - 0x75, 0xb1, 0xf0, 0x28, 0x39, 0xfb, 0xd8, 0xc2, 0xf3, 0xd9, 0xc9, 0x12, 0xd4, 0x8f, 0x83, 0x90, - 0xa2, 0x81, 0x2f, 0x16, 0x9f, 0xc8, 0x12, 0xcb, 0x0d, 0xb0, 0xc4, 0xd6, 0x61, 0xa1, 0xd4, 0xe4, - 0x4a, 0xcd, 0x69, 0x6d, 0xf9, 0x6e, 0xa7, 0xe1, 0x76, 0x9d, 0x96, 0xdc, 0x5d, 0xe0, 0x39, 0x89, - 0x13, 0x95, 0xdb, 0xdd, 0x08, 0xc1, 0x4a, 0x25, 0x63, 0x9f, 0x51, 0xdd, 0xa8, 0xf3, 0x57, 0x9a, - 0xf8, 0xe1, 0x07, 0x7e, 0x46, 0xb3, 0x13, 0xf0, 0x67, 0x9a, 0xac, 0xa8, 0x18, 0x6d, 0x40, 0x3c, - 0x1c, 0xde, 0x5e, 0xab, 0xc7, 0xc1, 0xf3, 0x3c, 0xa5, 0x10, 0x3f, 0x40, 0x0e, 0x5b, 0x01, 0x1e, - 0x22, 0x6b, 0x78, 0x31, 0x5d, 0xbd, 0xbe, 0xc2, 0xe8, 0xf2, 0x7d, 0x74, 0x41, 0x70, 0xa4, 0xd2, - 0x71, 0x3c, 0x72, 0x13, 0x80, 0x27, 0x4c, 0x41, 0x81, 0x98, 0x8c, 0x2d, 0x46, 0x1f, 0xa1, 0xdc, - 0x62, 0x54, 0x50, 0xc8, 0xfb, 0x30, 0x5f, 0xab, 0x2c, 0x4b, 0x97, 0x55, 0xd5, 0x6b, 0xf4, 0xf0, - 0xb8, 0x0f, 0xb0, 0x3e, 0x1c, 0x43, 0xda, 0x58, 0x66, 0x52, 0x90, 0x86, 0x46, 0xae, 0xc2, 0xc4, - 0x6a, 0x95, 0xf7, 0xfd, 0x94, 0x9a, 0x37, 0x53, 0x1c, 0xa3, 0xcb, 0x42, 0xb2, 0x19, 0x9b, 0x34, - 0x85, 0x53, 0x4d, 0x9a, 0x4b, 0x23, 0x98, 0x33, 0x3c, 0xbd, 0x26, 0x4f, 0xce, 0x5c, 0xf1, 0x9a, - 0x34, 0xd8, 0xbd, 0xf5, 0x25, 0x4b, 0xaf, 0xa9, 0x7c, 0x1b, 0x4e, 0xf3, 0x5b, 0xa9, 0x2a, 0xe1, - 0xdf, 0xc0, 0xf4, 0x9a, 0x7d, 0xb8, 0xe4, 0x1b, 0x30, 0x86, 0x3f, 0x85, 0x7d, 0x30, 0x9f, 0xc2, - 0x36, 0xb6, 0x0d, 0x1a, 0xfc, 0x99, 0x1c, 0x24, 0x20, 0xab, 0x30, 0x21, 0xd2, 0x5a, 0x9f, 0x25, - 0x49, 0x9c, 0xc8, 0xf0, 0xce, 0x07, 0x49, 0xd0, 0x9b, 0x4d, 0x28, 0xa8, 0x15, 0x32, 0xe1, 0x5c, - 0x71, 0x82, 0x23, 0xda, 0x64, 0xbf, 0x44, 0x7e, 0x57, 0x14, 0xce, 0x23, 0x84, 0xda, 0xac, 0x1d, - 0x96, 0x82, 0xc2, 0xd4, 0xd2, 0x6a, 0xb0, 0x13, 0x88, 0xa6, 0x88, 0x3d, 0x9b, 0x8b, 0xfb, 0xff, - 0xa6, 0x25, 0x8a, 0xcc, 0x5f, 0x80, 0x85, 0x8d, 0x5e, 0xab, 0xc5, 0xf6, 0x6f, 0x32, 0xff, 0x57, - 0xe8, 0x84, 0x94, 0x94, 0x61, 0x0c, 0xff, 0x10, 0x4f, 0x2e, 0xce, 0xeb, 0x6f, 0x50, 0x61, 0x11, - 0xc6, 0xde, 0x18, 0x78, 0xdd, 0x2d, 0xd4, 0xdf, 0x30, 0xe3, 0xa4, 0xe6, 0xcf, 0xe2, 0x07, 0x9b, - 0xb6, 0x7d, 0xa7, 0xf1, 0x80, 0xfa, 0x67, 0x7c, 0xe2, 0xfe, 0x63, 0xd9, 0x08, 0x5d, 0xe5, 0xa7, - 0x35, 0xf8, 0xb4, 0xc6, 0x90, 0xf7, 0x61, 0x4a, 0xe8, 0x7d, 0x25, 0x49, 0x03, 0xde, 0x84, 0x95, - 0xaf, 0x82, 0x25, 0x0e, 0x93, 0x55, 0x74, 0x5c, 0xcd, 0xf4, 0x4f, 0xd9, 0xbd, 0xf5, 0x45, 0xac, - 0x66, 0x7a, 0x1d, 0x43, 0x44, 0xf7, 0xd7, 0x20, 0xd9, 0xb7, 0x42, 0x76, 0xef, 0xa8, 0xd7, 0xb2, - 0x8d, 0xd8, 0xf0, 0x8f, 0xaf, 0x65, 0xab, 0x86, 0x7f, 0x84, 0x1a, 0x8d, 0x49, 0xe6, 0x94, 0x31, - 0xf9, 0x50, 0x8e, 0x49, 0x76, 0xb0, 0x60, 0xcc, 0x0f, 0x19, 0x87, 0x7a, 0x3c, 0x43, 0x72, 0x23, - 0xed, 0xcf, 0xf0, 0xb5, 0x76, 0x31, 0x43, 0x92, 0x0a, 0x4d, 0x70, 0x52, 0x37, 0x7d, 0x63, 0xa3, - 0x33, 0x3d, 0x25, 0xfa, 0xe5, 0x9b, 0x50, 0x28, 0x85, 0xa1, 0xd3, 0x38, 0xa2, 0xcd, 0x2a, 0x53, - 0x4f, 0xca, 0x0d, 0x52, 0x47, 0xc0, 0x55, 0x67, 0xb9, 0x8a, 0xcb, 0x33, 0xa2, 0x38, 0x81, 0x08, - 0x43, 0x8a, 0x32, 0xa2, 0x30, 0x88, 0x9e, 0x11, 0x85, 0x41, 0xd8, 0x26, 0x77, 0xb5, 0xf3, 0xd0, - 0x65, 0x7d, 0x92, 0x8f, 0x1f, 0xa1, 0x71, 0x39, 0x48, 0x55, 0xae, 0x02, 0x8b, 0xbc, 0xab, 0x98, - 0x85, 0x93, 0xf1, 0xfe, 0x8c, 0xef, 0x9d, 0x6d, 0x69, 0x1d, 0xaa, 0x26, 0x5f, 0x64, 0x27, 0xde, - 0x81, 0x09, 0xe9, 0x12, 0x81, 0x78, 0x4f, 0x26, 0x28, 0xfb, 0xef, 0x09, 0x49, 0x64, 0x7c, 0xff, - 0x41, 0xc9, 0x53, 0x3b, 0xa5, 0xbc, 0xff, 0xa0, 0xe4, 0xa9, 0xd5, 0xde, 0x7f, 0x50, 0x32, 0xd6, - 0x46, 0x3b, 0xdc, 0xc2, 0xa9, 0x3b, 0xdc, 0x5d, 0x28, 0x6c, 0x39, 0x7e, 0xe8, 0x32, 0x73, 0xa1, - 0x13, 0xf2, 0xb7, 0x18, 0x63, 0x07, 0x8c, 0x52, 0x54, 0x7e, 0x59, 0xbe, 0x83, 0xd0, 0x55, 0xf0, - 0xf5, 0x04, 0xfa, 0x31, 0x3c, 0x3d, 0x08, 0x69, 0xe6, 0x69, 0x82, 0x90, 0xf2, 0xd1, 0xe3, 0xc9, - 0xb3, 0x71, 0xc8, 0x57, 0xf4, 0x22, 0x72, 0xb2, 0xf7, 0xd1, 0x23, 0xf0, 0x5d, 0x28, 0xb0, 0xbf, - 0xf1, 0x55, 0x37, 0x97, 0xf2, 0xb7, 0x16, 0xe3, 0xac, 0x53, 0xfa, 0x84, 0xe6, 0x4f, 0xbf, 0xd5, - 0x69, 0xc8, 0x27, 0x30, 0x32, 0x4e, 0x7a, 0xd3, 0x34, 0x6e, 0xe4, 0x23, 0x28, 0xa8, 0x0f, 0x5b, - 0xe2, 0xe5, 0x2d, 0x11, 0x46, 0xd6, 0x14, 0xf0, 0xbe, 0xa4, 0x44, 0x2a, 0x01, 0x5b, 0xe6, 0x4b, - 0x5d, 0xae, 0x20, 0x89, 0x22, 0xed, 0xdd, 0x3e, 0xe5, 0x28, 0xd1, 0xc8, 0xb7, 0xa0, 0x50, 0xea, - 0x76, 0x63, 0x8d, 0x33, 0xaf, 0xec, 0xf3, 0xbb, 0x5d, 0x3b, 0x55, 0xeb, 0x68, 0x14, 0x49, 0xc5, - 0xbc, 0x70, 0x36, 0xc5, 0xfc, 0xe7, 0x06, 0x5c, 0x1c, 0xd0, 0x6d, 0x51, 0x42, 0x1e, 0x63, 0x78, - 0x42, 0x1e, 0x36, 0xfd, 0xf4, 0xcd, 0x19, 0x4e, 0x3f, 0x61, 0xaa, 0xa8, 0x1f, 0x2d, 0x8d, 0x96, - 0xf4, 0x87, 0x21, 0xb3, 0x5f, 0xd8, 0xc3, 0x90, 0xe6, 0x89, 0x01, 0x53, 0x8a, 0x30, 0x93, 0x2b, - 0xca, 0x1d, 0x90, 0x22, 0xcf, 0xe0, 0xa8, 0x70, 0xc8, 0x70, 0x75, 0x8e, 0x92, 0x99, 0x39, 0xdd, - 0x45, 0x85, 0x2f, 0x24, 0x2b, 0x49, 0x8b, 0xda, 0x09, 0x7f, 0x12, 0xbe, 0x88, 0xfc, 0x3d, 0x80, - 0x35, 0x27, 0x08, 0x4b, 0x8d, 0xd0, 0x7d, 0x48, 0x47, 0xd0, 0xdc, 0xf1, 0x1b, 0x28, 0x0e, 0x3e, - 0xbc, 0xcf, 0xc8, 0xfa, 0xde, 0x40, 0x89, 0x18, 0x9a, 0x7f, 0x61, 0xc0, 0xd4, 0x6a, 0x27, 0x08, - 0x9d, 0x56, 0x0b, 0x97, 0xd6, 0x2f, 0x53, 0xb6, 0xdb, 0xe8, 0xbb, 0x86, 0x2c, 0xe7, 0xef, 0xc0, - 0x6c, 0x02, 0x8d, 0x6d, 0x09, 0xeb, 0x78, 0x97, 0x4b, 0xdd, 0x12, 0xf2, 0xdb, 0x5d, 0x96, 0x28, - 0x31, 0x6b, 0x0a, 0xd9, 0xee, 0x2d, 0x3c, 0x06, 0x58, 0x06, 0x70, 0x25, 0x48, 0x1a, 0xb0, 0x24, - 0xd9, 0x92, 0xdd, 0x5b, 0x96, 0x82, 0x65, 0x6e, 0xc0, 0x78, 0xdd, 0xf3, 0xc3, 0xf2, 0x31, 0xb7, - 0x19, 0xab, 0x34, 0x68, 0xa8, 0x7e, 0x7e, 0x17, 0x3d, 0x7e, 0x0d, 0x4b, 0x14, 0xb1, 0x1d, 0xe3, - 0x5d, 0x97, 0xb6, 0x9a, 0x6a, 0xfc, 0xd5, 0x01, 0x03, 0x58, 0x1c, 0xce, 0xec, 0xea, 0x0b, 0x71, - 0xfa, 0xc8, 0x38, 0xd0, 0xeb, 0x69, 0x6d, 0xa6, 0x8a, 0xd6, 0xbf, 0xaf, 0xe8, 0x4f, 0xc4, 0x68, - 0x35, 0x0d, 0xe9, 0xea, 0x3f, 0x34, 0xe0, 0xf2, 0x60, 0x12, 0x35, 0x76, 0xcc, 0x18, 0x12, 0x3b, - 0xf6, 0x5a, 0xd2, 0x2f, 0x8d, 0x68, 0xc2, 0x2f, 0x1d, 0x7b, 0xa3, 0xab, 0x18, 0xba, 0xd7, 0x88, - 0x9e, 0xe3, 0xba, 0x32, 0xa4, 0xcd, 0x88, 0xc8, 0x87, 0x39, 0x44, 0x1a, 0x4b, 0xd0, 0x9a, 0xff, - 0x38, 0x07, 0x97, 0x06, 0x52, 0x90, 0x15, 0xed, 0x71, 0xf4, 0xeb, 0xa7, 0xd5, 0x70, 0x03, 0xff, - 0x4d, 0x7d, 0x2e, 0x7d, 0x33, 0xca, 0x40, 0xca, 0x1f, 0x4c, 0x7f, 0xf3, 0x54, 0x5e, 0x1c, 0x1d, - 0x99, 0x41, 0x7f, 0x32, 0x52, 0x8c, 0xba, 0xa7, 0xa1, 0xe3, 0x8a, 0xd7, 0xc9, 0x65, 0xd4, 0x3d, - 0x07, 0x59, 0xb2, 0x2c, 0x0e, 0xe8, 0xcb, 0xa5, 0x07, 0xf4, 0x99, 0xff, 0xb7, 0x01, 0x93, 0x51, - 0xb3, 0xc9, 0x65, 0xb8, 0xb0, 0x6d, 0x95, 0x2a, 0x35, 0x7b, 0xfb, 0xd3, 0xad, 0x9a, 0xbd, 0xb3, - 0x51, 0xdf, 0xaa, 0x55, 0x56, 0xef, 0xae, 0xd6, 0xaa, 0xc5, 0x73, 0x64, 0x0e, 0xa6, 0x77, 0x36, - 0xee, 0x6f, 0x6c, 0xee, 0x6d, 0xd8, 0x35, 0xcb, 0xda, 0xb4, 0x8a, 0x06, 0x99, 0x86, 0x49, 0xab, - 0x5c, 0xaa, 0xd8, 0x1b, 0x9b, 0xd5, 0x5a, 0x31, 0x43, 0x8a, 0x50, 0xa8, 0x6c, 0x6e, 0x6c, 0xd4, - 0x2a, 0xdb, 0xab, 0xbb, 0xab, 0xdb, 0x9f, 0x16, 0xb3, 0x84, 0xc0, 0x0c, 0x22, 0x6c, 0x59, 0xab, - 0x1b, 0x95, 0xd5, 0xad, 0xd2, 0x5a, 0x31, 0xc7, 0x60, 0x0c, 0x5f, 0x81, 0x8d, 0x45, 0x8c, 0xee, - 0xef, 0x94, 0x6b, 0xc5, 0x71, 0x86, 0xc2, 0xfe, 0x52, 0x50, 0x26, 0x58, 0xf5, 0x88, 0x52, 0x2d, - 0x6d, 0x97, 0xca, 0xa5, 0x7a, 0xad, 0x98, 0x27, 0x17, 0x61, 0x5e, 0x03, 0xd9, 0x6b, 0x9b, 0xf7, - 0x56, 0x37, 0x8a, 0x93, 0x64, 0x01, 0x8a, 0x11, 0xac, 0x5a, 0xb6, 0x77, 0xea, 0x35, 0xab, 0x08, - 0x49, 0xe8, 0x46, 0x69, 0xbd, 0x56, 0x9c, 0x32, 0x3f, 0xe0, 0x61, 0xfa, 0xbc, 0xab, 0xc9, 0x05, - 0x20, 0xf5, 0xed, 0xd2, 0xf6, 0x4e, 0x3d, 0xf1, 0xf1, 0x53, 0x30, 0x51, 0xdf, 0xa9, 0x54, 0x6a, - 0xf5, 0x7a, 0xd1, 0x20, 0x00, 0xe3, 0x77, 0x4b, 0xab, 0x6b, 0xb5, 0x6a, 0x31, 0x63, 0xfe, 0xa6, - 0x01, 0x73, 0x72, 0xa1, 0x97, 0xde, 0xd5, 0xa7, 0x9c, 0x8b, 0x1f, 0x6a, 0xfb, 0x17, 0x19, 0x45, - 0x9d, 0xa8, 0x64, 0xc8, 0x34, 0xf4, 0xe1, 0x7c, 0x2a, 0x32, 0xf9, 0x14, 0x8a, 0xb2, 0x01, 0xeb, - 0x4e, 0xd8, 0x38, 0x8a, 0xd5, 0xd8, 0xcb, 0x89, 0x4a, 0x12, 0x68, 0xdc, 0x8f, 0x14, 0xa7, 0xd3, - 0xef, 0x63, 0x63, 0x7e, 0x1f, 0x2e, 0x0e, 0xa0, 0x25, 0x15, 0x18, 0x8f, 0xf2, 0x72, 0x0e, 0x89, - 0x62, 0x58, 0xd0, 0x1e, 0x96, 0x1e, 0xe7, 0x99, 0x37, 0x2d, 0x01, 0x31, 0xff, 0xba, 0x01, 0x05, - 0x61, 0x1e, 0x96, 0x5a, 0xd4, 0x0f, 0x9f, 0xae, 0x87, 0xdf, 0xd5, 0x7a, 0x38, 0x0a, 0x49, 0x55, - 0xf8, 0xb3, 0xe2, 0xd4, 0xce, 0xfd, 0x6f, 0x0c, 0x28, 0x26, 0x11, 0xc9, 0x87, 0x90, 0xaf, 0xd3, - 0x87, 0xd4, 0x77, 0xc3, 0x63, 0xa1, 0x2b, 0x16, 0xe4, 0xd9, 0x05, 0xe2, 0x88, 0x32, 0xee, 0x85, - 0x0a, 0xc4, 0x2f, 0x2b, 0xa2, 0x19, 0x55, 0xe5, 0x29, 0x1b, 0xbc, 0xec, 0xb3, 0xda, 0xe0, 0x99, - 0xff, 0xcc, 0x80, 0x8b, 0xf7, 0x68, 0xa8, 0x7e, 0x53, 0x94, 0xe3, 0xea, 0xab, 0xa3, 0x7d, 0x97, - 0xf2, 0x25, 0x8b, 0x30, 0x81, 0x45, 0xf2, 0x9a, 0xac, 0x25, 0x7f, 0x92, 0x72, 0x24, 0x06, 0x59, - 0x2d, 0xa3, 0xf0, 0x80, 0xba, 0x6f, 0x28, 0x39, 0x46, 0xa5, 0x14, 0x5c, 0x7e, 0x17, 0xa6, 0x3e, - 0x67, 0xce, 0xde, 0xeb, 0x1f, 0xc1, 0xac, 0x14, 0xd0, 0xed, 0xb5, 0x3a, 0x1a, 0x5e, 0xb3, 0x30, - 0xb5, 0x5b, 0xb3, 0x56, 0xef, 0x7e, 0x6a, 0xdf, 0xdd, 0x59, 0x5b, 0x2b, 0x9e, 0x63, 0x5a, 0x48, - 0x00, 0x2a, 0xa5, 0xa2, 0x41, 0x0a, 0x90, 0x5f, 0xdd, 0xa8, 0xd7, 0x2a, 0x3b, 0x56, 0xad, 0x98, - 0xb9, 0xbe, 0x0c, 0x33, 0xf1, 0x05, 0x3c, 0xd4, 0x15, 0x13, 0x90, 0xb5, 0x4a, 0x7b, 0xc5, 0x73, - 0x4c, 0x1f, 0x6c, 0xdd, 0xaf, 0xd4, 0x6f, 0xdd, 0x2a, 0x1a, 0x4c, 0x51, 0xdc, 0xab, 0x6c, 0xd9, - 0xf7, 0xd7, 0xeb, 0xc5, 0xcc, 0xf5, 0xaf, 0xc2, 0x1c, 0x1e, 0x08, 0x30, 0xf3, 0x81, 0x76, 0xa8, - 0x8f, 0xd5, 0x16, 0x58, 0xa7, 0x76, 0x1d, 0xdf, 0x09, 0x29, 0xaf, 0x73, 0xbd, 0xd7, 0x0a, 0xdd, - 0x6e, 0x8b, 0x3e, 0x2e, 0x1a, 0xd7, 0xdf, 0x85, 0x59, 0xcb, 0xeb, 0x85, 0x6e, 0xe7, 0xb0, 0x1e, - 0x32, 0x8c, 0xc3, 0x63, 0x72, 0x1e, 0xe6, 0x76, 0x36, 0x4a, 0xeb, 0xe5, 0xd5, 0x7b, 0x3b, 0x9b, - 0x3b, 0x75, 0x7b, 0xbd, 0xb4, 0x5d, 0x59, 0x29, 0x9e, 0x63, 0xad, 0x5f, 0xdf, 0xac, 0x6f, 0xdb, - 0x56, 0xad, 0x52, 0xdb, 0xd8, 0x2e, 0x1a, 0xd7, 0x7f, 0xc3, 0x80, 0x19, 0x66, 0x78, 0xa2, 0x67, - 0x73, 0x07, 0x05, 0xe6, 0x0a, 0xbc, 0xc8, 0x74, 0x9f, 0xbd, 0xbd, 0x79, 0xbf, 0xb6, 0x61, 0xef, - 0xd4, 0x4b, 0xf7, 0x92, 0x4a, 0x7d, 0x09, 0x5e, 0x50, 0x30, 0xac, 0x5a, 0x65, 0x73, 0xb7, 0x66, - 0xd9, 0x5b, 0xa5, 0x7a, 0x7d, 0x6f, 0xd3, 0xaa, 0x16, 0x0d, 0xb6, 0x22, 0xa4, 0x20, 0xac, 0xdf, - 0x2d, 0x15, 0x33, 0x7d, 0x65, 0x1b, 0xb5, 0xbd, 0xd2, 0x9a, 0x5d, 0xde, 0xdc, 0x2e, 0x66, 0xaf, - 0x63, 0x16, 0x57, 0x1c, 0x49, 0xee, 0x9c, 0xc8, 0x43, 0x6e, 0x63, 0x73, 0xa3, 0xc6, 0x55, 0xe9, - 0x56, 0x6d, 0xa3, 0xba, 0xba, 0x71, 0x8f, 0xf7, 0x71, 0x69, 0x6b, 0xcb, 0xda, 0xdc, 0x65, 0xca, - 0x94, 0x75, 0x64, 0xb5, 0xb6, 0xc1, 0x5a, 0x96, 0xbd, 0x6e, 0xc2, 0x5c, 0x85, 0xfa, 0x61, 0xed, - 0x71, 0x48, 0x3b, 0xcc, 0x82, 0xc4, 0xbe, 0x9b, 0x86, 0xc9, 0xda, 0xb7, 0xb7, 0x6b, 0x1b, 0xf5, - 0xd5, 0xcd, 0x8d, 0xe2, 0xb9, 0xeb, 0x2f, 0x26, 0x70, 0xe4, 0xb0, 0xd4, 0xeb, 0x2b, 0xc5, 0x73, - 0xd7, 0xbf, 0x0b, 0x05, 0xcd, 0xf1, 0x76, 0x11, 0xe6, 0xd5, 0xdf, 0x5b, 0xb4, 0xd3, 0x74, 0x3b, - 0x87, 0xc5, 0x73, 0xc9, 0x02, 0xab, 0xd7, 0xe9, 0xb0, 0x02, 0xfc, 0x78, 0xb5, 0x60, 0x9b, 0xfa, - 0x6d, 0xb7, 0xc3, 0x66, 0x4d, 0x31, 0x73, 0xfd, 0x06, 0x4c, 0x6b, 0x93, 0x80, 0xd5, 0xbb, 0xb6, - 0x29, 0xc4, 0x61, 0xbd, 0x56, 0x5d, 0xdd, 0x59, 0x2f, 0x8e, 0xb1, 0xcf, 0x5e, 0x59, 0xbd, 0xb7, - 0x52, 0x84, 0xeb, 0xdf, 0x85, 0x19, 0xb1, 0xfd, 0x58, 0xbf, 0x5b, 0x92, 0x0d, 0xdd, 0xbc, 0x7b, - 0x57, 0x2c, 0x2e, 0xb5, 0x3a, 0x7e, 0x93, 0x41, 0x5e, 0x84, 0x45, 0xf1, 0xc3, 0x2e, 0x6d, 0x54, - 0xed, 0x95, 0x92, 0x55, 0xdd, 0x2b, 0x59, 0x35, 0xfb, 0x7e, 0xed, 0xd3, 0x62, 0x86, 0xad, 0x4f, - 0x2a, 0xc4, 0xde, 0xde, 0xdc, 0xa9, 0xac, 0x14, 0xb3, 0xe5, 0x0f, 0x7e, 0xf6, 0x4f, 0x5f, 0x3e, - 0xf7, 0xb3, 0x3f, 0x7b, 0xd9, 0xf8, 0xd3, 0x3f, 0x7b, 0xd9, 0xf8, 0x5f, 0xfe, 0xec, 0x65, 0xe3, - 0x17, 0xde, 0x3c, 0x43, 0x34, 0xd8, 0xfe, 0x38, 0x2a, 0x90, 0xdb, 0xff, 0x4f, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x34, 0x4d, 0xe2, 0x8b, 0x17, 0xff, 0x00, 0x00, + 0xdb, 0x38, 0xe0, 0xec, 0x05, 0x8c, 0xc5, 0xd8, 0x86, 0x7d, 0x6b, 0xdc, 0x0f, 0xc3, 0x63, 0x83, + 0xf6, 0xcd, 0xde, 0x2f, 0xfd, 0x30, 0x0c, 0x18, 0xb0, 0x71, 0xb3, 0x5e, 0xc3, 0x88, 0x17, 0x11, + 0x99, 0x11, 0x59, 0x59, 0xc5, 0x62, 0x4b, 0x6d, 0xaf, 0x1a, 0xf7, 0x47, 0x62, 0xbd, 0x78, 0xef, + 0x45, 0x64, 0xc4, 0x8b, 0x17, 0x2f, 0x5e, 0xbc, 0x78, 0x01, 0xaf, 0x84, 0xb4, 0x45, 0xbb, 0x9e, + 0x1f, 0xde, 0x6c, 0xd1, 0x43, 0xa7, 0x71, 0x7c, 0x33, 0x3c, 0xee, 0xd2, 0x80, 0xff, 0x7b, 0xa3, + 0xeb, 0x7b, 0xa1, 0x47, 0xc6, 0xf0, 0xc7, 0xe5, 0x85, 0x43, 0xef, 0xd0, 0x43, 0xc8, 0x4d, 0xf6, + 0x17, 0x2f, 0xbc, 0xbc, 0x74, 0xe8, 0x79, 0x87, 0x2d, 0x7a, 0x13, 0x7f, 0xed, 0xf7, 0x0e, 0x6e, + 0x86, 0x6e, 0x9b, 0x06, 0xa1, 0xd3, 0xee, 0x0a, 0x84, 0x37, 0xa2, 0x0a, 0x9c, 0x30, 0x64, 0x25, + 0xa1, 0xeb, 0x75, 0x6e, 0x3e, 0xbc, 0xa5, 0xfe, 0x14, 0xa8, 0x6f, 0xa7, 0xb7, 0xe5, 0x91, 0xef, + 0x74, 0xbb, 0xd4, 0x8f, 0xff, 0xe0, 0xe8, 0xe6, 0xbf, 0x9d, 0x85, 0xc9, 0xfb, 0x94, 0x76, 0x4b, + 0x2d, 0xf7, 0x21, 0x25, 0xaf, 0x42, 0x6e, 0xc3, 0x69, 0xd3, 0x45, 0xe3, 0x8a, 0x71, 0x6d, 0xb2, + 0x3c, 0xfb, 0xe4, 0x64, 0x69, 0x2a, 0xa0, 0xfe, 0x43, 0xea, 0xdb, 0x1d, 0xa7, 0x4d, 0x2d, 0x2c, + 0x24, 0x6f, 0xc2, 0x24, 0xfb, 0x3f, 0xe8, 0x3a, 0x0d, 0xba, 0x98, 0x41, 0xcc, 0xe9, 0x27, 0x27, + 0x4b, 0x93, 0x1d, 0x09, 0xb4, 0xe2, 0x72, 0x72, 0x15, 0x26, 0xd6, 0xa8, 0x13, 0xd0, 0xd5, 0xea, + 0x62, 0xf6, 0x8a, 0x71, 0x2d, 0x5b, 0x2e, 0x3c, 0x39, 0x59, 0xca, 0xb7, 0x18, 0xc8, 0x76, 0x9b, + 0x96, 0x2c, 0x24, 0xab, 0x30, 0x51, 0x7b, 0xdc, 0x75, 0x7d, 0x1a, 0x2c, 0xe6, 0xae, 0x18, 0xd7, + 0xa6, 0x96, 0x2f, 0xdf, 0xe0, 0x9d, 0x72, 0x43, 0x76, 0xca, 0x8d, 0x6d, 0xd9, 0x29, 0xe5, 0xf9, + 0x9f, 0x9c, 0x2c, 0x9d, 0x7b, 0x72, 0xb2, 0x34, 0x41, 0x39, 0xc9, 0x6f, 0xfe, 0x2f, 0x4b, 0x86, + 0x25, 0xe9, 0xc9, 0xfb, 0x90, 0xdb, 0x3e, 0xee, 0xd2, 0xc5, 0xc9, 0x2b, 0xc6, 0xb5, 0x99, 0xe5, + 0x97, 0x6f, 0xf0, 0x61, 0x88, 0x3e, 0x32, 0xfe, 0x8b, 0x61, 0x95, 0xf3, 0x4f, 0x4e, 0x96, 0x72, + 0x0c, 0xc5, 0x42, 0x2a, 0xf2, 0x36, 0x8c, 0xaf, 0x78, 0x41, 0xb8, 0x5a, 0x5d, 0x04, 0xfc, 0xb4, + 0xf3, 0x4f, 0x4e, 0x96, 0xe6, 0x8e, 0xbc, 0x20, 0xb4, 0xdd, 0xe6, 0x5b, 0x5e, 0xdb, 0x0d, 0x69, + 0xbb, 0x1b, 0x1e, 0x5b, 0x02, 0xc9, 0xdc, 0x87, 0x69, 0x8d, 0x1f, 0x99, 0x82, 0x89, 0x9d, 0x8d, + 0xfb, 0x1b, 0x9b, 0x7b, 0x1b, 0xc5, 0x73, 0x24, 0x0f, 0xb9, 0x8d, 0xcd, 0x6a, 0xad, 0x68, 0x90, + 0x09, 0xc8, 0x96, 0xb6, 0xb6, 0x8a, 0x19, 0x52, 0x80, 0x7c, 0xb5, 0xb4, 0x5d, 0x2a, 0x97, 0xea, + 0xb5, 0x62, 0x96, 0xcc, 0xc3, 0xec, 0xde, 0xea, 0x46, 0x75, 0x73, 0xaf, 0x6e, 0x57, 0x6b, 0xf5, + 0xfb, 0xdb, 0x9b, 0x5b, 0xc5, 0x1c, 0x99, 0x01, 0xb8, 0xbf, 0x53, 0xae, 0x59, 0x1b, 0xb5, 0xed, + 0x5a, 0xbd, 0x38, 0x66, 0xfe, 0x20, 0x0b, 0xf9, 0x75, 0x1a, 0x3a, 0x4d, 0x27, 0x74, 0xc8, 0x8b, + 0xda, 0x10, 0x61, 0xeb, 0x95, 0xb1, 0x79, 0xb5, 0x7f, 0x6c, 0xc6, 0x9e, 0x9c, 0x2c, 0x19, 0x6f, + 0xab, 0x63, 0xf2, 0x1e, 0x4c, 0x55, 0x69, 0xd0, 0xf0, 0xdd, 0x2e, 0x93, 0x1b, 0x1c, 0x97, 0xc9, + 0xf2, 0xa5, 0x27, 0x27, 0x4b, 0xe7, 0x9b, 0x31, 0x58, 0xf9, 0x56, 0x15, 0x9b, 0xac, 0xc2, 0xf8, + 0x9a, 0xb3, 0x4f, 0x5b, 0xc1, 0xe2, 0xd8, 0x95, 0xec, 0xb5, 0xa9, 0xe5, 0x17, 0x44, 0xff, 0xca, + 0x06, 0xde, 0xe0, 0xa5, 0xb5, 0x4e, 0xe8, 0x1f, 0x97, 0x17, 0x9e, 0x9c, 0x2c, 0x15, 0x5b, 0x08, + 0x50, 0xfb, 0x8e, 0xa3, 0x90, 0x7a, 0x3c, 0xe6, 0xe3, 0xa7, 0x8e, 0xf9, 0x4b, 0x3f, 0x39, 0x59, + 0x32, 0xd8, 0x58, 0x88, 0x31, 0x8f, 0xf9, 0xe9, 0xa3, 0x7f, 0x05, 0x32, 0xab, 0xd5, 0xc5, 0x09, + 0x94, 0xb5, 0xe2, 0x93, 0x93, 0xa5, 0x82, 0x36, 0x6c, 0x99, 0xd5, 0xea, 0xe5, 0x77, 0x61, 0x4a, + 0x69, 0x23, 0x29, 0x42, 0xf6, 0x01, 0x3d, 0xe6, 0xfd, 0x69, 0xb1, 0x3f, 0xc9, 0x02, 0x8c, 0x3d, + 0x74, 0x5a, 0x3d, 0xd1, 0x81, 0x16, 0xff, 0xf1, 0xf5, 0xcc, 0xd7, 0x0c, 0xf3, 0xdf, 0xc8, 0x41, + 0xde, 0xf2, 0xf8, 0x7c, 0x23, 0x6f, 0xc0, 0x58, 0x3d, 0x74, 0x42, 0x39, 0x14, 0xf3, 0x4f, 0x4e, + 0x96, 0x66, 0xd9, 0x5c, 0xa4, 0x4a, 0x7d, 0x1c, 0x83, 0xa1, 0x6e, 0x1d, 0x39, 0x81, 0x1c, 0x12, + 0x44, 0xed, 0x32, 0x80, 0x8a, 0x8a, 0x18, 0xe4, 0x2a, 0xe4, 0xd6, 0xbd, 0x26, 0x15, 0xa3, 0x42, + 0x9e, 0x9c, 0x2c, 0xcd, 0xb4, 0xbd, 0xa6, 0x8a, 0x88, 0xe5, 0xe4, 0x2d, 0x98, 0xac, 0xf4, 0x7c, + 0x9f, 0x76, 0x98, 0xa8, 0xe6, 0x10, 0x79, 0xe6, 0xc9, 0xc9, 0x12, 0x34, 0x38, 0x90, 0x4d, 0xae, + 0x18, 0x81, 0x75, 0x75, 0x3d, 0x74, 0xfc, 0x90, 0x36, 0x17, 0xc7, 0x46, 0xea, 0x6a, 0x36, 0xbd, + 0xe6, 0x02, 0x4e, 0x92, 0xec, 0x6a, 0xc1, 0x89, 0xac, 0xc0, 0xd4, 0x3d, 0xdf, 0x69, 0xd0, 0x2d, + 0xea, 0xbb, 0x5e, 0x13, 0xc7, 0x30, 0x5b, 0xbe, 0xfa, 0xe4, 0x64, 0xe9, 0xc2, 0x21, 0x03, 0xdb, + 0x5d, 0x84, 0xc7, 0xd4, 0x3f, 0x3f, 0x59, 0xca, 0x57, 0x7b, 0x3e, 0xf6, 0x9e, 0xa5, 0x92, 0x92, + 0xef, 0xb1, 0x21, 0x09, 0x42, 0xec, 0x5a, 0xda, 0xc4, 0xd1, 0x1b, 0xde, 0x44, 0x53, 0x34, 0xf1, + 0x42, 0xcb, 0x09, 0x42, 0xdb, 0xe7, 0x74, 0x89, 0x76, 0xaa, 0x2c, 0xc9, 0x26, 0xe4, 0xeb, 0x8d, + 0x23, 0xda, 0xec, 0xb5, 0xe8, 0x62, 0x1e, 0xd9, 0x5f, 0x14, 0x82, 0x2b, 0xc7, 0x53, 0x16, 0x97, + 0x2f, 0x0b, 0xde, 0x24, 0x10, 0x10, 0xa5, 0xef, 0x23, 0x26, 0x5f, 0xcf, 0xff, 0xee, 0xdf, 0x5b, + 0x3a, 0xf7, 0xd7, 0xfe, 0xe7, 0x2b, 0xe7, 0xcc, 0xff, 0x24, 0x03, 0xc5, 0x24, 0x13, 0x72, 0x00, + 0xd3, 0x3b, 0xdd, 0xa6, 0x13, 0xd2, 0x4a, 0xcb, 0xa5, 0x9d, 0x30, 0x40, 0x21, 0x19, 0xfe, 0x4d, + 0x5f, 0x12, 0xf5, 0x2e, 0xf6, 0x90, 0xd0, 0x6e, 0x70, 0xca, 0xc4, 0x57, 0xe9, 0x6c, 0xe3, 0x7a, + 0xea, 0xa8, 0xa7, 0x03, 0x94, 0xb0, 0xb3, 0xd5, 0xc3, 0x35, 0xfc, 0x80, 0x7a, 0x04, 0x5b, 0x21, + 0x40, 0x9d, 0xe6, 0xfe, 0x31, 0x4a, 0xe6, 0xe8, 0x02, 0xc4, 0x48, 0x52, 0x04, 0x88, 0x81, 0xcd, + 0x7f, 0x6e, 0xc0, 0x8c, 0x45, 0x03, 0xaf, 0xe7, 0x37, 0xe8, 0x0a, 0x75, 0x9a, 0xd4, 0x67, 0xe2, + 0x7f, 0xdf, 0xed, 0x34, 0xc5, 0x9c, 0x42, 0xf1, 0x7f, 0xe0, 0x76, 0xd4, 0x29, 0x8c, 0xe5, 0xe4, + 0xcb, 0x30, 0x51, 0xef, 0xed, 0x23, 0x2a, 0x9f, 0x53, 0x17, 0x70, 0xc4, 0x7a, 0xfb, 0x76, 0x02, + 0x5d, 0xa2, 0x91, 0x9b, 0x30, 0xb1, 0x4b, 0xfd, 0x20, 0xd6, 0x78, 0xa8, 0xd9, 0x1f, 0x72, 0x90, + 0x4a, 0x20, 0xb0, 0xc8, 0xbd, 0x58, 0xeb, 0x8a, 0x35, 0x69, 0x36, 0xa1, 0xeb, 0x62, 0x51, 0x69, + 0x0b, 0x88, 0x2a, 0x2a, 0x12, 0xcb, 0xfc, 0xad, 0x0c, 0x14, 0xab, 0x4e, 0xe8, 0xec, 0x3b, 0x81, + 0xe8, 0xcf, 0xdd, 0xdb, 0x4c, 0x8f, 0x2b, 0x1f, 0x8a, 0x7a, 0x9c, 0xb5, 0xfc, 0x33, 0x7f, 0xde, + 0x6b, 0xc9, 0xcf, 0x9b, 0x62, 0x0b, 0xa4, 0xf8, 0xbc, 0xf8, 0xa3, 0x3e, 0x38, 0xfd, 0xa3, 0x8a, + 0xe2, 0xa3, 0xf2, 0xf2, 0xa3, 0xe2, 0x4f, 0x21, 0x1f, 0x40, 0xae, 0xde, 0xa5, 0x0d, 0xa1, 0x44, + 0xa4, 0xee, 0xd7, 0x3f, 0x8e, 0x21, 0xec, 0xde, 0x2e, 0x17, 0x04, 0x9b, 0x5c, 0xd0, 0xa5, 0x0d, + 0x0b, 0xc9, 0x94, 0x49, 0xf3, 0x5f, 0x8d, 0xc3, 0x42, 0x1a, 0x19, 0xf9, 0x40, 0x5f, 0x9c, 0x78, + 0xf7, 0xbc, 0x30, 0x70, 0x71, 0x5a, 0x34, 0xf4, 0xe5, 0xe9, 0x3a, 0xe4, 0xb7, 0x98, 0x40, 0x36, + 0xbc, 0x96, 0xe8, 0x39, 0xa6, 0x15, 0xf3, 0x5d, 0x09, 0x33, 0xac, 0xa8, 0x9c, 0xbc, 0x00, 0xd9, + 0x1d, 0x6b, 0x55, 0x74, 0xd7, 0xe4, 0x93, 0x93, 0xa5, 0x6c, 0xcf, 0x77, 0x17, 0x0d, 0x8b, 0x41, + 0xc9, 0x4d, 0x18, 0xaf, 0x94, 0x2a, 0xd4, 0x0f, 0xb1, 0x9b, 0x0a, 0xe5, 0x8b, 0x4c, 0x5a, 0x1a, + 0x8e, 0xdd, 0xa0, 0x7e, 0xa8, 0x55, 0x2f, 0xd0, 0xc8, 0x9b, 0x90, 0x2d, 0xed, 0xd5, 0x45, 0xcf, + 0x80, 0xe8, 0x99, 0xd2, 0x5e, 0xbd, 0x3c, 0x2d, 0x3a, 0x22, 0xeb, 0x3c, 0x0a, 0x18, 0xf7, 0xd2, + 0x5e, 0x5d, 0x1d, 0xad, 0xf1, 0x21, 0xa3, 0x75, 0x0d, 0xf2, 0xcc, 0xce, 0x60, 0x0b, 0x3c, 0x2a, + 0xc5, 0x49, 0x6e, 0x3e, 0x1d, 0x09, 0x98, 0x15, 0x95, 0x92, 0x57, 0x23, 0xb3, 0x25, 0x1f, 0xf3, + 0x13, 0x66, 0x8b, 0x34, 0x56, 0xc8, 0x63, 0x98, 0xae, 0x1e, 0x77, 0x9c, 0xb6, 0xdb, 0x10, 0x4b, + 0xf8, 0x24, 0x2e, 0xe1, 0x37, 0x86, 0x0c, 0xe3, 0x0d, 0x8d, 0x80, 0xaf, 0xea, 0x52, 0xf9, 0x2e, + 0x36, 0x79, 0x99, 0x9d, 0x5c, 0xe1, 0x17, 0x0d, 0x4b, 0xaf, 0x88, 0xcd, 0x25, 0xa9, 0x22, 0xd1, + 0xae, 0x8a, 0xc5, 0x4e, 0x82, 0xe3, 0xb9, 0xe4, 0x0b, 0x88, 0x3a, 0x97, 0xa2, 0x45, 0xf7, 0x03, + 0xc8, 0xde, 0xab, 0x6c, 0x2d, 0x4e, 0x21, 0x0f, 0x22, 0x78, 0xdc, 0xab, 0x6c, 0x55, 0x5a, 0x5e, + 0xaf, 0x59, 0xff, 0x64, 0xad, 0x7c, 0x51, 0xb0, 0x99, 0x3e, 0x6c, 0x74, 0xb5, 0x16, 0x31, 0x3a, + 0x52, 0x83, 0xbc, 0xfc, 0xca, 0xc5, 0x02, 0xf2, 0x98, 0x4b, 0x7c, 0xfc, 0xee, 0x6d, 0x3e, 0xd7, + 0x9a, 0xe2, 0xb7, 0xda, 0x0a, 0x89, 0x43, 0x6e, 0xa3, 0x94, 0x3d, 0x3e, 0x5e, 0xad, 0x06, 0x8b, + 0xd3, 0x57, 0xb2, 0xd7, 0x26, 0x51, 0x3c, 0xe6, 0xbb, 0x0c, 0x66, 0xbb, 0x4d, 0xd5, 0xd8, 0x89, + 0x10, 0x2f, 0xef, 0x01, 0xe9, 0xef, 0xcc, 0x14, 0xf3, 0xe3, 0x4d, 0xd5, 0xfc, 0x98, 0x5a, 0x3e, + 0x2f, 0x1a, 0x58, 0xf1, 0xda, 0x6d, 0xa7, 0xd3, 0x44, 0xda, 0xdd, 0x65, 0xd5, 0x2a, 0x29, 0xc1, + 0x4c, 0xdc, 0xfa, 0x35, 0x37, 0x08, 0xc9, 0x4d, 0x98, 0x94, 0x10, 0xb6, 0xf2, 0x64, 0x53, 0xbf, + 0xd3, 0x8a, 0x71, 0xcc, 0x3f, 0xc9, 0x00, 0xc4, 0x25, 0xcf, 0xa9, 0x72, 0xfa, 0xaa, 0xa6, 0x9c, + 0xce, 0x27, 0xa5, 0x7a, 0xa0, 0x5a, 0x22, 0x1f, 0xc1, 0x38, 0xb3, 0xd3, 0x7a, 0xd2, 0x0e, 0xbd, + 0x98, 0x24, 0xc5, 0xc2, 0xdd, 0xdb, 0xe5, 0x19, 0x41, 0x3c, 0x1e, 0x20, 0xc4, 0x12, 0x64, 0x8a, + 0x5e, 0xfb, 0xa3, 0xb1, 0x78, 0x30, 0x84, 0x46, 0xbb, 0xa6, 0xa8, 0x24, 0x23, 0x9e, 0xc4, 0x52, + 0x25, 0x29, 0x0a, 0xe9, 0x12, 0x57, 0x48, 0xbc, 0x53, 0x27, 0x84, 0x42, 0x4a, 0xaa, 0x23, 0xde, + 0x81, 0xa7, 0xaa, 0xa3, 0x6e, 0x72, 0xae, 0xe7, 0x50, 0x0c, 0xae, 0xa5, 0xf6, 0x4a, 0xda, 0x2c, + 0xbf, 0x72, 0xda, 0x2c, 0x4f, 0xce, 0xf1, 0xdb, 0x83, 0x14, 0xe0, 0x79, 0x39, 0x25, 0x9d, 0x47, + 0x2a, 0x39, 0x2a, 0xc2, 0xf7, 0xf8, 0x7c, 0x1e, 0x1f, 0x38, 0x9f, 0xcf, 0xa7, 0xce, 0x67, 0x3e, + 0x9b, 0xdf, 0x83, 0xb1, 0xd2, 0x2f, 0xf5, 0x7c, 0x2a, 0x0c, 0xc6, 0x82, 0xac, 0x93, 0xc1, 0x22, + 0x45, 0x30, 0xeb, 0xb0, 0x9f, 0xaa, 0xa1, 0x8d, 0xe5, 0xac, 0xe6, 0xed, 0xb5, 0xba, 0x30, 0x06, + 0x49, 0xa2, 0x5b, 0xb6, 0xd7, 0x94, 0x66, 0x87, 0xda, 0x57, 0x33, 0x2a, 0x72, 0x13, 0x32, 0xa5, + 0x2a, 0xee, 0x30, 0xa7, 0x96, 0x27, 0x65, 0xb5, 0xd5, 0xf2, 0x82, 0x20, 0x29, 0x38, 0xda, 0xa6, + 0xa3, 0x54, 0x25, 0x65, 0x18, 0x5b, 0x3f, 0xae, 0x7f, 0xb2, 0x26, 0xb4, 0xdf, 0xbc, 0x94, 0x6b, + 0x06, 0xdb, 0xc4, 0xa5, 0x2b, 0x88, 0x5b, 0xdc, 0x3e, 0x0e, 0x7e, 0xb1, 0xa5, 0xb6, 0x18, 0xd1, + 0x3e, 0x3f, 0x05, 0xf2, 0xef, 0xa8, 0x06, 0x8a, 0x90, 0x75, 0xb6, 0x11, 0x16, 0x12, 0x67, 0xc4, + 0xe6, 0x52, 0x9f, 0xc4, 0x45, 0xf2, 0xf6, 0x06, 0x1f, 0xfd, 0x4c, 0xdf, 0xe8, 0x4f, 0x29, 0xcb, + 0x1f, 0x1f, 0xf3, 0xa8, 0x2f, 0xb2, 0x9f, 0xb9, 0x2f, 0xc8, 0x47, 0x50, 0x58, 0x77, 0x3a, 0xce, + 0x21, 0x6d, 0xee, 0x04, 0xcc, 0xec, 0xcd, 0xa1, 0x16, 0x66, 0x76, 0xc2, 0xc5, 0x36, 0x87, 0xdb, + 0xbd, 0x40, 0xb3, 0x6a, 0x2d, 0x8d, 0x80, 0xdc, 0x92, 0xb2, 0x33, 0x96, 0x22, 0x3b, 0x72, 0xc9, + 0x1e, 0x43, 0xd9, 0x11, 0x12, 0x63, 0xfe, 0xd3, 0x31, 0xfc, 0x46, 0xf2, 0x16, 0x8c, 0x5b, 0xf4, + 0x30, 0xb6, 0x4e, 0x70, 0x97, 0xeb, 0x23, 0x44, 0xed, 0x18, 0x8e, 0x83, 0x4b, 0x1f, 0x6d, 0x06, + 0x47, 0xee, 0x41, 0x28, 0x7a, 0x27, 0x5a, 0xfa, 0x04, 0x58, 0x59, 0xfa, 0x04, 0x44, 0x5b, 0xfa, + 0x04, 0x8c, 0xcd, 0x2f, 0xab, 0x5a, 0x17, 0x9d, 0x26, 0x7b, 0xd8, 0xaa, 0x2a, 0x82, 0xea, 0x6b, + 0x2b, 0x0f, 0xc3, 0x26, 0x77, 0x60, 0xb2, 0xd4, 0x68, 0x78, 0x3d, 0x65, 0x9b, 0xb8, 0xf8, 0xe4, + 0x64, 0x69, 0xc1, 0xe1, 0x40, 0xdd, 0xa9, 0x11, 0xa3, 0x92, 0x3a, 0x4c, 0xd5, 0xd8, 0xde, 0xca, + 0xad, 0x38, 0x8d, 0x23, 0xd9, 0x49, 0x72, 0x96, 0x28, 0x25, 0x91, 0xad, 0x7f, 0x9e, 0x22, 0xb0, + 0xc1, 0x80, 0xaa, 0xef, 0x40, 0xc1, 0x25, 0xdb, 0x30, 0x55, 0xa7, 0x0d, 0x9f, 0x86, 0xf5, 0xd0, + 0xf3, 0x69, 0x62, 0xd2, 0x2b, 0x25, 0xe5, 0x97, 0xe5, 0xf6, 0x2e, 0x40, 0xa0, 0x1d, 0x30, 0xa8, + 0xca, 0x55, 0x41, 0xe6, 0x76, 0x7a, 0xdb, 0xf3, 0x8f, 0xab, 0x65, 0xa1, 0x08, 0xe2, 0x55, 0x83, + 0x83, 0x55, 0x3b, 0x9d, 0x41, 0x9a, 0xfb, 0xba, 0x9d, 0xce, 0xb1, 0x70, 0xa4, 0xaa, 0x75, 0x5c, + 0xaf, 0x85, 0x5a, 0x98, 0x8d, 0x7b, 0x19, 0xc1, 0xca, 0x48, 0x35, 0x03, 0x5c, 0xed, 0xb5, 0x91, + 0x12, 0x58, 0xa4, 0x0b, 0x44, 0x8e, 0x1a, 0xb7, 0xa5, 0x5a, 0x34, 0x08, 0x84, 0xb6, 0xb8, 0x94, + 0x18, 0xfc, 0x18, 0xa1, 0xfc, 0x9a, 0x60, 0xfe, 0x92, 0x14, 0x03, 0xb1, 0x35, 0x63, 0x85, 0x4a, + 0x3d, 0x29, 0xbc, 0xc9, 0xbb, 0x00, 0xb5, 0xc7, 0x21, 0xf5, 0x3b, 0x4e, 0x2b, 0xf2, 0x5c, 0xa1, + 0x47, 0x87, 0x0a, 0xa8, 0x3e, 0xd0, 0x0a, 0xb2, 0xf9, 0xcb, 0xda, 0xa0, 0x30, 0x81, 0xb9, 0x4f, + 0x8f, 0xb7, 0x7c, 0x7a, 0xe0, 0x3e, 0x16, 0xf2, 0x8d, 0x02, 0xf3, 0x80, 0x1e, 0xdb, 0x5d, 0x84, + 0xaa, 0x02, 0x13, 0xa1, 0x92, 0xaf, 0x40, 0xfe, 0xfe, 0x7a, 0xfd, 0x3e, 0x3d, 0x5e, 0xad, 0x8a, + 0x05, 0x8c, 0x93, 0xb5, 0x03, 0x9b, 0x91, 0x6a, 0xd5, 0x47, 0x98, 0x66, 0x39, 0x9e, 0x1c, 0xac, + 0xe6, 0x4a, 0xab, 0x17, 0x84, 0xd4, 0x5f, 0xad, 0xaa, 0x35, 0x37, 0x38, 0x30, 0x21, 0xaa, 0x11, + 0xaa, 0xf9, 0x3f, 0x19, 0x38, 0x31, 0x58, 0x1f, 0xac, 0x76, 0xd8, 0x8e, 0xb3, 0x41, 0x23, 0x06, + 0xd8, 0x07, 0xae, 0x80, 0x26, 0xfa, 0x20, 0x46, 0xd6, 0xab, 0xce, 0x8c, 0x5c, 0x35, 0xab, 0x52, + 0xee, 0x5f, 0x85, 0x83, 0x53, 0x54, 0xe9, 0x0b, 0x68, 0xa2, 0xca, 0x18, 0x99, 0x5c, 0x85, 0x89, + 0xd5, 0xd2, 0x7a, 0xa9, 0x17, 0x1e, 0xe1, 0xb4, 0xcc, 0x73, 0xa3, 0xc0, 0x75, 0xda, 0xb6, 0xd3, + 0x0b, 0x8f, 0x2c, 0x59, 0x68, 0xfe, 0xb1, 0x11, 0x4b, 0x25, 0xdb, 0x1d, 0x2b, 0xce, 0x3f, 0xdc, + 0x1d, 0x33, 0xeb, 0x5f, 0xdd, 0x1d, 0xa3, 0x1b, 0xd0, 0x02, 0x52, 0xe9, 0x05, 0xa1, 0xd7, 0xae, + 0x75, 0x9a, 0x5d, 0xcf, 0xed, 0x84, 0x48, 0xc5, 0x3f, 0xcc, 0x7c, 0x72, 0xb2, 0xf4, 0x72, 0x03, + 0x4b, 0x6d, 0x2a, 0x8a, 0xed, 0x04, 0x97, 0x14, 0xea, 0xa7, 0xf8, 0x56, 0xf3, 0xbf, 0xce, 0x68, + 0xda, 0x84, 0x35, 0xcf, 0xa2, 0xdd, 0x96, 0xdb, 0x40, 0x9b, 0xfe, 0x9e, 0xef, 0xf5, 0xba, 0xd1, + 0x88, 0x61, 0xf3, 0xfc, 0xb8, 0xd4, 0x3e, 0x64, 0xc5, 0x3a, 0xef, 0x14, 0x6a, 0xf2, 0x0d, 0x28, + 0x30, 0xc5, 0x2e, 0x7e, 0x06, 0x8b, 0x19, 0x5c, 0x10, 0x5e, 0x44, 0x3f, 0x47, 0x40, 0xfd, 0x88, + 0x8d, 0xb6, 0x22, 0xa8, 0x14, 0xa4, 0x09, 0x8b, 0xdb, 0xbe, 0xd3, 0x09, 0xdc, 0xb0, 0xd6, 0x69, + 0xf8, 0xc7, 0xb8, 0x10, 0xd5, 0x3a, 0xce, 0x7e, 0x8b, 0x36, 0xf1, 0x73, 0xf3, 0xe5, 0x6b, 0x4f, + 0x4e, 0x96, 0xbe, 0x14, 0x72, 0x1c, 0x9b, 0x46, 0x48, 0x36, 0xe5, 0x58, 0x0a, 0xe7, 0x81, 0x9c, + 0xd8, 0xc2, 0x25, 0xbb, 0x15, 0xbd, 0xd4, 0xb9, 0x68, 0x83, 0x7b, 0x31, 0x1a, 0x0d, 0xa6, 0x21, + 0xd4, 0x66, 0xaa, 0x04, 0xe6, 0xff, 0x69, 0xc4, 0xfa, 0x8e, 0xbc, 0x0f, 0x53, 0x42, 0x1a, 0x15, + 0xb9, 0xb8, 0xcc, 0x34, 0xa7, 0x14, 0xdd, 0xc4, 0xc8, 0xaa, 0xe8, 0xcc, 0x90, 0x2f, 0x55, 0xd6, + 0x14, 0xd9, 0x40, 0x43, 0xde, 0x69, 0xb4, 0x92, 0x54, 0x12, 0x8d, 0x09, 0xc1, 0xf6, 0x5a, 0x5d, + 0xef, 0x15, 0x14, 0x82, 0xb0, 0x15, 0xa4, 0x74, 0x83, 0x82, 0xfc, 0xf4, 0x1f, 0xfe, 0x3f, 0x18, + 0x69, 0x6a, 0x95, 0x94, 0x61, 0x7a, 0xcf, 0xf3, 0x1f, 0xe0, 0xf8, 0x2a, 0x9d, 0x80, 0x23, 0xff, + 0x48, 0x16, 0x24, 0x3f, 0x48, 0x27, 0x51, 0xdb, 0xa6, 0xf4, 0x86, 0xde, 0xb6, 0x04, 0x07, 0x8d, + 0x80, 0x8d, 0x43, 0xc4, 0x31, 0x9a, 0x1d, 0x38, 0x0e, 0x71, 0x13, 0x34, 0x11, 0x56, 0xd1, 0xcd, + 0xbf, 0x66, 0xc0, 0x94, 0x62, 0xf3, 0x32, 0x75, 0xb4, 0xe5, 0x7b, 0xdf, 0xa7, 0x8d, 0x50, 0xd7, + 0x84, 0x5d, 0x0e, 0x4c, 0xa8, 0xa3, 0x08, 0x35, 0xa1, 0x01, 0x33, 0x67, 0xd0, 0x80, 0xe6, 0x3f, + 0x30, 0x84, 0x3d, 0x34, 0xb2, 0x8e, 0xd1, 0xf5, 0x41, 0xe6, 0x2c, 0xba, 0xef, 0x1b, 0x30, 0x66, + 0xd1, 0xa6, 0x1b, 0x08, 0x5b, 0x66, 0x4e, 0xb5, 0xbd, 0xb0, 0x20, 0x36, 0xff, 0x7c, 0xf6, 0x53, + 0x35, 0xff, 0xb0, 0xdc, 0xfc, 0x14, 0x20, 0xc6, 0x26, 0xf7, 0xa1, 0x28, 0xc4, 0xda, 0xed, 0x1c, + 0x6e, 0x79, 0x2d, 0xb7, 0x21, 0xec, 0xe1, 0xf2, 0xd2, 0x93, 0x93, 0xa5, 0x17, 0x1a, 0x51, 0x99, + 0xdd, 0xc5, 0x42, 0x85, 0x5f, 0x1f, 0xa1, 0xf9, 0xef, 0x65, 0x98, 0x6d, 0xcf, 0x3e, 0xef, 0x3e, + 0x3d, 0x0e, 0x9d, 0xfd, 0xbb, 0x6e, 0x8b, 0xaa, 0xab, 0xc9, 0x03, 0x84, 0xda, 0x07, 0xae, 0xe6, + 0x18, 0x56, 0x90, 0xc9, 0x6d, 0xc8, 0xdf, 0xf7, 0xf7, 0xdf, 0x41, 0xc2, 0x4c, 0xb4, 0x5b, 0x9b, + 0x7f, 0xe0, 0xef, 0xbf, 0x93, 0x24, 0x8b, 0x10, 0x89, 0x09, 0xe3, 0x55, 0xaf, 0xed, 0xb8, 0x72, + 0x87, 0x0c, 0x6c, 0x9b, 0xd9, 0x44, 0x88, 0x25, 0x4a, 0xd8, 0xfe, 0xb0, 0xbe, 0xb5, 0x21, 0x66, + 0x0e, 0xee, 0x0f, 0x83, 0x6e, 0xc7, 0x62, 0x30, 0x56, 0xe7, 0x5a, 0xb5, 0xb4, 0x85, 0xf6, 0xfa, + 0x58, 0x5c, 0x67, 0xab, 0xe9, 0x74, 0x93, 0x16, 0x7b, 0x84, 0x48, 0x3e, 0x80, 0xa9, 0xfb, 0xd5, + 0xca, 0x8a, 0x17, 0x70, 0xa9, 0x1f, 0x8f, 0xa5, 0xfe, 0x41, 0xb3, 0x61, 0xa3, 0xf7, 0x28, 0xa9, + 0x3e, 0x14, 0x7c, 0xf3, 0xf7, 0x0d, 0x98, 0x52, 0x36, 0x4c, 0xe4, 0x2b, 0xe2, 0xe8, 0xc2, 0xc0, + 0x83, 0xb7, 0x0b, 0xfd, 0x5b, 0x2a, 0x56, 0xca, 0xbd, 0x09, 0x6d, 0xaf, 0x49, 0xc5, 0x41, 0x46, + 0xbc, 0xcf, 0xc8, 0x8c, 0xb2, 0xcf, 0x78, 0x17, 0x80, 0x4f, 0x7e, 0x6c, 0xb2, 0xb2, 0x0c, 0x29, + 0x07, 0x95, 0xea, 0xb8, 0xc4, 0xc8, 0xa6, 0x05, 0x05, 0x75, 0x8f, 0xc1, 0x34, 0x87, 0x70, 0xc7, + 0x0a, 0xdf, 0x84, 0xa2, 0x39, 0x04, 0xb7, 0x7e, 0xf7, 0xb0, 0x4e, 0x62, 0xfe, 0x6a, 0x06, 0xf2, + 0x02, 0xb2, 0xfc, 0x9c, 0xba, 0x4d, 0xde, 0xd1, 0xdc, 0x26, 0xf3, 0x91, 0x39, 0x1e, 0x39, 0x01, + 0x97, 0x4f, 0xf1, 0xe5, 0xbe, 0x0b, 0x05, 0xd9, 0x05, 0xe8, 0x7d, 0x7a, 0x03, 0x26, 0xe4, 0x69, + 0x04, 0xf7, 0x3d, 0xcd, 0x6a, 0x3c, 0x77, 0x97, 0x2d, 0x59, 0x6e, 0xfe, 0xf9, 0x98, 0xa4, 0xe5, + 0x35, 0xb1, 0x2e, 0x2c, 0x35, 0x9b, 0xbe, 0xda, 0x85, 0x4e, 0xb3, 0xe9, 0x5b, 0x08, 0x65, 0x83, + 0xbf, 0xd5, 0xdb, 0x6f, 0xb9, 0x0d, 0xc4, 0x51, 0x74, 0x4e, 0x17, 0xa1, 0x36, 0x43, 0x55, 0x07, + 0x3f, 0x46, 0xd6, 0x5c, 0xa9, 0xd9, 0xa1, 0xae, 0xd4, 0xef, 0xc2, 0x64, 0xa5, 0xdd, 0xd4, 0xbc, + 0x26, 0x66, 0x4a, 0xa7, 0xdc, 0x88, 0x90, 0xb8, 0xbf, 0xe4, 0x45, 0xd1, 0x47, 0x0b, 0x8d, 0x76, + 0xb3, 0xdf, 0x57, 0x12, 0xb3, 0xd4, 0x7c, 0xa1, 0x63, 0x4f, 0xe3, 0x0b, 0xbd, 0x03, 0x93, 0x3b, + 0x01, 0xdd, 0xee, 0x75, 0x3a, 0xb4, 0x85, 0x93, 0x37, 0xcf, 0x97, 0x89, 0x5e, 0x40, 0xed, 0x10, + 0xa1, 0x6a, 0x03, 0x22, 0x54, 0x55, 0xac, 0x26, 0x86, 0x88, 0xd5, 0x57, 0x20, 0x57, 0xea, 0x76, + 0xa5, 0x93, 0x38, 0xda, 0xd2, 0x77, 0xbb, 0xb8, 0xe1, 0x9d, 0x71, 0xba, 0x5d, 0xdd, 0xe5, 0x8b, + 0xd8, 0x84, 0x02, 0xb9, 0xdf, 0xdb, 0xa7, 0x7e, 0x87, 0x86, 0x34, 0x10, 0xca, 0x35, 0x58, 0x04, + 0xe4, 0xb1, 0x28, 0xcf, 0xe2, 0x93, 0x08, 0x42, 0xe9, 0xf4, 0xf6, 0xa9, 0x2d, 0x94, 0xb5, 0xb6, + 0xe1, 0xe9, 0x67, 0x88, 0x1e, 0x58, 0x4a, 0x7d, 0x94, 0x83, 0xa9, 0x58, 0xdf, 0x75, 0x29, 0xf5, + 0x93, 0x52, 0x10, 0x21, 0x6a, 0x6e, 0xdb, 0xc2, 0xa8, 0x6e, 0xdb, 0x3a, 0xcc, 0xe8, 0x23, 0xfd, + 0x0c, 0x3c, 0x2e, 0x1f, 0xe7, 0xf2, 0xf9, 0xe2, 0xa4, 0xf9, 0x83, 0x0c, 0x4c, 0x95, 0xba, 0xdd, + 0xe7, 0xfc, 0x4c, 0xe8, 0x6b, 0x9a, 0xfe, 0xb8, 0x10, 0xcb, 0xc9, 0x19, 0x8e, 0x83, 0xfe, 0x20, + 0x03, 0xb3, 0x09, 0x0a, 0xb5, 0xf5, 0xc6, 0x88, 0x67, 0x24, 0x99, 0x11, 0xcf, 0x48, 0xb2, 0x83, + 0xcf, 0x48, 0xd4, 0xd9, 0x99, 0x7b, 0x9a, 0xd9, 0xf9, 0x3a, 0x64, 0x4b, 0xdd, 0x6e, 0xd2, 0xbd, + 0xd4, 0xed, 0xee, 0xde, 0xe6, 0x4b, 0xb7, 0xd3, 0xed, 0x5a, 0x0c, 0x43, 0x93, 0xca, 0xf1, 0x11, + 0xa5, 0xd2, 0x7c, 0x1b, 0x26, 0x91, 0x17, 0x2a, 0xdc, 0x2b, 0x62, 0xa6, 0x72, 0x6d, 0xab, 0xd5, + 0xc5, 0x67, 0xa5, 0xf9, 0xe7, 0xcc, 0xbc, 0x63, 0xbf, 0x9f, 0x53, 0x19, 0x5b, 0xd6, 0x64, 0xac, + 0xa8, 0xc8, 0xd8, 0x28, 0xd2, 0xf5, 0x5b, 0x39, 0xec, 0x2d, 0x21, 0x57, 0xc2, 0xcb, 0x6e, 0xa4, + 0x78, 0xd9, 0x9f, 0x62, 0x7d, 0x79, 0x90, 0xf4, 0xb7, 0x67, 0x71, 0x30, 0x5e, 0x4d, 0x36, 0xf5, + 0x99, 0xb8, 0xda, 0x57, 0x80, 0xac, 0x76, 0x02, 0xda, 0xe8, 0xf9, 0xb4, 0xfe, 0xc0, 0xed, 0xee, + 0x52, 0xdf, 0x3d, 0x38, 0x16, 0x7e, 0x04, 0x5c, 0x02, 0x5c, 0x51, 0x6a, 0x07, 0x0f, 0xdc, 0x2e, + 0xb3, 0x62, 0xdc, 0x83, 0x63, 0x2b, 0x85, 0x86, 0x7c, 0x04, 0x13, 0x16, 0x7d, 0xe4, 0xbb, 0xa1, + 0xf4, 0xf1, 0xcd, 0x44, 0xfe, 0x29, 0x84, 0x72, 0x73, 0xcc, 0xe7, 0x3f, 0xd4, 0xf1, 0x17, 0xe5, + 0x64, 0x99, 0xfb, 0x7d, 0xb9, 0x2f, 0x6f, 0x3a, 0xfe, 0xda, 0xd2, 0x5e, 0xbd, 0x3c, 0x37, 0xc0, + 0xe9, 0xff, 0x06, 0x8c, 0xe1, 0x5e, 0x47, 0x2c, 0x3f, 0x18, 0x0e, 0xd3, 0x60, 0x00, 0xd5, 0xd0, + 0x47, 0x8c, 0xcf, 0xcf, 0xe7, 0xfd, 0xe3, 0x31, 0x9c, 0x9f, 0xa7, 0xc4, 0x53, 0x0d, 0x39, 0x91, + 0xd1, 0x65, 0x25, 0x7b, 0x16, 0x59, 0xd9, 0x85, 0x42, 0x9d, 0x69, 0x09, 0xfd, 0x68, 0xe6, 0xc5, + 0xb8, 0xf3, 0x6e, 0xa8, 0xc5, 0xc3, 0x42, 0xa9, 0x34, 0x3e, 0xc4, 0x4e, 0xca, 0x20, 0x0f, 0xd1, + 0x7a, 0x49, 0x61, 0x9c, 0x22, 0x7d, 0x91, 0x3a, 0x6b, 0xf0, 0xce, 0x3a, 0xb3, 0xdc, 0x8d, 0x3f, + 0x9d, 0xdc, 0x4d, 0x7c, 0x26, 0xb9, 0x4b, 0x04, 0xb1, 0xe5, 0xcf, 0x12, 0xc4, 0x76, 0xf9, 0x23, + 0x98, 0xeb, 0xeb, 0xe1, 0xb3, 0x04, 0x82, 0x7d, 0x7e, 0x62, 0xf9, 0x2b, 0xa0, 0xcc, 0xac, 0x3c, + 0xdb, 0xde, 0xfa, 0xb4, 0x11, 0xa2, 0x66, 0x17, 0xca, 0xd8, 0x17, 0xb0, 0xc4, 0x19, 0x01, 0xc2, + 0xc8, 0x87, 0x30, 0xc1, 0x03, 0x69, 0xb8, 0x03, 0x2c, 0x9e, 0x91, 0x1c, 0x2a, 0xa2, 0x19, 0x39, + 0x86, 0xda, 0xab, 0x82, 0xc8, 0xbc, 0x07, 0xe3, 0x22, 0x10, 0x67, 0xf8, 0xbc, 0x58, 0x82, 0xb1, + 0xdd, 0xb8, 0x67, 0x30, 0x78, 0x82, 0x7f, 0x84, 0xc5, 0xe1, 0xe6, 0x6f, 0x18, 0x30, 0xa3, 0x7f, + 0x25, 0xb9, 0x01, 0xe3, 0x22, 0x52, 0xcc, 0xc0, 0x48, 0x31, 0xf6, 0x35, 0xe3, 0x3c, 0x46, 0x4c, + 0x8b, 0x0c, 0x13, 0x58, 0x6c, 0x65, 0x11, 0x1c, 0x84, 0x33, 0x0f, 0x57, 0x16, 0x21, 0xa4, 0x96, + 0x2c, 0x63, 0x1b, 0x67, 0x8b, 0x06, 0xbd, 0x56, 0xa8, 0x6e, 0x9c, 0x7d, 0x84, 0x58, 0xa2, 0xc4, + 0xac, 0xc0, 0x38, 0x57, 0x49, 0x09, 0x47, 0xb9, 0x71, 0x16, 0x47, 0xf9, 0x89, 0x01, 0x50, 0xaf, + 0xaf, 0xdc, 0xa7, 0xc7, 0x5b, 0x8e, 0xeb, 0xa3, 0x93, 0x06, 0xa7, 0xf4, 0x7d, 0x31, 0xe4, 0x05, + 0xe1, 0xa4, 0xe1, 0xd3, 0xff, 0x01, 0x3d, 0xd6, 0x9c, 0x34, 0x12, 0x15, 0xf5, 0x86, 0xef, 0x3e, + 0x74, 0x42, 0xca, 0x08, 0x33, 0x48, 0xc8, 0xf5, 0x06, 0x87, 0x26, 0x28, 0x15, 0x64, 0xf2, 0x1d, + 0x98, 0x89, 0x7f, 0xa1, 0x13, 0x2d, 0x8b, 0x5b, 0x6d, 0x29, 0x56, 0x7a, 0x61, 0xf9, 0xe5, 0x27, + 0x27, 0x4b, 0x97, 0x15, 0xae, 0x49, 0xf7, 0x5a, 0x82, 0x99, 0xf9, 0x7b, 0x06, 0x7a, 0xf7, 0xe4, + 0x07, 0x5e, 0x85, 0x5c, 0x74, 0xfc, 0x57, 0xe0, 0x8e, 0xa0, 0xc4, 0x9e, 0x1c, 0xcb, 0xc9, 0xab, + 0x90, 0x8d, 0xbf, 0x04, 0x55, 0xbe, 0xfe, 0x05, 0xac, 0x94, 0xdc, 0x83, 0x89, 0x91, 0xda, 0x8c, + 0x22, 0x9e, 0xd2, 0x56, 0x49, 0x8d, 0xa3, 0xf0, 0xf1, 0xde, 0xf6, 0x17, 0x77, 0x14, 0x7e, 0x94, + 0x81, 0x59, 0xd6, 0xaf, 0xa5, 0x5e, 0x78, 0xe4, 0xf9, 0x6e, 0x78, 0xfc, 0xdc, 0x3a, 0x16, 0xde, + 0xd7, 0x8c, 0xb6, 0xcb, 0x52, 0xf7, 0xa9, 0xdf, 0x36, 0x92, 0x7f, 0xe1, 0x4f, 0xc6, 0x60, 0x3e, + 0x85, 0x8a, 0xbc, 0x25, 0x02, 0xbd, 0x63, 0x0f, 0x29, 0x06, 0x72, 0xff, 0xfc, 0x64, 0xa9, 0x20, + 0xd1, 0xb7, 0xe3, 0xc0, 0xee, 0x65, 0xdd, 0x55, 0xce, 0x7b, 0x0a, 0x23, 0x84, 0x55, 0x57, 0xb9, + 0xee, 0x20, 0x7f, 0x03, 0xc6, 0x2c, 0xaf, 0x45, 0xf9, 0x42, 0x2a, 0x0c, 0x15, 0x9f, 0x01, 0x34, + 0x8f, 0x24, 0x03, 0x90, 0x15, 0x98, 0x60, 0x7f, 0xac, 0x3b, 0x5d, 0x34, 0xe2, 0xe3, 0x73, 0x4d, + 0x01, 0xed, 0xba, 0x9d, 0x43, 0x75, 0xe7, 0xd0, 0xa2, 0x76, 0xdb, 0xe9, 0x6a, 0x2b, 0x1b, 0x47, + 0xd4, 0x76, 0x20, 0xf9, 0xc1, 0x3b, 0x10, 0xe3, 0xd4, 0x1d, 0x48, 0x13, 0xa0, 0xee, 0x1e, 0x76, + 0xdc, 0xce, 0x61, 0xa9, 0x75, 0x28, 0xc2, 0xe1, 0xdf, 0x18, 0x3c, 0x0a, 0x37, 0x62, 0x64, 0x14, + 0x5c, 0xee, 0x55, 0xe3, 0x30, 0xdb, 0x69, 0x1d, 0x6a, 0x5e, 0xb5, 0x08, 0x95, 0x6c, 0x00, 0x94, + 0x1a, 0xa1, 0xfb, 0x90, 0x09, 0x70, 0x20, 0x02, 0xb3, 0x64, 0x83, 0x2b, 0xa5, 0xfb, 0xf4, 0xb8, + 0x4e, 0xc3, 0xf8, 0x94, 0xd8, 0x41, 0x54, 0x36, 0x0f, 0xd4, 0x3e, 0x54, 0x38, 0x90, 0x2e, 0x9c, + 0x2f, 0x35, 0x9b, 0x2e, 0xfb, 0x02, 0xa7, 0xb5, 0xed, 0xb3, 0xc1, 0x68, 0x22, 0xeb, 0x42, 0x3a, + 0xeb, 0x37, 0x04, 0xeb, 0x57, 0x9c, 0x88, 0xca, 0x0e, 0x39, 0x59, 0xb2, 0x9a, 0x74, 0xc6, 0xe6, + 0x26, 0xcc, 0xe8, 0x9f, 0xae, 0x07, 0xf1, 0x17, 0x20, 0x6f, 0xd5, 0x4b, 0x76, 0x7d, 0xa5, 0x74, + 0xab, 0x68, 0x90, 0x22, 0x14, 0xc4, 0xaf, 0x65, 0x7b, 0xf9, 0x9d, 0x3b, 0xc5, 0x8c, 0x06, 0x79, + 0xe7, 0xd6, 0x72, 0x31, 0xfb, 0x71, 0x2e, 0x9f, 0x2d, 0xe6, 0x3e, 0xce, 0xe5, 0x73, 0xc5, 0xb1, + 0x8f, 0x73, 0xf9, 0x89, 0x62, 0xfe, 0xe3, 0x5c, 0x1e, 0x8a, 0x53, 0xe6, 0x1f, 0x19, 0x90, 0x97, + 0xed, 0x26, 0x77, 0x20, 0x5b, 0xaf, 0xaf, 0x24, 0xa2, 0xb3, 0xe2, 0xf5, 0x85, 0x6b, 0xd2, 0x20, + 0x38, 0x52, 0x35, 0x69, 0xbd, 0xbe, 0xc2, 0xe8, 0xb6, 0xd7, 0xea, 0x62, 0x79, 0x97, 0x74, 0xb1, + 0xda, 0xe6, 0x74, 0x29, 0x21, 0x2b, 0x77, 0x20, 0xfb, 0xf1, 0xde, 0xb6, 0xd8, 0x96, 0x48, 0xba, + 0x58, 0x93, 0x72, 0xba, 0xef, 0x3f, 0x52, 0xf5, 0x3b, 0x23, 0x30, 0x2d, 0x98, 0x52, 0x44, 0x98, + 0x2f, 0xb7, 0x6d, 0x2f, 0x0a, 0x7b, 0x17, 0xcb, 0x2d, 0x83, 0x58, 0xa2, 0x84, 0x59, 0x07, 0x6b, + 0x5e, 0xc3, 0x69, 0x89, 0x75, 0x1b, 0xad, 0x83, 0x16, 0x03, 0x58, 0x1c, 0x6e, 0xfe, 0xb1, 0x01, + 0xc5, 0x2d, 0xdf, 0x7b, 0xe8, 0x32, 0x35, 0xb3, 0xed, 0x3d, 0xa0, 0x9d, 0xdd, 0x5b, 0xe4, 0x6d, + 0x39, 0xd9, 0x8c, 0x68, 0x13, 0x3c, 0x86, 0x93, 0xed, 0xe7, 0x27, 0x4b, 0x50, 0x3f, 0x0e, 0x42, + 0xda, 0x66, 0xe5, 0x72, 0xc2, 0x29, 0xb7, 0x07, 0x32, 0xa3, 0x47, 0x24, 0x9f, 0x72, 0x7b, 0x60, + 0x09, 0xc6, 0xb0, 0x39, 0x4a, 0x50, 0xe8, 0x58, 0xc8, 0x00, 0x16, 0x87, 0xab, 0x9b, 0xca, 0x4c, + 0xdf, 0x37, 0x2c, 0x7f, 0xa1, 0xa2, 0x7a, 0xf5, 0x8f, 0x1b, 0x49, 0x53, 0x7f, 0x0a, 0x0b, 0xc9, + 0x2e, 0x41, 0x07, 0x45, 0x09, 0x66, 0x75, 0xb8, 0xf4, 0x55, 0x5c, 0x4c, 0xad, 0x6b, 0x77, 0xd9, + 0x4a, 0xe2, 0x9b, 0x3f, 0x33, 0x60, 0x12, 0xff, 0xb4, 0x7a, 0x2d, 0x3c, 0x7c, 0x2a, 0xed, 0xd5, + 0x45, 0xb8, 0x8a, 0x6a, 0xc6, 0x39, 0x8f, 0x02, 0x5b, 0xc4, 0xb6, 0x68, 0xfa, 0x25, 0x42, 0x16, + 0xa4, 0x3c, 0x38, 0x47, 0x1e, 0x13, 0x47, 0xa4, 0x3c, 0x8a, 0x27, 0x48, 0x90, 0x0a, 0x64, 0x3c, + 0x2f, 0xdd, 0xab, 0x33, 0xf1, 0x13, 0xa3, 0xc1, 0xcf, 0x4b, 0x19, 0x9d, 0xd7, 0xd2, 0xcf, 0x4b, + 0x39, 0x1a, 0x79, 0x1b, 0xc6, 0x59, 0xd5, 0x96, 0x3c, 0xb4, 0x41, 0xfb, 0x1b, 0xdb, 0xe8, 0x6b, + 0xb1, 0x42, 0x1c, 0xc9, 0xfc, 0xc9, 0x78, 0xb2, 0x03, 0xc5, 0x52, 0x77, 0xc6, 0xb9, 0xf1, 0x1e, + 0x8c, 0x95, 0x5a, 0x2d, 0xef, 0x91, 0xd0, 0x12, 0xd2, 0x5f, 0x12, 0xf5, 0x1f, 0x5f, 0xc9, 0x1c, + 0x86, 0xa2, 0x05, 0xc6, 0x31, 0x00, 0xa9, 0xc0, 0x64, 0x69, 0xaf, 0xbe, 0xba, 0x5a, 0xdd, 0xde, + 0x5e, 0x13, 0x97, 0xb6, 0x5e, 0x93, 0xfd, 0xe3, 0xba, 0x4d, 0x3b, 0x0c, 0x5b, 0x03, 0xee, 0x74, + 0xc4, 0x74, 0xe4, 0x03, 0x80, 0x8f, 0x3d, 0xb7, 0xb3, 0x4e, 0xc3, 0x23, 0xaf, 0x29, 0x3e, 0xfe, + 0xa5, 0x27, 0x27, 0x4b, 0x53, 0xdf, 0xf7, 0xdc, 0x8e, 0xdd, 0x46, 0x30, 0x6b, 0x7b, 0x8c, 0x64, + 0x29, 0x7f, 0xb3, 0x9e, 0x2e, 0x7b, 0xfc, 0x54, 0x6a, 0x2c, 0xee, 0xe9, 0x7d, 0xaf, 0xef, 0x40, + 0x4a, 0xa2, 0x91, 0x36, 0xcc, 0xd6, 0x7b, 0x87, 0x87, 0x94, 0x69, 0x75, 0xb1, 0xfb, 0x1d, 0x17, + 0x7b, 0xae, 0xe8, 0xca, 0x1b, 0xdf, 0x89, 0xb0, 0xfd, 0x49, 0x50, 0x7e, 0x8b, 0x09, 0xf2, 0x4f, + 0x4f, 0x96, 0xc4, 0x65, 0x24, 0x66, 0xa4, 0x05, 0x92, 0xbe, 0xdf, 0xff, 0x92, 0xe4, 0x4d, 0x36, + 0x61, 0xfc, 0x9e, 0x1b, 0xae, 0xf4, 0xf6, 0xc5, 0xf6, 0xf5, 0x95, 0x21, 0x93, 0x86, 0x23, 0xf2, + 0x1d, 0xfc, 0xa1, 0x1b, 0x1e, 0xf5, 0xd4, 0xf0, 0x23, 0xc1, 0x86, 0xec, 0x41, 0xbe, 0xe2, 0xfa, + 0x8d, 0x16, 0xad, 0xac, 0x8a, 0x55, 0xff, 0xd5, 0x21, 0x2c, 0x25, 0x2a, 0xef, 0x97, 0x06, 0xfe, + 0x6a, 0xb8, 0xaa, 0x15, 0x20, 0x31, 0xc8, 0xbf, 0x69, 0xc0, 0x0b, 0x51, 0xeb, 0x4b, 0x87, 0xb4, + 0x13, 0xae, 0x3b, 0x61, 0xe3, 0x88, 0xfa, 0x51, 0x0c, 0xf8, 0x90, 0x5e, 0xfa, 0x7a, 0x5f, 0x2f, + 0x5d, 0x8b, 0x7b, 0xc9, 0x61, 0xcc, 0xec, 0x36, 0xe7, 0xd6, 0xdf, 0x67, 0xc3, 0x6a, 0x25, 0x36, + 0x40, 0xec, 0xd5, 0x17, 0x41, 0x91, 0xaf, 0x0d, 0xf9, 0xe0, 0x18, 0x59, 0xc4, 0x15, 0x45, 0xbf, + 0xb5, 0x43, 0xd8, 0x08, 0x6a, 0xfe, 0x6f, 0x39, 0xb8, 0x3c, 0x78, 0x30, 0xc8, 0x27, 0x72, 0x86, + 0x70, 0x3d, 0x74, 0xf5, 0xd4, 0xe1, 0xbb, 0x71, 0xea, 0xbc, 0xf9, 0x26, 0x2c, 0xd4, 0x3a, 0x21, + 0xf5, 0xbb, 0xbe, 0x2b, 0x63, 0xe8, 0x57, 0xbc, 0x40, 0x1e, 0x6b, 0x7e, 0xe9, 0xc9, 0xc9, 0xd2, + 0x15, 0x1a, 0x95, 0x8b, 0xd0, 0x2e, 0x3c, 0x64, 0x55, 0x58, 0xa5, 0x72, 0xb8, 0xfc, 0x7b, 0x59, + 0xc8, 0xa1, 0xda, 0x7b, 0x15, 0xb2, 0xf5, 0xde, 0xbe, 0xd0, 0x77, 0xdc, 0x40, 0xd0, 0x84, 0x89, + 0x95, 0x92, 0xaf, 0x01, 0x58, 0xb4, 0xeb, 0x05, 0x6e, 0xe8, 0xf9, 0xc7, 0x6a, 0x34, 0x93, 0x1f, + 0x41, 0xf5, 0x73, 0x79, 0x09, 0x25, 0x2b, 0x30, 0x1b, 0xff, 0xda, 0x7c, 0xd4, 0xa1, 0xd2, 0xaf, + 0x85, 0x7b, 0x98, 0x98, 0xdc, 0xf6, 0x58, 0x99, 0x3a, 0x3d, 0x12, 0x64, 0x64, 0x19, 0xf2, 0x7b, + 0x9e, 0xff, 0xe0, 0x80, 0xf5, 0x70, 0x2e, 0x9e, 0xc0, 0x8f, 0x04, 0x4c, 0x15, 0x54, 0x89, 0x47, + 0xde, 0x83, 0xa9, 0x5a, 0xe7, 0xa1, 0xeb, 0x7b, 0x9d, 0x36, 0xed, 0xc8, 0x53, 0x6c, 0xbe, 0x37, + 0x8f, 0xc1, 0x5a, 0x68, 0x61, 0x0c, 0x66, 0x96, 0x7a, 0xa9, 0x11, 0x7a, 0xbe, 0x38, 0xc4, 0xe6, + 0xe3, 0xc4, 0x00, 0xda, 0x38, 0x31, 0x00, 0xeb, 0x44, 0x8b, 0x1e, 0x08, 0xdf, 0x23, 0x76, 0xa2, + 0x4f, 0x0f, 0xb4, 0xb8, 0x49, 0x7a, 0xc0, 0x14, 0x90, 0x45, 0x0f, 0x70, 0x7b, 0x91, 0x8f, 0xdb, + 0xef, 0xd3, 0x83, 0xbe, 0x8d, 0xa9, 0x40, 0x33, 0xff, 0x28, 0x03, 0x2f, 0x0e, 0x9b, 0xaa, 0xa4, + 0xae, 0x8b, 0xdc, 0xb5, 0x11, 0xa6, 0xf7, 0xe9, 0x42, 0x57, 0x83, 0x99, 0x4d, 0xff, 0xd0, 0xe9, + 0xb8, 0xbf, 0x84, 0x2a, 0x38, 0x8a, 0xc4, 0x60, 0xba, 0xf6, 0x92, 0xa7, 0x94, 0xe8, 0x7e, 0x8d, + 0x04, 0xd1, 0xe5, 0x87, 0x42, 0xc0, 0x3e, 0x6b, 0xe4, 0xc9, 0x1d, 0x98, 0xac, 0x78, 0x9d, 0x90, + 0x3e, 0x0e, 0x13, 0x01, 0x74, 0x1c, 0x98, 0x0c, 0xa0, 0x93, 0xa8, 0xe6, 0x9f, 0x18, 0xf0, 0xf2, + 0xf0, 0xe9, 0x4e, 0x76, 0xf4, 0x6e, 0xbb, 0x3e, 0x92, 0x92, 0x38, 0xb5, 0xe3, 0x2e, 0xaf, 0x8b, + 0x2f, 0xae, 0xc1, 0x0c, 0x9b, 0x69, 0x6e, 0x83, 0xea, 0xd6, 0x04, 0x76, 0x60, 0xc0, 0x4b, 0x52, + 0x2c, 0x8a, 0x04, 0x91, 0xf9, 0x37, 0x32, 0x30, 0xc3, 0x5d, 0x8a, 0xdc, 0x5e, 0x79, 0x6e, 0x6d, + 0xc1, 0xf7, 0x34, 0x5b, 0x50, 0x46, 0xab, 0xaa, 0x9f, 0x36, 0x92, 0x25, 0x78, 0x04, 0xa4, 0x9f, + 0x86, 0x58, 0xd2, 0xf1, 0x3d, 0x8a, 0x11, 0x78, 0x2b, 0x0e, 0x6c, 0xc6, 0x2b, 0xee, 0x0d, 0x1b, + 0x2d, 0xf1, 0xc0, 0xd2, 0x78, 0x98, 0xbf, 0x91, 0x81, 0x69, 0x65, 0xcf, 0xfe, 0xdc, 0x76, 0xfc, + 0xd7, 0xb5, 0x8e, 0x97, 0x47, 0xe5, 0xca, 0x97, 0x8d, 0xd4, 0xef, 0x3d, 0x98, 0xeb, 0x23, 0x49, + 0xba, 0x3e, 0x8c, 0x51, 0x5c, 0x1f, 0x6f, 0xf5, 0x87, 0xc4, 0xf2, 0xfb, 0xc5, 0x51, 0x48, 0xac, + 0x1a, 0x83, 0xfb, 0xa3, 0x0c, 0x2c, 0x88, 0x5f, 0xa5, 0x5e, 0xd3, 0x0d, 0x2b, 0x5e, 0xe7, 0xc0, + 0x3d, 0x7c, 0x6e, 0xc7, 0xa2, 0xa4, 0x8d, 0xc5, 0x92, 0x3e, 0x16, 0xca, 0x07, 0x0e, 0x1e, 0x12, + 0xf3, 0x5f, 0x05, 0x58, 0x1c, 0x44, 0x40, 0xae, 0x6a, 0x9e, 0x2b, 0x74, 0xad, 0x26, 0x96, 0x15, + 0xee, 0xb3, 0x8a, 0x6f, 0x1a, 0x64, 0x46, 0xb8, 0x69, 0xb0, 0x06, 0x45, 0xac, 0xaa, 0x4e, 0x03, + 0xd6, 0x09, 0x41, 0x7c, 0xb9, 0xf1, 0xca, 0x93, 0x93, 0xa5, 0x17, 0x1d, 0x56, 0x66, 0x07, 0xa2, + 0xd0, 0xee, 0xf9, 0xaa, 0xbd, 0xd8, 0x47, 0x49, 0x7e, 0xcf, 0x80, 0x19, 0x04, 0xd6, 0x1e, 0xd2, + 0x4e, 0x88, 0xcc, 0x72, 0xe2, 0x84, 0x3f, 0x32, 0x15, 0xeb, 0xa1, 0xef, 0x76, 0x0e, 0x85, 0xad, + 0xb8, 0x2f, 0x6c, 0xc5, 0xf7, 0xb9, 0x8d, 0x7b, 0xa3, 0xe1, 0xb5, 0x6f, 0x1e, 0xfa, 0xce, 0x43, + 0x97, 0xbb, 0xa3, 0x9c, 0xd6, 0xcd, 0x38, 0x8b, 0x45, 0xd7, 0x4d, 0xe4, 0xa5, 0x10, 0xac, 0xd0, + 0x0e, 0xe7, 0x0d, 0xa5, 0x58, 0x6d, 0xa2, 0x99, 0x89, 0x16, 0x91, 0x5f, 0x80, 0x8b, 0x3c, 0xbe, + 0x94, 0x2d, 0x29, 0x6e, 0xa7, 0xe7, 0xf5, 0x82, 0xb2, 0xd3, 0x78, 0xd0, 0xeb, 0x06, 0xe2, 0x54, + 0x0a, 0xbf, 0xbc, 0x11, 0x15, 0xda, 0xfb, 0xbc, 0x54, 0x61, 0x39, 0x88, 0x01, 0x59, 0x81, 0x39, + 0x5e, 0x54, 0xea, 0x85, 0x5e, 0xbd, 0xe1, 0xb4, 0xdc, 0xce, 0x21, 0x5a, 0x0d, 0x79, 0x1e, 0xd9, + 0xe9, 0xf4, 0x42, 0xcf, 0x0e, 0x38, 0x5c, 0xe1, 0xd7, 0x4f, 0x44, 0x56, 0x99, 0x5d, 0xe5, 0x34, + 0xd7, 0x9d, 0xc7, 0x15, 0xa7, 0xeb, 0x34, 0xdc, 0x90, 0xdf, 0x2f, 0xc8, 0xf2, 0xf0, 0x44, 0x9f, + 0x3a, 0x4d, 0xbb, 0xed, 0x3c, 0xb6, 0x1b, 0xa2, 0x50, 0x37, 0xac, 0x34, 0xba, 0x88, 0x95, 0xdb, + 0x89, 0x58, 0x4d, 0x26, 0x59, 0xb9, 0x9d, 0xc1, 0xac, 0x62, 0x3a, 0xc9, 0x6a, 0xdb, 0xf1, 0x0f, + 0x69, 0xc8, 0x4f, 0x73, 0x98, 0x1d, 0x6e, 0x28, 0xac, 0x42, 0x2c, 0xb3, 0xf1, 0x64, 0x27, 0xc9, + 0x4a, 0xa1, 0x63, 0x92, 0xb7, 0xe7, 0xbb, 0x21, 0x55, 0xbf, 0x70, 0x0a, 0x9b, 0x85, 0xfd, 0x8f, + 0xe7, 0x59, 0x83, 0x3e, 0xb1, 0x8f, 0x32, 0xe6, 0xa6, 0x7c, 0x64, 0xa1, 0x8f, 0x5b, 0xfa, 0x57, + 0xf6, 0x51, 0x46, 0xdc, 0xd4, 0xef, 0x9c, 0xc6, 0xef, 0x54, 0xb8, 0x0d, 0xf8, 0xd0, 0x3e, 0x4a, + 0xb2, 0xc1, 0x3a, 0x2d, 0xa4, 0x1d, 0x26, 0xd1, 0xe2, 0x34, 0x6b, 0x06, 0x9b, 0xf6, 0x25, 0xe1, + 0x92, 0x2d, 0xfa, 0xb2, 0xd8, 0x4e, 0x39, 0xdb, 0x4a, 0x12, 0x93, 0xbf, 0x02, 0xb3, 0x3b, 0x01, + 0xbd, 0xbb, 0xba, 0x55, 0x97, 0xf1, 0xc4, 0x8b, 0xb3, 0xe8, 0xa8, 0xbd, 0x75, 0x8a, 0xd2, 0xb9, + 0xa1, 0xd2, 0x60, 0x96, 0x09, 0x3e, 0x6e, 0xbd, 0x80, 0xda, 0x07, 0x6e, 0x37, 0x88, 0x62, 0xfb, + 0xd5, 0x71, 0x4b, 0x54, 0x65, 0xae, 0xc0, 0x5c, 0x1f, 0x1b, 0x32, 0x03, 0xc0, 0x80, 0xf6, 0xce, + 0x46, 0xbd, 0xb6, 0x5d, 0x3c, 0x47, 0x8a, 0x50, 0xc0, 0xdf, 0xb5, 0x8d, 0x52, 0x79, 0xad, 0x56, + 0x2d, 0x1a, 0x64, 0x0e, 0xa6, 0x11, 0x52, 0x5d, 0xad, 0x73, 0x50, 0xe6, 0xe3, 0x5c, 0x7e, 0xac, + 0x38, 0x6e, 0x15, 0xf9, 0xd4, 0x0d, 0xd9, 0x04, 0xc0, 0x35, 0xc5, 0xfc, 0x5b, 0x19, 0xb8, 0x24, + 0x97, 0x15, 0x1a, 0x32, 0xfb, 0xdf, 0xed, 0x1c, 0x3e, 0xe7, 0xab, 0xc3, 0x5d, 0x6d, 0x75, 0xf8, + 0x52, 0x62, 0xa5, 0x4e, 0x7c, 0xe5, 0x90, 0x25, 0xe2, 0xb7, 0x27, 0xe0, 0xa5, 0xa1, 0x54, 0xe4, + 0x13, 0xb6, 0x9a, 0xbb, 0xb4, 0x13, 0xae, 0x36, 0x5b, 0x74, 0xdb, 0x6d, 0x53, 0xaf, 0x17, 0x8a, + 0xd3, 0xd3, 0x57, 0x9f, 0x9c, 0x2c, 0xcd, 0xf3, 0x14, 0x11, 0xb6, 0xdb, 0x6c, 0x51, 0x3b, 0xe4, + 0xc5, 0x9a, 0xb8, 0xf5, 0x53, 0x33, 0x96, 0x51, 0xc2, 0x9a, 0x55, 0xb6, 0xd9, 0x7c, 0xe8, 0xf0, + 0x9b, 0xf2, 0x82, 0xe5, 0x03, 0x4a, 0xbb, 0xb6, 0xc3, 0x4a, 0x6d, 0x57, 0x14, 0xeb, 0x2c, 0xfb, + 0xa8, 0xc9, 0x5d, 0x85, 0x65, 0x85, 0x59, 0xc3, 0xeb, 0xce, 0x63, 0xe1, 0x38, 0x12, 0x57, 0x87, + 0x22, 0x96, 0xfc, 0xd2, 0x59, 0xdb, 0x79, 0x6c, 0xf5, 0x93, 0x90, 0xef, 0xc0, 0x79, 0xb1, 0x00, + 0x31, 0x65, 0xec, 0x7b, 0x2d, 0xf9, 0xc5, 0x39, 0xe4, 0xf5, 0xfa, 0x93, 0x93, 0xa5, 0x8b, 0x62, + 0xf9, 0xb2, 0x1b, 0x1c, 0x23, 0xf5, 0xab, 0xd3, 0xb9, 0x90, 0x6d, 0xb6, 0x20, 0x27, 0xba, 0x63, + 0x9d, 0x06, 0x81, 0x73, 0x28, 0x9d, 0x4c, 0x3c, 0x84, 0x41, 0xe9, 0x4c, 0xbb, 0xcd, 0xcb, 0xad, + 0x81, 0x94, 0x64, 0x05, 0x66, 0xf6, 0xe8, 0xbe, 0x3a, 0x3e, 0xe3, 0x91, 0xaa, 0x2a, 0x3e, 0xa2, + 0xfb, 0x83, 0x07, 0x27, 0x41, 0x47, 0x5c, 0x98, 0xc3, 0xf0, 0xae, 0x35, 0x37, 0x08, 0x69, 0x87, + 0xfa, 0x18, 0x4b, 0x3d, 0x81, 0xca, 0x60, 0x31, 0xb6, 0x90, 0xf5, 0xf2, 0xf2, 0x2b, 0x4f, 0x4e, + 0x96, 0x5e, 0xe2, 0xa1, 0x62, 0x2d, 0x01, 0xb7, 0x13, 0xf9, 0x62, 0xfa, 0xb9, 0x92, 0xef, 0xc1, + 0xac, 0xe5, 0xf5, 0x42, 0xb7, 0x73, 0x58, 0x0f, 0x7d, 0x27, 0xa4, 0x87, 0x7c, 0x41, 0x8a, 0x83, + 0xb6, 0x13, 0xa5, 0xc2, 0x01, 0xc0, 0x81, 0x76, 0x20, 0xa0, 0xda, 0x8a, 0xa0, 0x13, 0x90, 0xef, + 0xc2, 0x0c, 0x8f, 0x36, 0x8d, 0x2a, 0x98, 0xd4, 0xae, 0x56, 0xeb, 0x85, 0xbb, 0xb7, 0xf8, 0x7e, + 0x8b, 0x47, 0xad, 0xa6, 0x55, 0x90, 0xe0, 0x46, 0xbe, 0x25, 0x3a, 0x6b, 0xcb, 0xed, 0x1c, 0x46, + 0x62, 0x0c, 0xd8, 0xf3, 0x6f, 0xc7, 0x5d, 0xd2, 0x65, 0xcd, 0x95, 0x62, 0x3c, 0xc0, 0x69, 0xd9, + 0xcf, 0xc7, 0x3c, 0x31, 0xa0, 0x98, 0x6c, 0x20, 0xf9, 0x26, 0x4c, 0x72, 0x3f, 0x16, 0x0d, 0x8e, + 0x44, 0x36, 0x17, 0x99, 0x5b, 0x2a, 0x82, 0xeb, 0x44, 0xe2, 0xa6, 0x25, 0xf7, 0x92, 0x51, 0xf5, + 0x24, 0x67, 0xe5, 0x9c, 0x15, 0x33, 0x23, 0x4d, 0x28, 0xf0, 0x36, 0x50, 0xbc, 0x87, 0x20, 0x8e, + 0x33, 0x5e, 0x51, 0xc7, 0x5c, 0x14, 0x25, 0xf8, 0x63, 0xd4, 0xac, 0xf8, 0x52, 0x8e, 0xa0, 0x55, + 0xa1, 0x71, 0x2d, 0x03, 0xe4, 0x25, 0xa1, 0x79, 0x09, 0x2e, 0x0e, 0x68, 0xb3, 0xf9, 0x10, 0xdd, + 0x66, 0x03, 0x6a, 0x24, 0xdf, 0x84, 0x05, 0x24, 0xac, 0x78, 0x9d, 0x0e, 0x6d, 0x84, 0x38, 0xc9, + 0xe4, 0x9e, 0x39, 0xcb, 0x7d, 0x5c, 0xfc, 0x7b, 0x1b, 0x11, 0x82, 0x9d, 0xdc, 0x3a, 0xa7, 0x72, + 0x30, 0x7f, 0x27, 0x03, 0x8b, 0x62, 0xde, 0x5a, 0xb4, 0xe1, 0xf9, 0xcd, 0xe7, 0x7f, 0x9d, 0xa8, + 0x69, 0xeb, 0xc4, 0xab, 0x51, 0x0c, 0x79, 0xda, 0x47, 0x0e, 0x59, 0x26, 0xfe, 0xc0, 0x80, 0x17, + 0x87, 0x11, 0xb1, 0xde, 0x89, 0xee, 0x5d, 0x4c, 0xf6, 0xdd, 0xaf, 0xe8, 0xc2, 0x3c, 0x0e, 0x68, + 0xe5, 0x88, 0x36, 0x1e, 0x04, 0x2b, 0x5e, 0x10, 0xe2, 0x69, 0x6a, 0x46, 0x8b, 0xa4, 0x2c, 0x7b, + 0x1e, 0x77, 0xf9, 0xa2, 0x5f, 0xdc, 0xf8, 0xe9, 0xc9, 0x12, 0x30, 0x10, 0xbf, 0x29, 0xc1, 0x8c, + 0x5d, 0x2e, 0x65, 0x0d, 0xe4, 0xc1, 0x6f, 0x86, 0x3c, 0xa0, 0xc7, 0x81, 0x95, 0xc6, 0x1a, 0x4f, + 0xc6, 0x4a, 0xbd, 0xf0, 0x68, 0xcb, 0xa7, 0x07, 0xd4, 0xa7, 0x9d, 0x06, 0xfd, 0x82, 0x9d, 0x8c, + 0xe9, 0x1f, 0x37, 0xd2, 0xbe, 0xfc, 0x37, 0x26, 0x61, 0x21, 0x8d, 0x8c, 0xf5, 0x8b, 0xb2, 0x15, + 0x4c, 0x66, 0xa3, 0xfb, 0x57, 0x0c, 0x28, 0xd4, 0x69, 0xc3, 0xeb, 0x34, 0xef, 0xa2, 0x37, 0x53, + 0xf4, 0x8e, 0xcd, 0x97, 0x42, 0x06, 0xb7, 0x0f, 0x12, 0x6e, 0xce, 0x9f, 0x9f, 0x2c, 0x7d, 0x63, + 0xb4, 0x1d, 0x58, 0xc3, 0xc3, 0xfb, 0x5f, 0x21, 0xde, 0xbd, 0x8e, 0xaa, 0xc0, 0x90, 0x09, 0xad, + 0x52, 0x52, 0x86, 0x69, 0x31, 0x5d, 0x3d, 0xf5, 0xda, 0x0d, 0x5e, 0x94, 0x69, 0xc8, 0x82, 0xbe, + 0x2b, 0x76, 0x1a, 0x09, 0xb9, 0x0d, 0xd9, 0x9d, 0xe5, 0xbb, 0x62, 0x0c, 0xe4, 0x65, 0x82, 0x9d, + 0xe5, 0xbb, 0xe8, 0xe4, 0x61, 0x86, 0xf3, 0x74, 0x6f, 0x59, 0xf3, 0xc2, 0xee, 0x2c, 0xdf, 0x25, + 0xb7, 0x61, 0xce, 0xa2, 0xbf, 0xd8, 0x73, 0x7d, 0x2a, 0x26, 0xc0, 0xfa, 0xdd, 0x12, 0x8e, 0x45, + 0x5e, 0xa6, 0xb5, 0xeb, 0x2f, 0x27, 0x7f, 0x15, 0xce, 0x57, 0xdd, 0x40, 0xb4, 0x8b, 0x1f, 0xec, + 0x36, 0x31, 0x90, 0x69, 0x7c, 0x80, 0xc8, 0x7f, 0x35, 0x55, 0xe4, 0x5f, 0x69, 0x46, 0x4c, 0x6c, + 0x7e, 0x6a, 0xdc, 0x4c, 0xde, 0x49, 0x4a, 0xaf, 0x87, 0x7c, 0x1f, 0x66, 0xd0, 0xc7, 0x88, 0x67, + 0xdd, 0x78, 0xc3, 0x77, 0x62, 0x40, 0xcd, 0x5f, 0x4e, 0xad, 0xf9, 0x32, 0xba, 0x2c, 0x6d, 0x3c, + 0x31, 0xc7, 0xdb, 0xc0, 0xda, 0x06, 0x58, 0xe3, 0x4c, 0x3e, 0x86, 0x59, 0x61, 0x89, 0x6c, 0x1e, + 0x6c, 0x1f, 0xd1, 0xaa, 0x73, 0x2c, 0xfc, 0xd5, 0xb8, 0xb9, 0x11, 0xe6, 0x8b, 0xed, 0x1d, 0xd8, + 0xe1, 0x11, 0xb5, 0x9b, 0x8e, 0xb6, 0x66, 0x27, 0x08, 0xc9, 0x2f, 0xc3, 0xd4, 0x9a, 0xd7, 0x60, + 0x46, 0x28, 0xaa, 0x93, 0x49, 0xe4, 0xf3, 0x29, 0x66, 0x59, 0xe3, 0xe0, 0x84, 0x65, 0xf1, 0xf3, + 0x93, 0xa5, 0xf7, 0xce, 0x2a, 0x69, 0x4a, 0x05, 0x96, 0x5a, 0x1b, 0xa9, 0x40, 0x7e, 0x8f, 0xee, + 0xb3, 0xaf, 0x4d, 0x66, 0x08, 0x92, 0x60, 0x71, 0x84, 0x20, 0x7e, 0x69, 0x47, 0x08, 0x02, 0x46, + 0x7c, 0x98, 0xc3, 0xfe, 0xd9, 0x72, 0x82, 0xe0, 0x91, 0xe7, 0x37, 0xf1, 0xde, 0xfd, 0xd4, 0x80, + 0xce, 0x5f, 0x4e, 0xed, 0xfc, 0x17, 0x79, 0xe7, 0x77, 0x15, 0x0e, 0xaa, 0x2d, 0xd5, 0xc7, 0x9e, + 0x7c, 0x0f, 0x66, 0x84, 0x0c, 0xae, 0xdf, 0x2d, 0xe1, 0x54, 0x2e, 0x68, 0xe1, 0x60, 0x7a, 0x21, + 0x37, 0xd8, 0x7c, 0x0e, 0x93, 0xce, 0x18, 0xbb, 0x7d, 0xa0, 0x66, 0x0e, 0x4b, 0xf0, 0x23, 0x5b, + 0x30, 0x55, 0xa5, 0x0f, 0xdd, 0x06, 0xc5, 0xa0, 0x15, 0xdc, 0xbc, 0x2a, 0x19, 0x4b, 0xe2, 0x12, + 0xee, 0x96, 0x68, 0x22, 0x80, 0x87, 0xc0, 0xe8, 0xf1, 0xaf, 0x11, 0xa2, 0xf9, 0x9f, 0x19, 0x38, + 0x1b, 0xc9, 0x75, 0xbc, 0x15, 0x10, 0xb9, 0xfa, 0xd1, 0xbd, 0xe4, 0x74, 0x13, 0x57, 0x55, 0x39, + 0x0a, 0x79, 0x0b, 0xc6, 0xef, 0x3a, 0x0d, 0x1a, 0xca, 0x33, 0x73, 0x44, 0x3e, 0x40, 0x88, 0xea, + 0x8b, 0xe2, 0x38, 0xcc, 0x50, 0xe0, 0x15, 0x96, 0xe2, 0x0c, 0xa5, 0x95, 0x12, 0x8f, 0x8a, 0x17, + 0x87, 0x61, 0xa2, 0xa1, 0x4a, 0x0a, 0x53, 0xbb, 0xe1, 0xa8, 0xbc, 0x52, 0x39, 0x98, 0xff, 0xbb, + 0x11, 0x4b, 0x0a, 0x79, 0x1d, 0x72, 0xd6, 0x56, 0xd4, 0x7e, 0x1e, 0x9f, 0x95, 0x68, 0x3e, 0x22, + 0x90, 0x6f, 0xc1, 0x79, 0x85, 0x0f, 0x8e, 0x22, 0x6d, 0xb2, 0x06, 0xf1, 0x8f, 0x79, 0x0d, 0x03, + 0x88, 0x94, 0x96, 0x38, 0x1c, 0x23, 0xd1, 0xa2, 0x74, 0x1e, 0x68, 0x15, 0xc5, 0x05, 0x55, 0xda, + 0x71, 0x39, 0x6f, 0xe5, 0x63, 0x55, 0xde, 0x4d, 0x44, 0x48, 0x7e, 0x6c, 0x1a, 0x07, 0x1e, 0x43, + 0x64, 0xbe, 0xa3, 0x09, 0x40, 0x94, 0x22, 0xd2, 0x18, 0x9e, 0x22, 0xd2, 0xfc, 0x17, 0x86, 0x92, + 0x0d, 0xf4, 0x39, 0x5d, 0x80, 0xef, 0x68, 0x0b, 0xf0, 0x82, 0x20, 0x8d, 0xbe, 0x8a, 0x95, 0xa5, + 0x1a, 0x4d, 0xb3, 0x30, 0xad, 0x21, 0xe1, 0x5d, 0xab, 0x9d, 0x80, 0xfa, 0xfc, 0x6c, 0xe1, 0x8b, + 0x75, 0xd7, 0x2a, 0xfa, 0xae, 0x91, 0x6e, 0xc3, 0xfc, 0x33, 0x03, 0x7d, 0x4e, 0x2a, 0x05, 0xeb, + 0x0d, 0x06, 0x52, 0x7b, 0xa3, 0x17, 0x50, 0xdf, 0x42, 0x28, 0xbf, 0x05, 0xb1, 0xa6, 0xdf, 0x82, + 0x68, 0x59, 0x0c, 0x46, 0xbe, 0x01, 0x63, 0x3b, 0xb8, 0x83, 0xd6, 0x63, 0x60, 0x23, 0xfe, 0x58, + 0xc8, 0x27, 0x66, 0x8f, 0xfd, 0xa9, 0xea, 0x15, 0x2c, 0x23, 0x75, 0x98, 0xa8, 0xf8, 0x14, 0xf3, + 0x7e, 0xe6, 0x46, 0x8f, 0xe3, 0x6a, 0x70, 0x92, 0x64, 0x1c, 0x97, 0xe0, 0x64, 0xfe, 0xcd, 0x0c, + 0x90, 0xf8, 0x1b, 0x31, 0xbd, 0x49, 0xf0, 0xdc, 0x0e, 0xfa, 0x47, 0xda, 0xa0, 0xbf, 0xd4, 0x37, + 0xe8, 0xfc, 0xf3, 0x46, 0x1a, 0xfb, 0x3f, 0x36, 0xe0, 0x42, 0x3a, 0x21, 0x79, 0x15, 0xc6, 0x37, + 0xb7, 0xb7, 0x64, 0x18, 0xb5, 0xf8, 0x14, 0xaf, 0x8b, 0x86, 0xbe, 0x25, 0x8a, 0xc8, 0xdb, 0x30, + 0xfe, 0x89, 0x55, 0x61, 0xca, 0x47, 0xb9, 0xac, 0xfd, 0x8b, 0xbe, 0xdd, 0xd0, 0xf5, 0x8f, 0x40, + 0x52, 0xc7, 0x36, 0xfb, 0xcc, 0xc6, 0xf6, 0x47, 0x19, 0x98, 0x2d, 0x35, 0x1a, 0x34, 0x08, 0xd8, + 0x3a, 0x49, 0x83, 0xf0, 0xb9, 0x1d, 0xd8, 0xf4, 0x00, 0x69, 0xed, 0xdb, 0x46, 0x1a, 0xd5, 0x3f, + 0x31, 0xe0, 0xbc, 0xa4, 0x7a, 0xe8, 0xd2, 0x47, 0xdb, 0x47, 0x3e, 0x0d, 0x8e, 0xbc, 0x56, 0x73, + 0xe4, 0x64, 0x0e, 0x6c, 0x71, 0x77, 0x5b, 0x21, 0xf5, 0xd5, 0x83, 0xa6, 0x03, 0x84, 0x68, 0x8b, + 0x3b, 0x42, 0xc8, 0x4d, 0x98, 0x28, 0x75, 0xbb, 0xbe, 0xf7, 0x90, 0x4f, 0xfb, 0x69, 0x11, 0xd6, + 0xc6, 0x41, 0x5a, 0x18, 0x1c, 0x07, 0xb1, 0x66, 0x54, 0x69, 0x87, 0xdf, 0x50, 0x9b, 0xe6, 0xcd, + 0x68, 0xd2, 0x8e, 0x6a, 0x8c, 0x62, 0xb9, 0xf9, 0xc3, 0x1c, 0x14, 0xd4, 0x0f, 0x21, 0x26, 0x8c, + 0xf3, 0x28, 0x65, 0x35, 0xda, 0xd4, 0x41, 0x88, 0x25, 0x4a, 0xe2, 0x20, 0xed, 0xcc, 0xa9, 0x41, + 0xda, 0x7b, 0x30, 0xbd, 0xe5, 0x7b, 0x5d, 0x2f, 0xa0, 0x4d, 0x9e, 0xba, 0x99, 0x6b, 0xad, 0x79, + 0xc5, 0x54, 0x63, 0x7d, 0x8e, 0xde, 0x74, 0xdc, 0xdd, 0x74, 0x05, 0xb6, 0x9d, 0x4c, 0xec, 0xac, + 0xf3, 0xe1, 0x07, 0x75, 0x4e, 0x20, 0xee, 0x8c, 0x46, 0x07, 0x75, 0x0c, 0xa2, 0x1f, 0xd4, 0x31, + 0x88, 0x3a, 0x2d, 0xc6, 0x9e, 0xd5, 0xb4, 0x20, 0x7f, 0xd3, 0x80, 0xa9, 0x52, 0xa7, 0x23, 0x82, + 0xbf, 0x4f, 0x89, 0x7e, 0xfb, 0xb6, 0x38, 0xab, 0x7b, 0xef, 0x33, 0x9d, 0xd5, 0x6d, 0xfb, 0x8e, + 0x1b, 0x06, 0x18, 0x13, 0x18, 0x57, 0xa8, 0xda, 0x9a, 0x4a, 0x3b, 0xc8, 0x7b, 0x50, 0x8c, 0xe4, + 0x71, 0xb5, 0xd3, 0xa4, 0x8f, 0x69, 0xb0, 0x38, 0x71, 0x25, 0x7b, 0x6d, 0x9a, 0xe7, 0x97, 0xd7, + 0x0e, 0x21, 0x93, 0x88, 0xe6, 0x8f, 0x0c, 0xb8, 0xa0, 0x0a, 0x44, 0xbd, 0xb7, 0xdf, 0x76, 0xd1, + 0x66, 0x26, 0x37, 0x60, 0x52, 0x8c, 0x57, 0x64, 0xff, 0xf5, 0xe7, 0xfb, 0x8e, 0x51, 0x48, 0x8d, + 0x0d, 0x11, 0xe3, 0x21, 0x5c, 0x1f, 0xf3, 0x89, 0xe9, 0xc6, 0x8a, 0xca, 0x8b, 0xa2, 0xb3, 0x8b, + 0x3e, 0xfe, 0xd6, 0xc7, 0x8e, 0x41, 0xcc, 0x0f, 0x61, 0x4e, 0x6f, 0x65, 0x9d, 0x62, 0xc6, 0x03, + 0xf9, 0x69, 0x46, 0xfa, 0xa7, 0xc9, 0x72, 0x73, 0x0f, 0x48, 0x1f, 0x7d, 0x80, 0x07, 0xce, 0x34, + 0x94, 0x01, 0x11, 0xd2, 0xdd, 0xdb, 0x87, 0x18, 0x65, 0xbe, 0x9f, 0x52, 0xbb, 0x1b, 0x49, 0xcd, + 0xff, 0x66, 0x0a, 0xe6, 0x53, 0x54, 0xc7, 0x29, 0x4b, 0xfb, 0x92, 0x3e, 0x79, 0x26, 0xa3, 0xc0, + 0x52, 0x39, 0x65, 0x3e, 0x94, 0x59, 0xce, 0x87, 0x4c, 0x95, 0x61, 0xa9, 0xcf, 0x3f, 0x8f, 0xe5, + 0x5d, 0x8d, 0xfd, 0x1e, 0x7b, 0x66, 0xb1, 0xdf, 0x65, 0x98, 0x16, 0x5f, 0x25, 0xa6, 0xf2, 0x78, + 0xec, 0xe5, 0xf0, 0x79, 0x81, 0xdd, 0x37, 0xa5, 0x75, 0x12, 0xce, 0x23, 0xf0, 0x5a, 0x0f, 0xa9, + 0xe0, 0x31, 0xa1, 0xf2, 0xc0, 0x82, 0x54, 0x1e, 0x0a, 0x09, 0xf9, 0x8f, 0x30, 0xcf, 0x11, 0x42, + 0xd4, 0xf9, 0x9c, 0x1f, 0x36, 0x9f, 0x9b, 0xcf, 0x66, 0x3e, 0xbf, 0x24, 0xdb, 0x98, 0x3e, 0xaf, + 0x53, 0x9a, 0x45, 0xfe, 0x7d, 0x03, 0xe6, 0x78, 0x00, 0xb2, 0xda, 0xd8, 0xa1, 0x41, 0xa5, 0x8d, + 0x67, 0xd3, 0xd8, 0x17, 0x03, 0xac, 0x76, 0x40, 0x5b, 0xfb, 0x1b, 0x45, 0x7e, 0x01, 0x20, 0x9a, + 0x51, 0x32, 0x25, 0xc5, 0x8b, 0x29, 0x5a, 0x20, 0x42, 0x8a, 0x73, 0x7a, 0x84, 0x11, 0x9d, 0x96, + 0xdd, 0x2a, 0x82, 0x92, 0xbf, 0x0a, 0x0b, 0x6c, 0xbe, 0x44, 0x10, 0x71, 0x5d, 0x62, 0x71, 0x0a, + 0x6b, 0xf9, 0xca, 0xe0, 0xa5, 0xfd, 0x46, 0x1a, 0x19, 0xbf, 0x98, 0x1b, 0xe7, 0x75, 0x0c, 0xdb, + 0xea, 0x4e, 0x31, 0x8d, 0x02, 0xef, 0x1f, 0x61, 0xeb, 0x79, 0x6a, 0x8b, 0x01, 0xfa, 0xed, 0x92, + 0x9c, 0x0b, 0x5c, 0xbf, 0x05, 0x7a, 0x20, 0x23, 0x82, 0xc8, 0x27, 0x40, 0xa2, 0xc8, 0x5d, 0x0e, + 0xa3, 0xbe, 0x4c, 0x73, 0x8c, 0xde, 0x8b, 0x38, 0x02, 0xd8, 0x97, 0xc5, 0xaa, 0x90, 0xf4, 0x13, + 0x13, 0x0a, 0x0b, 0xe2, 0xa3, 0x19, 0x54, 0xe6, 0x81, 0x0a, 0x16, 0x67, 0xb4, 0xcb, 0x28, 0x71, + 0x49, 0x9c, 0x00, 0x52, 0x49, 0x26, 0xa5, 0xed, 0x96, 0xd3, 0xd8, 0x91, 0x3b, 0x30, 0xb9, 0xe6, + 0x1d, 0xba, 0x9d, 0x15, 0x79, 0x8c, 0x2e, 0x8e, 0xf4, 0x5a, 0x0c, 0x68, 0x1f, 0xe9, 0x87, 0xe1, + 0x31, 0x2a, 0xb3, 0x6a, 0xab, 0xfe, 0xb1, 0xd5, 0xeb, 0x2c, 0x16, 0xd1, 0xb7, 0x88, 0xe6, 0x4c, + 0xd3, 0x3f, 0xb6, 0xfd, 0x9e, 0xb6, 0x7c, 0x73, 0xa4, 0xcb, 0xfb, 0x70, 0x69, 0xe0, 0xa0, 0xa5, + 0xdc, 0x01, 0xbe, 0xa9, 0xdf, 0x01, 0xbe, 0x34, 0x48, 0xb9, 0x07, 0xea, 0x3d, 0xe0, 0xbf, 0x6b, + 0x24, 0xb4, 0xb9, 0x30, 0xbd, 0xf8, 0xf3, 0x16, 0x83, 0x96, 0xbb, 0x0c, 0x26, 0x16, 0xe4, 0xfa, + 0x3e, 0x13, 0x9b, 0x7c, 0x4c, 0xdf, 0xab, 0xeb, 0x05, 0x6a, 0xfe, 0xa7, 0x54, 0xec, 0xe6, 0x6f, + 0x67, 0x80, 0xf0, 0x16, 0x56, 0x9c, 0xae, 0xb3, 0xef, 0xb6, 0xdc, 0xd0, 0xa5, 0x98, 0x8b, 0x4b, + 0xb0, 0x70, 0xf6, 0x5b, 0x54, 0xbd, 0xb4, 0x20, 0xc2, 0x4a, 0xa2, 0x32, 0x3b, 0x69, 0xa4, 0xf5, + 0x11, 0x0e, 0x10, 0xc5, 0xcc, 0xd3, 0x88, 0xe2, 0xf7, 0xe0, 0x85, 0x52, 0x17, 0xb3, 0x07, 0xca, + 0x5a, 0xee, 0x7a, 0xbe, 0x14, 0x22, 0xe9, 0xb2, 0xc1, 0xe3, 0x4e, 0x27, 0x42, 0xeb, 0x6b, 0xe9, + 0x30, 0x16, 0xe6, 0x7f, 0x9a, 0x81, 0x4b, 0xfd, 0x1d, 0x23, 0xbe, 0x2d, 0x1a, 0x1e, 0xe3, 0x94, + 0xe1, 0x49, 0xeb, 0xc7, 0x0c, 0x4a, 0xe7, 0x33, 0xeb, 0x47, 0x9e, 0xbe, 0xef, 0x33, 0xf6, 0x63, + 0x1d, 0xa6, 0xd4, 0x99, 0x9c, 0xfb, 0xac, 0x33, 0x59, 0xe5, 0x62, 0x3e, 0x52, 0x73, 0xca, 0x91, + 0xb7, 0xd3, 0xc2, 0x16, 0xf9, 0x25, 0x70, 0x0e, 0xd6, 0x23, 0x16, 0xe5, 0x1e, 0x30, 0x93, 0xba, + 0x07, 0x94, 0xf7, 0xd9, 0xb3, 0x69, 0xf7, 0xd9, 0xcd, 0x5f, 0xcf, 0x40, 0x61, 0xab, 0xd5, 0x3b, + 0x74, 0x3b, 0x55, 0x27, 0x74, 0x9e, 0xdb, 0x0d, 0xe5, 0xbb, 0xda, 0x86, 0x32, 0x8a, 0xab, 0x8d, + 0x3e, 0x6c, 0xa4, 0xdd, 0xe4, 0x8f, 0x0d, 0x98, 0x8d, 0x49, 0xb8, 0x56, 0x5b, 0x81, 0x1c, 0xfb, + 0x21, 0xec, 0xd3, 0x2b, 0x7d, 0x8c, 0x11, 0xeb, 0x46, 0xf4, 0x97, 0xd8, 0xe2, 0xe9, 0x0f, 0x62, + 0x20, 0x87, 0xcb, 0x5f, 0xe5, 0xa9, 0xe9, 0xcf, 0xfe, 0xf6, 0xce, 0x3f, 0x34, 0xa0, 0x98, 0xfc, + 0x12, 0x72, 0x1f, 0x26, 0x18, 0x27, 0x37, 0x4a, 0x73, 0xff, 0xa5, 0x01, 0xdf, 0x7c, 0x43, 0xa0, + 0xf1, 0xe6, 0x61, 0xe7, 0x53, 0x0e, 0xb1, 0x24, 0x87, 0xcb, 0x16, 0x14, 0x54, 0xac, 0x94, 0xd6, + 0xbd, 0xa5, 0xab, 0xf2, 0x0b, 0xe9, 0xfd, 0xa0, 0xb6, 0xfa, 0x6f, 0x6b, 0xad, 0x16, 0x4a, 0x7c, + 0xd4, 0x47, 0x4e, 0x30, 0x03, 0x04, 0x9f, 0x0e, 0xaa, 0x9c, 0xc9, 0x99, 0xa4, 0x67, 0x80, 0xe0, + 0x30, 0xb6, 0x13, 0xe5, 0xf5, 0x09, 0x39, 0xc3, 0x9d, 0x68, 0x17, 0x21, 0xea, 0x52, 0xc6, 0x71, + 0xcc, 0xbf, 0x93, 0x85, 0x0b, 0x71, 0xf3, 0xf8, 0x93, 0x2f, 0x5b, 0x8e, 0xef, 0xb4, 0x83, 0x53, + 0x66, 0xc0, 0xb5, 0xbe, 0xa6, 0x61, 0xd6, 0x25, 0xd9, 0x34, 0xa5, 0x41, 0x66, 0xa2, 0x41, 0xb8, + 0x85, 0xe7, 0x0d, 0x92, 0xcd, 0x20, 0xf7, 0x21, 0x5b, 0xa7, 0xa1, 0x50, 0x22, 0x57, 0xfb, 0x7a, + 0x55, 0x6d, 0xd7, 0x8d, 0x3a, 0x0d, 0xf9, 0x20, 0xf2, 0xfb, 0x2f, 0x54, 0xbb, 0xb0, 0xca, 0x36, + 0x63, 0x7b, 0x30, 0x5e, 0x7b, 0xdc, 0xa5, 0x8d, 0x50, 0xa4, 0x3f, 0x79, 0x63, 0x38, 0x3f, 0x8e, + 0xab, 0x24, 0x59, 0xa1, 0x08, 0x50, 0x3b, 0x8b, 0xa3, 0x5c, 0xbe, 0x03, 0x79, 0x59, 0xf9, 0x99, + 0x92, 0x85, 0xbc, 0x0b, 0x53, 0x4a, 0x25, 0x67, 0x12, 0xfa, 0xbf, 0x30, 0x60, 0x9c, 0xa9, 0xf0, + 0xdd, 0x77, 0x9e, 0x53, 0x8d, 0x74, 0x5b, 0xd3, 0x48, 0x73, 0xca, 0x9d, 0x78, 0x9c, 0x97, 0xef, + 0x9c, 0xa2, 0x8b, 0x4e, 0x0c, 0x80, 0x18, 0x99, 0xdc, 0x83, 0x09, 0x91, 0xbc, 0x51, 0x44, 0xe0, + 0xa8, 0x97, 0xec, 0x65, 0xea, 0xf8, 0xc8, 0xc6, 0xf5, 0xba, 0xc9, 0x4d, 0x81, 0xa4, 0x26, 0xd5, + 0xf8, 0x82, 0xa4, 0x9a, 0x97, 0x85, 0xb1, 0xa9, 0x78, 0x1d, 0x7e, 0x49, 0x5c, 0xc9, 0x42, 0x3a, + 0xe0, 0xf2, 0x4d, 0x49, 0xb8, 0xb5, 0xb2, 0xc3, 0x98, 0x5c, 0x10, 0x4c, 0xd2, 0x3d, 0x5e, 0xff, + 0xf1, 0x2c, 0xbf, 0x5e, 0x2d, 0x1b, 0xf6, 0x01, 0x14, 0xee, 0x7a, 0xfe, 0x23, 0xc7, 0xe7, 0x97, + 0xe6, 0xf0, 0x33, 0x79, 0x8a, 0xdd, 0xe9, 0x03, 0x0e, 0xe7, 0xd7, 0xee, 0x7e, 0x7e, 0xb2, 0x94, + 0x2b, 0x7b, 0x5e, 0xcb, 0xd2, 0xd0, 0xc9, 0x26, 0x4c, 0xaf, 0x3b, 0x8f, 0xc5, 0x61, 0xf8, 0xf6, + 0xf6, 0x9a, 0x88, 0xec, 0x7b, 0xe3, 0xc9, 0xc9, 0xd2, 0xa5, 0xb6, 0xf3, 0x38, 0x3a, 0x70, 0x1c, + 0x7c, 0x87, 0x53, 0xa7, 0x27, 0x2e, 0xcc, 0x6c, 0x79, 0x7e, 0x28, 0x2a, 0x61, 0x3b, 0x9a, 0xec, + 0x80, 0xe3, 0xd4, 0x9b, 0xa9, 0xc7, 0xa9, 0x97, 0xd8, 0x36, 0xce, 0x3e, 0x88, 0xc8, 0xb5, 0xc4, + 0x17, 0x1a, 0x63, 0xf2, 0x01, 0xcc, 0x55, 0xa8, 0x1f, 0xba, 0x07, 0x6e, 0xc3, 0x09, 0xe9, 0x5d, + 0xcf, 0x6f, 0x3b, 0xa1, 0x70, 0xa7, 0xa1, 0x3b, 0xa5, 0x41, 0x39, 0xa7, 0xb6, 0x13, 0x5a, 0xfd, + 0x98, 0xe4, 0x5b, 0x69, 0xb1, 0x92, 0x63, 0x71, 0x44, 0x58, 0x4a, 0xac, 0xe4, 0xa0, 0x88, 0xb0, + 0xfe, 0xa8, 0xc9, 0xc3, 0x61, 0x31, 0x05, 0xf9, 0xf2, 0x2d, 0x11, 0xc3, 0x70, 0x7a, 0xcc, 0x40, + 0x34, 0x6e, 0x03, 0x62, 0x07, 0x96, 0x21, 0x5b, 0xde, 0xba, 0x8b, 0x0e, 0x32, 0x71, 0x86, 0x4f, + 0x3b, 0x47, 0x4e, 0xa7, 0x81, 0x96, 0x99, 0x08, 0xfe, 0x51, 0x15, 0x5e, 0x79, 0xeb, 0x2e, 0x71, + 0x60, 0x7e, 0x8b, 0xfa, 0x6d, 0x37, 0xfc, 0xe6, 0xad, 0x5b, 0xca, 0x40, 0xe5, 0xb1, 0x69, 0x37, + 0x45, 0xd3, 0x96, 0xba, 0x88, 0x62, 0x3f, 0xbe, 0x75, 0x2b, 0x75, 0x38, 0xa2, 0x86, 0xa5, 0xf1, + 0x22, 0x35, 0x98, 0x59, 0x77, 0x1e, 0xc7, 0x31, 0x5b, 0x81, 0x88, 0x3a, 0x7f, 0x49, 0x0a, 0x56, + 0x1c, 0xef, 0xa5, 0xce, 0xb7, 0x04, 0x11, 0x79, 0x1f, 0xa6, 0x62, 0xf1, 0x0a, 0x44, 0xbc, 0x1e, + 0x9e, 0x5a, 0x2b, 0xc2, 0xa9, 0x59, 0x87, 0x0a, 0x3a, 0xd9, 0x89, 0x1c, 0x34, 0xdc, 0xbc, 0x16, + 0x89, 0x1f, 0x6f, 0xaa, 0x0e, 0x1a, 0x07, 0x4b, 0xb4, 0xcf, 0x9a, 0x8d, 0xb6, 0x34, 0x3c, 0x88, + 0xcd, 0xd2, 0xb9, 0x28, 0x7e, 0x9f, 0x2d, 0xdf, 0x6b, 0x77, 0x43, 0x3c, 0xbf, 0x4f, 0xf8, 0x7d, + 0xba, 0x58, 0x92, 0xe2, 0xf7, 0xe1, 0x24, 0xe9, 0x81, 0x2a, 0xd3, 0xa7, 0x04, 0xaa, 0x50, 0xc8, + 0xad, 0x79, 0x8d, 0x07, 0x18, 0x40, 0x3e, 0x59, 0xfe, 0x84, 0xe9, 0x88, 0x96, 0xd7, 0x78, 0xf0, + 0xec, 0x02, 0x2c, 0x90, 0x3d, 0xd9, 0x60, 0xdf, 0xc7, 0x44, 0x47, 0x54, 0x8d, 0x3b, 0xe3, 0xf8, + 0x2c, 0x55, 0x2b, 0xe3, 0xc6, 0x08, 0x97, 0x34, 0x39, 0x1e, 0x96, 0x4e, 0x4e, 0x28, 0x14, 0xab, + 0x34, 0x78, 0x10, 0x7a, 0xdd, 0x4a, 0xcb, 0xed, 0xee, 0x7b, 0x8e, 0xdf, 0xc4, 0x7d, 0x73, 0x9a, + 0x52, 0x78, 0x3d, 0x55, 0x29, 0xcc, 0x35, 0x39, 0xbd, 0xdd, 0x90, 0x0c, 0xac, 0x3e, 0x96, 0xe4, + 0x5b, 0x30, 0xc3, 0x66, 0x44, 0xed, 0x71, 0x48, 0x3b, 0x5c, 0x5c, 0xe6, 0x70, 0x39, 0x5f, 0x50, + 0x32, 0x98, 0x44, 0x85, 0x5c, 0x10, 0x51, 0x43, 0xd0, 0x88, 0x40, 0x15, 0x44, 0x9d, 0x15, 0x69, + 0xc2, 0xe2, 0xba, 0xf3, 0x58, 0xc9, 0x2b, 0xaa, 0x48, 0x36, 0x41, 0xa9, 0xc4, 0x5c, 0xef, 0x4c, + 0x2a, 0xe3, 0x9b, 0xc6, 0x03, 0x84, 0x7c, 0x20, 0x27, 0xf2, 0xcb, 0x70, 0x51, 0x7c, 0x56, 0x15, + 0xd3, 0x73, 0x79, 0xfe, 0x71, 0xfd, 0xc8, 0xc1, 0x18, 0xcf, 0xf9, 0xb3, 0x69, 0x51, 0xd9, 0x61, + 0x4d, 0xc9, 0xc7, 0x0e, 0x38, 0x23, 0x6b, 0x50, 0x0d, 0xe4, 0x7b, 0x30, 0xc3, 0xdd, 0xa5, 0x2b, + 0x5e, 0x10, 0xe2, 0x96, 0x73, 0x61, 0x40, 0x9d, 0x57, 0x53, 0xeb, 0x2c, 0x72, 0x1f, 0x2c, 0x0f, + 0xf6, 0x43, 0x8f, 0x71, 0x82, 0x1f, 0x79, 0x0f, 0xa6, 0xb6, 0xdc, 0x4e, 0x9d, 0x6f, 0xd7, 0xb6, + 0x16, 0xcf, 0xc7, 0x4b, 0x55, 0xd7, 0xed, 0xd8, 0x72, 0xb7, 0xd7, 0x8d, 0x34, 0x8b, 0x8a, 0x4d, + 0xf6, 0x60, 0xaa, 0x5e, 0x5f, 0xb9, 0xeb, 0xb2, 0xb5, 0xb2, 0x7b, 0xbc, 0x78, 0x61, 0x40, 0xdb, + 0x5e, 0x4d, 0x6d, 0xdb, 0x74, 0x10, 0x1c, 0x61, 0x2a, 0x6d, 0xbb, 0xe1, 0x75, 0x8f, 0x2d, 0x95, + 0x53, 0x4a, 0x3c, 0xce, 0xc5, 0x67, 0x1b, 0x8f, 0x63, 0xfe, 0x17, 0x99, 0xc4, 0x8c, 0x22, 0xab, + 0x30, 0x21, 0x86, 0x41, 0xd8, 0x25, 0xfd, 0x1f, 0xf2, 0x52, 0xea, 0x87, 0x4c, 0x88, 0x81, 0xb5, + 0x24, 0x3d, 0x79, 0xc4, 0x58, 0x1d, 0x38, 0xbd, 0x96, 0xbc, 0x38, 0xfe, 0x1d, 0x3e, 0x61, 0x10, + 0xa4, 0xa9, 0x86, 0xea, 0xd9, 0xa3, 0xfc, 0xf4, 0x20, 0x52, 0xd4, 0x11, 0xb2, 0x36, 0xf2, 0x80, + 0xe7, 0xa3, 0xc9, 0x46, 0x51, 0x5f, 0x7a, 0xf2, 0x99, 0x67, 0x56, 0x21, 0xab, 0xc5, 0xfc, 0xc7, + 0x06, 0x4c, 0x6b, 0x53, 0x92, 0xdc, 0x51, 0xe2, 0x20, 0xe3, 0x80, 0x77, 0x0d, 0x27, 0xf5, 0xbd, + 0xde, 0x3b, 0x22, 0x18, 0x26, 0x33, 0x98, 0x2e, 0x35, 0xed, 0xf8, 0x50, 0x7f, 0x40, 0x9c, 0xdf, + 0x2e, 0x37, 0x20, 0xbf, 0xdd, 0x3f, 0x9d, 0x81, 0x19, 0xdd, 0xd0, 0x63, 0x3b, 0x2f, 0x74, 0x29, + 0x4a, 0x7f, 0x17, 0xcf, 0xd8, 0x88, 0x10, 0xed, 0xf1, 0x5b, 0x84, 0x90, 0xd7, 0x00, 0xa2, 0x00, + 0x15, 0xe9, 0xd2, 0x12, 0x4b, 0x85, 0x52, 0x40, 0xbe, 0x0b, 0xb0, 0xe1, 0x35, 0x69, 0x94, 0x53, + 0x74, 0x88, 0x5b, 0xfd, 0xf5, 0xbe, 0x5c, 0x0d, 0xe7, 0x3b, 0x5e, 0x93, 0xf6, 0x27, 0x66, 0x50, + 0x38, 0x92, 0xaf, 0xc3, 0x98, 0xd5, 0x6b, 0x51, 0xe9, 0xc0, 0x99, 0x92, 0x93, 0xa4, 0xd7, 0x52, + 0x5e, 0xd0, 0xf2, 0x7b, 0xc9, 0xd3, 0x54, 0x06, 0x20, 0x1f, 0xf1, 0x1c, 0x0e, 0xf8, 0x80, 0x86, + 0x4c, 0x91, 0x85, 0xce, 0x29, 0x45, 0x65, 0xe2, 0x13, 0x07, 0x7d, 0x39, 0x1a, 0x38, 0x09, 0xd9, + 0x84, 0x09, 0xb1, 0x8c, 0x8a, 0xd3, 0xca, 0x97, 0xd3, 0xfc, 0xe4, 0x8a, 0x2d, 0x2d, 0x92, 0x42, + 0x22, 0x58, 0x77, 0x5d, 0x73, 0xe7, 0xda, 0xfb, 0x30, 0xc9, 0xd8, 0xf3, 0x27, 0xa1, 0x26, 0x62, + 0x57, 0x9e, 0xd2, 0xa0, 0xe4, 0xab, 0x50, 0x31, 0x01, 0xf9, 0x16, 0x66, 0x89, 0x15, 0x5d, 0x3d, + 0xf4, 0xb8, 0xe5, 0x6a, 0x5f, 0x57, 0x2f, 0x38, 0xdd, 0x6e, 0x4a, 0xd6, 0xef, 0x88, 0x1f, 0x39, + 0x8c, 0x6e, 0x29, 0x8f, 0x92, 0x77, 0xe3, 0x7a, 0x5f, 0x05, 0x8b, 0xf2, 0xe2, 0x6d, 0x7f, 0x6e, + 0x58, 0x8d, 0x2f, 0xe9, 0x42, 0x31, 0x5e, 0x8d, 0x44, 0x5d, 0x30, 0xac, 0xae, 0xb7, 0xfb, 0xea, + 0x52, 0x07, 0xb0, 0xaf, 0xba, 0x3e, 0xee, 0xa4, 0x19, 0x3f, 0x79, 0x27, 0xea, 0x9b, 0x1a, 0x56, + 0xdf, 0x6b, 0x7d, 0xf5, 0xcd, 0x37, 0xf7, 0xfb, 0xeb, 0x49, 0xf0, 0x24, 0xef, 0xc3, 0xb4, 0x84, + 0xe0, 0xfc, 0x10, 0x19, 0xbc, 0xf9, 0x63, 0x8d, 0xfb, 0x18, 0x7d, 0xac, 0x67, 0x2e, 0x55, 0x91, + 0x55, 0x6a, 0x2e, 0x1d, 0xd3, 0x1a, 0x75, 0x52, 0x2a, 0x74, 0x64, 0xf2, 0x29, 0x4c, 0xad, 0xb6, + 0xd9, 0x87, 0x78, 0x1d, 0x27, 0xa4, 0x68, 0xb0, 0xc5, 0x47, 0x47, 0x4a, 0x89, 0x22, 0xaa, 0xfc, + 0xdd, 0x8d, 0xb8, 0x48, 0x35, 0x6a, 0x15, 0x0a, 0xd6, 0x79, 0xdc, 0xa9, 0x2a, 0x64, 0x38, 0x10, + 0xe6, 0xd9, 0x4b, 0x29, 0xc7, 0x37, 0x0a, 0x7b, 0xb4, 0x77, 0xb8, 0xaf, 0xd6, 0x16, 0x13, 0x22, + 0xd0, 0x97, 0x2c, 0x95, 0x27, 0xf9, 0x00, 0xa6, 0x44, 0x4a, 0xa2, 0x92, 0xb5, 0x11, 0x2c, 0x16, + 0xe3, 0xd7, 0xd2, 0x64, 0xf6, 0x22, 0xdb, 0xf1, 0x13, 0x67, 0xf8, 0x31, 0x3e, 0xf9, 0x26, 0x2c, + 0xec, 0xb9, 0x9d, 0xa6, 0xf7, 0x28, 0x10, 0xcb, 0x94, 0x50, 0x74, 0x73, 0x71, 0x80, 0xe3, 0x23, + 0x5e, 0x6e, 0x4b, 0x4b, 0xa5, 0x4f, 0xf1, 0xa5, 0x72, 0x20, 0xbf, 0xd2, 0xc7, 0x99, 0x4b, 0x10, + 0x19, 0x26, 0x41, 0xcb, 0x7d, 0x12, 0xd4, 0x5f, 0x7d, 0x52, 0x9c, 0x52, 0xab, 0x21, 0x1e, 0x10, + 0xdd, 0x2e, 0xff, 0xd8, 0x73, 0x3b, 0x8b, 0xf3, 0xda, 0xcb, 0xe6, 0xd1, 0x2a, 0x86, 0x78, 0xfc, + 0x95, 0x10, 0xf9, 0x4c, 0x91, 0x6e, 0x36, 0x7c, 0xdf, 0xd3, 0x9c, 0x6c, 0x29, 0xac, 0xc9, 0xa7, + 0x50, 0x60, 0xff, 0x47, 0x5b, 0xa0, 0x05, 0xed, 0xc0, 0x5f, 0xc1, 0x14, 0xf5, 0xe0, 0x18, 0x61, + 0xce, 0xa4, 0x94, 0xdd, 0x91, 0xc6, 0x8a, 0xbc, 0x0b, 0xc0, 0x4c, 0x33, 0xa1, 0x8e, 0xcf, 0xc7, + 0x89, 0xad, 0xd0, 0x82, 0xeb, 0x57, 0xc4, 0x31, 0x32, 0xdb, 0x97, 0xb1, 0x5f, 0xf5, 0x5e, 0xd3, + 0x63, 0x73, 0xe3, 0x02, 0xd2, 0xe2, 0xbe, 0x0c, 0x69, 0x03, 0x0e, 0x57, 0xa5, 0x43, 0x41, 0x27, + 0x2b, 0x30, 0x8b, 0x8f, 0xb1, 0xac, 0x36, 0x69, 0x27, 0xc4, 0xc3, 0x8e, 0xc5, 0x8b, 0xca, 0x31, + 0x0a, 0x2b, 0xb2, 0xdd, 0xa8, 0x4c, 0x8d, 0x40, 0x4f, 0x90, 0x99, 0x7f, 0x66, 0xc0, 0x42, 0x5a, + 0x77, 0x9f, 0x92, 0x8d, 0xd6, 0x4c, 0x44, 0x2f, 0xa1, 0x8b, 0x91, 0x47, 0x2f, 0x45, 0x31, 0x4b, + 0x4b, 0x30, 0x76, 0xdf, 0xed, 0x34, 0xe5, 0x09, 0x0f, 0xae, 0xe8, 0x0f, 0x18, 0xc0, 0xe2, 0x70, + 0x86, 0xc0, 0xef, 0x32, 0xb1, 0x25, 0x7f, 0x8c, 0x23, 0xe0, 0xd5, 0x25, 0x8b, 0xc3, 0x19, 0x02, + 0xb3, 0x1c, 0xe4, 0x4a, 0x87, 0x08, 0xcc, 0xa0, 0x08, 0x2c, 0x0e, 0x27, 0x57, 0x61, 0x62, 0xb3, + 0xb3, 0x46, 0x9d, 0x87, 0xf2, 0x29, 0x15, 0x74, 0x89, 0x7a, 0x1d, 0xbb, 0xc5, 0x60, 0x96, 0x2c, + 0x34, 0x7f, 0x6c, 0xc0, 0x5c, 0xdf, 0x48, 0x9f, 0x9e, 0x70, 0x77, 0x78, 0x9c, 0xc6, 0x28, 0xdf, + 0xc7, 0x9b, 0x9f, 0x4b, 0x6f, 0xbe, 0xf9, 0x07, 0x39, 0xb8, 0x38, 0x60, 0xe1, 0x8d, 0x63, 0xac, + 0x8c, 0x53, 0x63, 0xac, 0xbe, 0xcd, 0x16, 0x3a, 0xc7, 0x6d, 0x07, 0xdb, 0x5e, 0xdc, 0xe2, 0xf8, + 0x38, 0x1a, 0xcb, 0x64, 0x3e, 0xcc, 0x57, 0x84, 0x85, 0x71, 0xa9, 0x81, 0x14, 0x76, 0xe8, 0xf5, + 0x1d, 0x66, 0xe9, 0xcc, 0xfa, 0xa2, 0x9c, 0xb2, 0x7f, 0x49, 0xa2, 0x9c, 0xf4, 0xd8, 0x82, 0xdc, + 0x33, 0x8d, 0x2d, 0x48, 0x3f, 0xbd, 0x1b, 0x7b, 0x9a, 0x53, 0xd0, 0x0a, 0x4c, 0xd7, 0xa9, 0xe3, + 0x37, 0x8e, 0x4a, 0x01, 0x1f, 0x24, 0xfe, 0xf0, 0x80, 0x48, 0x7a, 0xc3, 0x0a, 0x6c, 0x27, 0xe8, + 0x1f, 0x0b, 0x8d, 0xc6, 0xfc, 0x71, 0x46, 0x0f, 0xce, 0xfa, 0xcb, 0x28, 0x2f, 0x6f, 0xc0, 0xd8, + 0xde, 0x11, 0xf5, 0xa5, 0x9d, 0x8f, 0x0d, 0x79, 0xc4, 0x00, 0x6a, 0x43, 0x10, 0x83, 0xdc, 0x85, + 0x99, 0x2d, 0xde, 0x7f, 0xb2, 0x53, 0x72, 0xb1, 0x16, 0xeb, 0x8a, 0xb5, 0x36, 0xa5, 0x57, 0x12, + 0x54, 0xe6, 0x2f, 0x43, 0x41, 0x6d, 0x34, 0x2a, 0x16, 0xf6, 0x5b, 0xcc, 0x6c, 0xae, 0x58, 0x18, + 0xc0, 0xe2, 0xf0, 0x53, 0x93, 0x69, 0xc7, 0xbd, 0x99, 0x3d, 0xad, 0x37, 0x59, 0xe5, 0x28, 0xb7, + 0x4a, 0xe5, 0xf8, 0x5b, 0xad, 0x3c, 0x64, 0x00, 0x8b, 0xc3, 0x9f, 0x69, 0xe5, 0xff, 0xa5, 0x21, + 0x92, 0x2a, 0xbd, 0x03, 0x93, 0xf1, 0x91, 0x7a, 0x9c, 0xb2, 0x70, 0x5e, 0x1e, 0x0f, 0x05, 0x7a, + 0x88, 0x9e, 0x00, 0xb2, 0xaa, 0x76, 0xa9, 0xbf, 0xaf, 0x45, 0x72, 0x3e, 0x64, 0x00, 0xb5, 0x2a, + 0xc4, 0x38, 0xcb, 0xb8, 0xde, 0x84, 0x89, 0x92, 0x70, 0xed, 0xf0, 0x01, 0xe5, 0xd1, 0xaa, 0x7d, + 0x7e, 0x1c, 0x89, 0x65, 0xfe, 0xae, 0x01, 0xe7, 0x53, 0x8d, 0x3a, 0x56, 0x2b, 0xb7, 0x1e, 0x15, + 0xb1, 0x4e, 0x9a, 0x8e, 0x1c, 0xe3, 0x2c, 0x51, 0xa9, 0xa3, 0x7f, 0x8b, 0xf9, 0x0a, 0x4c, 0x46, + 0x2e, 0x05, 0xb2, 0x20, 0x87, 0x0e, 0x0f, 0x09, 0xe4, 0xce, 0xf4, 0x2f, 0x0c, 0x18, 0x67, 0x4d, + 0x78, 0x6e, 0xef, 0x5c, 0xa6, 0x1f, 0x19, 0xb1, 0x4f, 0x1a, 0xe9, 0xa6, 0xe5, 0xef, 0x8d, 0x03, + 0xc4, 0xc8, 0x64, 0x1f, 0x66, 0x36, 0x57, 0xab, 0x15, 0xc5, 0x36, 0xd1, 0x93, 0x4e, 0x45, 0x09, + 0xde, 0x39, 0xc2, 0x71, 0xac, 0x63, 0x3c, 0xb7, 0xd9, 0x48, 0xb7, 0x5b, 0x12, 0x1c, 0x59, 0x1d, + 0xf5, 0xd2, 0xfa, 0x9a, 0x52, 0x47, 0x66, 0xc4, 0x3a, 0x02, 0xa7, 0xdd, 0x1a, 0x50, 0x87, 0xce, + 0x91, 0x1c, 0x41, 0xf1, 0x1e, 0xae, 0x62, 0x4a, 0x2d, 0xd9, 0xe1, 0xb5, 0xbc, 0x2a, 0x6a, 0x79, + 0x81, 0x2f, 0x7f, 0xe9, 0xf5, 0xf4, 0x71, 0x8d, 0x25, 0x37, 0x77, 0xaa, 0xe4, 0xfe, 0x75, 0x03, + 0xc6, 0xf9, 0x32, 0x19, 0x3d, 0xba, 0x9e, 0xba, 0x10, 0xef, 0x3d, 0x9b, 0x85, 0xb8, 0x88, 0x9a, + 0x4b, 0xf3, 0xa6, 0xf0, 0x32, 0x52, 0x4d, 0xbc, 0xe0, 0x2e, 0xcf, 0x05, 0x71, 0x97, 0xc1, 0x4b, + 0xe2, 0xd8, 0x5e, 0xfe, 0x78, 0xbb, 0xca, 0x85, 0x63, 0x90, 0xd5, 0x38, 0xac, 0x74, 0xe2, 0xd4, + 0xb0, 0x52, 0x19, 0x8a, 0x3b, 0x21, 0xc2, 0x4a, 0xf5, 0x60, 0xd2, 0x35, 0x98, 0x14, 0xc1, 0xaa, + 0x65, 0xf9, 0x98, 0xb0, 0xf4, 0x09, 0x46, 0x70, 0xe5, 0xc9, 0x30, 0x0e, 0xb2, 0xf7, 0xb5, 0x6c, + 0xf5, 0x11, 0x22, 0xd9, 0x84, 0xc9, 0xf8, 0x32, 0xa9, 0x9e, 0x48, 0x21, 0x82, 0x8b, 0xdb, 0x1c, + 0x32, 0xe2, 0x2d, 0xe5, 0xee, 0x68, 0xcc, 0xc3, 0xfc, 0xa1, 0x01, 0xc5, 0xa4, 0xbc, 0xe0, 0x63, + 0xa2, 0xf2, 0xce, 0x6e, 0x14, 0x64, 0xc6, 0x1f, 0x13, 0x8d, 0x2e, 0xf9, 0xea, 0x8f, 0x58, 0x2a, + 0xe8, 0x64, 0x19, 0xf2, 0x6c, 0xda, 0x75, 0x12, 0xaf, 0x89, 0xf6, 0x04, 0x4c, 0x0d, 0x56, 0x90, + 0x78, 0xca, 0xac, 0xfd, 0x27, 0x59, 0x98, 0x52, 0x06, 0x8b, 0xbc, 0x01, 0xf9, 0xd5, 0x60, 0xcd, + 0x6b, 0x3c, 0xa0, 0x4d, 0x71, 0x06, 0x3a, 0xfd, 0xe4, 0x64, 0x69, 0xd2, 0x0d, 0xec, 0x16, 0x02, + 0xad, 0xa8, 0x98, 0x94, 0x61, 0x9a, 0xff, 0x25, 0x93, 0x79, 0x64, 0xe2, 0xf3, 0x1b, 0x8e, 0x2c, + 0xd3, 0x78, 0xa8, 0x66, 0x82, 0x46, 0x42, 0xbe, 0x03, 0xc0, 0x01, 0x6c, 0x7c, 0x47, 0xb8, 0xab, + 0x22, 0x27, 0xf0, 0x79, 0x51, 0x41, 0xe8, 0xaa, 0x5f, 0x88, 0xa2, 0xa0, 0x30, 0x24, 0xdf, 0xe3, + 0x37, 0x6b, 0xa5, 0x70, 0x9d, 0x1e, 0x08, 0x6d, 0xca, 0xa8, 0x29, 0xc6, 0xdf, 0x4e, 0x0f, 0x5c, + 0x56, 0x59, 0x92, 0x1f, 0x19, 0x70, 0xd9, 0xa2, 0x0d, 0xef, 0x21, 0xf5, 0x8f, 0x4b, 0x21, 0x62, + 0xa9, 0x35, 0x9e, 0x1e, 0x25, 0x7d, 0x5b, 0xd4, 0xf8, 0xba, 0x2f, 0xb8, 0xe0, 0xc5, 0xcc, 0x76, + 0x37, 0xb4, 0x87, 0x34, 0x61, 0x48, 0x95, 0xe6, 0xff, 0x68, 0x28, 0x53, 0x80, 0x6c, 0x60, 0x82, + 0x48, 0x2e, 0x2c, 0xc2, 0x47, 0x1e, 0x59, 0x78, 0x12, 0x6e, 0xd1, 0x83, 0xf2, 0x0b, 0xe2, 0xb8, + 0x72, 0x3e, 0x12, 0xb9, 0x44, 0xe2, 0x48, 0x0e, 0x24, 0xdf, 0x80, 0x1c, 0x0e, 0xd5, 0xe9, 0xa9, + 0xbf, 0xe5, 0x52, 0x93, 0x63, 0x63, 0x84, 0xad, 0x46, 0x4a, 0xf2, 0x65, 0x11, 0x88, 0x97, 0xd5, + 0x9e, 0x9f, 0x61, 0x20, 0xd6, 0x8e, 0x68, 0x8d, 0x89, 0x63, 0xe5, 0x15, 0x69, 0xfd, 0xed, 0x0c, + 0x14, 0x93, 0x13, 0x8f, 0x7c, 0x04, 0x05, 0x79, 0x31, 0x78, 0xc5, 0x11, 0x39, 0x42, 0x0a, 0x22, + 0x47, 0x87, 0x80, 0xdb, 0x47, 0x8e, 0x96, 0xd0, 0x5d, 0x23, 0x60, 0x0b, 0xf2, 0xb6, 0xb8, 0x82, + 0xa5, 0x4c, 0xa0, 0xd0, 0x0b, 0xbb, 0x89, 0xd7, 0x28, 0x24, 0x1a, 0x79, 0x07, 0xb2, 0xfc, 0x46, + 0xbc, 0x9a, 0xe5, 0x79, 0xfd, 0x6e, 0x89, 0xdf, 0x16, 0xe5, 0x11, 0x32, 0xfa, 0x59, 0x06, 0xc3, + 0x27, 0x6b, 0xca, 0x5d, 0xeb, 0x71, 0x2d, 0xdd, 0xa0, 0x04, 0x47, 0x1f, 0x77, 0xfa, 0xa5, 0x6b, + 0x35, 0xdb, 0xbd, 0xf9, 0x1f, 0x64, 0x61, 0x32, 0xaa, 0x9f, 0x10, 0x40, 0x7b, 0x43, 0x84, 0xba, + 0xe0, 0xdf, 0xe4, 0x12, 0xe4, 0xa5, 0x89, 0x21, 0xc2, 0x5d, 0x26, 0x02, 0x61, 0x5e, 0x2c, 0x82, + 0xb4, 0x25, 0xb8, 0x79, 0x61, 0xc9, 0x9f, 0xe4, 0x16, 0x44, 0x86, 0xc2, 0x20, 0x8b, 0x22, 0xc7, + 0x06, 0xcc, 0x8a, 0xd0, 0xc8, 0x0c, 0x64, 0x5c, 0x7e, 0xbd, 0x66, 0xd2, 0xca, 0xb8, 0x4d, 0xf2, + 0x11, 0xe4, 0x9d, 0x66, 0x93, 0x36, 0x6d, 0x47, 0x3a, 0x9b, 0x87, 0x09, 0x4d, 0x9e, 0x71, 0xe3, + 0x1a, 0x1d, 0xa9, 0x4a, 0x21, 0x29, 0xc1, 0x64, 0xcb, 0xe1, 0x47, 0x61, 0xcd, 0x11, 0x96, 0x87, + 0x98, 0x43, 0x9e, 0x91, 0xed, 0x04, 0xb4, 0x49, 0x5e, 0x87, 0x1c, 0x1b, 0x4d, 0xb1, 0x1e, 0x44, + 0xb9, 0xfb, 0x37, 0xb7, 0xb7, 0x78, 0x87, 0xad, 0x9c, 0xb3, 0x10, 0x81, 0x7c, 0x09, 0xb2, 0xbd, + 0xe5, 0x03, 0xa1, 0xe9, 0x8b, 0x71, 0xb2, 0x84, 0x08, 0x8d, 0x15, 0x93, 0xdb, 0x90, 0x7f, 0xa4, + 0x5f, 0x99, 0x3f, 0x9f, 0x18, 0xc6, 0x08, 0x3f, 0x42, 0x2c, 0xe7, 0x61, 0x9c, 0x5f, 0xbc, 0x36, + 0x5f, 0x06, 0x88, 0xab, 0xee, 0x8f, 0x4a, 0x32, 0xbf, 0x03, 0x93, 0x51, 0x95, 0xe4, 0x25, 0x80, + 0x07, 0xf4, 0xd8, 0x3e, 0x72, 0x3a, 0x4d, 0xf1, 0x1c, 0x6e, 0xc1, 0x9a, 0x7c, 0x40, 0x8f, 0x57, + 0x10, 0x40, 0x2e, 0xc2, 0x44, 0x97, 0x8d, 0xaa, 0x7c, 0x4b, 0xc5, 0x1a, 0xef, 0xf6, 0xf6, 0x99, + 0x84, 0x2e, 0xc2, 0x04, 0x3a, 0x51, 0xc4, 0x44, 0x9b, 0xb6, 0xe4, 0x4f, 0xf3, 0xef, 0x66, 0x30, + 0x73, 0x92, 0xd2, 0x4e, 0xf2, 0x2a, 0x4c, 0x37, 0x7c, 0x8a, 0xcb, 0x11, 0x3e, 0xc4, 0x23, 0xea, + 0x29, 0xc4, 0xc0, 0xd5, 0x26, 0xb9, 0x0a, 0xb3, 0xf1, 0xe3, 0x2e, 0x76, 0x63, 0x5f, 0x24, 0xc5, + 0x28, 0x58, 0xd3, 0x5d, 0xf9, 0xba, 0x4b, 0x65, 0x1f, 0xaf, 0x85, 0x15, 0xd5, 0x4b, 0xd7, 0xa1, + 0x7c, 0xa8, 0x65, 0xd2, 0x9a, 0x55, 0xe0, 0x78, 0x86, 0x74, 0x01, 0xc6, 0x1d, 0xe7, 0xb0, 0xe7, + 0xf2, 0x2b, 0x2a, 0x05, 0x4b, 0xfc, 0x22, 0x6f, 0xc2, 0x5c, 0xe0, 0x1e, 0x76, 0x9c, 0xb0, 0xe7, + 0x8b, 0xd4, 0x55, 0xd4, 0x47, 0x91, 0x9a, 0xb6, 0x8a, 0x51, 0x41, 0x85, 0xc3, 0xc9, 0xdb, 0x40, + 0xd4, 0xfa, 0xbc, 0xfd, 0xef, 0xd3, 0x06, 0x17, 0xb5, 0x82, 0x35, 0xa7, 0x94, 0x6c, 0x62, 0x01, + 0x79, 0x05, 0x0a, 0x3e, 0x0d, 0xd0, 0x24, 0xc3, 0x6e, 0xc3, 0xc4, 0x82, 0xd6, 0x94, 0x84, 0xdd, + 0xa7, 0xc7, 0x66, 0x19, 0xe6, 0xfa, 0xe6, 0x23, 0x79, 0x9b, 0x5b, 0xf7, 0x62, 0x7d, 0x2e, 0xf0, + 0xcd, 0x0c, 0xbe, 0x70, 0xae, 0x2d, 0xcd, 0x02, 0xc9, 0xec, 0x40, 0x41, 0xd5, 0xaf, 0xa7, 0xa4, + 0x1b, 0xb9, 0x80, 0xd1, 0xe5, 0x5c, 0xf9, 0x8c, 0x3f, 0x39, 0x59, 0xca, 0xb8, 0x4d, 0x8c, 0x29, + 0xbf, 0x06, 0x79, 0x69, 0x25, 0xa8, 0x8f, 0xa7, 0x0a, 0x83, 0xf2, 0xd8, 0x8a, 0x4a, 0xcd, 0xd7, + 0x61, 0x42, 0xa8, 0xd0, 0xe1, 0x0e, 0x2d, 0xf3, 0xd7, 0x32, 0x30, 0x6b, 0x51, 0x36, 0xc1, 0xc5, + 0xb3, 0xa4, 0x5f, 0xb0, 0x67, 0x6e, 0xb4, 0x6f, 0x1b, 0x92, 0xdd, 0xe7, 0xf7, 0x0d, 0x98, 0x4f, + 0xc1, 0xfd, 0x4c, 0x39, 0x5b, 0xef, 0xc0, 0x64, 0xd5, 0x75, 0x5a, 0xa5, 0x66, 0x33, 0x8a, 0x92, + 0x47, 0x6b, 0xb0, 0xc9, 0xa6, 0x93, 0xc3, 0xa0, 0xea, 0x62, 0x1a, 0xa1, 0x92, 0xeb, 0x42, 0x28, + 0xe2, 0x47, 0x0d, 0xe4, 0x43, 0x3a, 0xc0, 0xdb, 0x14, 0x3f, 0xa3, 0x83, 0x37, 0xab, 0x39, 0x30, + 0x8e, 0x74, 0x78, 0x6e, 0x87, 0x2e, 0xfd, 0x66, 0x75, 0xf2, 0xf3, 0x46, 0xda, 0x76, 0xfe, 0x30, + 0x03, 0x17, 0xd2, 0x09, 0x3f, 0x6b, 0xfa, 0x5d, 0x4c, 0xad, 0xa4, 0xbc, 0x55, 0x84, 0xe9, 0x77, + 0x79, 0x1e, 0x26, 0xc4, 0x8f, 0x11, 0xc8, 0x01, 0x4c, 0xaf, 0x39, 0x41, 0xb8, 0x42, 0x1d, 0x3f, + 0xdc, 0xa7, 0x4e, 0x38, 0x82, 0x05, 0xfb, 0x25, 0xf9, 0xe6, 0x24, 0x2e, 0x6a, 0x47, 0x92, 0x32, + 0x61, 0xe0, 0xe9, 0x6c, 0x23, 0x41, 0xc9, 0x8d, 0x20, 0x28, 0xbf, 0x08, 0xb3, 0x75, 0xda, 0x76, + 0xba, 0x47, 0x9e, 0x4f, 0x85, 0x0f, 0xfe, 0x06, 0x4c, 0x47, 0xa0, 0x54, 0x69, 0xd1, 0x8b, 0x35, + 0x7c, 0xa5, 0x23, 0x62, 0x55, 0xa2, 0x17, 0x9b, 0x7f, 0x2b, 0x03, 0x17, 0x4b, 0x0d, 0x71, 0xe6, + 0x22, 0x0a, 0xe4, 0xd1, 0xf0, 0xe7, 0x5c, 0x37, 0xb9, 0x09, 0x93, 0xeb, 0xce, 0xe3, 0x35, 0xea, + 0x04, 0x34, 0x10, 0xc9, 0x0f, 0xb9, 0xf9, 0xe5, 0x3c, 0xb6, 0x23, 0xb7, 0x97, 0x15, 0xe3, 0xa8, + 0x9b, 0xcd, 0xdc, 0x53, 0x6e, 0x36, 0x4d, 0x18, 0x5f, 0xf1, 0x5a, 0x4d, 0xb1, 0x38, 0x89, 0xf3, + 0x8f, 0x23, 0x84, 0x58, 0xa2, 0xc4, 0xfc, 0x33, 0x03, 0x66, 0xa2, 0x16, 0x63, 0x13, 0x3e, 0xf7, + 0x2e, 0xb9, 0x0a, 0x13, 0x58, 0x51, 0xf4, 0xe0, 0x2e, 0x2e, 0x1a, 0x2d, 0x06, 0xb2, 0xdd, 0xa6, + 0x25, 0x0b, 0xd5, 0x9e, 0x18, 0x7b, 0xba, 0x9e, 0x30, 0xff, 0x43, 0x3c, 0x5a, 0x51, 0xbf, 0x92, + 0xad, 0x44, 0x4a, 0x43, 0x8c, 0x11, 0x1b, 0x92, 0x79, 0x66, 0x43, 0x92, 0x1d, 0x38, 0x24, 0x3f, + 0xc8, 0xc0, 0x54, 0xd4, 0xd8, 0x2f, 0x58, 0x4a, 0x92, 0xe8, 0xbb, 0x46, 0xba, 0x72, 0x52, 0x57, + 0x74, 0x85, 0xb8, 0xd9, 0xf1, 0x0d, 0x18, 0x17, 0x93, 0xc9, 0x48, 0x1c, 0x91, 0x26, 0x46, 0xb7, + 0x3c, 0x23, 0x58, 0x8f, 0xe3, 0x80, 0x06, 0x96, 0xa0, 0xc3, 0x3b, 0x3d, 0x7b, 0x74, 0x5f, 0x9c, + 0xb4, 0x3d, 0xb7, 0x6b, 0x54, 0xfa, 0x9d, 0x9e, 0xf8, 0xc3, 0x46, 0x5a, 0x9d, 0xfe, 0xb5, 0x31, + 0x28, 0x26, 0x49, 0x4e, 0x4f, 0xfa, 0xb2, 0xd5, 0xdb, 0x17, 0x4f, 0x23, 0x62, 0xd2, 0x97, 0x6e, + 0x6f, 0xdf, 0x62, 0x30, 0x72, 0x15, 0x72, 0x5b, 0xbe, 0xfb, 0x10, 0xbf, 0x5a, 0xbc, 0x0c, 0xd9, + 0xf5, 0xdd, 0x87, 0x6a, 0x70, 0x3b, 0x2b, 0xc7, 0x0d, 0xed, 0x5a, 0x1d, 0xe3, 0xa4, 0xd1, 0xb0, + 0x16, 0x1b, 0xda, 0x56, 0x90, 0x4c, 0xa4, 0x26, 0xd1, 0xd8, 0x52, 0x59, 0xa6, 0x8e, 0x2f, 0x12, + 0x94, 0x08, 0x75, 0x86, 0x4b, 0xe5, 0x3e, 0x82, 0xf9, 0x13, 0x00, 0x96, 0x8a, 0x44, 0x5a, 0x40, + 0x94, 0x9f, 0x72, 0x02, 0x9f, 0xbe, 0xc7, 0x93, 0xaf, 0x2e, 0x2f, 0xa8, 0xac, 0x6d, 0x75, 0x36, + 0xa7, 0xf0, 0x7d, 0x96, 0x3e, 0xc2, 0x2d, 0x71, 0x5d, 0x15, 0x1d, 0x19, 0xf9, 0x53, 0x99, 0xc9, + 0x8b, 0x04, 0xc0, 0xaf, 0xb3, 0x46, 0xee, 0x8c, 0x98, 0x09, 0xf9, 0x10, 0xa6, 0xd4, 0xe8, 0x77, + 0x1e, 0xa3, 0xfd, 0x22, 0xbf, 0x26, 0x3a, 0x20, 0x0b, 0xad, 0x4a, 0x40, 0xf6, 0xe1, 0x62, 0xc5, + 0xeb, 0x04, 0xbd, 0x36, 0x6d, 0x6a, 0x27, 0xc1, 0xab, 0x55, 0xdc, 0x60, 0x4e, 0xf2, 0xa8, 0xd8, + 0x86, 0x40, 0x11, 0xc1, 0xd6, 0x32, 0xfe, 0x44, 0xdf, 0x80, 0x0c, 0x62, 0x64, 0x7e, 0x59, 0x95, + 0x44, 0x61, 0x18, 0x0c, 0x95, 0x44, 0xf3, 0x77, 0x70, 0xab, 0xd0, 0xf6, 0x42, 0x2a, 0x2c, 0xa4, + 0xe7, 0x56, 0x57, 0xc6, 0x6e, 0xea, 0x31, 0x2d, 0x84, 0x48, 0xfb, 0x3a, 0x8e, 0xb1, 0x7b, 0x3b, + 0x56, 0x6c, 0xdc, 0x61, 0x2d, 0xdd, 0xd4, 0xca, 0xb4, 0xfe, 0xfb, 0x06, 0x9c, 0x4f, 0xa5, 0x25, + 0x37, 0x00, 0x62, 0x3b, 0x54, 0xf4, 0x12, 0x7f, 0xbf, 0x21, 0x82, 0x5a, 0x0a, 0x06, 0xf9, 0x76, + 0xd2, 0x82, 0x3c, 0x7d, 0x01, 0x94, 0x8f, 0x59, 0xce, 0xe8, 0x16, 0x64, 0x8a, 0xdd, 0x68, 0xfe, + 0x7e, 0x16, 0xe6, 0x94, 0x10, 0x69, 0xde, 0xd6, 0x53, 0x22, 0x1e, 0x1e, 0x24, 0x1e, 0xc9, 0xce, + 0x68, 0xcf, 0xbf, 0xf4, 0x71, 0x4b, 0x79, 0x32, 0x1b, 0x5d, 0x6f, 0xe2, 0xe9, 0x90, 0x53, 0x5e, + 0xce, 0x0e, 0xd2, 0x5f, 0x6f, 0x7f, 0x73, 0x60, 0x6d, 0xcf, 0xe0, 0x15, 0xf7, 0xbf, 0xc4, 0xaf, + 0x50, 0xff, 0x4e, 0x06, 0xe6, 0xfb, 0xbe, 0xf9, 0xb9, 0x9d, 0x75, 0xdf, 0xd0, 0x56, 0xd0, 0x97, + 0x07, 0x8d, 0xe9, 0x48, 0x96, 0xca, 0x4f, 0xb3, 0x70, 0x71, 0x00, 0x25, 0x39, 0x4e, 0x0a, 0x11, + 0xb7, 0x5c, 0x6e, 0x0d, 0xaf, 0xf0, 0x59, 0x88, 0x12, 0xf9, 0x1a, 0x0f, 0xc5, 0x6d, 0x60, 0x5a, + 0x60, 0xb1, 0x66, 0x47, 0xef, 0xa4, 0x71, 0x68, 0x32, 0x06, 0x97, 0x43, 0xc9, 0x47, 0x30, 0x86, + 0x51, 0x58, 0x89, 0x7b, 0x5d, 0x0c, 0x03, 0xe1, 0xca, 0x25, 0x38, 0xf6, 0x53, 0xbb, 0x04, 0xc7, + 0x00, 0xe4, 0xab, 0x90, 0x2d, 0xed, 0xd5, 0xc5, 0xb8, 0xcc, 0xa8, 0xe4, 0x7b, 0xf5, 0x38, 0x85, + 0x85, 0xa3, 0xe5, 0x9a, 0x60, 0x14, 0x8c, 0xf0, 0x5e, 0x65, 0x4b, 0x8c, 0x8a, 0x4a, 0x78, 0xaf, + 0xb2, 0x15, 0x13, 0x1e, 0x36, 0xd4, 0x47, 0x72, 0x19, 0xc5, 0xe7, 0x27, 0xf6, 0xff, 0x7a, 0x86, + 0xc7, 0x0f, 0xf3, 0x0f, 0xfb, 0x08, 0x0a, 0x32, 0x34, 0x41, 0x51, 0x53, 0xa8, 0x54, 0xa2, 0xbb, + 0xec, 0x89, 0x93, 0x2d, 0x8d, 0x40, 0x26, 0x83, 0x61, 0xbf, 0x31, 0xce, 0x4e, 0x3d, 0x98, 0x8a, + 0x38, 0x60, 0x5c, 0x5e, 0x32, 0x19, 0x4c, 0x44, 0x42, 0x6e, 0x43, 0x7e, 0x9b, 0x76, 0x9c, 0x4e, + 0x18, 0x6d, 0xa2, 0x30, 0x90, 0x22, 0x44, 0x98, 0xbe, 0xe2, 0x46, 0x88, 0xf8, 0xa6, 0x55, 0x6f, + 0x3f, 0x7a, 0xee, 0x7e, 0xb5, 0xaa, 0x3c, 0xc0, 0x78, 0x29, 0x50, 0x4a, 0x12, 0x8f, 0x82, 0xe9, + 0x44, 0xe6, 0xef, 0x18, 0x30, 0x21, 0x06, 0x52, 0x79, 0x89, 0xc6, 0x18, 0xe1, 0x25, 0x9a, 0x3b, + 0x30, 0x29, 0x1e, 0xc6, 0xd2, 0x9f, 0x03, 0x13, 0xef, 0x68, 0x25, 0x9e, 0x03, 0x8b, 0x50, 0xa3, + 0x74, 0x65, 0xd9, 0xe1, 0xe9, 0xca, 0xcc, 0xbf, 0x23, 0x5a, 0x76, 0xaf, 0xb2, 0x45, 0x96, 0x21, + 0xbf, 0xe6, 0x35, 0x1c, 0x65, 0x9d, 0x43, 0xb5, 0xd3, 0x12, 0x30, 0xb5, 0x83, 0x24, 0x9e, 0xfe, + 0xcc, 0x59, 0x66, 0xf4, 0x67, 0xce, 0x46, 0x6d, 0x1f, 0x4d, 0x51, 0x12, 0xbb, 0xb7, 0xf1, 0x29, + 0xd4, 0x8f, 0x81, 0xf4, 0x15, 0x49, 0x4d, 0x71, 0x79, 0x90, 0xa6, 0xd8, 0xbd, 0x6d, 0xa5, 0x50, + 0xa1, 0x2f, 0x2e, 0x06, 0xf3, 0x07, 0x03, 0xbf, 0x60, 0x59, 0x0e, 0x93, 0x9f, 0x37, 0x92, 0x92, + 0xfe, 0x27, 0x19, 0xb8, 0x90, 0x4e, 0xa8, 0x7e, 0x8b, 0x31, 0xe4, 0x5b, 0xae, 0x41, 0x7e, 0xc5, + 0x0b, 0x42, 0xe5, 0x30, 0x1b, 0x5d, 0x06, 0x47, 0x02, 0x66, 0x45, 0xa5, 0xe4, 0x55, 0xb6, 0xd1, + 0x0f, 0xe2, 0xe9, 0x89, 0xfc, 0x30, 0x6a, 0xd6, 0x6d, 0x5a, 0xa2, 0x48, 0x7b, 0xd2, 0x3b, 0x37, + 0xf8, 0x49, 0xef, 0x73, 0xa7, 0x3e, 0xe9, 0x5d, 0x82, 0x09, 0x31, 0xfa, 0x09, 0x77, 0x73, 0x8a, + 0xc8, 0xe8, 0xa9, 0x32, 0x24, 0x1d, 0xd3, 0x28, 0xe8, 0x38, 0x5c, 0xad, 0xca, 0xa8, 0x3f, 0xd4, + 0x28, 0xdc, 0xb1, 0xa8, 0xe7, 0xe6, 0x88, 0x10, 0xcd, 0x5f, 0xcb, 0x00, 0xec, 0xd1, 0xfd, 0xe7, + 0x3b, 0x79, 0xea, 0x57, 0x35, 0x09, 0x53, 0xce, 0xca, 0x46, 0xcf, 0x9d, 0xba, 0x89, 0x67, 0x56, + 0xa3, 0x67, 0x4e, 0x8d, 0xde, 0x93, 0xce, 0xa4, 0xbf, 0x27, 0x6d, 0xee, 0xc3, 0xc2, 0x3d, 0x1a, + 0xc6, 0x1b, 0x22, 0xe9, 0xae, 0x1c, 0xce, 0xf6, 0x2d, 0x98, 0x14, 0xf8, 0xfa, 0xe3, 0x6c, 0x32, + 0x10, 0xdd, 0x6d, 0x5a, 0x31, 0x02, 0xd3, 0x46, 0x55, 0xda, 0xa2, 0x21, 0xfd, 0x7c, 0xab, 0xa9, + 0x03, 0xe1, 0x9f, 0xc2, 0x9f, 0x19, 0x1e, 0xa9, 0x86, 0x53, 0xfb, 0x67, 0x17, 0xce, 0x47, 0x6d, + 0x7f, 0x96, 0x7c, 0x6f, 0xb2, 0x2d, 0xa5, 0xc8, 0x55, 0x11, 0x73, 0x1c, 0x72, 0x5e, 0xf5, 0x18, + 0x2e, 0x4b, 0x82, 0x3d, 0x37, 0x3a, 0xf4, 0x1f, 0x89, 0x96, 0xbc, 0x0f, 0x53, 0x0a, 0x8d, 0x48, + 0xe3, 0x83, 0x81, 0x35, 0x8f, 0xdc, 0xf0, 0xc8, 0x0e, 0x38, 0x5c, 0x0d, 0xac, 0x51, 0xd0, 0xcd, + 0x6f, 0xc1, 0x0b, 0x51, 0x88, 0x64, 0x4a, 0xd5, 0x09, 0xe6, 0xc6, 0xd9, 0x98, 0x6f, 0xc4, 0x9f, + 0xb5, 0xda, 0x89, 0xee, 0x9d, 0x49, 0xde, 0x44, 0xfd, 0x2c, 0xf1, 0x31, 0x2f, 0x2a, 0x49, 0xa5, + 0xc5, 0x96, 0x24, 0x06, 0x98, 0xef, 0x29, 0x8d, 0x4d, 0x61, 0xa8, 0x11, 0x1b, 0x49, 0xe2, 0x5f, + 0xcb, 0xc0, 0xec, 0xe6, 0x6a, 0xb5, 0x12, 0x9d, 0x58, 0x7e, 0xc1, 0x32, 0xbb, 0x6a, 0xdf, 0x36, + 0x58, 0xdf, 0x98, 0x3b, 0x30, 0x9f, 0xe8, 0x06, 0x34, 0x1d, 0x3e, 0xe4, 0xa1, 0x8c, 0x11, 0x58, + 0x9a, 0x0d, 0x17, 0xd2, 0xd8, 0xef, 0xde, 0xb6, 0x12, 0xd8, 0xe6, 0x1f, 0xe6, 0x13, 0x7c, 0x85, + 0x0a, 0x7b, 0x0b, 0x26, 0x57, 0x83, 0xa0, 0x47, 0xfd, 0x1d, 0x6b, 0x4d, 0x75, 0x15, 0xb8, 0x08, + 0xb4, 0x7b, 0x7e, 0xcb, 0x8a, 0x11, 0xc8, 0x1b, 0x90, 0x17, 0xf9, 0x11, 0xa4, 0x4e, 0xc0, 0xc8, + 0xac, 0x28, 0xbd, 0x82, 0x15, 0x15, 0x93, 0x77, 0xa0, 0xc0, 0xff, 0xe6, 0xd2, 0x26, 0x3a, 0x1c, + 0x8f, 0x45, 0x04, 0x3a, 0x97, 0x4e, 0x4b, 0x43, 0x23, 0xd7, 0x21, 0x5b, 0xaa, 0x58, 0xea, 0x9b, + 0x4c, 0x4e, 0xc3, 0xe7, 0x6f, 0xb3, 0xe9, 0x9b, 0x88, 0x8a, 0xc5, 0xac, 0x3f, 0x7c, 0x36, 0xb4, + 0x49, 0xe5, 0xd3, 0xbf, 0x28, 0x01, 0x5d, 0x01, 0x4b, 0x2c, 0x66, 0x08, 0x23, 0x37, 0x61, 0xa2, + 0xea, 0x06, 0xdd, 0x96, 0x73, 0x2c, 0xd2, 0x33, 0xf2, 0x7c, 0x6f, 0x1c, 0xa4, 0xca, 0x8c, 0xc0, + 0x22, 0x6f, 0xc0, 0x58, 0xbd, 0xe1, 0xe1, 0x53, 0xc0, 0x51, 0x44, 0x64, 0xc0, 0x00, 0x5a, 0x56, + 0x34, 0x06, 0xc0, 0xf4, 0x3b, 0x3c, 0x8b, 0xc0, 0xa4, 0x92, 0x7e, 0x27, 0x99, 0x3d, 0x40, 0xe0, + 0xf4, 0xc7, 0xbe, 0xc3, 0xb3, 0x8c, 0x7d, 0xdf, 0x87, 0x8b, 0xf7, 0xd0, 0x7b, 0xa3, 0xbf, 0x55, + 0xbb, 0x63, 0xad, 0x8a, 0xcc, 0x09, 0xe8, 0xcd, 0xe3, 0x0e, 0x1e, 0x3b, 0xf1, 0xd4, 0x6d, 0xe2, + 0xdd, 0xc5, 0x41, 0x8c, 0xc8, 0x37, 0x61, 0x21, 0xad, 0x48, 0xe4, 0x50, 0xc0, 0x9b, 0x61, 0xe9, + 0x15, 0xa8, 0x57, 0xb3, 0xd2, 0x38, 0x90, 0x35, 0x28, 0x72, 0x78, 0xa9, 0xd9, 0x76, 0x3b, 0xb5, + 0xb6, 0xe3, 0xb6, 0x30, 0xa3, 0x82, 0x48, 0x8b, 0x21, 0xb8, 0x3a, 0xac, 0xd0, 0xa6, 0xac, 0x54, + 0x0b, 0x6a, 0x4d, 0x50, 0x92, 0xdf, 0x34, 0xd8, 0x6e, 0x8e, 0x5f, 0x9f, 0xdf, 0xb1, 0xd6, 0x02, + 0x71, 0x87, 0x6f, 0xd0, 0x5b, 0x96, 0xdb, 0xcf, 0xe8, 0x2d, 0xcb, 0x82, 0x2f, 0xea, 0xc4, 0x59, + 0xa4, 0xb5, 0x00, 0x5f, 0x0d, 0x68, 0xb5, 0xbc, 0x47, 0x3b, 0x9d, 0x87, 0xd4, 0x77, 0x0f, 0x5c, + 0xda, 0xe4, 0x1f, 0x39, 0x8b, 0x1a, 0x9c, 0xbf, 0x1a, 0x80, 0x6f, 0x51, 0xf4, 0x22, 0x84, 0xbe, + 0x0f, 0x4d, 0xe5, 0xc0, 0x36, 0x9e, 0x32, 0xc4, 0x92, 0xdf, 0x3c, 0x28, 0xc6, 0x1b, 0x4f, 0x19, + 0x8f, 0x69, 0xa3, 0x18, 0xa9, 0xc2, 0xa3, 0x91, 0x88, 0x78, 0xae, 0xff, 0x3e, 0xcf, 0x35, 0x72, + 0xa9, 0x17, 0x1e, 0x49, 0x1d, 0xbe, 0x9c, 0x16, 0x26, 0xca, 0x8f, 0xb3, 0x95, 0x30, 0x51, 0x3d, + 0x38, 0x54, 0x86, 0x9d, 0x64, 0x52, 0xc3, 0x4e, 0xde, 0x82, 0x49, 0x7c, 0x42, 0x28, 0x8a, 0xc7, + 0xcb, 0x0b, 0x5f, 0x25, 0x03, 0xf2, 0xdc, 0x03, 0x31, 0x02, 0xb9, 0x09, 0x80, 0x19, 0x08, 0xf9, + 0x02, 0xaf, 0x24, 0x88, 0xc1, 0x44, 0x85, 0xe2, 0x84, 0x40, 0x41, 0x41, 0xf6, 0x75, 0xeb, 0xae, + 0x7a, 0xa4, 0xc0, 0xd9, 0x07, 0xfe, 0x81, 0x40, 0x8f, 0x11, 0xd8, 0xe7, 0x29, 0xc3, 0x24, 0x94, + 0x4a, 0xb1, 0x6f, 0x2c, 0x55, 0x24, 0x3c, 0xad, 0x97, 0xc1, 0x47, 0xa8, 0x53, 0x0a, 0xe2, 0xb4, + 0x3e, 0x0a, 0x54, 0xb2, 0x62, 0x04, 0xf2, 0x55, 0x98, 0xa8, 0x50, 0x3f, 0xdc, 0xde, 0x5e, 0x13, + 0xcf, 0x80, 0xb2, 0x7d, 0x79, 0x1e, 0x93, 0x57, 0x84, 0x61, 0xeb, 0xe7, 0x27, 0x4b, 0xd3, 0xa1, + 0xdb, 0xa6, 0x37, 0x22, 0x17, 0xbd, 0xc4, 0x26, 0x65, 0x28, 0xf2, 0x88, 0xca, 0xd8, 0x90, 0x43, + 0x35, 0x93, 0xe7, 0x4a, 0x4f, 0x24, 0x6c, 0x78, 0x44, 0xf7, 0xa3, 0xd4, 0x1d, 0x7d, 0xf8, 0xa4, + 0x26, 0xd3, 0xe4, 0xa8, 0x1f, 0x09, 0xb1, 0x67, 0x41, 0x28, 0x66, 0xed, 0x5b, 0xfb, 0x29, 0x48, + 0x09, 0xa6, 0x2b, 0x5e, 0xbb, 0xeb, 0x84, 0x2e, 0x26, 0x38, 0x3c, 0x16, 0x1a, 0x05, 0xbd, 0x23, + 0x0d, 0xb5, 0x40, 0x7f, 0x11, 0x48, 0x29, 0x20, 0x77, 0x61, 0xc6, 0xf2, 0x7a, 0x6c, 0x90, 0xe4, + 0x96, 0xa6, 0xa0, 0x3c, 0x36, 0xcf, 0x4a, 0x98, 0x8e, 0x13, 0xfb, 0x17, 0xed, 0x6e, 0xab, 0x46, + 0x45, 0x36, 0x52, 0x7c, 0xcb, 0xaa, 0xa6, 0x50, 0x13, 0x78, 0xf4, 0x31, 0x4b, 0x71, 0x4b, 0xdf, + 0x86, 0xa9, 0x7a, 0x7d, 0x73, 0x9b, 0x06, 0xe1, 0xdd, 0x96, 0xf7, 0x08, 0x15, 0x45, 0x5e, 0x24, + 0x1b, 0x0b, 0x3c, 0x3b, 0xa4, 0x41, 0x68, 0x1f, 0xb4, 0xbc, 0x47, 0x96, 0x8a, 0x45, 0xbe, 0xab, + 0x3c, 0x91, 0x84, 0x2b, 0xff, 0xec, 0xa9, 0x2b, 0x7f, 0xe2, 0xf9, 0x24, 0xb6, 0xfe, 0xa7, 0x3e, + 0x9f, 0xc4, 0xd0, 0x31, 0xb8, 0x94, 0x6d, 0xc6, 0x4a, 0xcd, 0xa6, 0x4f, 0x83, 0x40, 0xcc, 0x68, + 0xe5, 0x01, 0x38, 0x87, 0x17, 0x68, 0xc1, 0xa5, 0x0a, 0x01, 0xf9, 0x81, 0x01, 0xe7, 0xd5, 0xf8, + 0x34, 0x9c, 0x2c, 0xf8, 0xd0, 0xfe, 0x1c, 0xb6, 0xf4, 0xed, 0x1b, 0x52, 0xa3, 0xdd, 0x50, 0xd0, + 0x6e, 0x3c, 0xbc, 0x75, 0x43, 0x79, 0x98, 0xa4, 0x2e, 0x89, 0xf0, 0xad, 0xc8, 0xa5, 0x54, 0x7e, + 0xaa, 0x76, 0x72, 0x52, 0x48, 0xd1, 0xca, 0xab, 0x97, 0xd6, 0xd7, 0x62, 0x53, 0xe5, 0x8b, 0x15, + 0xf9, 0xa5, 0x7d, 0xdb, 0x90, 0xc8, 0xaf, 0x1d, 0x98, 0x4f, 0x74, 0x83, 0xb4, 0xf2, 0x34, 0x70, + 0xd2, 0xca, 0x4b, 0xd0, 0x58, 0x09, 0x6c, 0xf3, 0x1f, 0x4c, 0x24, 0xf8, 0x8a, 0xd3, 0x5e, 0x13, + 0xc6, 0xb9, 0x11, 0xa7, 0xa6, 0xd2, 0xe7, 0x26, 0x9e, 0x25, 0x4a, 0xc8, 0x25, 0xc8, 0xd6, 0xeb, + 0x9b, 0xea, 0x43, 0x1f, 0x41, 0xe0, 0x59, 0x0c, 0xc6, 0x46, 0x08, 0x0f, 0x72, 0x95, 0x7c, 0x19, + 0x4c, 0x63, 0x59, 0x08, 0x65, 0xfd, 0x2d, 0x4d, 0xaa, 0x5c, 0xdc, 0xdf, 0xc2, 0xa4, 0x8a, 0x0d, + 0xa9, 0x0a, 0x2c, 0x96, 0x82, 0x80, 0xfa, 0xfc, 0xd9, 0x3f, 0x3c, 0x1f, 0xf4, 0xc5, 0xb2, 0x2f, + 0x14, 0x33, 0x56, 0xea, 0x34, 0x02, 0x6b, 0x20, 0x22, 0xb9, 0x06, 0xf9, 0x52, 0xaf, 0xe9, 0xd2, + 0x4e, 0x43, 0xbb, 0x67, 0xeb, 0x08, 0x98, 0x15, 0x95, 0x92, 0x4f, 0xe0, 0xbc, 0x20, 0x92, 0xb6, + 0x9f, 0xe8, 0x81, 0x89, 0x78, 0xf6, 0x48, 0xb3, 0x44, 0x5a, 0x8c, 0xb6, 0xe8, 0x92, 0x74, 0x4a, + 0x52, 0x82, 0x62, 0x0d, 0x23, 0x1d, 0xab, 0x94, 0xbb, 0x4a, 0x3d, 0x5f, 0x3c, 0xb8, 0x85, 0x46, + 0x24, 0x8f, 0x82, 0xb4, 0x9b, 0x51, 0xa1, 0xd5, 0x87, 0x4e, 0xee, 0xc3, 0x7c, 0x12, 0xc6, 0x74, + 0x30, 0xb7, 0x17, 0xf1, 0xc2, 0x76, 0x1f, 0x17, 0xd4, 0xc2, 0x69, 0x54, 0x64, 0x1f, 0xe6, 0x4a, + 0x61, 0xe8, 0xbb, 0xfb, 0xbd, 0x90, 0x26, 0xac, 0x48, 0x19, 0x2a, 0x10, 0x95, 0x4b, 0x4b, 0xf2, + 0x05, 0x21, 0x8c, 0xf3, 0x4e, 0x44, 0x19, 0x59, 0x93, 0x56, 0x3f, 0x3b, 0xd2, 0x84, 0x99, 0xba, + 0x7b, 0xd8, 0x71, 0x3b, 0x87, 0xf7, 0xe9, 0xf1, 0x96, 0xe3, 0xfa, 0x22, 0xbf, 0x83, 0x0c, 0xc9, + 0x28, 0x05, 0xc7, 0xed, 0x36, 0x0d, 0x7d, 0x5c, 0xdd, 0x58, 0x39, 0x5e, 0x5f, 0x30, 0x98, 0x1a, + 0x0f, 0x38, 0x1d, 0x86, 0xea, 0x76, 0x1d, 0x57, 0x53, 0xe3, 0x3a, 0x4f, 0xcd, 0x92, 0x2f, 0x8c, + 0x68, 0xc9, 0xb7, 0x60, 0xae, 0xd6, 0x69, 0xf8, 0xc7, 0xe8, 0xb1, 0x96, 0x8d, 0x9b, 0x3e, 0xa5, + 0x71, 0xf2, 0xa5, 0xe6, 0x17, 0x1d, 0x29, 0x61, 0x69, 0xcd, 0xeb, 0x67, 0x4c, 0xea, 0xe2, 0x75, + 0xb1, 0xd5, 0xea, 0xd6, 0x6a, 0xc7, 0x0d, 0x5d, 0x4c, 0x6a, 0xcf, 0x97, 0x87, 0xd7, 0x04, 0xcf, + 0x97, 0xb8, 0xc5, 0xe6, 0x36, 0xbb, 0xb6, 0x2b, 0x51, 0xfa, 0x9e, 0x0f, 0x53, 0xe9, 0xcd, 0xff, + 0x6b, 0x82, 0x6b, 0x43, 0xd5, 0xc2, 0xba, 0xa0, 0x24, 0x79, 0x56, 0xc3, 0x70, 0x13, 0x96, 0x57, + 0xe6, 0x2c, 0x96, 0x57, 0xf6, 0x74, 0xcb, 0x2b, 0x77, 0x9a, 0xe5, 0x95, 0x30, 0x8d, 0xc6, 0xce, + 0x6c, 0x1a, 0x8d, 0x9f, 0xc1, 0x34, 0x9a, 0x38, 0x93, 0x69, 0xa4, 0xd9, 0x78, 0xf9, 0xd3, 0x6c, + 0xbc, 0x7f, 0x69, 0x48, 0x3d, 0xaf, 0x86, 0x54, 0xda, 0xe2, 0x7a, 0x26, 0x43, 0x6a, 0xb0, 0x1d, + 0x54, 0xfc, 0xff, 0xd8, 0x0e, 0xfa, 0x2b, 0x50, 0x4c, 0xaa, 0xe6, 0xd3, 0x93, 0x40, 0x3c, 0xb3, + 0xbb, 0xda, 0x6c, 0xe1, 0x48, 0xaa, 0x46, 0xb6, 0xb5, 0xda, 0xf2, 0xdd, 0x87, 0x4e, 0x48, 0xe3, + 0x77, 0xa0, 0x70, 0x6b, 0xd5, 0xe5, 0x50, 0x9c, 0xae, 0x0a, 0x4a, 0x64, 0x15, 0x64, 0xd2, 0xac, + 0x02, 0xf3, 0xd7, 0x33, 0x30, 0xc7, 0xaf, 0x97, 0x3e, 0xff, 0x1e, 0xbd, 0x0f, 0x35, 0x5b, 0x4f, + 0x06, 0xee, 0x24, 0xbe, 0x6e, 0x88, 0x4f, 0xef, 0x3b, 0x70, 0xbe, 0xaf, 0x2b, 0xd0, 0xde, 0xab, + 0xca, 0x8b, 0xbd, 0x7d, 0x16, 0xdf, 0x62, 0x7a, 0x25, 0xbb, 0xb7, 0xad, 0x3e, 0x0a, 0xf3, 0x0f, + 0xb3, 0x7d, 0xfc, 0x85, 0x77, 0x4f, 0xf5, 0xd7, 0x19, 0x67, 0xf3, 0xd7, 0x65, 0x46, 0xf3, 0xd7, + 0x25, 0x96, 0x85, 0xec, 0x28, 0xcb, 0xc2, 0x27, 0x30, 0xbd, 0x4d, 0x9d, 0x76, 0xb0, 0xed, 0x89, + 0x54, 0x42, 0x3c, 0x65, 0x86, 0xbc, 0xb7, 0xcb, 0xca, 0xa4, 0xb9, 0x12, 0x05, 0x20, 0x84, 0x8c, + 0x80, 0xa9, 0x32, 0x9e, 0x5b, 0xc8, 0xd2, 0x39, 0xa8, 0x36, 0xe8, 0xd8, 0x10, 0x1b, 0xb4, 0x0e, + 0x05, 0x41, 0x17, 0x67, 0xbe, 0x50, 0xde, 0x25, 0xa7, 0x4e, 0x1b, 0xe1, 0xb2, 0xf6, 0x28, 0x7d, + 0x6f, 0x54, 0x3b, 0xb7, 0x93, 0x34, 0x26, 0xac, 0x0b, 0x6a, 0x9d, 0x66, 0xd7, 0x73, 0x3b, 0xd8, + 0x05, 0x13, 0x71, 0x17, 0x50, 0x01, 0xe6, 0x5d, 0xa0, 0x20, 0x99, 0xff, 0x28, 0x2f, 0x67, 0xc7, + 0xe7, 0xeb, 0x5d, 0xd1, 0xfd, 0x25, 0xd9, 0x33, 0xfa, 0x4b, 0x72, 0xa7, 0xad, 0xa5, 0xda, 0x02, + 0x3f, 0x76, 0x86, 0x05, 0x7e, 0xfc, 0xa9, 0x7d, 0x1f, 0x13, 0x67, 0x5c, 0xb2, 0x13, 0x82, 0x9a, + 0x1f, 0x45, 0x50, 0x53, 0x97, 0xf9, 0xc9, 0xa7, 0x5f, 0xe6, 0xe1, 0xcc, 0xcb, 0xbc, 0xf2, 0xe8, + 0xd1, 0xd4, 0x48, 0x8f, 0x1e, 0x19, 0x23, 0x3c, 0x7a, 0xf4, 0x85, 0xb2, 0x1d, 0xbe, 0x97, 0x6e, + 0x3b, 0x0c, 0x57, 0xd6, 0xcf, 0xa9, 0xf5, 0xe0, 0x63, 0x07, 0xed, 0x39, 0x3e, 0xdb, 0x43, 0x05, + 0xe4, 0x26, 0x4c, 0xc8, 0xeb, 0xef, 0x46, 0xbc, 0x1d, 0xed, 0xbf, 0xf7, 0x2e, 0xb1, 0xd8, 0x76, + 0x4b, 0x12, 0x8b, 0xab, 0x62, 0xfc, 0xa6, 0xaf, 0x80, 0x69, 0x37, 0x7d, 0x05, 0xcc, 0xfc, 0x77, + 0x73, 0x72, 0x12, 0xb2, 0xed, 0x80, 0x78, 0x27, 0xa0, 0xef, 0x71, 0x70, 0xe3, 0xec, 0x8f, 0x83, + 0x7f, 0x86, 0xdc, 0x01, 0x4a, 0xba, 0xcd, 0xec, 0x08, 0xe9, 0x36, 0xdf, 0xd5, 0x72, 0x55, 0xe6, + 0xe2, 0xe4, 0x68, 0x4c, 0x30, 0x87, 0x67, 0xa9, 0xbc, 0xa3, 0x26, 0x95, 0x1c, 0x8b, 0x6f, 0xd5, + 0x21, 0xe5, 0x90, 0x74, 0x92, 0x91, 0x31, 0x36, 0x7e, 0x96, 0x3c, 0x1a, 0x13, 0xff, 0xbf, 0xe6, + 0xd1, 0xa8, 0x01, 0x28, 0xc9, 0xe3, 0xb9, 0x77, 0xfa, 0x35, 0xd6, 0x4d, 0xa7, 0x27, 0x8e, 0x57, + 0x08, 0xcd, 0x7f, 0x31, 0x07, 0x73, 0xf5, 0xfa, 0x66, 0xd5, 0x75, 0x0e, 0x3b, 0x5e, 0x10, 0xba, + 0x8d, 0xd5, 0xce, 0x81, 0xc7, 0x2c, 0x91, 0x68, 0x42, 0x2b, 0x39, 0x1d, 0xe2, 0xc9, 0x1c, 0x15, + 0x33, 0x4b, 0xb7, 0xe6, 0xfb, 0xd1, 0x7b, 0xf7, 0x68, 0xe9, 0x52, 0x06, 0xb0, 0x38, 0x9c, 0x2d, + 0xf6, 0xf5, 0x1e, 0xcf, 0x02, 0xce, 0x0f, 0x0c, 0x70, 0xb1, 0x0f, 0x38, 0xc8, 0x92, 0x65, 0x84, + 0xf6, 0x0b, 0xac, 0x30, 0xfe, 0x2e, 0x6a, 0xd9, 0x38, 0xe2, 0x62, 0xae, 0xae, 0xc4, 0x72, 0x82, + 0xf7, 0x6a, 0xbb, 0x08, 0x57, 0x4f, 0x97, 0xfa, 0xe6, 0xc0, 0x31, 0x9c, 0xc7, 0x3d, 0xfc, 0x59, + 0x3d, 0x31, 0xd7, 0x85, 0x71, 0x61, 0x62, 0x1e, 0x98, 0x14, 0x77, 0x8c, 0xfa, 0xf6, 0x74, 0x6a, + 0x0d, 0xe4, 0xd7, 0x0d, 0x78, 0x29, 0xb5, 0x24, 0x9a, 0xdd, 0x53, 0x5a, 0x46, 0x14, 0x45, 0x69, + 0x60, 0xe6, 0xf4, 0x37, 0x07, 0x55, 0x6d, 0xa7, 0xa8, 0x82, 0xe1, 0x35, 0x91, 0x7f, 0x64, 0xc0, + 0x45, 0x0d, 0x23, 0x52, 0x57, 0x01, 0x2e, 0x2b, 0x03, 0xe5, 0xfa, 0xfb, 0xcf, 0x46, 0xae, 0x5f, + 0xd5, 0xbf, 0x25, 0xd6, 0xa6, 0xea, 0x37, 0x0c, 0x6a, 0x21, 0x79, 0x08, 0x73, 0x58, 0x24, 0xbd, + 0x42, 0x4c, 0x66, 0x85, 0x33, 0x69, 0x21, 0x6e, 0x76, 0xa5, 0x17, 0x84, 0x5e, 0x1b, 0x53, 0x11, + 0x2f, 0xff, 0xf4, 0x64, 0x69, 0x5a, 0x43, 0xc7, 0x64, 0x6c, 0xd8, 0x86, 0xc8, 0xb5, 0xe4, 0x76, + 0x0e, 0x3c, 0xed, 0x59, 0xba, 0x64, 0x15, 0xe4, 0x3f, 0x37, 0x60, 0x91, 0x41, 0xf9, 0x67, 0xdc, + 0xf5, 0xbd, 0x76, 0x54, 0x2e, 0x8f, 0x29, 0x07, 0x74, 0x5b, 0xeb, 0xd9, 0x74, 0xdb, 0x6b, 0xd8, + 0x64, 0xae, 0x13, 0xec, 0x03, 0xdf, 0x6b, 0xc7, 0xcd, 0xd7, 0xf2, 0x9c, 0x0f, 0x6a, 0x24, 0xf9, + 0x55, 0x03, 0x2e, 0x69, 0x1b, 0x73, 0x35, 0x05, 0xd9, 0xe2, 0xac, 0x76, 0xa6, 0xad, 0x16, 0x95, + 0x6f, 0x08, 0xf9, 0xbf, 0x8a, 0x2d, 0x88, 0x57, 0x0b, 0x6c, 0x8b, 0xdd, 0xe6, 0x58, 0x4a, 0x13, + 0x06, 0xd7, 0x42, 0x5c, 0x98, 0xc3, 0x43, 0x16, 0xed, 0x38, 0x7d, 0x61, 0xf0, 0x71, 0xfa, 0x55, + 0x51, 0xf5, 0xcb, 0x98, 0xe6, 0x69, 0xf0, 0x99, 0x7a, 0x3f, 0x57, 0xf2, 0x2b, 0x70, 0xa9, 0x0f, + 0x18, 0xcd, 0xb6, 0xf3, 0x03, 0x67, 0xdb, 0x9b, 0x4f, 0x4e, 0x96, 0x5e, 0x4f, 0xab, 0x2d, 0x6d, + 0xa6, 0x0d, 0xae, 0x81, 0x38, 0x00, 0x71, 0xa1, 0x48, 0x9c, 0x9e, 0x2e, 0xa0, 0x6f, 0x0a, 0xf9, + 0x50, 0xf0, 0x99, 0x2e, 0x57, 0xda, 0xa0, 0x2e, 0x79, 0x31, 0x12, 0xa1, 0x50, 0x50, 0x52, 0x5c, + 0x1d, 0x63, 0x06, 0xf5, 0x81, 0x95, 0xfc, 0xf4, 0x64, 0x49, 0xc3, 0x66, 0x26, 0xad, 0x9a, 0x3b, + 0x4b, 0x35, 0x69, 0x35, 0x44, 0xf2, 0x0f, 0x0d, 0x58, 0x60, 0x80, 0x58, 0xa8, 0xc4, 0x47, 0x2d, + 0x0e, 0x93, 0xfa, 0xa3, 0x67, 0x23, 0xf5, 0xaf, 0x60, 0x1b, 0x55, 0xa9, 0xef, 0xeb, 0x92, 0xd4, + 0xc6, 0xa1, 0xb4, 0x6b, 0xe7, 0x79, 0x9a, 0xb4, 0x5f, 0x1a, 0x41, 0xda, 0xf9, 0x00, 0x9c, 0x2e, + 0xed, 0x03, 0x6b, 0x21, 0xdb, 0x50, 0x10, 0xd6, 0x2c, 0xef, 0xb0, 0x97, 0xb5, 0x8c, 0x3a, 0x6a, + 0x11, 0xdf, 0x62, 0x88, 0x0c, 0x60, 0x7d, 0x5f, 0xa8, 0x71, 0x21, 0x1d, 0x98, 0xe7, 0xbf, 0xf5, + 0xad, 0xf9, 0xd2, 0xc0, 0xad, 0xf9, 0x35, 0xf1, 0x45, 0x57, 0x04, 0xff, 0xc4, 0x0e, 0x5d, 0xa9, + 0x28, 0x8d, 0x31, 0xe9, 0x02, 0xd1, 0xc0, 0x7c, 0xd2, 0x5e, 0x19, 0xbe, 0x21, 0x7f, 0x5d, 0xd4, + 0xb9, 0x94, 0xac, 0x33, 0x39, 0x73, 0x53, 0x78, 0x13, 0x07, 0x66, 0x05, 0x94, 0xed, 0x5d, 0x51, + 0xc3, 0xbf, 0xa2, 0xdd, 0x5b, 0x4d, 0x94, 0xf2, 0x7c, 0xe6, 0xb2, 0x26, 0xbc, 0x20, 0x98, 0x50, + 0xe8, 0x49, 0x7e, 0xe6, 0x0f, 0x8c, 0xbe, 0x3a, 0xd8, 0x1e, 0x19, 0x7f, 0x28, 0xa9, 0x37, 0x70, + 0x8f, 0xcc, 0x39, 0xe2, 0x5e, 0x3d, 0x46, 0x60, 0xb6, 0x8d, 0x7a, 0x0d, 0x39, 0x2b, 0x9e, 0x2b, + 0xe3, 0xa0, 0x78, 0xeb, 0xb6, 0x24, 0xa3, 0x92, 0xb2, 0xb1, 0x8d, 0x84, 0x51, 0x49, 0x22, 0x16, + 0xc9, 0xfc, 0xd5, 0x8c, 0x2e, 0x25, 0xe4, 0x9a, 0x62, 0x66, 0x2b, 0x17, 0xa1, 0xa5, 0x99, 0xad, + 0x18, 0xd7, 0x7f, 0xdf, 0x80, 0xf9, 0x4d, 0xff, 0xd0, 0xe9, 0xb8, 0xbf, 0xc4, 0xd3, 0xa4, 0x78, + 0xd8, 0x8d, 0xd1, 0x4d, 0x8a, 0xcf, 0x35, 0xdd, 0xaa, 0xa7, 0x54, 0xcc, 0x06, 0x16, 0x47, 0xd8, + 0x4a, 0x6b, 0x0f, 0xc6, 0x79, 0x62, 0xc3, 0x94, 0xac, 0xb7, 0x1c, 0x9d, 0xc3, 0xcd, 0x1f, 0x66, + 0x60, 0x4a, 0x91, 0x58, 0xf2, 0x15, 0x28, 0xa8, 0x7c, 0x54, 0xff, 0x8a, 0x5a, 0xad, 0xa5, 0x61, + 0xa1, 0x83, 0x85, 0x3a, 0x6d, 0xcd, 0xc1, 0xc2, 0xe4, 0x12, 0xa1, 0x67, 0xdc, 0x89, 0x7c, 0x94, + 0xb2, 0x13, 0x39, 0x53, 0xd6, 0xfc, 0xf7, 0xfb, 0xf7, 0x23, 0xa3, 0x27, 0xb9, 0x37, 0x7f, 0xcb, + 0x80, 0x62, 0x72, 0x4e, 0x7d, 0x2e, 0xbd, 0x72, 0x06, 0x5f, 0xf4, 0xdf, 0xc8, 0x40, 0x71, 0xdb, + 0x67, 0x1b, 0xff, 0xa6, 0x8c, 0x5e, 0x7f, 0x5e, 0x43, 0x02, 0x3e, 0xd0, 0xdc, 0xc4, 0x2f, 0x44, + 0xcb, 0x80, 0xfa, 0x71, 0x43, 0x6e, 0x6c, 0xe7, 0x7e, 0xf7, 0xef, 0x2d, 0x9d, 0x33, 0x3f, 0x85, + 0x85, 0x64, 0x77, 0xa0, 0xab, 0xb8, 0x04, 0xb3, 0x3a, 0x3c, 0x99, 0xcc, 0x32, 0x49, 0x65, 0x25, + 0xf1, 0xcd, 0x3f, 0xcd, 0x24, 0x79, 0x8b, 0xf0, 0x00, 0xa6, 0x74, 0x3a, 0xce, 0x7e, 0x2b, 0xca, + 0xb7, 0x27, 0xde, 0x48, 0x44, 0x90, 0x25, 0xcb, 0xce, 0x92, 0xd6, 0x34, 0x8a, 0xc1, 0xce, 0xa6, + 0xc7, 0x60, 0x93, 0x3b, 0x89, 0x98, 0x96, 0x5c, 0x7c, 0xab, 0xe6, 0x11, 0xdd, 0xb7, 0xe3, 0xb8, + 0x96, 0x44, 0x28, 0x4b, 0x05, 0x16, 0xb4, 0x8c, 0x39, 0x92, 0x7e, 0x2c, 0x76, 0x6d, 0x86, 0x58, + 0xc0, 0x89, 0x53, 0x91, 0xf1, 0xbd, 0x64, 0xaf, 0xc5, 0x76, 0x62, 0xc2, 0x03, 0xac, 0x3e, 0x25, + 0x27, 0xd7, 0x1a, 0xe5, 0x52, 0x46, 0x8b, 0xb2, 0x15, 0x5a, 0x7b, 0x74, 0x82, 0x23, 0x9a, 0xff, + 0x87, 0xc1, 0xe6, 0x7f, 0xe3, 0xc1, 0x17, 0x2c, 0xe1, 0x2a, 0xfb, 0xa4, 0x21, 0xd1, 0x2b, 0xff, + 0xad, 0xc1, 0x53, 0x26, 0x0a, 0xf1, 0x79, 0x17, 0xc6, 0xb7, 0x1d, 0xff, 0x90, 0x86, 0x22, 0xb9, + 0x9f, 0xca, 0x85, 0x17, 0xc4, 0xd7, 0x99, 0x43, 0xfc, 0x6d, 0x09, 0x02, 0xd5, 0x75, 0x95, 0x19, + 0xc9, 0x75, 0xa5, 0x38, 0x42, 0xb3, 0xcf, 0xca, 0x11, 0x6a, 0xfe, 0xdf, 0x19, 0xfe, 0x3d, 0xa2, + 0x51, 0xa3, 0x3e, 0xd3, 0x7b, 0x15, 0x72, 0x4c, 0x0e, 0xd4, 0xd7, 0x96, 0x99, 0xac, 0xa8, 0x78, + 0xac, 0x9c, 0xcd, 0x1b, 0xd4, 0xff, 0x6a, 0x8e, 0x5f, 0x5c, 0x22, 0xd4, 0x79, 0x83, 0x18, 0x78, + 0xc9, 0xcc, 0x6b, 0x52, 0x75, 0x3a, 0x74, 0xbc, 0xa6, 0x7e, 0xc9, 0xcc, 0x6b, 0x62, 0xb6, 0xa7, + 0x28, 0xd5, 0x9e, 0x1a, 0x2c, 0xdd, 0x3e, 0x70, 0x6c, 0x9e, 0xe2, 0x4d, 0x5d, 0x01, 0xe2, 0xac, + 0x7c, 0x35, 0x98, 0xd1, 0xdf, 0x42, 0x10, 0x51, 0x34, 0x78, 0x3b, 0x30, 0xf1, 0x8e, 0x82, 0xea, + 0xf1, 0xd5, 0x89, 0x48, 0x19, 0xa6, 0xb5, 0xab, 0xfd, 0xea, 0x53, 0xf7, 0x7a, 0x62, 0x00, 0xd5, + 0xef, 0xa7, 0x91, 0x28, 0x17, 0x6b, 0xbe, 0x0c, 0x45, 0x31, 0x33, 0xa3, 0x74, 0xcb, 0x78, 0xb8, + 0xb8, 0x5a, 0xb5, 0xd4, 0xd9, 0xd4, 0x70, 0x9b, 0xbe, 0x85, 0x50, 0xf3, 0xc7, 0x06, 0x5c, 0xda, + 0xa0, 0xe1, 0x23, 0xcf, 0x7f, 0x60, 0xd1, 0x20, 0xf4, 0x5d, 0x9e, 0xbd, 0x19, 0xe5, 0xf1, 0x2b, + 0xe4, 0x7d, 0xf9, 0xc0, 0xa3, 0xae, 0x20, 0x93, 0x75, 0x94, 0xa7, 0x85, 0x50, 0x8e, 0x61, 0xe0, + 0x86, 0x7c, 0xd8, 0xf1, 0x5d, 0xf1, 0xb0, 0x63, 0x66, 0x38, 0x71, 0x34, 0x2f, 0x9a, 0xb4, 0x23, + 0x1f, 0x74, 0xfc, 0xad, 0x0c, 0x9c, 0x4f, 0x69, 0xd6, 0xee, 0x57, 0x9e, 0x53, 0xe5, 0x50, 0xd6, + 0x94, 0x83, 0x7c, 0xf9, 0x77, 0x60, 0xc7, 0xa7, 0xea, 0x8a, 0xbf, 0x6d, 0xc0, 0x45, 0x5d, 0x7a, + 0x44, 0x70, 0xd5, 0xee, 0x6d, 0xf2, 0x1e, 0x8c, 0xaf, 0x50, 0xa7, 0x49, 0x65, 0x56, 0xd0, 0xf3, + 0x89, 0x27, 0xa4, 0x79, 0x21, 0x67, 0xfb, 0xa7, 0x7c, 0x2a, 0x9f, 0xb3, 0x04, 0x09, 0xa9, 0x8a, + 0xc6, 0x71, 0xb3, 0xd4, 0x94, 0x37, 0xba, 0xd2, 0xaa, 0x1a, 0x72, 0x34, 0xfb, 0x53, 0x03, 0x5e, + 0x18, 0x42, 0xc3, 0x06, 0x8e, 0x0d, 0xbd, 0x3a, 0x70, 0xb8, 0xb0, 0x20, 0x94, 0x7c, 0x08, 0xb3, + 0xdb, 0xc2, 0xac, 0x95, 0xc3, 0x91, 0x89, 0x43, 0xff, 0xa5, 0xc5, 0x6b, 0xcb, 0x71, 0x49, 0x22, + 0x6b, 0x57, 0x0d, 0xb3, 0x43, 0xaf, 0x1a, 0xaa, 0x37, 0xf7, 0x72, 0xa3, 0xde, 0xdc, 0xfb, 0x34, + 0xf9, 0xc0, 0x8a, 0x48, 0xb9, 0x11, 0xdf, 0x5b, 0x34, 0x06, 0xdf, 0x5b, 0x94, 0xe1, 0x08, 0x99, + 0xd4, 0x2b, 0x51, 0x3f, 0x34, 0xa0, 0xa8, 0xf3, 0x7e, 0xda, 0xf1, 0xfc, 0x40, 0x1b, 0xcf, 0x17, + 0xd2, 0xc7, 0x73, 0xf0, 0x40, 0xf6, 0x3d, 0x26, 0x33, 0xd2, 0x00, 0x9a, 0x30, 0x5e, 0xf5, 0xda, + 0x8e, 0xdb, 0x51, 0x5f, 0x0f, 0x69, 0x22, 0xc4, 0x12, 0x25, 0x23, 0xdd, 0xf2, 0x34, 0x7f, 0x7d, + 0x0c, 0x2e, 0x59, 0xf4, 0xd0, 0x65, 0x56, 0xd5, 0x4e, 0xe0, 0x76, 0x0e, 0xb5, 0x0b, 0x6b, 0x66, + 0xa2, 0xc3, 0x45, 0x46, 0x28, 0x06, 0x89, 0xfa, 0xfb, 0x0d, 0xc8, 0x33, 0xd5, 0xae, 0xf4, 0x39, + 0x7a, 0xc8, 0xf1, 0x19, 0x2f, 0x2e, 0x0c, 0xb2, 0x98, 0x5c, 0x17, 0x0b, 0x8f, 0x92, 0xb3, 0x8f, + 0x2d, 0x3c, 0x3f, 0x3f, 0x59, 0x82, 0xfa, 0x71, 0x10, 0x52, 0x34, 0xf0, 0xc5, 0xe2, 0x13, 0x59, + 0x62, 0xb9, 0x01, 0x96, 0xd8, 0x3a, 0x2c, 0x94, 0x9a, 0x5c, 0xa9, 0x39, 0xad, 0x2d, 0xdf, 0xed, + 0x34, 0xdc, 0xae, 0xd3, 0x92, 0xbb, 0x0b, 0x3c, 0x27, 0x71, 0xa2, 0x72, 0xbb, 0x1b, 0x21, 0x58, + 0xa9, 0x64, 0xec, 0x33, 0xaa, 0x1b, 0x75, 0xfe, 0x4a, 0x13, 0x3f, 0xfc, 0xc0, 0xcf, 0x68, 0x76, + 0x02, 0xfe, 0x4c, 0x93, 0x15, 0x15, 0xa3, 0x0d, 0x88, 0x87, 0xc3, 0xdb, 0x6b, 0xf5, 0x38, 0x78, + 0x9e, 0xa7, 0x14, 0xe2, 0x07, 0xc8, 0x61, 0x2b, 0xc0, 0x43, 0x64, 0x0d, 0x2f, 0xa6, 0xab, 0xd7, + 0x57, 0x18, 0x5d, 0xbe, 0x8f, 0x2e, 0x08, 0x8e, 0x54, 0x3a, 0x8e, 0x47, 0x6e, 0x02, 0xf0, 0x84, + 0x29, 0x28, 0x10, 0x93, 0xb1, 0xc5, 0xe8, 0x23, 0x94, 0x5b, 0x8c, 0x0a, 0x0a, 0x79, 0x1f, 0xe6, + 0x6b, 0x95, 0x65, 0xe9, 0xb2, 0xaa, 0x7a, 0x8d, 0x1e, 0x1e, 0xf7, 0x01, 0xd6, 0x87, 0x63, 0x48, + 0x1b, 0xcb, 0x4c, 0x0a, 0xd2, 0xd0, 0xc8, 0x55, 0x98, 0x58, 0xad, 0xf2, 0xbe, 0x9f, 0x52, 0xf3, + 0x66, 0x8a, 0x63, 0x74, 0x59, 0x48, 0x36, 0x63, 0x93, 0xa6, 0x70, 0xaa, 0x49, 0x73, 0x69, 0x04, + 0x73, 0x86, 0xa7, 0xd7, 0xe4, 0xc9, 0x99, 0x2b, 0x5e, 0x93, 0x06, 0xbb, 0xb7, 0xbe, 0x60, 0xe9, + 0x35, 0x95, 0x6f, 0xc3, 0x69, 0x7e, 0x2b, 0x55, 0x25, 0xfc, 0x5b, 0x98, 0x5e, 0xb3, 0x0f, 0x97, + 0x7c, 0x0d, 0xc6, 0xf0, 0xa7, 0xb0, 0x0f, 0xe6, 0x53, 0xd8, 0xc6, 0xb6, 0x41, 0x83, 0x3f, 0x93, + 0x83, 0x04, 0x64, 0x15, 0x26, 0x44, 0x5a, 0xeb, 0xb3, 0x24, 0x89, 0x13, 0x19, 0xde, 0xf9, 0x20, + 0x09, 0x7a, 0xb3, 0x09, 0x05, 0xb5, 0x42, 0x26, 0x9c, 0x2b, 0x4e, 0x70, 0x44, 0x9b, 0xec, 0x97, + 0xc8, 0xef, 0x8a, 0xc2, 0x79, 0x84, 0x50, 0x9b, 0xb5, 0xc3, 0x52, 0x50, 0x98, 0x5a, 0x5a, 0x0d, + 0x76, 0x02, 0xd1, 0x14, 0xb1, 0x67, 0x73, 0x71, 0xff, 0xdf, 0xb4, 0x44, 0x91, 0xf9, 0x0b, 0xb0, + 0xb0, 0xd1, 0x6b, 0xb5, 0xd8, 0xfe, 0x4d, 0xe6, 0xff, 0x0a, 0x9d, 0x90, 0x92, 0x32, 0x8c, 0xe1, + 0x1f, 0xe2, 0xc9, 0xc5, 0x79, 0xfd, 0x0d, 0x2a, 0x2c, 0xc2, 0xd8, 0x1b, 0x03, 0xaf, 0xbb, 0x85, + 0xfa, 0x1b, 0x66, 0x9c, 0xd4, 0xfc, 0x49, 0xfc, 0x60, 0xd3, 0xb6, 0xef, 0x34, 0x1e, 0x50, 0xff, + 0x8c, 0x4f, 0xdc, 0x7f, 0x2c, 0x1b, 0xa1, 0xab, 0xfc, 0xb4, 0x06, 0x9f, 0xd6, 0x18, 0xf2, 0x3e, + 0x4c, 0x09, 0xbd, 0xaf, 0x24, 0x69, 0xc0, 0x9b, 0xb0, 0xf2, 0x55, 0xb0, 0xc4, 0x61, 0xb2, 0x8a, + 0x8e, 0xab, 0x99, 0xfe, 0x29, 0xbb, 0xb7, 0x3e, 0x8f, 0xd5, 0x4c, 0xaf, 0x63, 0x88, 0xe8, 0xfe, + 0x1a, 0x24, 0xfb, 0x56, 0xc8, 0xee, 0x1d, 0xf5, 0x5a, 0xb6, 0x11, 0x1b, 0xfe, 0xf1, 0xb5, 0x6c, + 0xd5, 0xf0, 0x8f, 0x50, 0xa3, 0x31, 0xc9, 0x9c, 0x32, 0x26, 0x1f, 0xca, 0x31, 0xc9, 0x0e, 0x16, + 0x8c, 0xf9, 0x21, 0xe3, 0x50, 0x8f, 0x67, 0x48, 0x6e, 0xa4, 0xfd, 0x19, 0xbe, 0xd6, 0x2e, 0x66, + 0x48, 0x52, 0xa1, 0x09, 0x4e, 0xea, 0xa6, 0x6f, 0x6c, 0x74, 0xa6, 0xa7, 0x44, 0xbf, 0x7c, 0x1d, + 0x0a, 0xa5, 0x30, 0x74, 0x1a, 0x47, 0xb4, 0x59, 0x65, 0xea, 0x49, 0xb9, 0x41, 0xea, 0x08, 0xb8, + 0xea, 0x2c, 0x57, 0x71, 0x79, 0x46, 0x14, 0x27, 0x10, 0x61, 0x48, 0x51, 0x46, 0x14, 0x06, 0xd1, + 0x33, 0xa2, 0x30, 0x08, 0xdb, 0xe4, 0xae, 0x76, 0x1e, 0xba, 0xac, 0x4f, 0xf2, 0xf1, 0x23, 0x34, + 0x2e, 0x07, 0xa9, 0xca, 0x55, 0x60, 0x91, 0x77, 0x15, 0xb3, 0x70, 0x32, 0xde, 0x9f, 0xf1, 0xbd, + 0xb3, 0x2d, 0xad, 0x43, 0xd5, 0xe4, 0x8b, 0xec, 0xc4, 0x3b, 0x30, 0x21, 0x5d, 0x22, 0x10, 0xef, + 0xc9, 0x04, 0x65, 0xff, 0x3d, 0x21, 0x89, 0x8c, 0xef, 0x3f, 0x28, 0x79, 0x6a, 0xa7, 0x94, 0xf7, + 0x1f, 0x94, 0x3c, 0xb5, 0xda, 0xfb, 0x0f, 0x4a, 0xc6, 0xda, 0x68, 0x87, 0x5b, 0x38, 0x75, 0x87, + 0xbb, 0x0b, 0x85, 0x2d, 0xc7, 0x0f, 0x5d, 0x66, 0x2e, 0x74, 0x42, 0xfe, 0x16, 0x63, 0xec, 0x80, + 0x51, 0x8a, 0xca, 0x2f, 0xcb, 0x77, 0x10, 0xba, 0x0a, 0xbe, 0x9e, 0x40, 0x3f, 0x86, 0xa7, 0x07, + 0x21, 0xcd, 0x3c, 0x4d, 0x10, 0x52, 0x3e, 0x7a, 0x3c, 0x79, 0x36, 0x0e, 0xf9, 0x8a, 0x5e, 0x44, + 0x4e, 0xf6, 0x3e, 0x7a, 0x04, 0xbe, 0x0d, 0x05, 0xf6, 0x37, 0xbe, 0xea, 0xe6, 0x52, 0xfe, 0xd6, + 0x62, 0x9c, 0x75, 0x4a, 0x9f, 0xd0, 0xfc, 0xe9, 0xb7, 0x3a, 0x0d, 0xf9, 0x04, 0x46, 0xc6, 0x49, + 0x6f, 0x9a, 0xc6, 0x8d, 0x7c, 0x04, 0x05, 0xf5, 0x61, 0x4b, 0xbc, 0xbc, 0x25, 0xc2, 0xc8, 0x9a, + 0x02, 0xde, 0x97, 0x94, 0x48, 0x25, 0x60, 0xcb, 0x7c, 0xa9, 0xcb, 0x15, 0x24, 0x51, 0xa4, 0xbd, + 0xdb, 0xa7, 0x1c, 0x25, 0x1a, 0xf9, 0x06, 0x14, 0x4a, 0xdd, 0x6e, 0xac, 0x71, 0xe6, 0x95, 0x7d, + 0x7e, 0xb7, 0x6b, 0xa7, 0x6a, 0x1d, 0x8d, 0x22, 0xa9, 0x98, 0x17, 0xce, 0xa6, 0x98, 0xff, 0xcc, + 0x80, 0x8b, 0x03, 0xba, 0x2d, 0x4a, 0xc8, 0x63, 0x0c, 0x4f, 0xc8, 0xc3, 0xa6, 0x9f, 0xbe, 0x39, + 0xc3, 0xe9, 0x27, 0x4c, 0x15, 0xf5, 0xa3, 0xa5, 0xd1, 0x92, 0xfe, 0x30, 0x64, 0xf6, 0x73, 0x7b, + 0x18, 0xd2, 0x3c, 0x31, 0x60, 0x4a, 0x11, 0x66, 0x72, 0x45, 0xb9, 0x03, 0x52, 0xe4, 0x19, 0x1c, + 0x15, 0x0e, 0x19, 0xae, 0xce, 0x51, 0x32, 0x33, 0xa7, 0xbb, 0xa8, 0xf0, 0x85, 0x64, 0x25, 0x69, + 0x51, 0x3b, 0xe1, 0x4f, 0xc2, 0x17, 0x91, 0xbf, 0x03, 0xb0, 0xe6, 0x04, 0x61, 0xa9, 0x11, 0xba, + 0x0f, 0xe9, 0x08, 0x9a, 0x3b, 0x7e, 0x03, 0xc5, 0xc1, 0x87, 0xf7, 0x19, 0x59, 0xdf, 0x1b, 0x28, + 0x11, 0x43, 0xf3, 0x2f, 0x0c, 0x98, 0x5a, 0xed, 0x04, 0xa1, 0xd3, 0x6a, 0xe1, 0xd2, 0xfa, 0x45, + 0xca, 0x76, 0x1b, 0x7d, 0xd7, 0x90, 0xe5, 0xfc, 0x1d, 0x98, 0x4d, 0xa0, 0xb1, 0x2d, 0x61, 0x1d, + 0xef, 0x72, 0xa9, 0x5b, 0x42, 0x7e, 0xbb, 0xcb, 0x12, 0x25, 0x66, 0x4d, 0x21, 0xdb, 0xbd, 0x85, + 0xc7, 0x00, 0xcb, 0x00, 0xae, 0x04, 0x49, 0x03, 0x96, 0x24, 0x5b, 0xb2, 0x7b, 0xcb, 0x52, 0xb0, + 0xcc, 0x0d, 0x18, 0xaf, 0x7b, 0x7e, 0x58, 0x3e, 0xe6, 0x36, 0x63, 0x95, 0x06, 0x0d, 0xd5, 0xcf, + 0xef, 0xa2, 0xc7, 0xaf, 0x61, 0x89, 0x22, 0xb6, 0x63, 0xbc, 0xeb, 0xd2, 0x56, 0x53, 0x8d, 0xbf, + 0x3a, 0x60, 0x00, 0x8b, 0xc3, 0x99, 0x5d, 0x7d, 0x21, 0x4e, 0x1f, 0x19, 0x07, 0x7a, 0x3d, 0xad, + 0xcd, 0x54, 0xd1, 0xfa, 0xf7, 0x15, 0xfd, 0x89, 0x18, 0xad, 0xa6, 0x21, 0x5d, 0xfd, 0x87, 0x06, + 0x5c, 0x1e, 0x4c, 0xa2, 0xc6, 0x8e, 0x19, 0x43, 0x62, 0xc7, 0x5e, 0x4b, 0xfa, 0xa5, 0x11, 0x4d, + 0xf8, 0xa5, 0x63, 0x6f, 0x74, 0x15, 0x43, 0xf7, 0x1a, 0xd1, 0x73, 0x5c, 0x57, 0x86, 0xb4, 0x19, + 0x11, 0xf9, 0x30, 0x87, 0x48, 0x63, 0x09, 0x5a, 0xf3, 0x1f, 0xe7, 0xe0, 0xd2, 0x40, 0x0a, 0xb2, + 0xa2, 0x3d, 0x8e, 0x7e, 0xfd, 0xb4, 0x1a, 0x6e, 0xe0, 0xbf, 0xa9, 0xcf, 0xa5, 0x6f, 0x46, 0x19, + 0x48, 0xf9, 0x83, 0xe9, 0x6f, 0x9e, 0xca, 0x8b, 0xa3, 0x23, 0x33, 0xe8, 0x4f, 0x46, 0x8a, 0x51, + 0xf7, 0x34, 0x74, 0x5c, 0xf1, 0x3a, 0xb9, 0x8c, 0xba, 0xe7, 0x20, 0x4b, 0x96, 0xc5, 0x01, 0x7d, + 0xb9, 0xf4, 0x80, 0x3e, 0xf3, 0xff, 0x31, 0x60, 0x32, 0x6a, 0x36, 0xb9, 0x0c, 0x17, 0xb6, 0xad, + 0x52, 0xa5, 0x66, 0x6f, 0x7f, 0xba, 0x55, 0xb3, 0x77, 0x36, 0xea, 0x5b, 0xb5, 0xca, 0xea, 0xdd, + 0xd5, 0x5a, 0xb5, 0x78, 0x8e, 0xcc, 0xc1, 0xf4, 0xce, 0xc6, 0xfd, 0x8d, 0xcd, 0xbd, 0x0d, 0xbb, + 0x66, 0x59, 0x9b, 0x56, 0xd1, 0x20, 0xd3, 0x30, 0x69, 0x95, 0x4b, 0x15, 0x7b, 0x63, 0xb3, 0x5a, + 0x2b, 0x66, 0x48, 0x11, 0x0a, 0x95, 0xcd, 0x8d, 0x8d, 0x5a, 0x65, 0x7b, 0x75, 0x77, 0x75, 0xfb, + 0xd3, 0x62, 0x96, 0x10, 0x98, 0x41, 0x84, 0x2d, 0x6b, 0x75, 0xa3, 0xb2, 0xba, 0x55, 0x5a, 0x2b, + 0xe6, 0x18, 0x8c, 0xe1, 0x2b, 0xb0, 0xb1, 0x88, 0xd1, 0xfd, 0x9d, 0x72, 0xad, 0x38, 0xce, 0x50, + 0xd8, 0x5f, 0x0a, 0xca, 0x04, 0xab, 0x1e, 0x51, 0xaa, 0xa5, 0xed, 0x52, 0xb9, 0x54, 0xaf, 0x15, + 0xf3, 0xe4, 0x22, 0xcc, 0x6b, 0x20, 0x7b, 0x6d, 0xf3, 0xde, 0xea, 0x46, 0x71, 0x92, 0x2c, 0x40, + 0x31, 0x82, 0x55, 0xcb, 0xf6, 0x4e, 0xbd, 0x66, 0x15, 0x21, 0x09, 0xdd, 0x28, 0xad, 0xd7, 0x8a, + 0x53, 0xe6, 0x07, 0x3c, 0x4c, 0x9f, 0x77, 0x35, 0xb9, 0x00, 0xa4, 0xbe, 0x5d, 0xda, 0xde, 0xa9, + 0x27, 0x3e, 0x7e, 0x0a, 0x26, 0xea, 0x3b, 0x95, 0x4a, 0xad, 0x5e, 0x2f, 0x1a, 0x04, 0x60, 0xfc, + 0x6e, 0x69, 0x75, 0xad, 0x56, 0x2d, 0x66, 0xcc, 0xdf, 0x34, 0x60, 0x4e, 0x2e, 0xf4, 0xd2, 0xbb, + 0xfa, 0x94, 0x73, 0xf1, 0x43, 0x6d, 0xff, 0x22, 0xa3, 0xa8, 0x13, 0x95, 0x0c, 0x99, 0x86, 0x3e, + 0x9c, 0x4f, 0x45, 0x26, 0x9f, 0x42, 0x51, 0x36, 0x60, 0xdd, 0x09, 0x1b, 0x47, 0xb1, 0x1a, 0x7b, + 0x39, 0x51, 0x49, 0x02, 0x8d, 0xfb, 0x91, 0xe2, 0x74, 0xfa, 0x7d, 0x6c, 0xcc, 0xef, 0xc2, 0xc5, + 0x01, 0xb4, 0xa4, 0x02, 0xe3, 0x51, 0x5e, 0xce, 0x21, 0x51, 0x0c, 0x0b, 0xda, 0xc3, 0xd2, 0xe3, + 0x3c, 0xf3, 0xa6, 0x25, 0x20, 0xe6, 0x5f, 0x37, 0xa0, 0x20, 0xcc, 0xc3, 0x52, 0x8b, 0xfa, 0xe1, + 0xd3, 0xf5, 0xf0, 0xbb, 0x5a, 0x0f, 0x47, 0x21, 0xa9, 0x0a, 0x7f, 0x56, 0x9c, 0xda, 0xb9, 0xff, + 0x9d, 0x01, 0xc5, 0x24, 0x22, 0xf9, 0x10, 0xf2, 0x75, 0xfa, 0x90, 0xfa, 0x6e, 0x78, 0x2c, 0x74, + 0xc5, 0x82, 0x3c, 0xbb, 0x40, 0x1c, 0x51, 0xc6, 0xbd, 0x50, 0x81, 0xf8, 0x65, 0x45, 0x34, 0xa3, + 0xaa, 0x3c, 0x65, 0x83, 0x97, 0x7d, 0x56, 0x1b, 0x3c, 0xf3, 0x9f, 0x1b, 0x70, 0xf1, 0x1e, 0x0d, + 0xd5, 0x6f, 0x8a, 0x72, 0x5c, 0x7d, 0x79, 0xb4, 0xef, 0x52, 0xbe, 0x64, 0x11, 0x26, 0xb0, 0x48, + 0x5e, 0x93, 0xb5, 0xe4, 0x4f, 0x52, 0x8e, 0xc4, 0x20, 0xab, 0x65, 0x14, 0x1e, 0x50, 0xf7, 0x0d, + 0x25, 0xc7, 0xa8, 0x94, 0x82, 0xcb, 0xef, 0xc2, 0xd4, 0x67, 0xcc, 0xd9, 0x7b, 0xfd, 0x23, 0x98, + 0x95, 0x02, 0xba, 0xbd, 0x56, 0x47, 0xc3, 0x6b, 0x16, 0xa6, 0x76, 0x6b, 0xd6, 0xea, 0xdd, 0x4f, + 0xed, 0xbb, 0x3b, 0x6b, 0x6b, 0xc5, 0x73, 0x4c, 0x0b, 0x09, 0x40, 0xa5, 0x54, 0x34, 0x48, 0x01, + 0xf2, 0xab, 0x1b, 0xf5, 0x5a, 0x65, 0xc7, 0xaa, 0x15, 0x33, 0xd7, 0x97, 0x61, 0x26, 0xbe, 0x80, + 0x87, 0xba, 0x62, 0x02, 0xb2, 0x56, 0x69, 0xaf, 0x78, 0x8e, 0xe9, 0x83, 0xad, 0xfb, 0x95, 0xfa, + 0xad, 0x5b, 0x45, 0x83, 0x29, 0x8a, 0x7b, 0x95, 0x2d, 0xfb, 0xfe, 0x7a, 0xbd, 0x98, 0xb9, 0xfe, + 0x65, 0x98, 0xc3, 0x03, 0x01, 0x66, 0x3e, 0xd0, 0x0e, 0xf5, 0xb1, 0xda, 0x02, 0xeb, 0xd4, 0xae, + 0xe3, 0x3b, 0x21, 0xe5, 0x75, 0xae, 0xf7, 0x5a, 0xa1, 0xdb, 0x6d, 0xd1, 0xc7, 0x45, 0xe3, 0xfa, + 0xbb, 0x30, 0x6b, 0x79, 0xbd, 0xd0, 0xed, 0x1c, 0xd6, 0x43, 0x86, 0x71, 0x78, 0x4c, 0xce, 0xc3, + 0xdc, 0xce, 0x46, 0x69, 0xbd, 0xbc, 0x7a, 0x6f, 0x67, 0x73, 0xa7, 0x6e, 0xaf, 0x97, 0xb6, 0x2b, + 0x2b, 0xc5, 0x73, 0xac, 0xf5, 0xeb, 0x9b, 0xf5, 0x6d, 0xdb, 0xaa, 0x55, 0x6a, 0x1b, 0xdb, 0x45, + 0xe3, 0xfa, 0x6f, 0x18, 0x30, 0xc3, 0x0c, 0x4f, 0xf4, 0x6c, 0xee, 0xa0, 0xc0, 0x5c, 0x81, 0x17, + 0x99, 0xee, 0xb3, 0xb7, 0x37, 0xef, 0xd7, 0x36, 0xec, 0x9d, 0x7a, 0xe9, 0x5e, 0x52, 0xa9, 0x2f, + 0xc1, 0x0b, 0x0a, 0x86, 0x55, 0xab, 0x6c, 0xee, 0xd6, 0x2c, 0x7b, 0xab, 0x54, 0xaf, 0xef, 0x6d, + 0x5a, 0xd5, 0xa2, 0xc1, 0x56, 0x84, 0x14, 0x84, 0xf5, 0xbb, 0xa5, 0x62, 0xa6, 0xaf, 0x6c, 0xa3, + 0xb6, 0x57, 0x5a, 0xb3, 0xcb, 0x9b, 0xdb, 0xc5, 0xec, 0x75, 0xcc, 0xe2, 0x8a, 0x23, 0xc9, 0x9d, + 0x13, 0x79, 0xc8, 0x6d, 0x6c, 0x6e, 0xd4, 0xb8, 0x2a, 0xdd, 0xaa, 0x6d, 0x54, 0x57, 0x37, 0xee, + 0xf1, 0x3e, 0x2e, 0x6d, 0x6d, 0x59, 0x9b, 0xbb, 0x4c, 0x99, 0xb2, 0x8e, 0xac, 0xd6, 0x36, 0x58, + 0xcb, 0xb2, 0xd7, 0x4d, 0x98, 0xab, 0x50, 0x3f, 0xac, 0x3d, 0x0e, 0x69, 0x87, 0x59, 0x90, 0xd8, + 0x77, 0xd3, 0x30, 0x59, 0xfb, 0xe6, 0x76, 0x6d, 0xa3, 0xbe, 0xba, 0xb9, 0x51, 0x3c, 0x77, 0xfd, + 0xc5, 0x04, 0x8e, 0x1c, 0x96, 0x7a, 0x7d, 0xa5, 0x78, 0xee, 0xfa, 0xb7, 0xa1, 0xa0, 0x39, 0xde, + 0x2e, 0xc2, 0xbc, 0xfa, 0x7b, 0x8b, 0x76, 0x9a, 0x6e, 0xe7, 0xb0, 0x78, 0x2e, 0x59, 0x60, 0xf5, + 0x3a, 0x1d, 0x56, 0x80, 0x1f, 0xaf, 0x16, 0x6c, 0x53, 0xbf, 0xed, 0x76, 0xd8, 0xac, 0x29, 0x66, + 0xae, 0xdf, 0x80, 0x69, 0x6d, 0x12, 0xb0, 0x7a, 0xd7, 0x36, 0x85, 0x38, 0xac, 0xd7, 0xaa, 0xab, + 0x3b, 0xeb, 0xc5, 0x31, 0xf6, 0xd9, 0x2b, 0xab, 0xf7, 0x56, 0x8a, 0x70, 0xfd, 0xdb, 0x30, 0x23, + 0xb6, 0x1f, 0xeb, 0x77, 0x4b, 0xb2, 0xa1, 0x9b, 0x77, 0xef, 0x8a, 0xc5, 0xa5, 0x56, 0xc7, 0x6f, + 0x32, 0xc8, 0x8b, 0xb0, 0x28, 0x7e, 0xd8, 0xa5, 0x8d, 0xaa, 0xbd, 0x52, 0xb2, 0xaa, 0x7b, 0x25, + 0xab, 0x66, 0xdf, 0xaf, 0x7d, 0x5a, 0xcc, 0xb0, 0xf5, 0x49, 0x85, 0xd8, 0xdb, 0x9b, 0x3b, 0x95, + 0x95, 0x62, 0xb6, 0xfc, 0xc1, 0x4f, 0xfe, 0xd9, 0xcb, 0xe7, 0x7e, 0xf2, 0xb3, 0x97, 0x8d, 0x3f, + 0xfd, 0xd9, 0xcb, 0xc6, 0xff, 0xfa, 0xb3, 0x97, 0x8d, 0x5f, 0x78, 0xf3, 0x0c, 0xd1, 0x60, 0xfb, + 0xe3, 0xa8, 0x40, 0x6e, 0xff, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x22, 0x9c, 0x72, 0x64, 0x52, + 0xff, 0x00, 0x00, } func (m *KeepAlive) Marshal() (dAtA []byte, err error) { @@ -13781,6 +13784,13 @@ func (m *AWS) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.ExternalID) > 0 { + i -= len(m.ExternalID) + copy(dAtA[i:], m.ExternalID) + i = encodeVarintTypes(dAtA, i, uint64(len(m.ExternalID))) + i-- + dAtA[i] = 0x52 + } { size, err := m.RedshiftServerless.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -27501,6 +27511,10 @@ func (m *AWS) Size() (n int) { n += 1 + l + sovTypes(uint64(l)) l = m.RedshiftServerless.Size() n += 1 + l + sovTypes(uint64(l)) + l = len(m.ExternalID) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -36772,6 +36786,38 @@ func (m *AWS) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExternalID", 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.ExternalID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) diff --git a/api/utils/aws/endpoint.go b/api/utils/aws/endpoint.go index d8cff9a7b4d47..5138b73726181 100644 --- a/api/utils/aws/endpoint.go +++ b/api/utils/aws/endpoint.go @@ -366,7 +366,7 @@ func ParseElastiCacheEndpoint(endpoint string) (*RedisEndpointInfo, error) { // Remove partition suffix. Note that endpoints for CN regions use the same // format except they end with AWSCNEndpointSuffix. - endpointWithoutSuffix, err := removePartitionSuffix(endpoint) + endpointWithoutSuffix, _, err := removePartitionSuffix(endpoint) if err != nil { return nil, trace.Wrap(err) } @@ -531,7 +531,7 @@ func ParseMemoryDBEndpoint(endpoint string) (*RedisEndpointInfo, error) { // // Unlike RDS/Redshift endpoints, the service subdomain is before region. // Unlike ElastiCache endpoints, MemoryDB uses full region name. - endpointWithoutSuffix, err := removePartitionSuffix(endpoint) + endpointWithoutSuffix, _, err := removePartitionSuffix(endpoint) if err != nil { return nil, trace.Wrap(err) } @@ -607,16 +607,16 @@ func removeSchemaAndPort(endpoint string) (string, error) { return parsedURL.Hostname(), nil } -func removePartitionSuffix(endpoint string) (string, error) { +func removePartitionSuffix(endpoint string) (string, string, error) { switch { case strings.HasSuffix(endpoint, AWSEndpointSuffix): - return strings.TrimSuffix(endpoint, AWSEndpointSuffix), nil + return strings.TrimSuffix(endpoint, AWSEndpointSuffix), AWSEndpointSuffix, nil case strings.HasSuffix(endpoint, AWSCNEndpointSuffix): - return strings.TrimSuffix(endpoint, AWSCNEndpointSuffix), nil + return strings.TrimSuffix(endpoint, AWSCNEndpointSuffix), AWSCNEndpointSuffix, nil default: - return "", trace.BadParameter("%v is not a valid AWS endpoint", endpoint) + return "", "", trace.BadParameter("%v is not a valid AWS endpoint", endpoint) } } @@ -647,6 +647,15 @@ const ( // MemoryDBSServiceName is the service name for AWS MemoryDB. MemoryDBSServiceName = "memorydb" + + // DynamoDBServiceName is the service name for AWS DynamoDB. + DynamoDBServiceName = "dynamodb" + // DynamoDBFipsServiceName is the fips variant service name for AWS DynamoDB. + DynamoDBFipsServiceName = "dynamodb-fips" + // DynamoDBStreamsServiceName is the AWS DynamoDB Streams service name. + DynamoDBStreamsServiceName = "streams.dynamodb" + // DAXServiceName is the AWS DynamoDB Accelerator service name. + DAXServiceName = "dax" ) // CassandraEndpointURLForRegion returns a Cassandra endpoint based on the provided region. @@ -662,16 +671,92 @@ func CassandraEndpointURLForRegion(region string) string { // where endpoint looks like cassandra.us-east-2.amazonaws.com // https://docs.aws.amazon.com/keyspaces/latest/devguide/programmatic.endpoints.html func CassandraEndpointRegion(endpoint string) (string, error) { - endpoint, err := removeSchemaAndPort(endpoint) + parts, _, err := extractAWSEndpointParts(endpoint) if err != nil { return "", trace.Wrap(err) } - - endpoint = strings.TrimSuffix(endpoint, AWSCNEndpointSuffix) - endpoint = strings.TrimSuffix(endpoint, AWSEndpointSuffix) - parts := strings.Split(endpoint, ".") if len(parts) != 2 { return "", trace.BadParameter("invalid Cassandra endpoint") } return parts[1], nil } + +// DynamoDBEndpointInfo describes info extracted from a DynamoDB endpoint. +type DynamoDBEndpointInfo struct { + // Service is the service subdomain of the endpoint, for example "dynamodb" or "dax". + Service string + // Region is the AWS region for the endpoint, for example "us-west-1". + Region string + // Partition is the AWS partition for the endpoint, for example ".amazonaws.com" + Partition string +} + +// ParseDynamoDBEndpoint parses and extract info from the provided DynamoDB endpoint. +func ParseDynamoDBEndpoint(endpoint string) (*DynamoDBEndpointInfo, error) { + endpoint = strings.ToLower(endpoint) + parts, partition, err := extractAWSEndpointParts(endpoint) + if err != nil { + return nil, trace.Wrap(err) + } + switch len(parts) { + case 2, 3: + default: + return nil, trace.BadParameter("invalid DynamoDB endpoint %q", endpoint) + } + info := &DynamoDBEndpointInfo{ + Service: strings.Join(parts[:len(parts)-1], "."), + Region: parts[len(parts)-1], + Partition: partition, + } + + // check for recognized service name. + switch info.Service { + case DynamoDBServiceName, DynamoDBFipsServiceName, + DynamoDBStreamsServiceName, DAXServiceName: + default: + return nil, trace.BadParameter("invalid DynamoDB endpoint %q", endpoint) + } + + // check that the partition is valid for the region. + if info.Region == "" || info.Partition == "" { + return nil, trace.BadParameter("invalid DynamoDB endpoint %q", endpoint) + } + switch { + case info.Partition == AWSCNEndpointSuffix && IsCNRegion(info.Region): + case info.Partition == AWSEndpointSuffix && !IsCNRegion(info.Region): + default: + return nil, trace.BadParameter("invalid AWS region %q for AWS partition %q", + info.Region, info.Partition) + } + return info, nil +} + +// DynamoDBURIForRegion constructs a DynamoDB URI based on the AWS region. +// The URI uses a custom schema aws:// to differentiate an auto-generated URI from +// a user-configured URI in the engine. +// When the Teleport DynamoDB engine sees this custom URI schema, it will resolve +// the real endpoint using the request API target. +// https://docs.aws.amazon.com/general/latest/gr/ddb.html +func DynamoDBURIForRegion(region string) string { + var suffix string + if IsCNRegion(region) { + suffix = AWSCNEndpointSuffix + } else { + suffix = AWSEndpointSuffix + } + return fmt.Sprintf("aws://dynamodb.%s%s", region, suffix) +} + +// extractAWSEndpointParts strips the schema, port, and AWS suffix, +// then splits the prefix by subdomain separator (".") and returns the parts and suffix. +func extractAWSEndpointParts(endpoint string) ([]string, string, error) { + uri, err := removeSchemaAndPort(endpoint) + if err != nil { + return nil, "", trace.Wrap(err) + } + prefix, suffix, err := removePartitionSuffix(uri) + if err != nil { + return nil, "", trace.Wrap(err) + } + return strings.Split(prefix, "."), suffix, nil +} diff --git a/api/utils/aws/endpoint_test.go b/api/utils/aws/endpoint_test.go index 1d2c95fed128d..440658bf54269 100644 --- a/api/utils/aws/endpoint_test.go +++ b/api/utils/aws/endpoint_test.go @@ -17,6 +17,7 @@ limitations under the License. package aws import ( + "fmt" "testing" "github.com/gravitational/trace" @@ -508,3 +509,132 @@ func TestRedshiftServerlessEndpoint(t *testing.T) { }) } } + +func TestDynamoDBURIForRegion(t *testing.T) { + t.Parallel() + tests := []struct { + desc string + region string + wantURI string + }{ + { + desc: "region is in correct AWS partition", + region: "us-east-1", + wantURI: "aws://dynamodb.us-east-1.amazonaws.com", + }, + { + desc: "china north region is in correct AWS partition", + region: "cn-north-1", + wantURI: "aws://dynamodb.cn-north-1.amazonaws.com.cn", + }, + { + desc: "china northwest region is in correct AWS partition", + region: "cn-northwest-1", + wantURI: "aws://dynamodb.cn-northwest-1.amazonaws.com.cn", + }, + } + for _, tt := range tests { + tt := tt + t.Run(tt.desc, func(t *testing.T) { + require.Equal(t, tt.wantURI, DynamoDBURIForRegion(tt.region)) + }) + } +} + +func TestParseDynamoDBEndpoint(t *testing.T) { + t.Parallel() + t.Run("parses valid endpoint", func(t *testing.T) { + t.Parallel() + for _, parts := range []struct { + services []string + regions []string + partition string + }{ + { + services: []string{DynamoDBServiceName, DynamoDBFipsServiceName, DynamoDBStreamsServiceName, DAXServiceName}, + regions: []string{"us-east-1", "us-gov-east-1"}, + partition: AWSEndpointSuffix, + }, + { + services: []string{DynamoDBServiceName, DynamoDBStreamsServiceName, DAXServiceName}, + regions: []string{"cn-north-1", "cn-northwest-1"}, + partition: AWSCNEndpointSuffix, + }, + } { + parts := parts + for _, svc := range parts.services { + svc := svc + for _, region := range parts.regions { + region := region + endpoint := fmt.Sprintf("%s.%s%s", svc, region, parts.partition) + t.Run(endpoint, func(t *testing.T) { + t.Parallel() + info, err := ParseDynamoDBEndpoint(endpoint) + require.NoError(t, err) + wantInfo := DynamoDBEndpointInfo{ + Service: svc, + Region: region, + Partition: parts.partition, + } + require.NotNil(t, info) + require.Equal(t, wantInfo, *info) + }) + } + } + } + }) + + tests := []struct { + desc string + services []string + regions []string + endpoint string + wantInfo *DynamoDBEndpointInfo + }{ + { + desc: "empty uri", + endpoint: "", + }, + { + desc: "not AWS uri", + endpoint: "localhost", + }, + { + desc: "missing region", + endpoint: "amazonaws.com", + }, + { + desc: "missing china region", + endpoint: "amazonaws.com.cn", + }, + { + desc: "unrecognized service subdomain", + endpoint: "foo.us-east-1.amazonaws.com", + }, + { + desc: "unrecognized dynamodb service subdomain", + endpoint: "foo.dynamodb.us-east-1.amazonaws.com", + }, + { + desc: "unrecognized streams service subdomain", + endpoint: "streams.foo.us-east-1.amazonaws.com", + }, + { + desc: "mismatched us region and china partition", + endpoint: "streams.dynamodb.us-east-1.amazonaws.com.cn", + }, + { + desc: "mismatched china region and non-china partition", + endpoint: "streams.dynamodb.cn-north-1.amazonaws.com", + }, + } + for _, tt := range tests { + tt := tt + t.Run("detects invalid endpoint with"+tt.desc, func(t *testing.T) { + t.Parallel() + info, err := ParseDynamoDBEndpoint(tt.endpoint) + require.Error(t, err, "endpoint %s should be invalid", tt.endpoint) + require.Nil(t, info) + }) + } +} diff --git a/api/utils/aws/fuzz_test.go b/api/utils/aws/fuzz_test.go index 82457a08190a7..c256179a72238 100644 --- a/api/utils/aws/fuzz_test.go +++ b/api/utils/aws/fuzz_test.go @@ -45,3 +45,11 @@ func FuzzParseElastiCacheEndpoint(f *testing.F) { }) }) } + +func FuzzParseDynamoDBEndpoint(f *testing.F) { + f.Fuzz(func(t *testing.T, endpoint string) { + require.NotPanics(t, func() { + ParseDynamoDBEndpoint(endpoint) + }) + }) +} diff --git a/fuzz/oss-fuzz-build.sh b/fuzz/oss-fuzz-build.sh index 70d3168faa6fd..d93a51085891c 100755 --- a/fuzz/oss-fuzz-build.sh +++ b/fuzz/oss-fuzz-build.sh @@ -108,6 +108,9 @@ build_teleport_api_fuzzers() { compile_native_go_fuzzer $TELEPORT_PREFIX/api/utils/aws \ FuzzParseElastiCacheEndpoint fuzz_parse_elasti_cache_endpoint + compile_native_go_fuzzer $TELEPORT_PREFIX/api/utils/aws \ + FuzzParseDynamoDBEndpoint fuzz_parse_dynamodb_endpoint + cd - } diff --git a/lib/client/db/dbcmd/dbcmd.go b/lib/client/db/dbcmd/dbcmd.go index 36924a0b0f97d..3f5e1cded9597 100644 --- a/lib/client/db/dbcmd/dbcmd.go +++ b/lib/client/db/dbcmd/dbcmd.go @@ -65,6 +65,8 @@ const ( curlBin = "curl" // elasticsearchSQLBin is the Elasticsearch SQL client program name. elasticsearchSQLBin = "elasticsearch-sql-cli" + // awsBin is the aws CLI program name. + awsBin = "aws" ) // Execer is an abstraction of Go's exec module, as this one doesn't specify any interfaces. @@ -185,6 +187,9 @@ func (c *CLICommandBuilder) GetConnectCommand() (*exec.Cmd, error) { case defaults.ProtocolElasticsearch: return c.getElasticsearchCommand() + + case defaults.ProtocolDynamoDB: + return c.getDynamoDBCommand() } return nil, trace.BadParameter("unsupported database protocol: %v", c.db) @@ -571,6 +576,24 @@ func (c *CLICommandBuilder) getElasticsearchCommand() (*exec.Cmd, error) { return nil, trace.BadParameter("%v interactive command is only supported in --tunnel mode.", elasticsearchSQLBin) } +func (c *CLICommandBuilder) getDynamoDBCommand() (*exec.Cmd, error) { + // we can't guess at what the user wants to do, so this command is for print purposes only, + // and it only works with a local proxy tunnel. + if !c.options.printFormat || !c.options.noTLS || c.options.localProxyHost == "" || c.options.localProxyPort == 0 { + svc := "" + if c.db != nil && c.db.ServiceName != "" { + svc = c.db.ServiceName + } + return nil, trace.BadParameter("DynamoDB requires a local proxy tunnel. Use `tsh proxy db --tunnel %v`", svc) + } + args := []string{ + "--endpoint", fmt.Sprintf("http://%v:%v/", c.options.localProxyHost, c.options.localProxyPort), + "[dynamodb|dynamodbstreams|dax]", + "", + } + return c.options.exe.Command(awsBin, args...), nil +} + func (c *CLICommandBuilder) getElasticsearchAlternativeCommands() []CommandAlternative { var commands []CommandAlternative if c.isElasticsearchSQLBinAvailable() { diff --git a/lib/client/db/dbcmd/dbcmd_test.go b/lib/client/db/dbcmd/dbcmd_test.go index a9401efbfb8ea..5a8e6a5f9b0e0 100644 --- a/lib/client/db/dbcmd/dbcmd_test.go +++ b/lib/client/db/dbcmd/dbcmd_test.go @@ -528,6 +528,42 @@ func TestCLICommandBuilderGetConnectCommand(t *testing.T) { cmd: nil, wantErr: true, }, + { + name: "dynamodb for exec is an error", + dbProtocol: defaults.ProtocolDynamoDB, + opts: []ConnectCommandFunc{WithNoTLS(), WithLocalProxy("localhost", 12345, "")}, + execer: &fakeExec{}, + databaseName: "", + cmd: nil, + wantErr: true, + }, + { + name: "dynamodb without proxy is an error", + dbProtocol: defaults.ProtocolDynamoDB, + opts: []ConnectCommandFunc{WithPrintFormat(), WithNoTLS(), WithLocalProxy("", 0, "")}, + execer: &fakeExec{}, + databaseName: "", + cmd: nil, + wantErr: true, + }, + { + name: "dynamodb with TLS proxy is an error", + dbProtocol: defaults.ProtocolDynamoDB, + opts: []ConnectCommandFunc{WithPrintFormat(), WithLocalProxy("localhost", 12345, "")}, + execer: &fakeExec{}, + databaseName: "", + cmd: nil, + wantErr: true, + }, + { + name: "dynamodb with print format and no-TLS proxy is ok", + dbProtocol: defaults.ProtocolDynamoDB, + opts: []ConnectCommandFunc{WithPrintFormat(), WithNoTLS(), WithLocalProxy("localhost", 12345, "")}, + execer: &fakeExec{}, + databaseName: "", + cmd: []string{"aws", "--endpoint", "http://localhost:12345/", "[dynamodb|dynamodbstreams|dax]", ""}, + wantErr: false, + }, } for _, tt := range tests { diff --git a/lib/cloud/clients.go b/lib/cloud/clients.go index b376715247ac1..4e124a2fc4787 100644 --- a/lib/cloud/clients.go +++ b/lib/cloud/clients.go @@ -30,6 +30,7 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/postgresql/armpostgresql" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription" "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/credentials/stscreds" "github.com/aws/aws-sdk-go/aws/session" awssession "github.com/aws/aws-sdk-go/aws/session" @@ -718,7 +719,13 @@ type TestCloudClients struct { // GetAWSSession returns AWS session for the specified region. func (c *TestCloudClients) GetAWSSession(region string) (*awssession.Session, error) { - return nil, trace.NotImplemented("not implemented") + return session.NewSession(&aws.Config{ + Credentials: credentials.NewCredentials(&credentials.StaticProvider{Value: credentials.Value{ + AccessKeyID: "fakeClientKeyID", + SecretAccessKey: "fakeClientSecret", + }}), + Region: aws.String(region), + }) } // GetAWSSessionForRole returns AWS session for the specified role ARN. diff --git a/lib/config/configuration.go b/lib/config/configuration.go index 1e5ab6f579255..814b6ed1b0204 100644 --- a/lib/config/configuration.go +++ b/lib/config/configuration.go @@ -145,6 +145,8 @@ type CommandLineFlags struct { DatabaseAWSRegion string // DatabaseAWSAccountID is an optional AWS account ID e.g. when using Keyspaces. DatabaseAWSAccountID string + // DatabaseAWSExternalID is an optional AWS external ID used to enable assuming an AWS role across accounts. + DatabaseAWSExternalID string // DatabaseAWSRedshiftClusterID is Redshift cluster identifier. DatabaseAWSRedshiftClusterID string // DatabaseAWSRDSInstanceID is RDS instance identifier. @@ -1314,8 +1316,9 @@ func applyDatabasesConfig(fc *FileConfig, cfg *service.Config) error { Mode: service.TLSMode(database.TLS.Mode), }, AWS: service.DatabaseAWS{ - AccountID: database.AWS.AccountID, - Region: database.AWS.Region, + AccountID: database.AWS.AccountID, + ExternalID: database.AWS.ExternalID, + Region: database.AWS.Region, Redshift: service.DatabaseAWSRedshift{ ClusterID: database.AWS.Redshift.ClusterID, }, @@ -2021,8 +2024,9 @@ func Configure(clf *CommandLineFlags, cfg *service.Config, legacyAppFlags bool) CACert: caBytes, }, AWS: service.DatabaseAWS{ - Region: clf.DatabaseAWSRegion, - AccountID: clf.DatabaseAWSAccountID, + Region: clf.DatabaseAWSRegion, + AccountID: clf.DatabaseAWSAccountID, + ExternalID: clf.DatabaseAWSExternalID, Redshift: service.DatabaseAWSRedshift{ ClusterID: clf.DatabaseAWSRedshiftClusterID, }, diff --git a/lib/config/configuration_test.go b/lib/config/configuration_test.go index ccae409766036..37db332200fc5 100644 --- a/lib/config/configuration_test.go +++ b/lib/config/configuration_test.go @@ -2722,6 +2722,34 @@ func TestDatabaseCLIFlags(t *testing.T) { }, }, }, + { + desc: "AWS DynamoDB", + inFlags: CommandLineFlags{ + DatabaseName: "ddb", + DatabaseProtocol: defaults.ProtocolDynamoDB, + DatabaseURI: "dynamodb.us-east-1.amazonaws.com", + DatabaseAWSAccountID: "123456789012", + DatabaseAWSExternalID: "12345678901234", + DatabaseAWSRegion: "us-east-1", + }, + outDatabase: service.Database{ + Name: "ddb", + Protocol: defaults.ProtocolDynamoDB, + URI: "dynamodb.us-east-1.amazonaws.com", + AWS: service.DatabaseAWS{ + Region: "us-east-1", + AccountID: "123456789012", + ExternalID: "12345678901234", + }, + StaticLabels: map[string]string{ + types.OriginLabel: types.OriginConfigFile, + }, + DynamicLabels: services.CommandLabels{}, + TLS: service.DatabaseTLS{ + Mode: service.VerifyFull, + }, + }, + }, } for _, tt := range tests { diff --git a/lib/config/database.go b/lib/config/database.go index 07a2d7c0be4d2..078ec47b4e936 100644 --- a/lib/config/database.go +++ b/lib/config/database.go @@ -263,16 +263,21 @@ db_service: databases: - name: {{ .StaticDatabaseName }} protocol: {{ .StaticDatabaseProtocol }} + {{- if .StaticDatabaseURI }} uri: {{ .StaticDatabaseURI }} + {{- end}} {{- if .DatabaseCACertFile }} tls: ca_cert_file: {{ .DatabaseCACertFile }} {{- end }} - {{- if or .DatabaseAWSRegion .DatabaseAWSRedshiftClusterID }} + {{- if or .DatabaseAWSRegion .DatabaseAWSRedshiftClusterID .DatabaseAWSExternalID }} aws: {{- if .DatabaseAWSRegion }} region: {{ .DatabaseAWSRegion }} {{- end }} + {{- if .DatabaseAWSExternalID }} + external_id: {{ .DatabaseAWSExternalID }} + {{- end }} {{- if .DatabaseAWSRedshiftClusterID }} redshift: cluster_id: {{ .DatabaseAWSRedshiftClusterID }} @@ -482,6 +487,8 @@ type DatabaseSampleFlags struct { DatabaseProtocols []string // DatabaseAWSRegion is an optional database cloud region e.g. when using AWS RDS. DatabaseAWSRegion string + // DatabaseAWSExternalID is an optional AWS database external ID, used when assuming roles. + DatabaseAWSExternalID string // DatabaseAWSRedshiftClusterID is Redshift cluster identifier. DatabaseAWSRedshiftClusterID string // DatabaseADDomain is the Active Directory domain for authentication. diff --git a/lib/config/database_test.go b/lib/config/database_test.go index 3243ef3f2412e..e696bf858cc4e 100644 --- a/lib/config/database_test.go +++ b/lib/config/database_test.go @@ -144,6 +144,7 @@ func TestMakeDatabaseConfig(t *testing.T) { StaticDatabaseURI: "postgres://localhost:5432", StaticDatabaseRawLabels: `env=prod,arch=[5m2s:/bin/uname -m "p1 p2"]`, DatabaseAWSRegion: "us-west-1", + DatabaseAWSExternalID: "1234567890", DatabaseAWSRedshiftClusterID: "redshift-cluster-1", DatabaseADDomain: "EXAMPLE.com", DatabaseADSPN: "MSSQLSvc/ec2amaz-4kn05du.dbadir.teleportdemo.net:1433", @@ -160,6 +161,7 @@ func TestMakeDatabaseConfig(t *testing.T) { require.Equal(t, flags.StaticDatabaseURI, databases.Databases[0].URI) require.Equal(t, map[string]string{"env": "prod"}, databases.Databases[0].StaticLabels) require.Equal(t, flags.DatabaseAWSRegion, databases.Databases[0].AWS.Region) + require.Equal(t, flags.DatabaseAWSExternalID, databases.Databases[0].AWS.ExternalID) require.Equal(t, flags.DatabaseAWSRedshiftClusterID, databases.Databases[0].AWS.Redshift.ClusterID) require.Equal(t, flags.DatabaseADDomain, databases.Databases[0].AD.Domain) require.Equal(t, flags.DatabaseADSPN, databases.Databases[0].AD.SPN) diff --git a/lib/config/fileconf.go b/lib/config/fileconf.go index 1d420903d97c0..6b4002a7f3e09 100644 --- a/lib/config/fileconf.go +++ b/lib/config/fileconf.go @@ -1586,6 +1586,8 @@ type DatabaseAWS struct { MemoryDB DatabaseAWSMemoryDB `yaml:"memorydb"` // AccountID is the AWS account ID. AccountID string `yaml:"account_id,omitempty"` + // ExternalID is an optional AWS external ID used to enable assuming an AWS role across accounts. + ExternalID string `yaml:"external_id,omitempty"` // RedshiftServerless contains RedshiftServerless specific settings. RedshiftServerless DatabaseAWSRedshiftServerless `yaml:"redshift_serverless"` } diff --git a/lib/defaults/defaults.go b/lib/defaults/defaults.go index 26ad08807a858..8fb98e1a88021 100644 --- a/lib/defaults/defaults.go +++ b/lib/defaults/defaults.go @@ -433,6 +433,8 @@ const ( ProtocolCassandra = "cassandra" // ProtocolElasticsearch is the Elasticsearch database protocol. ProtocolElasticsearch = "elasticsearch" + // ProtocolDynamoDB is the DynamoDB database protocol. + ProtocolDynamoDB = "dynamodb" ) // DatabaseProtocols is a list of all supported database protocols. @@ -446,6 +448,7 @@ var DatabaseProtocols = []string{ ProtocolSQLServer, ProtocolCassandra, ProtocolElasticsearch, + ProtocolDynamoDB, } // ReadableDatabaseProtocol returns a more human readable string of the @@ -470,6 +473,8 @@ func ReadableDatabaseProtocol(p string) string { return "Microsoft SQL Server" case ProtocolCassandra: return "Cassandra" + case ProtocolDynamoDB: + return "DynamoDB" default: // Unknown protocol. Return original string. return p diff --git a/lib/events/codes.go b/lib/events/codes.go index 8579465f16251..97ba0793721f1 100644 --- a/lib/events/codes.go +++ b/lib/events/codes.go @@ -188,6 +188,9 @@ const ( // DynamoDBRequestCode is the db.session.dynamodb.request event code. DynamoDBRequestCode = "TDY01I" + // DynamoDBRequestFailureCode is the db.session.dynamodb.request event failure code. + // This is indicates that the database agent http transport failed to round trip the request. + DynamoDBRequestFailureCode = "TDY01E" // DatabaseCreateCode is the db.create event code. DatabaseCreateCode = "TDB03I" diff --git a/lib/service/cfg.go b/lib/service/cfg.go index 8c14977b15505..c1b05840c80ac 100644 --- a/lib/service/cfg.go +++ b/lib/service/cfg.go @@ -869,6 +869,8 @@ type DatabaseAWS struct { SecretStore DatabaseAWSSecretStore // AccountID is the AWS account ID. AccountID string + // ExternalID is an optional AWS external ID used to enable assuming an AWS role across accounts. + ExternalID string // RedshiftServerless contains AWS Redshift Serverless specific settings. RedshiftServerless DatabaseAWSRedshiftServerless } @@ -1029,8 +1031,9 @@ func (d *Database) ToDatabase() (types.Database, error) { ServerVersion: d.MySQL.ServerVersion, }, AWS: types.AWS{ - AccountID: d.AWS.AccountID, - Region: d.AWS.Region, + AccountID: d.AWS.AccountID, + ExternalID: d.AWS.ExternalID, + Region: d.AWS.Region, Redshift: types.Redshift{ ClusterID: d.AWS.Redshift.ClusterID, }, diff --git a/lib/service/service.go b/lib/service/service.go index 39a5e42e555e4..0227e7f757bf9 100644 --- a/lib/service/service.go +++ b/lib/service/service.go @@ -4527,15 +4527,14 @@ func (process *TeleportProcess) initApps() { if err != nil { return trace.Wrap(err) } - - proxyGetter := reversetunnel.NewConnectedProxyGetter() - defer func() { if !shouldSkipCleanup { warnOnErr(asyncEmitter.Close(), log) } }() + proxyGetter := reversetunnel.NewConnectedProxyGetter() + appServer, err := app.New(process.ExitContext(), &app.Config{ Clock: process.Config.Clock, DataDir: process.Config.DataDir, diff --git a/lib/service/service_test.go b/lib/service/service_test.go index d94b65b32bee5..fb6eae0d3e9e7 100644 --- a/lib/service/service_test.go +++ b/lib/service/service_test.go @@ -503,6 +503,7 @@ func TestSetupProxyTLSConfig(t *testing.T) { "teleport-snowflake-ping", "teleport-cassandra-ping", "teleport-elasticsearch-ping", + "teleport-dynamodb-ping", "teleport-proxy-ssh", "teleport-reversetunnel", "teleport-auth@", @@ -515,6 +516,7 @@ func TestSetupProxyTLSConfig(t *testing.T) { "teleport-snowflake", "teleport-cassandra", "teleport-elasticsearch", + "teleport-dynamodb", }, }, { @@ -529,6 +531,7 @@ func TestSetupProxyTLSConfig(t *testing.T) { "teleport-snowflake-ping", "teleport-cassandra-ping", "teleport-elasticsearch-ping", + "teleport-dynamodb-ping", // Ensure http/1.1 has precedence over http2. "http/1.1", "h2", @@ -544,6 +547,7 @@ func TestSetupProxyTLSConfig(t *testing.T) { "teleport-snowflake", "teleport-cassandra", "teleport-elasticsearch", + "teleport-dynamodb", }, }, } diff --git a/lib/services/database.go b/lib/services/database.go index 85a640358cc97..7b489d6666ebe 100644 --- a/lib/services/database.go +++ b/lib/services/database.go @@ -166,10 +166,10 @@ func ValidateDatabase(db types.Database) error { if !strings.Contains(db.GetURI(), defaults.SnowflakeURL) { return trace.BadParameter("Snowflake address should contain " + defaults.SnowflakeURL) } - } else if db.GetProtocol() == defaults.ProtocolCassandra && db.GetAWS().Region != "" && db.GetAWS().AccountID != "" { - // In case of cloud hosted Cassandra doesn't require URI validation. - } else if _, _, err := net.SplitHostPort(db.GetURI()); err != nil { - return trace.BadParameter("invalid database %q address %q: %v", db.GetName(), db.GetURI(), err) + } else if needsURIValidation(db) { + if _, _, err := net.SplitHostPort(db.GetURI()); err != nil { + return trace.BadParameter("invalid database %q address %q: %v", db.GetName(), db.GetURI(), err) + } } if db.GetTLS().CACert != "" { @@ -196,6 +196,17 @@ func ValidateDatabase(db types.Database) error { return nil } +// needsURIValidation returns whether a database URI needs to be validated. +func needsURIValidation(db types.Database) bool { + switch db.GetProtocol() { + case defaults.ProtocolCassandra, defaults.ProtocolDynamoDB: + // cloud hosted Cassandra doesn't require URI validation. + return db.GetAWS().Region == "" || db.GetAWS().AccountID == "" + default: + return true + } +} + // validateMongoDB validates MongoDB URIs with "mongodb" schemes. func validateMongoDB(db types.Database) error { connString, err := connstring.ParseAndValidate(db.GetURI()) diff --git a/lib/services/database_test.go b/lib/services/database_test.go index 945e3ba857051..c977430e6a259 100644 --- a/lib/services/database_test.go +++ b/lib/services/database_test.go @@ -209,6 +209,17 @@ func TestValidateDatabase(t *testing.T) { }, expectError: false, }, + { + inputName: "valid-dynamodb-without-uri", + inputSpec: types.DatabaseSpecV3{ + Protocol: defaults.ProtocolDynamoDB, + AWS: types.AWS{ + Region: "us-east-1", + AccountID: "1234567890", + }, + }, + expectError: false, + }, } for _, test := range tests { diff --git a/lib/srv/alpnproxy/common/protocols.go b/lib/srv/alpnproxy/common/protocols.go index 5beab228030c1..dff09db3b73e0 100644 --- a/lib/srv/alpnproxy/common/protocols.go +++ b/lib/srv/alpnproxy/common/protocols.go @@ -53,6 +53,9 @@ const ( // ProtocolElasticsearch is TLS ALPN protocol value used to indicate Elasticsearch protocol. ProtocolElasticsearch Protocol = "teleport-elasticsearch" + // ProtocolDynamoDB is TLS ALPN protocol value used to indicate DynamoDB protocol. + ProtocolDynamoDB Protocol = "teleport-dynamodb" + // ProtocolProxySSH is TLS ALPN protocol value used to indicate Proxy SSH protocol. ProtocolProxySSH Protocol = "teleport-proxy-ssh" @@ -140,6 +143,8 @@ func ToALPNProtocol(dbProtocol string) (Protocol, error) { return ProtocolCassandra, nil case defaults.ProtocolElasticsearch: return ProtocolElasticsearch, nil + case defaults.ProtocolDynamoDB: + return ProtocolDynamoDB, nil default: return "", trace.NotImplemented("%q protocol is not supported", dbProtocol) } @@ -158,6 +163,7 @@ func IsDBTLSProtocol(protocol Protocol) bool { ProtocolSnowflake, ProtocolCassandra, ProtocolElasticsearch, + ProtocolDynamoDB, } return slices.Contains( @@ -176,6 +182,7 @@ var DatabaseProtocols = []Protocol{ ProtocolSnowflake, ProtocolCassandra, ProtocolElasticsearch, + ProtocolDynamoDB, } // ProtocolsWithPingSupport is the list of protocols that Ping connection is diff --git a/lib/srv/db/access_test.go b/lib/srv/db/access_test.go index f42eeebfe3c00..10a1d7d51ca6f 100644 --- a/lib/srv/db/access_test.go +++ b/lib/srv/db/access_test.go @@ -65,6 +65,7 @@ import ( alpncommon "github.com/gravitational/teleport/lib/srv/alpnproxy/common" "github.com/gravitational/teleport/lib/srv/db/cassandra" "github.com/gravitational/teleport/lib/srv/db/common" + "github.com/gravitational/teleport/lib/srv/db/dynamodb" "github.com/gravitational/teleport/lib/srv/db/elasticsearch" "github.com/gravitational/teleport/lib/srv/db/mongodb" "github.com/gravitational/teleport/lib/srv/db/mysql" @@ -84,6 +85,7 @@ func TestMain(m *testing.M) { registerTestSnowflakeEngine() registerTestElasticsearchEngine() registerTestSQLServerEngine() + registerTestDynamoDBEngine() os.Exit(m.Run()) } @@ -1240,6 +1242,8 @@ type testContext struct { cassandra map[string]testCassandra // elasticsearch is a collection of Elasticsearch databases the test uses. elasticsearch map[string]testElasticsearch + // dynamodb is a collection of DynamoDB databases the test uses. + dynamodb map[string]testDynamoDB // clock to override clock in tests. clock clockwork.FakeClock } @@ -1306,6 +1310,14 @@ type testElasticsearch struct { resource types.Database } +// testDynamoDB represents a single proxied DynamoDB database. +type testDynamoDB struct { + // db is the test Dynamodb database server. + db *dynamodb.TestServer + // resource is the resource representing this DynamoDB database. + resource types.Database +} + // startProxy starts all proxy services required to handle connections. func (c *testContext) startProxy() { // Start multiplexer. @@ -1730,6 +1742,34 @@ func (c *testContext) elasticsearchClient(ctx context.Context, teleportUser, dbS return db, proxy, nil } +// dynamodbClient returns a DynamoDB test client. +func (c *testContext) dynamodbClient(ctx context.Context, teleportUser, dbService, dbUser string) (*dynamodb.Client, *alpnproxy.LocalProxy, error) { + route := tlsca.RouteToDatabase{ + ServiceName: dbService, + Protocol: defaults.ProtocolDynamoDB, + Username: dbUser, + } + + proxy, err := c.startLocalALPNProxy(ctx, c.webListener.Addr().String(), teleportUser, route) + if err != nil { + return nil, nil, trace.Wrap(err) + } + + db, err := dynamodb.MakeTestClient(ctx, common.TestClientConfig{ + AuthClient: c.authClient, + AuthServer: c.authServer, + Address: proxy.GetAddr(), + Cluster: c.clusterName, + Username: teleportUser, + RouteToDatabase: route, + }) + if err != nil { + return nil, nil, trace.Wrap(err) + } + + return db, proxy, nil +} + // createUserAndRole creates Teleport user and role with specified names // and allowed database users/names properties. func (c *testContext) createUserAndRole(ctx context.Context, t *testing.T, userName, roleName string, dbUsers, dbNames []string) (types.User, types.Role) { @@ -1792,6 +1832,7 @@ func setupTestContext(ctx context.Context, t *testing.T, withDatabases ...withDa snowflake: make(map[string]testSnowflake), elasticsearch: make(map[string]testElasticsearch), cassandra: make(map[string]testCassandra), + dynamodb: make(map[string]testDynamoDB), clock: clockwork.NewFakeClockAt(time.Now()), } t.Cleanup(func() { testCtx.Close() }) diff --git a/lib/srv/db/ca.go b/lib/srv/db/ca.go index 31f1fde7f9fee..3bc7d15298360 100644 --- a/lib/srv/db/ca.go +++ b/lib/srv/db/ca.go @@ -75,6 +75,7 @@ func (s *Server) initCACert(ctx context.Context, database types.Database) error types.DatabaseTypeElastiCache, types.DatabaseTypeMemoryDB, types.DatabaseTypeAWSKeyspaces, + types.DatabaseTypeDynamoDB, types.DatabaseTypeCloudSQL, types.DatabaseTypeAzure: @@ -163,7 +164,8 @@ func (s *Server) getCACertPaths(database types.Database) ([]string, error) { // // AWS MemoryDB uses same CA as ElastiCache. case types.DatabaseTypeElastiCache, - types.DatabaseTypeMemoryDB: + types.DatabaseTypeMemoryDB, + types.DatabaseTypeDynamoDB: return []string{filepath.Join(s.cfg.DataDir, filepath.Base(amazonRootCA1URL))}, nil // Each Cloud SQL instance has its own CA. @@ -286,7 +288,8 @@ func (d *realDownloader) Download(ctx context.Context, database types.Database, types.DatabaseTypeRedshiftServerless: return d.downloadFromURL(redshiftCAURLForDatabase(database)) case types.DatabaseTypeElastiCache, - types.DatabaseTypeMemoryDB: + types.DatabaseTypeMemoryDB, + types.DatabaseTypeDynamoDB: return d.downloadFromURL(amazonRootCA1URL) case types.DatabaseTypeCloudSQL: return d.downloadForCloudSQL(ctx, database) diff --git a/lib/srv/db/cassandra/handshake.go b/lib/srv/db/cassandra/handshake.go index 83e1af040b05c..e19554de0227b 100644 --- a/lib/srv/db/cassandra/handshake.go +++ b/lib/srv/db/cassandra/handshake.go @@ -17,10 +17,6 @@ limitations under the License. package cassandra import ( - "fmt" - "strings" - - "github.com/aws/aws-sdk-go/aws/arn" "github.com/aws/aws-sdk-go/aws/credentials/stscreds" awssession "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sigv4-auth-cassandra-gocql-driver-plugin/sigv4" @@ -30,9 +26,9 @@ import ( "github.com/gocql/gocql" "github.com/gravitational/trace" - awsutils "github.com/gravitational/teleport/api/utils/aws" "github.com/gravitational/teleport/lib/srv/db/cassandra/protocol" "github.com/gravitational/teleport/lib/srv/db/common" + awsutils "github.com/gravitational/teleport/lib/utils/aws" ) const ( @@ -201,35 +197,20 @@ func (a *authAWSSigV4Auth) getSigV4Authenticator(username string) (gocql.Authent if err != nil { return nil, trace.Wrap(err) } - cred, err := stscreds.NewCredentials(session, a.buildRoleARN(username)).Get() + region := a.ses.Database.GetAWS().Region + accountID := a.ses.Database.GetAWS().AccountID + cred, err := stscreds.NewCredentials(session, awsutils.BuildRoleARN(username, region, accountID)).Get() if err != nil { return nil, trace.Wrap(err) } auth := sigv4.NewAwsAuthenticator() - auth.Region = a.ses.Database.GetAWS().Region + auth.Region = region auth.AccessKeyId = cred.AccessKeyID auth.SessionToken = cred.SessionToken auth.SecretAccessKey = cred.SecretAccessKey return auth, nil } -func (a *authAWSSigV4Auth) buildRoleARN(username string) string { - if arn.IsARN(username) { - return username - } - resource := username - if !strings.Contains(resource, "/") { - resource = fmt.Sprintf("role/%s", username) - } - - return arn.ARN{ - Partition: awsutils.GetPartitionFromRegion(a.ses.Database.GetAWS().Region), - Service: "iam", - AccountID: a.ses.Database.GetAWS().AccountID, - Resource: resource, - }.String() -} - func (a *authAWSSigV4Auth) initPasswordAuth(clientConn *protocol.Conn, req *protocol.Packet) (*protocol.Packet, error) { authMsg := frame.NewFrame( req.Header().Version, diff --git a/lib/srv/db/common/auth.go b/lib/srv/db/common/auth.go index bf4bf3544f5de..695338dbd3bbe 100644 --- a/lib/srv/db/common/auth.go +++ b/lib/srv/db/common/auth.go @@ -623,7 +623,10 @@ func setupTLSConfigServerName(tlsConfig *tls.Config, sessionCtx *Session) error // of replica set the driver may dial multiple servers and will set // ServerName itself. return nil - + case defaults.ProtocolDynamoDB: + // Don't set the server name for DynamoDB - the engine may dial different endpoints + // based on the client request and will set ServerName itself. + return nil case defaults.ProtocolRedis: // Azure Redis servers always serve the certificates with the proper // hostnames. However, OSS cluster mode may redirect to an IP address, diff --git a/lib/srv/db/common/role/role.go b/lib/srv/db/common/role/role.go index ee28f1655633d..59ddf4691bf3e 100644 --- a/lib/srv/db/common/role/role.go +++ b/lib/srv/db/common/role/role.go @@ -60,6 +60,11 @@ func DatabaseRoleMatchers(dbProtocol string, user, database string) services.Rol return services.RoleMatchers{ &services.DatabaseUserMatcher{User: user}, } + case defaults.ProtocolDynamoDB: + // DynamoDB integration doesn't support schema access control. + return services.RoleMatchers{ + &services.DatabaseUserMatcher{User: user}, + } default: return services.RoleMatchers{ &services.DatabaseUserMatcher{User: user}, diff --git a/lib/srv/db/dynamodb/engine.go b/lib/srv/db/dynamodb/engine.go new file mode 100644 index 0000000000000..ed4bdb402d138 --- /dev/null +++ b/lib/srv/db/dynamodb/engine.go @@ -0,0 +1,406 @@ +/* + + Copyright 2022 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 dynamodb + +import ( + "bufio" + "bytes" + "context" + "encoding/json" + "io" + "net" + "net/http" + "net/url" + "strconv" + "strings" + + "github.com/aws/aws-sdk-go/aws/endpoints" + "github.com/aws/aws-sdk-go/service/dax" + "github.com/aws/aws-sdk-go/service/dynamodb" + "github.com/aws/aws-sdk-go/service/dynamodbstreams" + "github.com/gravitational/trace" + + apievents "github.com/gravitational/teleport/api/types/events" + apiaws "github.com/gravitational/teleport/api/utils/aws" + "github.com/gravitational/teleport/lib/defaults" + "github.com/gravitational/teleport/lib/events" + "github.com/gravitational/teleport/lib/srv/db/common" + "github.com/gravitational/teleport/lib/srv/db/common/role" + "github.com/gravitational/teleport/lib/utils" + libaws "github.com/gravitational/teleport/lib/utils/aws" +) + +// NewEngine create new DynamoDB engine. +func NewEngine(ec common.EngineConfig) common.Engine { + return &Engine{ + EngineConfig: ec, + RoundTrippers: make(map[string]http.RoundTripper), + } +} + +// Engine handles connections from DynamoDB clients coming from Teleport +// proxy over reverse tunnel. +type Engine struct { + // signingSvc will be used by the engine to provide the AWS sigv4 authorization header + // required by AWS for request validation: https://docs.aws.amazon.com/general/latest/gr/signing-elements.html + signingSvc *libaws.SigningService + // EngineConfig is the common database engine configuration. + common.EngineConfig + // clientConn is a client connection. + clientConn net.Conn + // sessionCtx is current session context. + sessionCtx *common.Session + // RoundTrippers is a cache of RoundTrippers, mapped by service endpoint. + // It is not guarded by a mutex, since requests are processed serially. + RoundTrippers map[string]http.RoundTripper + // GetSigningCredsFn allows to set the function responsible for obtaining STS credentials. + // Used in tests to set static AWS credentials and skip API call. + GetSigningCredsFn libaws.GetSigningCredentialsFunc +} + +var _ common.Engine = (*Engine)(nil) + +func (e *Engine) InitializeConnection(clientConn net.Conn, sessionCtx *common.Session) error { + e.clientConn = clientConn + e.sessionCtx = sessionCtx + awsSession, err := e.CloudClients.GetAWSSession(sessionCtx.Database.GetAWS().Region) + if err != nil { + return trace.Wrap(err) + } + svc, err := libaws.NewSigningService(libaws.SigningServiceConfig{ + Clock: e.Clock, + Session: awsSession, + GetSigningCredentials: e.GetSigningCredsFn, + }) + if err != nil { + return trace.Wrap(err) + } + e.signingSvc = svc + return nil +} + +// jsonErr is used to marshal a JSON error response as the AWS CLI expects for errors. +// https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.Errors.html#Programming.Errors.Components +type jsonErr struct { + Code string `json:"__type"` + Message string `json:"message"` +} + +// SendError sends an error to DynamoDB client. +func (e *Engine) SendError(err error) { + if e.clientConn == nil || err == nil || utils.IsOKNetworkError(err) { + return + } + e.Log.WithError(err).Error("DynamoDB connection error") + + // try to convert to a trace err if we can. + code := trace.ErrorToCode(err) + body, err := json.Marshal(jsonErr{ + Code: strconv.Itoa(code), + Message: err.Error(), + }) + if err != nil { + e.Log.WithError(err).Error("failed to marshal error response") + return + } + response := &http.Response{ + Status: http.StatusText(code), + StatusCode: code, + Proto: "HTTP/1.1", + ProtoMajor: 1, + ProtoMinor: 1, + // ContentLength is the authoritative value in the response, + // no need to also add the "Content-Length" header (source: go doc http.Response.Header). + ContentLength: int64(len(body)), + Header: map[string][]string{ + "Content-Type": {"application/json"}, + }, + Body: io.NopCloser(bytes.NewBuffer(body)), + } + + if err := response.Write(e.clientConn); err != nil { + e.Log.WithError(err).Error("failed to send error response to DynamoDB client") + return + } +} + +// HandleConnection authorizes the incoming client connection, connects to the +// target DynamoDB server and starts proxying requests between client/server. +func (e *Engine) HandleConnection(ctx context.Context, _ *common.Session) error { + err := e.checkAccess(ctx, e.sessionCtx) + e.Audit.OnSessionStart(e.Context, e.sessionCtx, err) + if err != nil { + return trace.Wrap(err) + } + defer e.Audit.OnSessionEnd(e.Context, e.sessionCtx) + + clientConnReader := bufio.NewReader(e.clientConn) + for { + req, err := http.ReadRequest(clientConnReader) + if err != nil { + return trace.Wrap(err) + } + + if err := e.process(ctx, req); err != nil { + return trace.Wrap(err) + } + } +} + +// process reads request from connected dynamodb client, processes the requests/responses and sends data back +// to the client. +func (e *Engine) process(ctx context.Context, req *http.Request) (err error) { + if req.Body != nil { + // make sure we close the incoming request's body. ignore any close error. + defer req.Body.Close() + } + + var responseStatusCode uint32 + re, err := e.resolveEndpoint(req) + if err != nil { + // special error case where we couldn't resolve the endpoint, just emit using the configured URI. + e.emitAuditEvent(req, e.sessionCtx.Database.GetURI(), responseStatusCode, err) + return trace.Wrap(err) + } + + // emit an audit event regardless of failure, but using the resolved endpoint. + defer func() { + e.emitAuditEvent(req, re.URL, responseStatusCode, err) + }() + + // try to read, close, and replace the incoming request body. + body, err := libaws.GetAndReplaceReqBody(req) + if err != nil { + return trace.Wrap(err) + } + roundTripper, err := e.getRoundTripper(ctx, re.URL) + if err != nil { + return trace.Wrap(err) + } + // rewrite the request URL and headers before signing it. + outReq, err := rewriteRequest(ctx, req, re, body) + if err != nil { + return trace.Wrap(err) + } + + roleArn := libaws.BuildRoleARN(e.sessionCtx.DatabaseUser, re.SigningRegion, e.sessionCtx.Database.GetAWS().AccountID) + signedReq, err := e.signingSvc.SignRequest(e.Context, outReq, + &libaws.SigningCtx{ + SigningName: re.SigningName, + SigningRegion: re.SigningRegion, + Expiry: e.sessionCtx.Identity.Expires, + SessionName: e.sessionCtx.Identity.Username, + AWSRoleArn: roleArn, + AWSExternalID: e.sessionCtx.Database.GetAWS().ExternalID, + }) + if err != nil { + return trace.Wrap(err) + } + + // Send the request. + resp, err := roundTripper.RoundTrip(signedReq) + if err != nil { + // convert the error from round tripping to try to get a trace error. + err = common.ConvertConnectError(err, e.sessionCtx) + return trace.Wrap(err) + } + defer resp.Body.Close() + responseStatusCode = uint32(resp.StatusCode) + + return trace.Wrap(e.sendResponse(resp)) +} + +// sendResponse sends the response back to the DynamoDB client. +func (e *Engine) sendResponse(resp *http.Response) error { + return trace.Wrap(resp.Write(e.clientConn)) +} + +// emitAuditEvent writes the request and response status code to the audit stream. +func (e *Engine) emitAuditEvent(req *http.Request, uri string, statusCode uint32, err error) { + var eventCode string + if err == nil && statusCode != 0 { + eventCode = events.DynamoDBRequestCode + } else { + eventCode = events.DynamoDBRequestFailureCode + } + // Try to read the body and JSON unmarshal it. + // If this fails, we still want to emit the rest of the event info; the request event Body is nullable, + // so it's ok if body is nil here. + body, err := libaws.UnmarshalRequestBody(req) + if err != nil { + e.Log.WithError(err).Warn("Failed to read request body as JSON, omitting the body from the audit event.") + } + // get the API target from the request header, according to the API request format documentation: + // https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.LowLevelAPI.html#Programming.LowLevelAPI.RequestFormat + target := req.Header.Get(libaws.AmzTargetHeader) + event := &apievents.DynamoDBRequest{ + Metadata: apievents.Metadata{ + Type: events.DatabaseSessionDynamoDBRequestEvent, + Code: eventCode, + }, + UserMetadata: e.sessionCtx.Identity.GetUserMetadata(), + SessionMetadata: common.MakeSessionMetadata(e.sessionCtx), + DatabaseMetadata: apievents.DatabaseMetadata{ + DatabaseService: e.sessionCtx.Database.GetName(), + DatabaseProtocol: e.sessionCtx.Database.GetProtocol(), + DatabaseURI: uri, + DatabaseName: e.sessionCtx.DatabaseName, + DatabaseUser: e.sessionCtx.DatabaseUser, + }, + StatusCode: statusCode, + Path: req.URL.Path, + RawQuery: req.URL.RawQuery, + Method: req.Method, + Target: target, + Body: body, + } + e.Audit.EmitEvent(e.Context, event) +} + +// checkAccess does authorization check for DynamoDB connection about +// to be established. +func (e *Engine) checkAccess(ctx context.Context, sessionCtx *common.Session) error { + ap, err := e.Auth.GetAuthPreference(ctx) + if err != nil { + return trace.Wrap(err) + } + + mfaParams := sessionCtx.MFAParams(ap.GetRequireMFAType()) + dbRoleMatchers := role.DatabaseRoleMatchers( + sessionCtx.Database.GetProtocol(), + sessionCtx.DatabaseUser, + sessionCtx.DatabaseName, + ) + err = sessionCtx.Checker.CheckAccess( + sessionCtx.Database, + mfaParams, + dbRoleMatchers..., + ) + return trace.Wrap(err) +} + +// getRoundTripper makes an HTTP round tripper with TLS config based on the given URL. +func (e *Engine) getRoundTripper(ctx context.Context, URL string) (http.RoundTripper, error) { + if rt, ok := e.RoundTrippers[URL]; ok { + return rt, nil + } + tlsConfig, err := e.Auth.GetTLSConfig(ctx, e.sessionCtx) + if err != nil { + return nil, trace.Wrap(err) + } + // We need to set the ServerName here because the AWS endpoint service prefix is not known in advance, + // and the TLS config we got does not set it. + host, err := getURLHostname(URL) + if err != nil { + return nil, trace.Wrap(err) + } + tlsConfig.ServerName = host + + out, err := defaults.Transport() + if err != nil { + return nil, trace.Wrap(err) + } + out.TLSClientConfig = tlsConfig + e.RoundTrippers[URL] = out + return out, nil +} + +// resolveEndpoint returns a resolved endpoint for either the configured URI or the AWS target service and region. +func (e *Engine) resolveEndpoint(req *http.Request) (*endpoints.ResolvedEndpoint, error) { + endpointID, err := extractEndpointID(req) + if err != nil { + return nil, trace.Wrap(err) + } + opts := func(opts *endpoints.Options) { + opts.ResolveUnknownService = true + } + re, err := endpoints.DefaultResolver().EndpointFor(endpointID, e.sessionCtx.Database.GetAWS().Region, opts) + if err != nil { + return nil, trace.Wrap(err) + } + uri := e.sessionCtx.Database.GetURI() + if uri != "" && uri != apiaws.DynamoDBURIForRegion(e.sessionCtx.Database.GetAWS().Region) { + // override the resolved endpoint URL with the user-configured URI. + re.URL = uri + } + if !strings.Contains(re.URL, "://") { + re.URL = "https://" + re.URL + } + return &re, nil +} + +// rewriteRequest clones a request, modifies the clone to rewrite its URL, and returns the modified request clone. +func rewriteRequest(ctx context.Context, r *http.Request, re *endpoints.ResolvedEndpoint, body []byte) (*http.Request, error) { + resolvedURL, err := url.Parse(re.URL) + if err != nil { + return nil, trace.Wrap(err) + } + reqCopy := r.Clone(ctx) + // set url and host header to match the resolved endpoint. + reqCopy.URL = resolvedURL + reqCopy.Host = resolvedURL.Host + if body == nil { + // no body is fine, skip copying it. + return reqCopy, nil + } + + // copy request body + reqCopy.Body = io.NopCloser(bytes.NewReader(body)) + return reqCopy, nil +} + +// extractEndpointID extracts the AWS endpoint ID from the request header X-Amz-Target. +func extractEndpointID(req *http.Request) (string, error) { + target := req.Header.Get(libaws.AmzTargetHeader) + if target == "" { + return "", trace.BadParameter("missing %q header in http request", libaws.AmzTargetHeader) + } + endpointID, err := endpointIDForTarget(target) + return endpointID, trace.Wrap(err) +} + +// endpointIDForTarget converts a target operation into the appropriate the AWS endpoint ID. +// Target looks like one of DynamoDB_$version.$operation, DynamoDBStreams_$version.$operation, AmazonDAX$version.$operation, +// for example: DynamoDBStreams_20120810.ListStreams +// See X-Amz-Target: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.LowLevelAPI.html +func endpointIDForTarget(target string) (string, error) { + t := strings.ToLower(target) + switch { + case strings.HasPrefix(t, "dynamodbstreams"): + return dynamodbstreams.EndpointsID, nil + case strings.HasPrefix(t, "dynamodb"): + return dynamodb.EndpointsID, nil + case strings.HasPrefix(t, "amazondax"): + return dax.EndpointsID, nil + default: + return "", trace.BadParameter("DynamoDB API target %q is not recognized", target) + } +} + +// getURLHostname parses a URL to extract its hostname. +func getURLHostname(uri string) (string, error) { + if !strings.Contains(uri, "://") { + uri = "schema://" + uri + } + parsed, err := url.Parse(uri) + if err != nil { + return "", trace.Wrap(err) + } + return parsed.Hostname(), nil +} diff --git a/lib/srv/db/dynamodb/engine_test.go b/lib/srv/db/dynamodb/engine_test.go new file mode 100644 index 0000000000000..eacc24f54b3e0 --- /dev/null +++ b/lib/srv/db/dynamodb/engine_test.go @@ -0,0 +1,148 @@ +/* + + Copyright 2022 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 dynamodb + +import ( + "net/http" + "testing" + + "github.com/sirupsen/logrus" + "github.com/stretchr/testify/require" + + "github.com/gravitational/teleport/api/types" + apiaws "github.com/gravitational/teleport/api/utils/aws" + "github.com/gravitational/teleport/lib/srv/db/common" + libaws "github.com/gravitational/teleport/lib/utils/aws" +) + +func TestResolveEndpoint(t *testing.T) { + t.Parallel() + + tests := []struct { + desc string + target string // from X-Amz-Target in requests + region string + wantEndpointID string + wantSigningName string + wantURL string + wantErrMsg string + }{ + { + desc: "dynamodb target in us west", + target: "DynamoDB_20120810.Scan", + region: "us-west-1", + wantEndpointID: "dynamodb", + wantSigningName: "dynamodb", + wantURL: "https://dynamodb.us-west-1.amazonaws.com", + }, + { + desc: "dynamodb target in china", + target: "DynamoDB_20120810.Scan", + region: "cn-north-1", + wantEndpointID: "dynamodb", + wantSigningName: "dynamodb", + wantURL: "https://dynamodb.cn-north-1.amazonaws.com.cn", + }, + { + desc: "dynamodb streams target in us west", + target: "DynamoDBStreams_20120810.ListStreams", + region: "us-west-1", + wantEndpointID: "streams.dynamodb", + wantSigningName: "dynamodb", + wantURL: "https://streams.dynamodb.us-west-1.amazonaws.com", + }, + { + desc: "dynamodb streams target in china", + target: "DynamoDBStreams_20120810.ListStreams", + region: "cn-north-1", + wantEndpointID: "streams.dynamodb", + wantSigningName: "dynamodb", + wantURL: "https://streams.dynamodb.cn-north-1.amazonaws.com.cn", + }, + { + desc: "dax target in us west", + target: "AmazonDAXV3.ListTags", + region: "us-west-1", + wantEndpointID: "dax", + wantSigningName: "dax", + wantURL: "https://dax.us-west-1.amazonaws.com", + }, + { + desc: "dax target in china", + target: "AmazonDAXV3.ListTags", + region: "cn-north-1", + wantEndpointID: "dax", + wantSigningName: "dax", + wantURL: "https://dax.cn-north-1.amazonaws.com.cn", + }, + { + desc: "unrecognizable target", + target: "DDB.Scan", + wantErrMsg: "is not recognized", + }, + } + for _, tt := range tests { + tt := tt + t.Run(tt.desc, func(t *testing.T) { + t.Parallel() + // mock a request. + req := &http.Request{Header: make(http.Header)} + req.Header.Set(libaws.AmzTargetHeader, tt.target) + + // check that the correct endpoint ID is extracted. + endpointID, err := extractEndpointID(req) + if tt.wantErrMsg != "" { + require.Error(t, err) + require.ErrorContains(t, err, tt.wantErrMsg) + return + } + require.Equal(t, tt.wantEndpointID, endpointID) + + // check that the engine resolves the correct URL. + db := &types.DatabaseV3{ + Spec: types.DatabaseSpecV3{ + URI: apiaws.DynamoDBURIForRegion(tt.region), + AWS: types.AWS{ + Region: tt.region, + AccountID: "12345", + }, + }, + } + engine := &Engine{ + EngineConfig: common.EngineConfig{ + Log: logrus.StandardLogger(), + }, + sessionCtx: &common.Session{ + Database: db, + }, + } + re, err := engine.resolveEndpoint(req) + require.NoError(t, err) + require.Equal(t, tt.wantURL, re.URL) + require.Equal(t, tt.wantSigningName, re.SigningName) + + // now use a custom URI and check that it overrides the resolved URL. + db.Spec.URI = "foo.com" + re, err = engine.resolveEndpoint(req) + require.NoError(t, err) + require.Equal(t, "https://foo.com", re.URL) + require.Equal(t, tt.wantSigningName, re.SigningName) + }) + } +} diff --git a/lib/srv/db/dynamodb/test.go b/lib/srv/db/dynamodb/test.go new file mode 100644 index 0000000000000..1bad1513471f5 --- /dev/null +++ b/lib/srv/db/dynamodb/test.go @@ -0,0 +1,171 @@ +/* + + Copyright 2022 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 dynamodb + +import ( + "context" + "encoding/json" + "net/http" + "net/http/httptest" + "strconv" + "sync" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/dynamodb" + "github.com/gravitational/trace" + "github.com/sirupsen/logrus" + + "github.com/gravitational/teleport/lib/defaults" + "github.com/gravitational/teleport/lib/srv/db/common" + awsutils "github.com/gravitational/teleport/lib/utils/aws" +) + +// Client alias for easier use. +type Client = dynamodb.DynamoDB + +// ClientOptionsParams is a struct for client configuration options. +type ClientOptionsParams struct { + Username string +} + +// ClientOptions allows setting test client options. +type ClientOptions func(*ClientOptionsParams) + +// MakeTestClient returns DynamoDB client connection according to the provided +// parameters. +func MakeTestClient(_ context.Context, config common.TestClientConfig, opts ...ClientOptions) (*Client, error) { + provider := session.Must(session.NewSession(&aws.Config{ + Credentials: credentials.NewCredentials(&credentials.StaticProvider{Value: credentials.Value{ + AccessKeyID: "fakeClientKeyID", + SecretAccessKey: "fakeClientSecret", + }}), + Region: aws.String("local"), + })) + dynamoClient := dynamodb.New(provider, &aws.Config{ + Endpoint: aws.String("http://" + config.Address), + MaxRetries: aws.Int(0), // disable automatic retries in tests + HTTPClient: &http.Client{Timeout: 5 * time.Second}, + }) + return dynamoClient, nil +} + +// TestServerOption allows setting test server options. +type TestServerOption func(*TestServer) + +// TestServer is a DynamoDB test server that mocks AWS signature checking and API. +type TestServer struct { + cfg common.TestServerConfig + log logrus.FieldLogger + port string + server *httptest.Server + + // mu is needed to guard starting/closing the server. + mu sync.Mutex +} + +// NewTestServer returns a new instance of a test DynamoDB server. +func NewTestServer(config common.TestServerConfig, opts ...TestServerOption) (*TestServer, error) { + err := config.CheckAndSetDefaults() + if err != nil { + return nil, trace.Wrap(err) + } + + log := logrus.WithFields(logrus.Fields{ + trace.Component: defaults.ProtocolDynamoDB, + "name": config.Name, + }) + tlsConfig, err := common.MakeTestServerTLSConfig(config) + if err != nil { + return nil, trace.Wrap(err) + } + tlsConfig.InsecureSkipVerify = true // DynamoDB verifies requests with AWS sig v4, not mTLS. + + port, err := config.Port() + if err != nil { + return nil, trace.Wrap(err) + } + + mux := http.NewServeMux() + mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + err := awsutils.VerifyAWSSignature(r, credentials.NewStaticCredentials("AKIDl", "SECRET", "SESSION")) + if err != nil { + code := trace.ErrorToCode(err) + body, _ := json.Marshal(jsonErr{ + Code: strconv.Itoa(code), + Message: err.Error(), + }) + http.Error(w, string(body), code) + return + } + w.Header().Set("Content-Type", awsutils.AmzJSON1_1) + w.Header().Set("Content-Length", strconv.Itoa(len(testListTablesResponse))) + w.Write([]byte(testListTablesResponse)) + }) + + server := &TestServer{ + cfg: config, + log: log, + port: port, + server: &httptest.Server{ + Listener: config.Listener, + Config: &http.Server{Handler: mux}, + TLS: tlsConfig, + }, + } + + for _, opt := range opts { + opt(server) + } + + return server, nil +} + +// Serve starts serving client connections. +func (s *TestServer) Serve() error { + s.mu.Lock() + defer s.mu.Unlock() + s.server.StartTLS() + return nil +} + +// Close closes the server. +func (s *TestServer) Close() error { + s.mu.Lock() + defer s.mu.Unlock() + s.server.Close() + return nil +} + +func (s *TestServer) Port() string { + return s.port +} + +const ( + // testListTablesResponse is a default successful ListTables JSON response. + testListTablesResponse = ` +{ + "TableNames": [ + "table-one", + "table-two" + ] +}` +) diff --git a/lib/srv/db/dynamodb_test.go b/lib/srv/db/dynamodb_test.go new file mode 100644 index 0000000000000..4e175202474e8 --- /dev/null +++ b/lib/srv/db/dynamodb_test.go @@ -0,0 +1,241 @@ +/* +Copyright 2022 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 db + +import ( + "context" + "crypto/tls" + "net" + "net/http" + "testing" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/client" + "github.com/aws/aws-sdk-go/aws/credentials" + awsdynamodb "github.com/aws/aws-sdk-go/service/dynamodb" + "github.com/stretchr/testify/require" + + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/lib/defaults" + libevents "github.com/gravitational/teleport/lib/events" + "github.com/gravitational/teleport/lib/srv/db/common" + "github.com/gravitational/teleport/lib/srv/db/dynamodb" +) + +func registerTestDynamoDBEngine() { + // Override DynamoDB engine that is used normally with the test one + // with custom HTTP client. + common.RegisterEngine(newTestDynamoDBEngine, defaults.ProtocolDynamoDB) +} + +func newTestDynamoDBEngine(ec common.EngineConfig) common.Engine { + return &dynamodb.Engine{ + EngineConfig: ec, + RoundTrippers: make(map[string]http.RoundTripper), + // inject mock AWS credentials. + GetSigningCredsFn: staticAWSCredentials, + } +} + +func staticAWSCredentials(client.ConfigProvider, time.Time, string, string, string) *credentials.Credentials { + return credentials.NewStaticCredentials("AKIDl", "SECRET", "SESSION") +} + +func TestAccessDynamoDB(t *testing.T) { + t.Parallel() + + ctx := context.Background() + mockTables := []string{"table-one", "table-two"} + testCtx := setupTestContext(ctx, t, + withDynamoDB("DynamoDB")) + go testCtx.startHandlingConnections() + + tests := []struct { + desc string + user string + role string + allowDbUsers []string + dbUser string + wantErrMsg string + }{ + { + desc: "has access to all database names and users", + user: "alice", + role: "admin", + allowDbUsers: []string{types.Wildcard}, + dbUser: "alice", + }, + { + desc: "access allowed to specific user", + user: "alice", + role: "admin", + allowDbUsers: []string{"alice"}, + dbUser: "alice", + }, + { + desc: "has access to nothing", + user: "alice", + role: "admin", + allowDbUsers: []string{}, + dbUser: "alice", + wantErrMsg: "access to db denied", + }, + { + desc: "no access to users", + user: "alice", + role: "admin", + allowDbUsers: []string{}, + dbUser: "alice", + wantErrMsg: "access to db denied", + }, + { + desc: "access denied to specific user", + user: "alice", + role: "admin", + allowDbUsers: []string{"alice"}, + dbUser: "bob", + wantErrMsg: "access to db denied", + }, + } + + for _, test := range tests { + t.Run(test.desc, func(t *testing.T) { + // Create user/role with the requested permissions. + testCtx.createUserAndRole(ctx, t, test.user, test.role, test.allowDbUsers, []string{} /*allow DB names*/) + + // Try to connect to the database as this user. + clt, lp, err := testCtx.dynamodbClient(ctx, test.user, "DynamoDB", test.dbUser) + t.Cleanup(func() { + if lp != nil { + lp.Close() + } + }) + require.NoError(t, err) + + // Execute a dynamodb query. + out, err := clt.ListTables(&awsdynamodb.ListTablesInput{}) + if test.wantErrMsg != "" { + require.Error(t, err) + require.ErrorContains(t, err, test.wantErrMsg) + return + } + require.NoError(t, err) + require.ElementsMatch(t, mockTables, aws.StringValueSlice(out.TableNames)) + }) + } +} + +func TestAuditDynamoDB(t *testing.T) { + ctx := context.Background() + testCtx := setupTestContext(ctx, t, + withDynamoDB("DynamoDB")) + go testCtx.startHandlingConnections() + + testCtx.createUserAndRole(ctx, t, "alice", "admin", []string{"admin"}, []string{types.Wildcard}) + + clientCtx, cancel := context.WithCancel(ctx) + t.Run("access denied", func(t *testing.T) { + // Try to connect to the database as this user. + clt, lp, err := testCtx.dynamodbClient(clientCtx, "alice", "DynamoDB", "notadmin") + t.Cleanup(func() { + if lp != nil { + lp.Close() + } + }) + require.NoError(t, err) + + // Execute a dynamodb query. + _, err = clt.ListTables(&awsdynamodb.ListTablesInput{}) + require.Error(t, err) + require.ErrorContains(t, err, "access to db denied") + requireEvent(t, testCtx, libevents.DatabaseSessionStartFailureCode) + }) + + // HTTP request should trigger successful session start/end events and emit an audit event for the request. + clt, lp, err := testCtx.dynamodbClient(clientCtx, "alice", "DynamoDB", "admin") + t.Cleanup(func() { + cancel() + if lp != nil { + lp.Close() + } + }) + require.NoError(t, err) + + t.Run("session starts and emits a request event", func(t *testing.T) { + _, err := clt.ListTables(&awsdynamodb.ListTablesInput{}) + require.NoError(t, err) + requireEvent(t, testCtx, libevents.DatabaseSessionStartCode) + requireEvent(t, testCtx, libevents.DynamoDBRequestCode) + }) + + t.Run("session ends when client closes the connection", func(t *testing.T) { + clt.Config.HTTPClient.CloseIdleConnections() + requireEvent(t, testCtx, libevents.DatabaseSessionEndCode) + }) + + t.Run("session ends when local proxy closes the connection", func(t *testing.T) { + // closing local proxy and canceling the context used to start it should trigger session end event. + // without this cancel, the session will not end until the smaller of client_idle_timeout or the testCtx closes. + _, err := clt.ListTables(&awsdynamodb.ListTablesInput{}) + require.NoError(t, err) + requireEvent(t, testCtx, libevents.DatabaseSessionStartCode) + requireEvent(t, testCtx, libevents.DynamoDBRequestCode) + cancel() + lp.Close() + requireEvent(t, testCtx, libevents.DatabaseSessionEndCode) + }) +} + +func withDynamoDB(name string, opts ...dynamodb.TestServerOption) withDatabaseOption { + return func(t *testing.T, _ context.Context, testCtx *testContext) types.Database { + config := common.TestServerConfig{ + Name: name, + AuthClient: testCtx.authClient, + ClientAuth: tls.NoClientCert, // DynamoDB is cloud hosted and does not use mTLS. + } + server, err := dynamodb.NewTestServer(config, opts...) + require.NoError(t, err) + go server.Serve() + t.Cleanup(func() { server.Close() }) + + require.Len(t, testCtx.databaseCA.GetActiveKeys().TLS, 1) + ca := string(testCtx.databaseCA.GetActiveKeys().TLS[0].Cert) + database, err := types.NewDatabaseV3(types.Metadata{ + Name: name, + }, types.DatabaseSpecV3{ + Protocol: defaults.ProtocolDynamoDB, + URI: net.JoinHostPort("localhost", server.Port()), + DynamicLabels: dynamicLabels, + AWS: types.AWS{ + Region: "us-west-1", + AccountID: "12345", + }, + TLS: types.DatabaseTLS{ + // Set CA, otherwise the engine will attempt to download and use the AWS CA. + CACert: ca, + }, + }) + require.NoError(t, err) + + testCtx.dynamodb[name] = testDynamoDB{ + db: server, + resource: database, + } + return database + } +} diff --git a/lib/srv/db/server.go b/lib/srv/db/server.go index 60e1a3657afbb..ddb4ef74beccc 100644 --- a/lib/srv/db/server.go +++ b/lib/srv/db/server.go @@ -45,6 +45,7 @@ import ( "github.com/gravitational/teleport/lib/srv/db/cloud" "github.com/gravitational/teleport/lib/srv/db/cloud/users" "github.com/gravitational/teleport/lib/srv/db/common" + "github.com/gravitational/teleport/lib/srv/db/dynamodb" "github.com/gravitational/teleport/lib/srv/db/elasticsearch" "github.com/gravitational/teleport/lib/srv/db/mongodb" "github.com/gravitational/teleport/lib/srv/db/mysql" @@ -64,6 +65,7 @@ func init() { common.RegisterEngine(redis.NewEngine, defaults.ProtocolRedis) common.RegisterEngine(snowflake.NewEngine, defaults.ProtocolSnowflake) common.RegisterEngine(sqlserver.NewEngine, defaults.ProtocolSQLServer) + common.RegisterEngine(dynamodb.NewEngine, defaults.ProtocolDynamoDB) } // Config is the configuration for a database proxy server. diff --git a/tool/teleport/common/teleport.go b/tool/teleport/common/teleport.go index 06a160e7dc405..041a884cc96db 100644 --- a/tool/teleport/common/teleport.go +++ b/tool/teleport/common/teleport.go @@ -220,6 +220,7 @@ func Run(options Options) (app *kingpin.Application, executedCommand string, con dbStartCmd.Flag("ca-cert", "Database CA certificate path.").StringVar(&ccf.DatabaseCACertFile) dbStartCmd.Flag("aws-region", "(Only for RDS, Aurora, Redshift, ElastiCache or MemoryDB) AWS region AWS hosted database instance is running in.").StringVar(&ccf.DatabaseAWSRegion) dbStartCmd.Flag("aws-account-id", "(Only for Keyspaces) AWS Account ID.").StringVar(&ccf.DatabaseAWSAccountID) + dbStartCmd.Flag("aws-external-id", "Optional AWS external ID used when assuming an AWS role.").StringVar(&ccf.DatabaseAWSExternalID) dbStartCmd.Flag("aws-redshift-cluster-id", "(Only for Redshift) Redshift database cluster identifier.").StringVar(&ccf.DatabaseAWSRedshiftClusterID) dbStartCmd.Flag("aws-rds-instance-id", "(Only for RDS) RDS instance identifier.").StringVar(&ccf.DatabaseAWSRDSInstanceID) dbStartCmd.Flag("aws-rds-cluster-id", "(Only for Aurora) Aurora cluster identifier.").StringVar(&ccf.DatabaseAWSRDSClusterID) @@ -260,6 +261,7 @@ func Run(options Options) (app *kingpin.Application, executedCommand string, con dbConfigureCreate.Flag("uri", "Address the proxied database is reachable at.").StringVar(&dbConfigCreateFlags.StaticDatabaseURI) dbConfigureCreate.Flag("labels", "Comma-separated list of labels for the database, for example env=dev,dept=it").StringVar(&dbConfigCreateFlags.StaticDatabaseRawLabels) dbConfigureCreate.Flag("aws-region", "(Only for AWS-hosted databases) AWS region RDS, Aurora, Redshift, Redshift Serverless, ElastiCache, or MemoryDB database instance is running in.").StringVar(&dbConfigCreateFlags.DatabaseAWSRegion) + dbConfigureCreate.Flag("aws-external-id", "(Only for AWS-hosted databases) Optional AWS external ID to use when assuming AWS roles.").StringVar(&dbConfigCreateFlags.DatabaseAWSExternalID) dbConfigureCreate.Flag("aws-redshift-cluster-id", "(Only for Redshift) Redshift database cluster identifier.").StringVar(&dbConfigCreateFlags.DatabaseAWSRedshiftClusterID) dbConfigureCreate.Flag("ad-domain", "(Only for SQL Server) Active Directory domain.").StringVar(&dbConfigCreateFlags.DatabaseADDomain) dbConfigureCreate.Flag("ad-spn", "(Only for SQL Server) Service Principal Name for Active Directory auth.").StringVar(&dbConfigCreateFlags.DatabaseADSPN) diff --git a/tool/tsh/db.go b/tool/tsh/db.go index 7e4a26c82a527..057767351435c 100644 --- a/tool/tsh/db.go +++ b/tool/tsh/db.go @@ -17,6 +17,7 @@ limitations under the License. package main import ( + "bytes" "context" "encoding/base64" "fmt" @@ -253,8 +254,12 @@ func onDatabaseLogin(cf *CLIConf) error { // Print after-login message. templateData := map[string]string{ - "name": routeToDatabase.ServiceName, - "connectCommand": utils.Color(utils.Yellow, formatDatabaseConnectCommand(cf.SiteName, routeToDatabase)), + "name": routeToDatabase.ServiceName, + } + + // DynamoDB does not support a connect command, so don't try to print one. + if database.GetProtocol() != defaults.ProtocolDynamoDB { + templateData["connectCommand"] = utils.Color(utils.Yellow, formatDatabaseConnectCommand(cf.SiteName, routeToDatabase)) } if shouldUseLocalProxyForDatabase(tc, &routeToDatabase) { @@ -270,13 +275,23 @@ func checkAndSetDBRouteDefaults(r *tlsca.RouteToDatabase) error { // When generating certificate for MongoDB access, database username must // be encoded into it. This is required to be able to tell which database // user to authenticate the connection as. - if r.Protocol == defaults.ProtocolMongoDB && r.Username == "" { - return trace.BadParameter("please provide the database user name using --db-user flag") + if r.Username == "" { + switch r.Protocol { + case defaults.ProtocolMongoDB: + return trace.BadParameter("please provide the database user name using the --db-user flag") + case defaults.ProtocolRedis: + // Default to "default" in the same way as Redis does. We need the username to check access on our side. + // ref: https://redis.io/commands/auth + r.Username = defaults.DefaultRedisUsername + } } - if r.Protocol == defaults.ProtocolRedis && r.Username == "" { - // Default to "default" in the same way as Redis does. We need the username to check access on our side. - // ref: https://redis.io/commands/auth - r.Username = defaults.DefaultRedisUsername + if r.Database != "" { + switch r.Protocol { + case defaults.ProtocolDynamoDB: + log.Warnf("Database %v protocol %v does not support --db-name flag, ignoring --db-name=%v", + r.ServiceName, defaults.ReadableDatabaseProtocol(r.Protocol), r.Database) + r.Database = "" + } } return nil } @@ -406,17 +421,11 @@ func onDatabaseEnv(cf *CLIConf) error { } if !dbprofile.IsSupported(*database) { - return trace.BadParameter(dbCmdUnsupportedDBProtocol, - cf.CommandWithBinary(), - defaults.ReadableDatabaseProtocol(database.Protocol), - ) + return trace.BadParameter(formatDbCmdUnsupportedDBProtocol(cf, database)) } - // MySQL requires ALPN local proxy in signle port mode. + // MySQL requires ALPN local proxy in single port mode. if tc.TLSRoutingEnabled && database.Protocol == defaults.ProtocolMySQL { - return trace.BadParameter(dbCmdUnsupportedTLSRouting, - cf.CommandWithBinary(), - defaults.ReadableDatabaseProtocol(database.Protocol), - ) + return trace.BadParameter(formatDbCmdUnsupportedTLSRouting(cf, database)) } env, err := dbprofile.Env(tc, *database) @@ -473,17 +482,11 @@ func onDatabaseConfig(cf *CLIConf) error { // the remote proxy directly. Return errors here when direct connection // does NOT work (e.g. when ALPN local proxy is required). if isLocalProxyAlwaysRequired(database.Protocol) { - return trace.BadParameter(dbCmdUnsupportedDBProtocol, - cf.CommandWithBinary(), - defaults.ReadableDatabaseProtocol(database.Protocol), - ) + return trace.BadParameter(formatDbCmdUnsupportedDBProtocol(cf, database)) } - // MySQL requires ALPN local proxy in signle port mode. + // MySQL requires ALPN local proxy in single port mode. if tc.TLSRoutingEnabled && database.Protocol == defaults.ProtocolMySQL { - return trace.BadParameter(dbCmdUnsupportedTLSRouting, - cf.CommandWithBinary(), - defaults.ReadableDatabaseProtocol(database.Protocol), - ) + return trace.BadParameter(formatDbCmdUnsupportedTLSRouting(cf, database)) } host, port := tc.DatabaseProxyHostPort(*database) @@ -564,9 +567,10 @@ func maybeStartLocalProxy(ctx context.Context, cf *CLIConf, tc *client.TeleportC return []dbcmd.ConnectCommandFunc{}, nil } - // Some protocols (Snowflake, Elasticsearch) only works in the local tunnel mode. + // Some protocols (Snowflake, DynamoDB) only works in the local tunnel mode. + // ElasticSearch can work without the --tunnel flag, but not via `tsh db connect`. localProxyTunnel := cf.LocalProxyTunnel - if db.Protocol == defaults.ProtocolSnowflake || db.Protocol == defaults.ProtocolElasticsearch { + if requiresLocalProxyTunnel(db.Protocol) || db.Protocol == defaults.ProtocolElasticsearch { localProxyTunnel = true } @@ -731,6 +735,9 @@ func onDatabaseConnect(cf *CLIConf) error { if err != nil { return trace.Wrap(err) } + if routeToDatabase.Protocol == defaults.ProtocolDynamoDB { + return trace.BadParameter(formatDbCmdUnsupportedDBProtocol(cf, routeToDatabase)) + } if err := maybeDatabaseLogin(cf, tc, profile, routeToDatabase); err != nil { return trace.Wrap(err) } @@ -1076,13 +1083,55 @@ func isLocalProxyAlwaysRequired(protocol string) bool { switch protocol { case defaults.ProtocolSQLServer, defaults.ProtocolSnowflake, - defaults.ProtocolCassandra: + defaults.ProtocolCassandra, + defaults.ProtocolDynamoDB: return true default: return false } } +// formatDbCmdUnsupportedWithCondition is a helper func that formats a generic unsupported DB error message. +// The condition argument is optional and can be "", but otherwise it should be a specific condition for which this DB subcommand +// is not supported, e.g. "when TLS routing is enabled" or "without using the --tunnel flag". +func formatDbCmdUnsupportedWithCondition(cf *CLIConf, database *tlsca.RouteToDatabase, condition string) string { + templateData := map[string]any{ + "command": cf.CommandWithBinary(), + "protocol": defaults.ReadableDatabaseProtocol(database.Protocol), + "alternatives": getDbCmdAlternatives(cf.SiteName, database), + "condition": condition, + } + + buf := bytes.NewBuffer(nil) + _ = dbCmdUnsupportedTemplate.Execute(buf, templateData) + return buf.String() +} + +// formatDbCmdUnsupportedDBProtocol is a helper func that formats the unsupported DB protocol error message unconditionally. +func formatDbCmdUnsupportedDBProtocol(cf *CLIConf, database *tlsca.RouteToDatabase) string { + return formatDbCmdUnsupportedWithCondition(cf, database, "") +} + +// formatDbCmdUnsupportedTLSRouting is a helper func that formats an unsupported DB Protocol error with a TLS routing condition. +func formatDbCmdUnsupportedTLSRouting(cf *CLIConf, database *tlsca.RouteToDatabase) string { + return formatDbCmdUnsupportedWithCondition(cf, database, "when TLS routing is enabled on the Teleport Proxy Service") +} + +// getDbCmdAlternatives is a helper func that returns alternative tsh commands for connecting to a database. +func getDbCmdAlternatives(clusterFlag string, database *tlsca.RouteToDatabase) []string { + var alts []string + switch database.Protocol { + case defaults.ProtocolDynamoDB: + // DynamoDB only works with a local proxy tunnel and there is no "shell-like" cli, so `tsh db connect` doesn't make sense. + default: + // prefer displaying the connect command as the first suggested command alternative. + alts = append(alts, formatDatabaseConnectCommand(clusterFlag, *database)) + } + // all db protocols support this command. + alts = append(alts, formatDatabaseProxyCommand(clusterFlag, *database)) + return alts +} + const ( // dbFormatText prints database configuration in text format. dbFormatText = "text" @@ -1094,36 +1143,40 @@ const ( dbFormatYAML = "yaml" ) -const ( - // dbCmdUnsupportedTLSRouting is the error message printed when some - // database subcommands are not supported because TLS routing is enabled. - dbCmdUnsupportedTLSRouting = `"%v" is not supported for %v databases when TLS routing is enabled on the Teleport Proxy Service. - -Please use "tsh db connect" or "tsh proxy db" to connect to the database.` - - // dbCmdUnsupportedDBProtocol is the error message printed when some - // database subcommands are run against unsupported database protocols. - dbCmdUnsupportedDBProtocol = `"%v" is not supported for %v databases. - -Please use "tsh db connect" or "tsh proxy db" to connect to the database.` +var ( + // dbCmdUnsupportedTemplate is the error message printed when some + // database subcommands are not supported. + dbCmdUnsupportedTemplate = template.Must(template.New("").Parse(`"{{.command}}" is not supported for {{.protocol}} databases{{if .condition}} {{.condition}}{{end}}. +{{if eq (len .alternatives) 1}} +Please use the following command to connect to the database: + {{index .alternatives 0 -}}{{else}} +Please use one of the following commands to connect to the database: + {{- range .alternatives}} + {{.}}{{end -}} +{{- end}}`)) ) var ( // dbConnectTemplate is the message printed after a successful "tsh db login" on how to connect. dbConnectTemplate = template.Must(template.New("").Parse(`Connection information for database "{{ .name }}" has been saved. +{{if .connectCommand -}} + You can now connect to it using the following command: {{.connectCommand}} +{{end -}} {{if .configCommand -}} -Or view the connect command for the native database CLI client: + +You can view the connect command for the native database CLI client: {{ .configCommand }} {{end -}} {{if .proxyCommand -}} -Or start a local proxy for database GUI clients: + +You can start a local proxy for database GUI clients: {{ .proxyCommand }} diff --git a/tool/tsh/db_test.go b/tool/tsh/db_test.go index c9e60d4b2f5c1..e2bcb00eb1b59 100644 --- a/tool/tsh/db_test.go +++ b/tool/tsh/db_test.go @@ -70,6 +70,15 @@ func TestDatabaseLogin(t *testing.T) { Name: "mssql", Protocol: defaults.ProtocolSQLServer, URI: "localhost:1433", + }, service.Database{ + Name: "dynamodb", + Protocol: defaults.ProtocolDynamoDB, + URI: "", // uri can be blank for DynamoDB, it will be derived from the region and requests. + AWS: service.DatabaseAWS{ + AccountID: "12345", + ExternalID: "123123123", + Region: "us-west-1", + }, }) authServer := authProcess.GetAuthServer() @@ -110,6 +119,12 @@ func TestDatabaseLogin(t *testing.T) { expectErrForConfigCmd: true, // "tsh db config" not supported for MSSQL. expectErrForEnvCmd: true, // "tsh db env" not supported for MSSQL. }, + { + databaseName: "dynamodb", + expectCertsLen: 1, + expectErrForConfigCmd: true, // "tsh db config" not supported for DynamoDB. + expectErrForEnvCmd: true, // "tsh db env" not supported for DynamoDB. + }, } // Note: keystore currently races when multiple tsh clients work in the @@ -130,8 +145,8 @@ func TestDatabaseLogin(t *testing.T) { // Verify certificates. certs, keys, err := decodePEM(profile.DatabaseCertPathForCluster("", test.databaseName)) require.NoError(t, err) - require.Len(t, certs, test.expectCertsLen) - require.Len(t, keys, test.expectKeysLen) + require.Equal(t, test.expectCertsLen, len(certs)) // don't use require.Len, because it spams PEM bytes on fail. + require.Equal(t, test.expectKeysLen, len(keys)) // don't use require.Len, because it spams PEM bytes on fail. }) } @@ -492,6 +507,12 @@ func TestFormatDatabaseConnectArgs(t *testing.T) { route: tlsca.RouteToDatabase{Protocol: defaults.ProtocolMySQL, Username: "bob", ServiceName: "svc"}, wantFlags: []string{"svc"}, }, + { + name: "match user name, dynamodb", + cluster: "", + route: tlsca.RouteToDatabase{Protocol: defaults.ProtocolDynamoDB, ServiceName: "svc"}, + wantFlags: []string{"--db-user=", "svc"}, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/tool/tsh/proxy.go b/tool/tsh/proxy.go index 1fe5a5121855c..e78fa8958c883 100644 --- a/tool/tsh/proxy.go +++ b/tool/tsh/proxy.go @@ -379,12 +379,14 @@ func onProxyCommandDB(cf *CLIConf) error { if err != nil { return trace.Wrap(err) } - if err := maybeDatabaseLogin(cf, client, profile, routeToDatabase); err != nil { - return trace.Wrap(err) + + // Some protocols require the --tunnel flag, e.g. Snowflake, DynamoDB. + if !cf.LocalProxyTunnel && requiresLocalProxyTunnel(routeToDatabase.Protocol) { + return trace.BadParameter(formatDbCmdUnsupportedWithCondition(cf, routeToDatabase, "without the --tunnel flag")) } - if routeToDatabase.Protocol == defaults.ProtocolSnowflake && !cf.LocalProxyTunnel { - return trace.BadParameter("Snowflake proxy works only in the tunnel mode. Please add --tunnel flag to enable it") + if err := maybeDatabaseLogin(cf, client, profile, routeToDatabase); err != nil { + return trace.Wrap(err) } rootCluster, err := client.RootClusterName(cf.Context) @@ -864,6 +866,16 @@ func envVarCommand(format, key, value string) (string, error) { } } +// requiresLocalProxyTunnel returns whether the given protocol requires a local proxy with the --tunnel flag. +func requiresLocalProxyTunnel(protocol string) bool { + switch protocol { + case defaults.ProtocolSnowflake, defaults.ProtocolDynamoDB: + return true + default: + return false + } +} + var awsTemplateFuncs = template.FuncMap{ "envVarCommand": envVarCommand, } diff --git a/tool/tsh/tsh.go b/tool/tsh/tsh.go index ee6e17bbe7a91..5fba4637b2fc7 100644 --- a/tool/tsh/tsh.go +++ b/tool/tsh/tsh.go @@ -2536,7 +2536,13 @@ func getDatabaseRow(proxy, cluster, clusterFlag string, database types.Database, for _, a := range active { if a.ServiceName == name { name = formatActiveDB(a) - connect = formatDatabaseConnectCommand(clusterFlag, a) + switch a.Protocol { + case defaults.ProtocolDynamoDB: + // DynamoDB does not support "tsh db connect", so print the proxy command instead. + connect = formatDatabaseProxyCommand(clusterFlag, a) + default: + connect = formatDatabaseConnectCommand(clusterFlag, a) + } } }