From 956bd970131eba0dd21c39b1e657c8570d468634 Mon Sep 17 00:00:00 2001 From: Alexgao001 Date: Tue, 9 Apr 2024 10:29:30 +0800 Subject: [PATCH] refine code --- .gitignore | 3 +- Makefile | 19 +- README.MD | 12 - README.md | 107 ++++ cache/cache.go | 4 +- cmd/blob-syncer/main.go | 116 +---- config/config.go | 145 +++++- config/const.go | 26 +- config/utils.go | 45 -- db/blob.go | 19 +- db/block.go | 15 +- db/bundle.go | 2 +- db/dao.go | 43 +- entity/entity.go | 21 - external/beacon_client.go | 40 +- external/beacon_client_test.go | 95 ++-- external/bundle_client.go | 75 +-- external/bundle_client_test.go | 29 +- external/eth_client.go | 7 +- external/test.bundle | 3 - go.mod | 2 +- logging/log.go | 3 +- models/sidecar.go | 215 +++++++- restapi/configure_blob_syncer.go | 72 +-- restapi/embedded_spec.go | 189 +++++++- restapi/handlers/blob.go | 64 ++- restapi/handlers/handlers.go | 40 -- .../blob/get_blob_sidecars_by_block_num.go | 2 +- ...t_blob_sidecars_by_block_num_parameters.go | 70 ++- ...t_blob_sidecars_by_block_num_urlbuilder.go | 35 +- restapi/operations/blob_syncer_api.go | 2 +- scripts/format.sh | 11 + service/blob.go | 82 +++- service/error.go | 16 +- swagger.yaml | 51 +- syncer/blob_syncer.go | 458 ------------------ syncer/conveter.go | 19 + syncer/syncer.go | 371 ++++++++++++++ test/testfile | 1 - 39 files changed, 1507 insertions(+), 1022 deletions(-) delete mode 100644 README.MD create mode 100644 README.md delete mode 100644 config/utils.go delete mode 100644 entity/entity.go delete mode 100644 external/test.bundle delete mode 100644 restapi/handlers/handlers.go create mode 100644 scripts/format.sh delete mode 100644 syncer/blob_syncer.go create mode 100644 syncer/syncer.go delete mode 100644 test/testfile diff --git a/.gitignore b/.gitignore index eba5fea..2d2d804 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ .idea/* build/* .local -config/local/* +/temp/ +/config/local/ diff --git a/Makefile b/Makefile index e263d97..6526ad7 100644 --- a/Makefile +++ b/Makefile @@ -10,24 +10,25 @@ ldflags = -X $(REPO)/version.AppVersion=$(VERSION) \ build_syncer: ifeq ($(OS),Windows_NT) - go build -o build/blob-syncer.exe -ldflags="$(ldflags)" cmd/blob-syncer/main.go + go build -o build/syncer.exe -ldflags="$(ldflags)" cmd/blob-syncer/main.go else - go build -o build/blob-syncer -ldflags="$(ldflags)" cmd/blob-syncer/main.go + go build -o build/syncer -ldflags="$(ldflags)" cmd/blob-syncer/main.go endif build_server: ifeq ($(OS),Windows_NT) - go build -o build/blob-syncer-server.exe -ldflags="$(ldflags)" cmd/blob-syncer-server/main.go + go build -o build/server.exe -ldflags="$(ldflags)" cmd/blob-syncer-server/main.go else - go build -o build/blob-syncer-server -ldflags="$(ldflags)" cmd/blob-syncer-server/main.go + go build -o build/server -ldflags="$(ldflags)" cmd/blob-syncer-server/main.go endif +build: + make build_syncer + make build_server + install: -ifeq ($(OS),Windows_NT) - go install main.go -else - go install main.go -endif + go install cmd/blob-syncer/main.go + go install cmd/blob-syncer-server/main.go build_docker: docker build . -t ${IMAGE_NAME} diff --git a/README.MD b/README.MD deleted file mode 100644 index 152f091..0000000 --- a/README.MD +++ /dev/null @@ -1,12 +0,0 @@ -run the syncer instance: -```shell -./build/blob-syncer --config-type local --config-path config/config.json -```` - -run the server instance - -```shell -./build/blob-syncer-server --config-path config/config.json --port 8080 -``` - - diff --git a/README.md b/README.md new file mode 100644 index 0000000..82e2fb5 --- /dev/null +++ b/README.md @@ -0,0 +1,107 @@ +run the syncer instance: +```shell +./build/blob-syncer --config-type local --config-path config/config.json +```` + +run the server instance + +```shell +./build/blob-syncer-server --config-path config/config.json --port 8080 +``` + +# Blob syncer + +## Overview + +The blob-syncer is the service sitting between Greenfield and Ethereum, constantly fetching blobs from Ethereum and persisting +them into Greenfield storage for permanent archiving. The blob-syncer service also provides APIs for users to query historical blobs. + +## Components +- syncer: the syncer is designed to sync blobs and store into Greenfield. +- server: the server is to serve user query request. + +## Build + +### Build blob syncer + +```shell +make build_syncer +``` + +### Build blob syncer api server + +```shell +make build_server +``` + +## Run + +### Run blob syncer instance + +```shell +./build/blob-syncer --config-type local --config-path config/config.json +``` + +### Run the api server + +```shell +./build/blob-syncer-server --config-path config/config.json --port 8080 +``` + +## Blob syncer API + +The Blob syncer server provides eth compatible API to query historical blob + + +### Get blob sidecars. + +* GET /eth/v1/beacon/blob_sidecars/{block_id} + +| ParameterName | Type | Description | +|--------------| ------ |------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| block_id | string | Block identifier. Can be one of: , . note: "head" (canonical head in node's view), "genesis", "finalized" are not support | +| indices | array | Array of indices for blob sidecars to request for in the specified block. Returns all blob sidecars in the block if not specified | + + +200: Ok response + +```json +{ + "data": [ + { + "index": "1", + "blob": "0x0006eac4e2fac2ca844810be0dc9e398fa4961656c022b65e4af13728152980a00ed0800010017da0001003eff00010039d6000100bedd0001004ffb0001000000e600010022e000010004e5000000014df70a66ff064061f10bff8211f2ff8000c0040e8301a7f7941096..", + "kzg_commitment": "0xb94c3ea2014aa34424b0e619ae91cb2c7299f219160c0702e7c0c66f063b7d368e1d881dd35f8b53ae00490abc455c64", + "kzg_proof": "0xb542bb5619c8609c260133c0b0fb90e889aa2080d44ea842de26de30280acbbdf4c197a4f3620575cb6fa3ff614fec2e", + "commitmentInclusionProof": [ + "0xeb4561cc212f3ff20b46b842abe512ef4fe80e4f7ba19a157e990973317e576d", + "0xdd5a6c8cfbc72ee48dc5d5b8d912d09bd70de2ec11ae0a57d9a2e8531d9d561c", + "0xc59bf2f2ec6443c468fc918dd7ddec3b588a899ee8b165866cf43898311b18fa", + "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x0600000000000000000000000000000000000000000000000000000000000000", + "0x792930bbd5baac43bcc798ee49aa8185ef76bb3b44ba62b91d86ae569e4bb535", + "0x810ee2cb21cca3e51a02375a8008f1aacd0a26920b83fdc1f822b09535fe7364", + "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x1047617013a89e7f8d63f77c0c8d18d823e9d27770697cf4aedf85bd381c25f5" + ], + "signedBeaconBlockHeader": { + "message": { + "bodyRoot": "5d07afb7c733c581dde806d3f28558db1a5fb8e79aaea551e5bc256da31dbd68", + "parentRoot": "0feeeb3c6690b376c58d1aa9bf5ef756617969eaeec6862331cb740c1e4c69b4", + "proposerIndex": "805060", + "slot": "8777509", + "stateRoot": "47b2a6ee35da2c4605d4d184b3cac2b961e67dc8763bf27085ac337c1d4018f2" + } + } + } + ] +} +``` diff --git a/cache/cache.go b/cache/cache.go index a7d8f05..3630acb 100644 --- a/cache/cache.go +++ b/cache/cache.go @@ -1,6 +1,8 @@ package cache -import lru "github.com/hashicorp/golang-lru" +import ( + lru "github.com/hashicorp/golang-lru" +) type Cache interface { Get(key string) (interface{}, bool) diff --git a/cmd/blob-syncer/main.go b/cmd/blob-syncer/main.go index ac6d0aa..ff6368e 100644 --- a/cmd/blob-syncer/main.go +++ b/cmd/blob-syncer/main.go @@ -7,27 +7,12 @@ import ( syncerdb "github.com/bnb-chain/blob-syncer/db" "github.com/bnb-chain/blob-syncer/logging" "github.com/bnb-chain/blob-syncer/syncer" - "github.com/spf13/pflag" "github.com/spf13/viper" - "gorm.io/driver/mysql" - "gorm.io/driver/sqlite" - "gorm.io/gorm" - "gorm.io/gorm/logger" - "log" - "os" - "time" ) func initFlags() { flag.String(config.FlagConfigPath, "", "config file path") - flag.String(config.FlagConfigType, "", "config type, local_private_key or aws_private_key") - flag.String(config.FlagConfigAwsRegion, "", "aws region") - flag.String(config.FlagConfigAwsSecretKey, "", "aws secret key") - flag.String(config.FlagConfigPrivateKey, "", "blob-syncer private key") - flag.String(config.FlagConfigBlsPrivateKey, "", "blob-syncer bls private key") - flag.String(config.FlagConfigDbPass, "", "blob-syncer db password") - pflag.CommandLine.AddGoFlagSet(flag.CommandLine) pflag.Parse() err := viper.BindPFlags(pflag.CommandLine) @@ -37,112 +22,31 @@ func initFlags() { } func printUsage() { - fmt.Print("usage: ./blob-syncer --config-type local --config-path configFile\n") - fmt.Print("usage: ./blob-syncer --config-type aws --aws-region awsRegin --aws-secret-key awsSecretKey\n") + fmt.Print("usage: ./blob-syncer --config-path configFile\n") } func main() { var ( - cfg *config.Config - configType, configFilePath string + cfg *config.SyncerConfig + configFilePath string ) initFlags() - configType = viper.GetString(config.FlagConfigType) - configType = "local" - if configType == "" { - configType = os.Getenv(config.ConfigType) - } - if configType != config.AWSConfig && configType != config.LocalConfig { + configFilePath = viper.GetString(config.FlagConfigPath) + + configFilePath = "config/local/config-syncer.json" //todo + if configFilePath == "" { printUsage() return } - if configType == config.AWSConfig { - awsSecretKey := viper.GetString(config.FlagConfigAwsSecretKey) - if awsSecretKey == "" { - printUsage() - return - } - awsRegion := viper.GetString(config.FlagConfigAwsRegion) - if awsRegion == "" { - printUsage() - return - } - configContent, err := config.GetSecret(awsSecretKey, awsRegion) - if err != nil { - fmt.Printf("get aws config error, err=%s", err.Error()) - return - } - cfg = config.ParseConfigFromJson(configContent) - } else { - configFilePath = viper.GetString(config.FlagConfigPath) - configFilePath = "config/config.json" - if configFilePath == "" { - configFilePath = os.Getenv(config.ConfigFilePath) - if configFilePath == "" { - printUsage() - return - } - } - cfg = config.ParseConfigFromFile(configFilePath) - } + cfg = config.ParseSyncerConfigFromFile(configFilePath) if cfg == nil { panic("failed to get configuration") } + cfg.Validate() logging.InitLogger(&cfg.LogConfig) - - username := cfg.DBConfig.Username - password := viper.GetString(config.FlagConfigDbPass) - if password == "" { - password = os.Getenv(config.ConfigDBPass) - if password == "" { - password = getDBPass(&cfg.DBConfig) - } - } - newLogger := logger.New( - log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer - logger.Config{ - SlowThreshold: time.Second, // Slow SQL threshold - LogLevel: logger.Silent, // Log level - IgnoreRecordNotFoundError: true, // Ignore ErrRecordNotFound error for logger - Colorful: true, // Disable color - }, - ) - var db *gorm.DB - var err error - var dialector gorm.Dialector - - if cfg.DBConfig.Dialect == config.DBDialectMysql { - url := cfg.DBConfig.Url - dbPath := fmt.Sprintf("%s:%s@%s", username, password, url) - dialector = mysql.Open(dbPath) - } else if cfg.DBConfig.Dialect == config.DBDialectSqlite3 { - dialector = sqlite.Open(cfg.DBConfig.Url) - } else { - panic(fmt.Sprintf("unexpected DB dialect %s", cfg.DBConfig.Dialect)) - } - db, err = gorm.Open(dialector, &gorm.Config{ - Logger: newLogger, - }) - if err != nil { - panic(fmt.Sprintf("open db error, err=%s", err.Error())) - } - dbConfig, err := db.DB() - if err != nil { - panic(err) - } - - dbConfig.SetMaxIdleConns(cfg.DBConfig.MaxIdleConns) - dbConfig.SetMaxOpenConns(cfg.DBConfig.MaxOpenConns) - - syncerdb.InitTables(db) - + db := config.InitDBWithConfig(&cfg.DBConfig, true) blobDB := syncerdb.NewBlobSvcDB(db) - bs := syncer.NewBlobSyncer(blobDB, cfg) go bs.StartLoop() select {} } - -func getDBPass(cfg *config.DBConfig) string { - return cfg.Password -} diff --git a/config/config.go b/config/config.go index 088447c..aec6019 100644 --- a/config/config.go +++ b/config/config.go @@ -4,30 +4,66 @@ import ( "encoding/json" "fmt" "github.com/bnb-chain/blob-syncer/cache" + syncerdb "github.com/bnb-chain/blob-syncer/db" + "gorm.io/driver/mysql" + "gorm.io/gorm" + "gorm.io/gorm/logger" + "log" "os" + "time" ) -type Config struct { - LogConfig LogConfig `json:"log_config"` - DBConfig DBConfig `json:"db_config"` - SyncerConfig SyncerConfig `json:"syncer_config"` - ServerConfig ServerConfig `json:"server_config"` - CacheConfig CacheConfig `json:"cache_config"` +type SyncerConfig struct { + BucketName string `json:"bucket_name"` // BucketName is the identifier of bucket on Greenfield that store blob + StartSlot uint64 `json:"start_slot"` // StartSlot is used to init the syncer which slot of beacon chain to synced from, only need to provide once. + CreateBundleSlotInterval uint64 `json:"create_bundle_slot_interval"` // CreateBundleSlotInterval defines the number of slot that syncer would assemble blobs and upload to bundle service + BundleServiceEndpoints []string `json:"bundle_service_endpoints"` // BundleServiceEndpoints is a list of bundle service address + BeaconRPCAddrs []string `json:"beacon_rpc_addrs"` // BeaconRPCAddrs is a list of beacon chain RPC address + ETHRPCAddrs []string `json:"eth_rpc_addrs"` + TempDir string `json:"temp_dir"` // TempDir is used to store blobs and created bundle + PrivateKey string `json:"private_key"` // PrivateKey is the key of bucket owner, request to bundle service will be signed by it as well. + DBConfig DBConfig `json:"db_config"` + LogConfig LogConfig `json:"log_config"` } -type SyncerConfig struct { - BucketName string `json:"bucket_name"` // BucketName is the identifier of bucket on Greenfield that store blob - StartSlot uint64 `json:"start_slot"` // StartSlot is used to init the syncer which slot of beacon chain to synced from - BundleServiceEndpoints []string `json:"bundle_service_endpoints"` // BundleServiceEndpoints is a list of bundle service address - BeaconRPCAddrs []string `json:"beacon_rpc_addrs"` // BeaconRPCAddrs is a list of beacon chain RPC address - ETHRPCAddrs []string `json:"eth_rpc_addrs"` - TempFilePath string `json:"temp_file_path"` // TempFilePath used to create file for every blob. - PrivateKey string `json:"private_key"` +func (s *SyncerConfig) Validate() { + if len(s.BundleServiceEndpoints) == 0 { + panic("BundleService endpoints should not be empty") + } + if len(s.BeaconRPCAddrs) == 0 { + panic("beacon rpc address should not be empty") + } + if len(s.ETHRPCAddrs) == 0 { + panic("eth rpc address should not be empty") + } + if len(s.TempDir) == 0 { + panic("temp directory to hold files is missing") + } + if len(s.PrivateKey) == 0 { + panic("private key is not provided") + } + s.DBConfig.Validate() +} + +func (s *SyncerConfig) GetCreateBundleSlotInterval() uint64 { + if s.CreateBundleSlotInterval == 0 { + return DefaultCreateBundleSlotInterval + } + return s.CreateBundleSlotInterval } type ServerConfig struct { - BucketName string `json:"bucket_name"` - BundleServiceAddrs []string `json:"bundle_service_addrs"` + BucketName string `json:"bucket_name"` + BundleServiceEndpoints []string `json:"bundle_service_endpoints"` // BundleServiceEndpoints is a list of bundle service address + CacheConfig CacheConfig `json:"cache_config"` + DBConfig DBConfig `json:"db_config"` +} + +func (s *ServerConfig) Validate() { + if len(s.BundleServiceEndpoints) == 0 { + panic("BundleService endpoints should not be empty") + } + s.DBConfig.Validate() } type CacheConfig struct { @@ -53,8 +89,8 @@ type DBConfig struct { } func (cfg *DBConfig) Validate() { - if cfg.Dialect != DBDialectMysql && cfg.Dialect != DBDialectSqlite3 { - panic(fmt.Sprintf("only %s and %s supported", DBDialectMysql, DBDialectSqlite3)) + if cfg.Dialect != DBDialectMysql { + panic(fmt.Sprintf("only %s supported", DBDialectMysql)) } if cfg.Dialect == DBDialectMysql && (cfg.Username == "" || cfg.Url == "") { panic("db config is not correct, missing username and/or url") @@ -89,25 +125,82 @@ func (cfg *LogConfig) Validate() { } } -func ParseConfigFromJson(content string) *Config { - var config Config - if err := json.Unmarshal([]byte(content), &config); err != nil { +func ParseSyncerConfigFromFile(filePath string) *SyncerConfig { + bz, err := os.ReadFile(filePath) + if err != nil { panic(err) } - //config.Validate() + + var config SyncerConfig + if err = json.Unmarshal(bz, &config); err != nil { + panic(err) + } + if config.DBConfig.Username == "" || config.DBConfig.Password == "" { // read password from ENV + config.DBConfig.Username, config.DBConfig.Password = GetDBUsernamePasswordFromEnv() + } + if config.PrivateKey == "" { // read private key from ENV + config.PrivateKey = os.Getenv(EnvVarPrivateKey) + } return &config } -func ParseConfigFromFile(filePath string) *Config { +func ParseServerConfigFromFile(filePath string) *ServerConfig { bz, err := os.ReadFile(filePath) if err != nil { panic(err) } - var config Config - if err := json.Unmarshal(bz, &config); err != nil { + var config ServerConfig + if err = json.Unmarshal(bz, &config); err != nil { panic(err) } - //config.Validate() + if config.DBConfig.Username == "" || config.DBConfig.Password == "" { // read password from ENV + config.DBConfig.Username, config.DBConfig.Password = GetDBUsernamePasswordFromEnv() + } return &config } + +func GetDBUsernamePasswordFromEnv() (string, string) { + username := os.Getenv(EnvVarDBUserName) + password := os.Getenv(EnvVarDBUserPass) + return username, password +} + +func InitDBWithConfig(cfg *DBConfig, writeAccess bool) *gorm.DB { + var db *gorm.DB + var err error + var dialector gorm.Dialector + + if cfg.Dialect == DBDialectMysql { + url := cfg.Url + dbPath := fmt.Sprintf("%s:%s@%s", cfg.Username, cfg.Password, url) + dialector = mysql.Open(dbPath) + } else { + panic(fmt.Sprintf("unexpected DB dialect %s", cfg.Dialect)) + } + newLogger := logger.New( + log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer + logger.Config{ + SlowThreshold: time.Microsecond, // Slow SQL threshold + LogLevel: logger.Info, // Log level + IgnoreRecordNotFoundError: true, // Ignore ErrRecordNotFound error for logger + Colorful: true, // Disable color + }, + ) + db, err = gorm.Open(dialector, &gorm.Config{ + Logger: newLogger, + }) + if err != nil { + panic(fmt.Sprintf("open db error, err=%s", err.Error())) + } + dbConfig, err := db.DB() + if err != nil { + panic(err) + } + dbConfig.SetMaxIdleConns(cfg.MaxIdleConns) + dbConfig.SetMaxOpenConns(cfg.MaxOpenConns) + if writeAccess { + syncerdb.AutoMigrateDB(db) + } + return db +} diff --git a/config/const.go b/config/const.go index 5366494..05ae499 100644 --- a/config/const.go +++ b/config/const.go @@ -1,23 +1,13 @@ package config const ( - FlagConfigPath = "config-path" - FlagConfigType = "config-type" - FlagConfigAwsRegion = "aws-region" - FlagConfigAwsSecretKey = "aws-secret-key" - FlagConfigPrivateKey = "private-key" - FlagConfigBlsPrivateKey = "bls-private-key" - FlagConfigDbPass = "db-pass" + FlagConfigPath = "config-path" - DBDialectMysql = "mysql" - DBDialectSqlite3 = "sqlite3" - - LocalConfig = "local" - AWSConfig = "aws" - KeyTypeLocalPrivateKey = "local_private_key" - KeyTypeAWSPrivateKey = "aws_private_key" - - ConfigType = "CONFIG_TYPE" - ConfigFilePath = "CONFIG_FILE_PATH" - ConfigDBPass = "DB_PASS" + DBDialectMysql = "mysql" + EnvVarConfigFilePath = "CONFIG_FILE_PATH" + EnvVarDBUserName = "DB_USERNAME" + EnvVarDBUserPass = "DB_PASSWORD" + EnvVarPrivateKey = "PRIVATE_KEY" ) + +const DefaultCreateBundleSlotInterval = 5 diff --git a/config/utils.go b/config/utils.go deleted file mode 100644 index e794097..0000000 --- a/config/utils.go +++ /dev/null @@ -1,45 +0,0 @@ -package config - -import ( - "encoding/base64" - "fmt" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/session" - "github.com/aws/aws-sdk-go/service/secretsmanager" -) - -func GetSecret(secretName, region string) (string, error) { - // CreateBlock a Secrets Manager client - sess, err := session.NewSession(&aws.Config{ - Region: ®ion, - }) - if err != nil { - return "", err - } - - svc := secretsmanager.New(sess) - input := &secretsmanager.GetSecretValueInput{ - SecretId: aws.String(secretName), - VersionStage: aws.String("AWSCURRENT"), // VersionStage defaults to AWSCURRENT if unspecified - } - - result, err := svc.GetSecretValue(input) - if err != nil { - return "", err - } - - var secretString, decodedBinarySecret string - if result.SecretString != nil { - secretString = *result.SecretString - return secretString, nil - } else { - decodedBinarySecretBytes := make([]byte, base64.StdEncoding.DecodedLen(len(result.SecretBinary))) - length, err := base64.StdEncoding.Decode(decodedBinarySecretBytes, result.SecretBinary) - if err != nil { - fmt.Println("Base64 Decode Error:", err) - return "", err - } - decodedBinarySecret = string(decodedBinarySecretBytes[:length]) - return decodedBinarySecret, nil - } -} diff --git a/db/blob.go b/db/blob.go index 25ed984..64d0a42 100644 --- a/db/blob.go +++ b/db/blob.go @@ -1,14 +1,17 @@ package db type Blob struct { - Id int64 - Name string `gorm:"NOT NULL;uniqueIndex:idx_blob_name;size:96"` - TxHash string `gorm:"NOT NULL;index:idx_blob_tx_hash"` - ToAddr string `gorm:"NOT NULL;index:idx_blob_to_address"` - VersionedHash string // `gorm:"NOT NULL;index:idx_blob_versioned_hash"` - Height uint64 `gorm:"NOT NULL;index:idx_bsc_block_height_index"` - Index int `gorm:"NOT NULL;index:idx_bsc_block_height_index"` - BundleName string `gorm:"NOT NULL"` + Id int64 + Name string `gorm:"NOT NULL;uniqueIndex:idx_blob_name;size:96"` // the identifier of blob object in bundle service + TxHash string `gorm:"NOT NULL;index:idx_blob_tx_hash"` + ToAddr string `gorm:"NOT NULL;index:idx_blob_to_address"` + VersionedHash string `gorm:"NOT NULL"` + Slot uint64 `gorm:"NOT NULL;index:idx_blob_slot_index"` + Idx int `gorm:"NOT NULL;index:idx_blob_slot_idx"` + KzgCommitment string `gorm:"NOT NULL"` + KzgProof string `gorm:"NOT NULL"` + CommitmentInclusionProof string `gorm:"NOT NULL"` + BundleName string `gorm:"NOT NULL"` } func (*Blob) TableName() string { diff --git a/db/block.go b/db/block.go index 327018d..c69d7d4 100644 --- a/db/block.go +++ b/db/block.go @@ -9,12 +9,17 @@ const ( type Block struct { Id int64 - BlockHash string `gorm:"NOT NULL"` - ParentHash string `gorm:"NOT NULL"` - Height uint64 `gorm:"NOT NULL;uniqueIndex:idx_block_height"` - ELBlockHeight uint64 + Root string `gorm:"NOT NULL;index:idx_block_root;size:64"` + ParentRoot string + StateRoot string + BodyRoot string + ProposerIndex uint64 + Slot uint64 `gorm:"NOT NULL;uniqueIndex:idx_block_slot"` + ELBlockHeight uint64 // the eth1 block height BlobCount int - Status Status + KzgCommitment string + + Status Status } func (*Block) TableName() string { diff --git a/db/bundle.go b/db/bundle.go index 2c9b224..bb8da21 100644 --- a/db/bundle.go +++ b/db/bundle.go @@ -4,7 +4,7 @@ type InnerBundleStatus int const ( Finalizing InnerBundleStatus = 0 - Finalized InnerBundleStatus = 1 + Finalized InnerBundleStatus = 1 // when a bundle is uploaded to bundle service, its status will be Finalized Sealed InnerBundleStatus = 2 // todo The post verification process should check if a bundle is indeed sealed onchain ) diff --git a/db/dao.go b/db/dao.go index e6c0214..8efbe8d 100644 --- a/db/dao.go +++ b/db/dao.go @@ -1,8 +1,9 @@ package db import ( - "gorm.io/gorm" "strings" + + "gorm.io/gorm" ) type BlobDao interface { @@ -23,12 +24,32 @@ func NewBlobSvcDB(db *gorm.DB) BlobDao { } type BlockDB interface { + GetBlock(slot int64) (*Block, error) + GetBlockByRoot(root string) (*Block, error) GetLatestProcessedBlock() (*Block, error) } +func (d *BlobSvcDB) GetBlock(slot int64) (*Block, error) { + block := Block{} + err := d.db.Model(Block{}).Where("slot = ?", slot).Take(&block).Error + if err != nil && err != gorm.ErrRecordNotFound { + return nil, err + } + return &block, nil +} + +func (d *BlobSvcDB) GetBlockByRoot(root string) (*Block, error) { + block := Block{} + err := d.db.Model(Block{}).Where("root = ?", root).Take(&block).Error + if err != nil && err != gorm.ErrRecordNotFound { + return nil, err + } + return &block, nil +} + func (d *BlobSvcDB) GetLatestProcessedBlock() (*Block, error) { block := Block{} - err := d.db.Model(Block{}).Order("height desc").Take(&block).Error + err := d.db.Model(Block{}).Order("slot desc").Take(&block).Error if err != nil && err != gorm.ErrRecordNotFound { return nil, err } @@ -36,13 +57,21 @@ func (d *BlobSvcDB) GetLatestProcessedBlock() (*Block, error) { } type BlobDB interface { - GetBlobs(height int64) ([]*Blob, error) - //UpdateBlobStatus(blobName string, status BlobStatus) error + GetBlobBySlot(slot int64) ([]*Blob, error) + GetBlobBySlotAndIndices(slot int64, indices []int64) ([]*Blob, error) +} + +func (d *BlobSvcDB) GetBlobBySlot(slot int64) ([]*Blob, error) { + blobs := make([]*Blob, 0) + if err := d.db.Where("slot = ?", uint64(slot)).Find(&blobs).Error; err != nil { + return blobs, err + } + return blobs, nil } -func (d *BlobSvcDB) GetBlobs(height int64) ([]*Blob, error) { +func (d *BlobSvcDB) GetBlobBySlotAndIndices(slot int64, indices []int64) ([]*Blob, error) { blobs := make([]*Blob, 0) - if err := d.db.Where("height = ?", uint64(height)).Find(&blobs).Error; err != nil { + if err := d.db.Where("slot = ? and idx in (?)", uint64(slot), indices).Find(&blobs).Error; err != nil { return blobs, err } return blobs, nil @@ -96,7 +125,7 @@ func (d *BlobSvcDB) SaveBlockAndBlob(block *Block, blobs []*Blob) error { }) } -func InitTables(db *gorm.DB) { +func AutoMigrateDB(db *gorm.DB) { var err error if err = db.AutoMigrate(&Bundle{}); err != nil { panic(err) diff --git a/entity/entity.go b/entity/entity.go deleted file mode 100644 index 8c33560..0000000 --- a/entity/entity.go +++ /dev/null @@ -1,21 +0,0 @@ -package entity - -type Blob struct { - TxHash string - Height uint64 - Index int - BundleName string -} - -type Block struct { - BlockHash string - ParentHash string - Height uint64 - ELBlockHeight uint64 - BlockTime int64 - BlobCount int -} - -type Bundle struct { - Name string -} diff --git a/external/beacon_client.go b/external/beacon_client.go index 9151c4e..6376565 100644 --- a/external/beacon_client.go +++ b/external/beacon_client.go @@ -5,11 +5,12 @@ import ( "encoding/json" "errors" "fmt" - "github.com/prysmaticlabs/prysm/v5/api/server/structs" "io" "net/http" "strconv" "time" + + "github.com/prysmaticlabs/prysm/v5/api/server/structs" ) var ( @@ -19,6 +20,7 @@ var ( const ( pathGetSidecars = "/eth/v1/beacon/blob_sidecars/%s" pathGetBlock = "/eth/v2/beacon/blocks/%s" + pathGetHeader = "/eth/v1/beacon/headers/%s" ) type BeaconClient struct { @@ -59,8 +61,12 @@ func (c *BeaconClient) GetBlob(ctx context.Context, slotNumber uint64) ([]*struc if err != nil { return nil, fmt.Errorf("error reading http response body %s", err) } - var sidecars *structs.SidecarsResponse - return sidecars.Data, json.Unmarshal(respBz, &sidecars) + var sidecars structs.SidecarsResponse + err = json.Unmarshal(respBz, &sidecars) + if err != nil { + return nil, err + } + return sidecars.Data, nil } func (c *BeaconClient) GetBlock(ctx context.Context, slotNumber uint64) (*structs.GetBlockV2Response, error) { @@ -111,3 +117,31 @@ func (c *BeaconClient) GetLatestBlock(ctx context.Context) (*structs.GetBlockV2R return resp, json.Unmarshal(b, resp) } + +func (c *BeaconClient) GetHeader(ctx context.Context, slotNumber uint64) (*structs.GetBlockHeaderResponse, error) { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, c.host+fmt.Sprintf(pathGetHeader, strconv.FormatUint(slotNumber, 10)), nil) + if err != nil { + return nil, err + } + r, err := c.hc.Do(req) + if err != nil { + return nil, err + } + defer func() { + err = r.Body.Close() + }() + b, err := io.ReadAll(r.Body) + if err != nil { + return nil, fmt.Errorf("error reading http response body %s", err) + } + + if r.StatusCode != http.StatusOK { + if r.StatusCode == http.StatusNotFound { + return nil, ErrBlockNotFound + } + return nil, fmt.Errorf("received non-OK response status: %s", r.Status) + } + resp := &structs.GetBlockHeaderResponse{} + return resp, json.Unmarshal(b, resp) + +} diff --git a/external/beacon_client_test.go b/external/beacon_client_test.go index 92f5a32..ab19c56 100644 --- a/external/beacon_client_test.go +++ b/external/beacon_client_test.go @@ -2,85 +2,42 @@ package external import ( "context" - "encoding/hex" "encoding/json" "fmt" - "github.com/ethereum/go-ethereum/ethclient" - "github.com/prysmaticlabs/prysm/v5/api/server/structs" - "github.com/prysmaticlabs/prysm/v5/runtime/version" - "math/big" "testing" "time" + + "github.com/prysmaticlabs/prysm/v5/api/server/structs" + "github.com/prysmaticlabs/prysm/v5/runtime/version" ) -const NodeReal = "https://eth2-beacon-mainnet.nodereal.io/v1/a24f28a0f2484effa9fea36b8e281272" -const NodeRealEth1 = "https://eth-mainnet.nodereal.io/v1/a24f28a0f2484effa9fea36b8e281272" const quickNode = "https://docs-demo.quiknode.pro" func TestGetBlockHeight(t *testing.T) { - beaconClient, err := NewBeaconClient(NodeReal, time.Second*3) - if err != nil { - panic(err) - } - sideCars, err := beaconClient.GetBlob(context.Background(), 8762217) - if err != nil { - panic(err) - } - - fmt.Println(sideCars[4].Blob) - - //for _, sc := range sideCars { - // - // if i - // - // fmt.Println(sc.Index) - // //consensus, _ := sc.SignedBeaconBlockHeader.Message.ToConsensus() - // //fmt.Println(consensus.String()) - // //fmt.Println(hex.EncodeToString(consensus.BodyRoot)) - // fmt.Println(sc.KzgProof) - // fmt.Println(sc.KzgCommitment) - // fmt.Println(sc.Blob[:300]) - //} -} - -func TestGetEth1BlockTx(t *testing.T) { - - ethClient, err := ethclient.Dial(NodeRealEth1) + beaconClient, err := NewBeaconClient(quickNode, time.Second*3) if err != nil { panic(err) } - block, err := ethClient.BlockByNumber(context.Background(), big.NewInt(19530505)) + sideCars, err := beaconClient.GetBlob(context.Background(), 8779233) if err != nil { panic(err) - return } - for _, tx := range block.Body().Transactions { - if tx.Type() == 3 { - fmt.Println("blob tx hash: " + hex.EncodeToString(tx.Hash().Bytes())) - fmt.Println("----------------------------") - for _, bs := range tx.BlobHashes() { - fmt.Println("blob versioned hash: " + bs.String()) - } - - fmt.Printf("blob tx value: %d\n", tx.Value().Uint64()) - fmt.Printf("blob tx to addr: %s\n", tx.To().String()) - - fmt.Printf("blob tx data %s\n", hex.EncodeToString(tx.Data())) - fmt.Printf("blob sidecar is nil %v\n", tx.BlobTxSidecar() == nil) - - //for _, sc := range tx().BlobHashes() { - // fmt.Println("blob versioned hash: " + sc.String()) - //} - } + for _, sc := range sideCars { + fmt.Println(sc.Index) + fmt.Println(sc.KzgProof) + fmt.Println(sc.KzgCommitment) + fmt.Println(sc.SignedBeaconBlockHeader.Message.BodyRoot) + fmt.Println(sc.SignedBeaconBlockHeader.Message.StateRoot) + fmt.Println(sc.SignedBeaconBlockHeader.Message.ParentRoot) + fmt.Println(sc.CommitmentInclusionProof) + fmt.Println(sc.Blob[:300]) } } func TestGetBlock(t *testing.T) { - // 8731617 - // 19530503 - beaconClient, err := NewBeaconClient(NodeReal, time.Second*3) + beaconClient, err := NewBeaconClient(quickNode, time.Second*3) if err != nil { panic(err) } @@ -109,16 +66,18 @@ func TestGetBlock(t *testing.T) { } fmt.Println("eth1data " + signedBeaconBlockDeneb.GetBlock().GetBody().GetEth1Data().String()) fmt.Printf("eth block number %d\n", signedBeaconBlockDeneb.GetBlock().GetBody().GetExecutionPayload().GetBlockNumber()) + } +} - //for i, tx := range signedBeaconBlockDeneb.GetBlock().GetBody().GetExecutionPayload().GetTransactions() { - // txss := &types.Transaction{} - // err = txss.UnmarshalJSON(tx) - // if err != nil { - // fmt.Println(err.Error()) - // return - // } - // fmt.Println(txss) - // fmt.Printf("tx %d is %s\n", i, hex.EncodeToString(tx)) - //} +func TestGetHeader(t *testing.T) { + beaconClient, err := NewBeaconClient(quickNode, time.Second*3) + if err != nil { + panic(err) + } + + resp, err := beaconClient.GetHeader(context.Background(), 8777552) + if err != nil { + panic(err) } + fmt.Println(resp.Data.Root) } diff --git a/external/bundle_client.go b/external/bundle_client.go index f6872be..4c34157 100644 --- a/external/bundle_client.go +++ b/external/bundle_client.go @@ -7,20 +7,21 @@ import ( "encoding/json" "errors" "fmt" - bundlesdk "github.com/bnb-chain/greenfield-bundle-sdk/bundle" - bundlesdktypes "github.com/bnb-chain/greenfield-bundle-sdk/types" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - modle "github.com/node-real/greenfield-bundle-service/models" - "github.com/node-real/greenfield-bundle-service/types" - "mime" - "path/filepath" - "io" + "mime" "mime/multipart" "net/http" "os" + "path/filepath" "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + modle "github.com/node-real/greenfield-bundle-service/models" + "github.com/node-real/greenfield-bundle-service/types" + + bundlesdk "github.com/bnb-chain/greenfield-bundle-sdk/bundle" + bundlesdktypes "github.com/bnb-chain/greenfield-bundle-sdk/types" ) const ( @@ -41,6 +42,23 @@ var ( ErrorBundleObjectNotExist = errors.New("the bundle object not exist in bundle service") ) +type BundleClientOption interface { + Apply(*BundleClient) +} + +type BundleClientOptionFunc func(*BundleClient) + +// Apply set up the option field to the client instance. +func (f BundleClientOptionFunc) Apply(client *BundleClient) { + f(client) +} + +func WithPrivateKey(privateKey []byte) BundleClientOption { + return BundleClientOptionFunc(func(client *BundleClient) { + client.privKey = privateKey + }) +} + type BundleClient struct { hc *http.Client host string @@ -48,7 +66,7 @@ type BundleClient struct { addr common.Address } -func NewBundleClient(host string, privateKeyHex string) (*BundleClient, error) { +func NewBundleClient(host string, opts ...BundleClientOption) (*BundleClient, error) { transport := &http.Transport{ DisableCompression: true, MaxIdleConnsPerHost: 1000, @@ -59,20 +77,20 @@ func NewBundleClient(host string, privateKeyHex string) (*BundleClient, error) { Timeout: 10 * time.Minute, Transport: transport, } - privateKeyBytes, err := hex.DecodeString(privateKeyHex) - if err != nil { - return nil, err + bundleClient := &BundleClient{hc: client, + host: host, } - // Convert the bytes to *ecdsa.PrivateKey - privateKey, err := crypto.ToECDSA(privateKeyBytes) - if err != nil { - return nil, err + for _, opt := range opts { + opt.Apply(bundleClient) } - return &BundleClient{hc: client, - host: host, - privKey: privateKeyBytes, - addr: crypto.PubkeyToAddress(privateKey.PublicKey), - }, nil + if len(bundleClient.privKey) != 0 { + privateKey, err := crypto.ToECDSA(bundleClient.privKey) + if err != nil { + return nil, err + } + bundleClient.addr = crypto.PubkeyToAddress(privateKey.PublicKey) + } + return bundleClient, nil } func (c *BundleClient) CreateBundle(bundleName, bucketName string) error { @@ -127,7 +145,6 @@ func (c *BundleClient) DeleteBundle(bundleName, bucketName string) error { "X-Bundle-Name": bundleName, "X-Bundle-Expiry-Timestamp": fmt.Sprintf("%d", time.Now().Add(bundleExpiredTime).Unix()), } - // delete bundle resp, err := c.sendRequest(c.host+pathDeleteBundle, "POST", headers, nil) if err != nil { return err @@ -143,7 +160,7 @@ func (c *BundleClient) DeleteBundle(bundleName, bucketName string) error { return nil } -func (c *BundleClient) UploadBundle(bundleName, bucketName, bundleDir, bundlePath string) error { +func (c *BundleClient) UploadAndFinalizeBundle(bundleName, bucketName, bundleDir, bundlePath string) error { bundleObject, _, err := bundleDirectory(bundleDir) if err != nil { @@ -347,14 +364,6 @@ func (c *BundleClient) signMessage(message []byte) ([]byte, error) { return signature, err } -func (c *BundleClient) CreateLocalBundle() (*bundlesdk.Bundle, error) { - return bundlesdk.NewBundle() -} - -func (c *BundleClient) AppendObjectToBundle(b *bundlesdk.Bundle, objectName string, reader io.Reader, options *bundlesdktypes.AppendObjectOptions) (*bundlesdktypes.ObjectMeta, error) { - return b.AppendObject(objectName, reader, options) -} - func bundleDirectory(dir string) (io.ReadSeekCloser, int64, error) { b, err := bundlesdk.NewBundle() if err != nil { @@ -409,8 +418,6 @@ func visit(root string, b *bundlesdk.Bundle) filepath.WalkFunc { if err != nil { return err } - - println(relativePath, hex.EncodeToString(hash[:])) } return nil } diff --git a/external/bundle_client_test.go b/external/bundle_client_test.go index bf474be..f4e8d18 100644 --- a/external/bundle_client_test.go +++ b/external/bundle_client_test.go @@ -1,6 +1,7 @@ package external import ( + "encoding/hex" "fmt" "os" "testing" @@ -10,8 +11,7 @@ const NodeRealBundle = "https://gnfd-testnet-bundle.nodereal.io" const PrivateKeyHex = "d65f7cf21fe3eff9feef1dd86cea6bae8a30f6c26830e734d628c78e80debfd5" func TestGetBundleInfo(t *testing.T) { - - bundleClient, err := NewBundleClient(NodeRealBundle, PrivateKeyHex) + bundleClient, err := NewBundleClient(NodeRealBundle) if err != nil { panic(err) } @@ -24,7 +24,7 @@ func TestGetBundleInfo(t *testing.T) { func TestGetBundleObject(t *testing.T) { - bundleClient, err := NewBundleClient(NodeRealBundle, PrivateKeyHex) + bundleClient, err := NewBundleClient(NodeRealBundle) if err != nil { panic(err) } @@ -36,8 +36,12 @@ func TestGetBundleObject(t *testing.T) { } func TestUploadObject(t *testing.T) { + pkBz, err := hex.DecodeString(PrivateKeyHex) + if err != nil { + panic(err) + } - bundleClient, err := NewBundleClient(NodeRealBundle, PrivateKeyHex) + bundleClient, err := NewBundleClient(NodeRealBundle, WithPrivateKey(pkBz)) if err != nil { panic(err) } @@ -54,24 +58,31 @@ func TestUploadObject(t *testing.T) { } func TestDeleteFinalizingBundle(t *testing.T) { - - bundleClient, err := NewBundleClient(NodeRealBundle, PrivateKeyHex) + pkBz, err := hex.DecodeString(PrivateKeyHex) if err != nil { panic(err) } - err = bundleClient.DeleteBundle("blobs_s8775478_e8775577", "bsc-blobs") + bundleClient, err := NewBundleClient(NodeRealBundle, WithPrivateKey(pkBz)) + if err != nil { + panic(err) + } + err = bundleClient.DeleteBundle("blobs_s8777090_e8777094", "bsc-blobs") if err != nil { panic(err) } } func TestCreateLocalBundle(t *testing.T) { - bundleClient, err := NewBundleClient(NodeRealBundle, PrivateKeyHex) + pkBz, err := hex.DecodeString(PrivateKeyHex) + if err != nil { + panic(err) + } + bundleClient, err := NewBundleClient(NodeRealBundle, WithPrivateKey(pkBz)) if err != nil { panic(err) } - err = bundleClient.UploadBundle("blobssss", "bsc-blobs", "../test/", "") + err = bundleClient.UploadAndFinalizeBundle("blobssss", "bsc-blobs", "../test/", "") if err != nil { t.Fatal(err) } diff --git a/external/eth_client.go b/external/eth_client.go index 8f2d4ab..3b3f4e0 100644 --- a/external/eth_client.go +++ b/external/eth_client.go @@ -1,8 +1,9 @@ package external import ( - "github.com/ethereum/go-ethereum/ethclient" "time" + + "github.com/ethereum/go-ethereum/ethclient" ) type ETHClient struct { @@ -12,12 +13,12 @@ type ETHClient struct { updatedAt time.Time } -func NewETHClient(rpcAddrs, beaconAddrs string) *ETHClient { +func NewETHClient(rpcAddrs, beaconRPCAddrs string) *ETHClient { ethClient, err := ethclient.Dial(rpcAddrs) if err != nil { panic("new eth client error") } - beaconClient, err := NewBeaconClient(beaconAddrs, time.Second*3) + beaconClient, err := NewBeaconClient(beaconRPCAddrs, time.Second*3) if err != nil { panic("new eth client error") } diff --git a/external/test.bundle b/external/test.bundle deleted file mode 100644 index 154797c..0000000 --- a/external/test.bundle +++ /dev/null @@ -1,3 +0,0 @@ -0x0006eac4e2fac2ca844810be0dc9e398fa4961656c022b65e4af13728152980a00ed090001008d08010100aac800010027c6000100f3bf000100b5b2000100e300ed00010003be00010069a8000100fee0000000017e3b0866ff05091fa3377f008211f2ff80c0040e8302897e94cd5252d852c57b8c28b80ff3941be4c64dc300175394cd1ea9e70d0260c0f47d217ed6d5be9cd4ed34fb865af3107a400084001249c58bc002f866388459682f00fe0300103a0c0d31ae506ff056e179916000548501c95639540a83de9675da519b33088150eda0cbe4f0820bb75ef867080077db03f818048a4efef39a1ff22179d2032421dcd65007f0200090602ef79200990064ad19f073d70d040c63ec6288734b957471d28c97c8dbc693d6e0921f0094929e1a3876fb46e30e101089ce3b25b8005f1005d0814542145fc060025400c134084a391a8e3dbed2410b54c5a55e37a693e1707f802cc8d7532524574800d6064bd50a7e9bb9a9b9746cdc09b5602ebfd216ba5f10069fc140413ed0ca007659ecdb5228936c3df4ee46c62022b5cdc11366ca2f66f3be08f2943956f5009f79ab2ffd0595e60e347f2481050c2908121ab0e7081b28096f04f3c3296c00fff73528d831cca53aece3c11734f5eb80d1b5285266e93c8af2daa1d7534600a5a53ddadfcb15f177fc0c0fcdc227815e36aff0c8363fc0a10fff8f955c7f0080c23a0c8406ebb059fe0400120c0d3a6a51ea780407a89d2a9a7bf2f8e5d600c9bf6320538fce511e1d3fc2fbd8074602a2994ea44baef80dce686bf8bc2300a14fe0a01a009656a52035892943ea69a8dfab6e25667b141a95bb0fe3652c0062de11c1c845eba18fdc7e51cf55575807ad4de021053dc43fc0d80130033f00c120214134dcca2804cbc98169188b93473fd9fd96ce5b099905f5ca21932600e6795dff800ffa03c875c47919417130c21e7ab4bf92423a6619fe0b04b93100ae51b51a0d322597722bd470b97f773dbf5d54a8cc83f90c12e801efe0303900947f80c0045882b7cd94d0b9d06cfe000351af20e0461a3110c14023f0e81400698252e67954d3509403ac756083ee8eee105b32dd8e5bf9280eb1484069b50079cfe0300128ff81021abeb9efecf18bec474ebdd00289f49d5955a467adfe004311551857f82806801b4ff0130bd7f808b6143089d0db397f646421b23647008a7e39b8971bf888507f901e216fe0b012594225199553be874a042dd63079009169c5b6b13414d433250d2f96e30c3b93f781a7721e2625a1aafa62111c20002e4069384e49e3ffcf8a5a7fe3e7ba2007164a2209ce82d248f7ff1af1a02d00ddeb635365b3be190e9e62308149b47d714ff5e3aeb84ffaf1584505e077b4007d0de081a66365635fca3eeebb8126a6ffbcef0cd9be75ead27b752c80f7040078f7fc0596d1292e7fb6ebc7856f9bdea9aa0a38d6eaebda6054099d92afcf00c7fe46605a0817fe0b0a611a6252c30b76cd4cbd4ec97c1f05604641ac041b008ca4aa5046573d97e0ece95da3cf125b4e816b5904b192de1910d9316ec00200e40f13448ed363fcf91313fc2000fd1540bfdbf22a0af492e4406ddf4e508f007819a61ed296a6f31ad9fed37252031425698705d972ca53e07829a5407ca700f8d30813f8140a6fe0b092ff84c0e2ff3d7ecd81207f9e92b480b03fc9567500fff70b9fdfe3f02f8213595d1853585cdaff8d810735697066733a2f2f516d006362366b6252626251565145556f63626e5061316d75786332386b6758396b00727a35716f393768596e396938fe8905d1051098213a25b2c669097b06a1aa00543e3ac706a7f8009dc8b4e916ee48aa13b69b287da2a099c3d9afe0027bb2002e84b9cea60bae5b679c9fdf55507510ce2d0c968ba1f866d93fc89e7708c3003fc1c31d50f6c031bae1405a912b81862b9cf2237d8a56bdff11968501fc140002441658e4a1811e379946834462786b4cde6ac69e5eae0409eff0a120dfe90045501021bfe0b1af7c8965018140c2f3dd396c19b328d57d7497d037f92f1e00650613959de24316b7558f79e17f8008e6371f6c188d3db680b901c457bc3d00ff0c4b8fff098079fe7c9972fe0c18748758932119c96af87879f598ba7ec900d2664026abfd756d200341fe7cb650ff2c11a7ff1901be03fe822364f86004008405d75045fe0300113e0c0b24de51f847ea8d9b7ff136a4e3c748d25e253a007c0b6b37f854b27a4a694fcff1d67a507c06f60017c1e02c203395bb37f01800008e3fc320317f0980290101fc0601f034203366c267f018008affc6201f7c0081312942032d2532c206a7b3c24182df3f4a79e7e562400620998dcf45f4620073992242af48caca5048981cb377afca67b47c2ec496394feb61f985c05c81001239c54fd0ff1f134981fe7c4446009ce46a75af5117679e3393d8844ec85e00d684cf325e48be9822469e12cfe53482ff4b2ea67fa915af7f8fc9e460fe3e000e1a83f97c818fe033029044e10194683f2101946840e0a092252b2ceb140400b325a44c98b1eb011036c65e385d1c7fdf03338706c64c8c8c668726e6464600cc4726c6a60726262c4ccc66a726ecc6662c6c4c46a666cca6a64c2c460ca6008c462c66872cc60c4c46a626acaca6c606662666dfe3eb14a40336166323330073464653030626362383036653264303537626461663730613635613461303008643661656561393336393137393439643364316362386162336361fe041a40045ff8241448301f11c94764a8201ad2c233fecb79bfb736644abbd76612094009df3c2c75a92069b99c73bd386961631f143727cfe131a47f84c03cfe4b0b200bfcc9fb0dfcc0348ff9d9f38c0003fce83641fc92348a30eff0504080411f500295e712f82893a076a3f119fc207320805cc3b8439292e350e3fb10235776300ebc7f63b0950e7a7039dc90c5af3107a40010975d60e3181f208043ffc0a1200401a1f8ca4c491a0aee1d5db9be521eb0033a131e54ac376b7f411b64fc5080081a6f0b602c4d49d68406a94b7a98eff2a77a23c88bc524926ecd072247fc50066d97f0981c5fdfe6d97f741b64b2d6dadaa08296deeaaa9a908ac6d070947000b0cca49aee6498a06a6cc2b06ec6aa6e9ab2acac64c4cac69099fd146d94e00db4085edb6e7c979864cb9e959df1cc63204aab80ebb0c209a0a98ec859101000281eb27e56b2c81299f9c6baa62bb0a9d0804c378a611aa4444e9399b42ce00ed7f900770be200eff828797ca36941a1e90b3c30985bbb1a857f77ca01b7d00190271ed94ea81a18fb97401a9f4b79963090c65a3a30ecdcefe495361191a001019351f02102bf800e2e222c83032783948a98ab1c5a02a5357364ab049af0091f7d5cf81d17fe22134004f607ae10188e9f020c058a66520d7050d47c7e600d9f11665afcbc255bb6606f6e5e53172e65c05b268eb2472f8c1b966c122a0004b015bff80c860a2a953ff0c39df7f098079fc3c2ecff8e0c2d404d35f2bfc00fc4aa9c9625de2bb25f937b60cb865133d6847e9339ebf518a1237d551e76400ee0197dc081411fe0279dafa51f24f52883162ad366582e787ca94ae7d7eee00ef7dc1d7a9cf141bfe20082d0042101864f4dbf810004fe04604f13c7deeea0016f77ea216916e6a08e937175f14c1bf86d813f9026213fe0500f40e2fc2530012b3f80074edfbe7183b019a8b1793045b728baa20425ff145a26c301d1a9400a207ffb8f8cbf84c126fe1a15cbf81012afe1d185cd0d7fc7c0dcbff763f9e0002f9016813fe0b0aa3f801ca10094855c61774aadaa1fc136b06e42d994e3b000b0af8894ecbee1a087aa83db1fcc6c2c5eff012af405e58c8ac4c344364c500bb0005c80927b24129eff1584d5fc260317f863231b8902ca8d8d3f35ca46700ad6469c81ef77bc0f37f8f8a0dc0fe3e293783f908a6d8014fe09104e0bb95002525207f8005a57d7350580cac2b414685fe0007f1b4ded0323d6ffc9d87a400d8be59d156bac683752ac790594ff4df4186a2c3fe44af6f8015fe0d02083500e1ee8fa7cbce0e27a9a65f5b2ce998e6ec245ff970082f9026215fe09135b0005a1e4f8f2670ab88d8932b29f1915ed6cc9db57f8544d602ba7def30fef713005bf84c126fe1a2dabf81012aff1e160713ff6e09adf1422dfc143bf020888400a411cbdc1f786669ab69118c4a6b0fd5cdea58e01ca7f0986890170c81814e00c61fe566917c04513e23efe0025c0b2ff2d8cf46650c1376da37df7f8784ae002710fe03827c5ff828822fe03827e985843f8009b6642cf1fe0026eb3d7f11000b1336dbf80013795e62857fe43827ff8400689ee24c8583f87ebc5b1bb9b400019c7a6b9ed3284efe4384211877f82c8f408fa9412862b60ddca22c145b6f00e0019606ab538ea691fe3a347f884a7d02f8661ffe0e02c71500cd663957d400cb45d4c2cfa61d5828340e006bf8522c7fe2c86ebe40afe0c4007eff8140af001b40d09421c3de23d98caddc406e3d31b25e807addf33633ffc76557ff1829005ccc111fabfc7cb277f92374b61fbce7beac58b4667a6a30c61a7d28f77a75002fdf3e080d522e7664045f9383bffc7cc5edfc7c01fff8e237d9f3552e49bc00d8916dff5dcd470be199e4cc4921506d98d259a0bac848cb20d90db829156000f8e889a840bc2e4103963d350a1d4f0fdd0321ed54653cf6c30783286c3c72000745456e77abda362b41ca985f15374ee0967fbcfa582fd9e2afded774845e00351aedb47862cf058cd703987b0984ada5137844c7e13b4c42ff00ac7f483f00fc7dbcdffc07390030472d17f01800953fc09390551ed8159d1e093a7c7e050044030281c7a2a325607f21c9cb0233080c0cbb65fc060025cc181bfa8ca4bb00c35dc96bb11c3e3cb388f17ade38e7afa14c9ca2486bb58f4a0c53c5aa01ba0005eb86fea7b003f07c05c221b55c3620d9c3f826b4d009787bb07f9e98564000ab3da40035f607ba26ae399981e2f6a44ff11b88e106f080c0b1ee9fc06002004141811a57ca6c7e2fadf4b1229fc3b2ba56cc30e3322e056ea7ff0a1ec7fc000d42bff09389bfc260217f25c497fc5aaddff08cdbdfce4e2681ff1fcefdfc00c2addfc808440ea420302a8f5ff018009f3fe0874866726eb020584a9754a000f4faf8b560eb8a00da595940fd0c5984a65e08a86547d3b1c1ea29f0d86e7d00a8612309ce54000b8c44d3a59ff0c2a297f098083fe3449f6fe040117fcecd0022e10f2da5bfc80b63fc809e4042030291a0418118bbca728914655a60dd4f006db4b5424b874ddbdd2676b17f142359fc2601e7f0f2f0c3bfcbe8d679b9ab00ca270277e70b7f808347cb478a6e23a658d3e1e57f350982ae4109d0f91a4c00d32ec3da8753835ef3e34a0100c86e9d51f993cb813a43ac618e90f255903300183f87d3b8fe0d04fac570fcfd0589eec85bdb6f06430813edc064733bf8a1002ebfe1300f3f9fc13ec519ad92c5f896a78aa3f0cc397fdc556a4bda28ed7200888fc91d6f86a5352222010d69729cc21de2cedc93e59f853dfe0050e27c330047744d6de3e0e9ed6f724b44e833f8b413e5a7a9185749bbb40a56157f07e100e5c906ef08bc4fe2850abf84c03cfe7f04f99a3e8205ab5f6cba43de271eba008184cd211509cda5fcaac17f93d8b741cc23a0657a8572ee5f84f1c468e5db005f443baee527eddf7b2942072e87625786bf52b46ff8b013e3fba3eabe8c080090eca315f3559bae94783739f1ffe2804fbf84c03cfe7f04f9287e67bf5bf8000168c1ea171b75698c0bda2593cef07eb878e37b1f4167f1f71ee5c945a648009b4246aeef83602111dd79f10de1e22308a75f842a09e0e6bff01719e7f00100c732dd3fc4009f02010eff02827c09d43529d449db2df973881503b4671c4100eefb4dc47b65c7fd04dbd002eb1966caddb9eaba06ea01eca33357da48ecea00c283a9aad9d0a5b0e11392e7f15b6f5fc260717f7fb6f5fd3cdbd062930b130013c902bb0b63632ba7f1e36f4a0d06eacc284f4b2c4e498d46682a2a48e66c002949062d0d0a2ec9cf2eaa69862c884eeeed2e49ad498c472cdfd15496fd0900b1ed2eb041eb3f7f8085b585ba93b8aae611f64b9d1146ae18055af601c6d700c386c4008dd0f1a9d01f7a24c7f4e44ce4b5808ad62f79e243adf6fab205cb00a7dabf880682021c1ffe06150d73f80692746c3440d28bca43ee8d1067b62c005b82e4a1a21aa9470bf27bbb562a9b21fe6eaf2b7832c476691a39f80b901e0041eedb607ff4b1bbe7f089e8873fe18d6eb967035b7cc9a323c6019fb0b9c5003a308d2ca551cff5e5b28320ab714ff8638777f84c1201766569b823e88ebd004095cf13886f63d229d9941bf652c3fb6d798ed6e3ef18afe5a863105c00fd0044cb5f1e1b6f8b6797fc8eda6f63a348e04a2ffe0b4c2663f8bf80063aa15b00af7d2482a7276d7f9ba482a36b14400986fe0051424b300dc93c75c6175be000dc3f84fcf3f881b8df907a82a840604eb5dfe030011ae0c0a1f8250144855a00928797dd14aec4de651ba0f4e5b09607653f84dd74860f761ef61000b9076400a4d73041fe0682ac6d9820e9427d8117c96093866751ecaba4f56bce5ee67e001e6ff81c056662fc78cfe138ecff82c06eff132b3eb46f0d4246b1c25041f200f55ea0f8fa63f1002294763d97d87c156946e4b95b14a151512aa39fa7a73e006c5025e7b72035cd153c141df68eac6f3fadcd6b620eaeff1eb20a0d01fe16009e65578705c60609c9f02d8b7c1d83825e2f031e35aa0032fe068ddb2007d200a1730934dc39e696dfb4b6f0826924d575b477cbf81a98b761eff134d7787900e627f0f003f51fc3c00fd07f0e803e7a2bfc3c01fc7ff0f003f33fc3c02f8b00ff0f00fe17fc3c03fc97f0f007e29fc3c02f847f0f003e15fc3c07fc9ff0f0000be0dfc3c09fcaff0f02bf21fc3c02f84ff0e833e7785fc3c00fdd7f0f003f0077fc3c01fde7f0f00bf7bfc3c03fa47f0f003e95fc3c01fa1ff0f003e93fc300c01fdf7f0f00bf87fc3c03fdfff0f013e89fc3c05fdaff0f01be8bfc3c07fd0087f0f023e8dfc3c09fa5ff0f02bf71fc3c0bf9eff0f003e7ffc3c01fd8ff0f0000be79fc3c00fd97f0f007e71fc3c00fdb7f0f007f6ffc3c02fda7f0f00fe7003fc3c04f9f7f0f017e77fc3c06fdcff0f01ff67fc097a208c203024ca97f01008008c10610068f293bdffe023ce080372b461f9cc1eb3f3d6050923b976dff00fc49b57f098221fe96947b9951c6d42b23ad0768bd450eec19dbac3db5340500dd3b5d78770ee5f7dda4e391ff5f31eb3654817616ff003c6d41849e22ff42000af3922b359cbddc07fc0114d0623c27323963b031bf6b965cb79b69885050008d522fba136ccb0033c519008d509e6bcc5f7d01580c52dff912561e046bf80028264090b149467cb4793690997dfd6e63e91a3b3917d50c69cdeff270060f00f9624bcc26409254ef97fc1060ba4261fc1417481701eca1f7d302e607089e00a1f10d4fcadf06700abec4587ca6a0d62497f002283b8ce3d72cae0fa3bdb500a9d6f6ddf8b0171c891c66705fc578a6ff0980b7fc3a65c9e517f10762430000825a387e15479b8b558982d5b32d40780baeb530c983be2b6ba4b5baa140e100ac75bd412427d88bf2d2dae0a0daeba87031447b492e3fc010095e7b714b6500715d7f11f62517059d5dfc14093035d774a2a59ce072044f83c4dcfc76f10600b92f0d7fc02e5ca2e58c5b727379da367323587a3826a9b9262ef82c38091c00bbe8ae9d35c822250082cd37f15bb5a4e7ab35da5af262cf82c5cc9722c42a00960eb07fc59221860de859e1302d3e519eb5d6e86342f08dc7b37f0f092ead00fc189e635baa8eddd717db9467c28dd772e1d296fb7b0527f1f6637fc3b9ae0004df0fff8fa1cabfcad4d05f360a2e9cb72e4337515ddd58d1416b33b88b7f00e3cb5290264cfe7af7cfe2b010ff87c0634186bfc76e2e237523cbc30fd22000fe00521415455ad3f865510698893953d20ff3f2df5d07fbf1101983f8fa09001144b656c7044616f2052657374616b656420455448ff4a7fb77f0fe62a0ae004e7fc5a0387f1742e225fc7d9189f827f040b64b304af1328c62e1a6635fc000012ceb1fcdfba67d33fc16e0207875d54a1bea5fe462c1e94bd03a06b9a593008f564d4456f27f831e51fe407f027f81003c8301efb494ecabcb41867ece69004d1c15ced96b7d1ffc1d335cfe28ec17f84c03cfeffec17fa7fb05fe031fd0005ff82424183026c189487f95545fe00addcc019a4b302c1a8f66fbf76880050011e501be64520e240c589456be99f56e66b683e5e473202e3906c343aa3f870087b4a6a5b9f050214bc3860ecf29608c2be6992b147e44bada26e3f7f7db50001723c8a6ff3f2d36444ae64574544b00288cc2eb5da94647dddd90a9ea02f600273b8263cc18b4f9ae19a1a51d90f242efb6ec5b20d87d0106a3678755115c00d92133a74ef309339f9a7f107df7f07e3bfc0a1afd2834a6040f70f5824a9800d1f8fc47562194f58173320eeca31e710decd7c6630199165812f936dab3ef0040815ff03fde9f713e763f0804bfc0c0af6b07ca52613da19578de4022befa00034c5da3c6486725afff104d07f2027851fc0a1d3034504ca614755a0fd4b300a492944d5ac260352ce5101797fbeb658998e1958590c4dcc8c4c4c0e58cc000cd99919584c0c994c58cd4c0d0d988e4d584e4d4c994c184ccd8d0e58588e000e0ccdd88dcd4c8ccd18d9990e59998ccc8ccc7f87fba534306337653865653009633961343334386634313435623930643437386165633735376233393966f00e03e794ccd4c8d0e4ccccc4c8c18d998588c58ce58cc4c58be1e8d3f81452100b64e943a3cd5460bba200be5e730a63bab245c4610ed29fd2708fbcd495c7600005406790467e9f79c273c5fc003e0ff00e22cebfe40a22ffe030d890bf82c0036233c59449258e819a7656f333811c48fe00aa3aa4b7803e557abff8e8362009aa938eb322cbfbdc51352d05b42ed683ad611adadac64568302fe00bcfd0400a36785e673f8fc362b345a26870479576d434bd30017ed7c81cc9c7aa3927d00f297f3d92f925cca239538c6a2b98e1a159443d29eb450b466412a2935e3b600d7b24d021f4b5e6087e7aff2279dc4140ddff020d89fc0c3461fd6ca475cad0065f4bc626e9508dbf83514544dfd040ef07e8a04ba880fd1f09745fe0ac3bb00fe1f8c5f03e38e080447f81407f04fe00c1e19a50d6c4d337294f5526668c9008fd22f49861722949e3f850228fe06a8b2e2936174f49ff8fa9815eff072bd0047f01b6c65cd2dffe104ca27972656964777834756176357a6976766b376b70046f327077737a786c6371617a71706278756232347a626b6b35787a6d6569700567646170342f6d65746164617461ff062bfb817c7391c202faf0807f020000090606939b28cec6d60d3fbf45890c72046d0e7f611d056ab555fc2a0747e830004d11fea403a303e40788ebf8140e402981d94ee9773ab341722875814bf6c001be91b7322a694be94b4e319a082c61edc7fdde36ec0f5f8b1f495d87a86c100107170ae26b901a4235c9238ff3f30df7fab1a45c0fe0cb8bab3c152ffc71800408092de489fc3c21cff8d1b977f814106fe3eca1907aa100338adcc49008800d586f10786c76e2658c7f27b898baf2ca75eba5755ed64e055a6ee4ba1b33200256428c1876f0a1e7ab2d5317574c5563a0ae81c4cd619fff8863ed1b43fe000507903a94065093a73786624c7fe1a5ba2d84aa72c1a97660097e50a06a55d00a64595574725c0db80cc6c8cac5bb6af202e393c581866ffd6cad62cc1079f00c3e02fa0cb7a98796962c2cf56282d2f1e61aa24bba925f08610e03814a3ea0040c991de75107aef4c0f2ffd18d5c4ddaa3d09ff00dd66aad78cee7dbbfc010086060f5bd09c43d2b12f47f10c799fc01aa040c37f030607d671290905551d00013da847ae7d4856af57f2985d97e033fc505ef7f098079fdfe5ef7f4f97bd00f20407032dfc0c2f428f24a4ac75a8cc8279f32ed0fc9d81b1be41bca76d46004ff175939fc260217f7fd939fd3f64e7c83b6c10087ff028e140a78e72976d0046c9e3daa4d27177edc52fcd89afe13d22f11294210b70b32397c39e54946500191f6be18967ef5db0e0221b262dd8001720e59cf595649fc7b10b838079eb0018b378652b61e0d1a847e701ff006b0c19e7f6d3fe302045fe13028ffd01ff0035fc787a6027f0f0c1a0bfc1932b25d9a26a71894397b9a9be310ee19ab84d00998d7f8618ad60297c23e2795777b3bb7fc050938c25f70ffb0301f01fe7c800cc6fe3ce199981cc7cbf87001ff9b8ff2005e35a47d8a08ea6d27f84025406000e36eebca057f4dc2d84f346f86743bf805941cb9f057d077d85655be882390061c4ff0144b55ab57fa216683f8c803fecc4824bedfbf2b55346eed2fa90b2008d481444f6ff1e59571b7faf158440bfde5a5b616c86b20c1fc5800fff0f8500bffedc705574fbde60fe2c007df57d167c73ea59f558331b119b9abc8c35e60067f87845f0144b8b0158b9a6ed3c923b5d5a853ba8fbfa2a95e75f55ddb420008052204571a3ff262e1a3530c1f48013dc9a3920989c0a42dc9c0481f3365b00c137ed1b1b83cefcc1b0000118b303e176e7037599f40a82bb8ce5e96fe00600013d76f64d7d8539958dee981a4abcb80d7538614de919e8e89cb6353b19000051980bb4dc58b06ace6610ea1c3e6c3bcf3aac757f8018373f2d2cfc91eb83007e964bfe00610a555dd3e31f8e94040dbacbc1ae3ded1b9c21fed5f3519656007900b70da1edb140de0e400af38788590ca2a33e7eae80092832463ad5b7cf0044d4b072b3eeb08fb9810c23064c13f801889c907e4f60d7bd7bfafd39daa700a933fdd90e4fc917df06c0dfb332bca4332a41a69ee532896e6a78e5799a5b0007d21df09d3c80c75e4d6aec640fa8b1613a069d033a516b796a65989cd06c00cf85465f828486ad9c6c8048c8de033f301e0616799e3591975ace243a473f001fe3aade9fbf86a8d43bc5709a6fe6178c62fe00ef71762862a280b9030c250010be2f71e7c2fdd02cd228b7783f94da45d43ebba16082ba7d30dc320d950a001845c7802fd4230516bd9bb1f12e0e9401a6703f5291e6ba0c02fc031cb11700ef2586eac4d141e125b1438d32af667189c3fc89f2da9b4917fc06281817c8002040fc202f4ff80957a3f80c004cf8304e5e994870a7f2a24bdee9457f6d4a009d12e3501161d8c96fe82b82729f4f7076c45dd5ccfa729cc8c3ba8162c2ed0059f4b5a338ad0f71cb17795ff8bf8aee09fe13038bfbfee09fd9f0930892dc00d4cac6e8cac9fa801261140d1414150c8cd2d4d4d94d9a1410d0954d5d5ad4000c9c969c9d58dc95dc9e0d95d65e1cd39b5d8d908d4d517fa2ae09ac8e464e00fe01761ec4ac6ba136ae30a6d44b9fc5a334b1ce4aaa10de4f35d7a57159ec006ffc05042396991bf70315bbb1e80f187f867afc1b9d66654d4042f73c097c0014dbfe4409f103686c8405e294b0fe030012fa0c0ab62a5283df77c937cf4b00844b8cb7a9c6260a3425f1c557f856bebff055a725c81923a23b9f8ff2f3410043915b06494fdde06a5c20a93476cad1cc92317ecaa4dfc01172bbdf50bd030007d2736ff2a95d7ca07f00255e6252b886814f6f3f0d0b0a869ca0a26ef75d0075b4439321a092a9fe1865cafe13038bf8f5acbfe0d0c28d229671f80a26bd00f06c28960e7f801344ddcd9ac65dcefe3846a01f618998bd97f87d1acc8fe3007e98c060b63823d7ec3fcb0ab6192bf2964fbd723f2e690ecbd3645e7584b70055d35fe6e42aaff0629c633ffbc158c41f9451067ac3fd80ad61fc081b58d400202ee3fee7f018009d5fc081b5d1d3b9d93d522982a42f77f5fbda455c18f0002fcb7f4086d637837c5b04c5162d19b93f6704060be21f031796aea0dcbb4a00c8db5d14f29182b695428129db600419e34a59014203fc00b12c3e0046705e00cf01a1c5e1c837c5124fe7f8602d17f84c0e2fe970dad979139d1982f6eaff00878777b3fe37f73c2a4fb88fae7743f97c36bfe1e7e54bf47f9e036b37438d00cb56d0fe630dac1ea0a7f82c36b87e0940fa839eb29203c45478446c15ddb700063fc64995efe42cb0ff81c056fe17cb0ff82c06efe93cb0c77fbff2c3feff00cb0ffbff2c3feffcb0ffbff2c3feffcb0ffa072c307a98180fe0a1eb01157f00250d0f1e5af51655ff802c849b796c155e20ec9096b930fe16e9c032ee841b0083f833a704fc2fe03e9c2f5691afda6ba634db5c5bf802a2ae1d1033626a1800ff81c056662fc7f9fe136baff82c06efe13311146e48e94f29cd93c6bcd3130002bdb079f1eb8919c37f80316a22bc7c4a2e0bbfb753e10ce8acb095b8d5b800c7772c9a77a97c80397665451c50968976995ad2cd659770fe4b1eb0c1ecba00777c3643e6d7372a25a930e4da4c6ac0f3f82fa70fe1303fff81af6cfe040400cbfc4991807ffc3a00f840cff0f003e2ffc3a00f884cff0e807e0c3dfc3a0000f87557f0e807e130dfc3c06f9a7f0f017e1dfc3c05fd17f0e817e01ebfc3c0000ff0ff0f003fb5fc3c00feeff0e807e033bfc3a02f81577f0f003e5dfc3c0000fc5ff0f007ffc3c0cf8113ff0f017f35fc3c01fd27f0f00bf43fc3a0af8183007f0f013e57fc3c01f8dff0f017f65fc3c07f94ff0f023f4bfc3c09fff0f04f00e0639fc3c0bf8a7f0f02ff69fc3c09f847f0f02be31fc3c0efd5ff0f013e2d00fc3c10fd6ff0f047f59fc3c0ff89ff0f043e9dfc3c09fecff0f02be41fc3c000bf947f0f053e13fc3c15f87ff0f03bf47fc3c0ffff0f0abe0523fc3c11f90f00f01a588d5040299fc1c963034d0cb32d05019649885d3f614b89c6d30ecf0600ff0aa58ca3b5840ffcd0963152e93e6299f115641b7a5b62f9f3ab292cf93a008bf46324032c4f5df530b133d274ea5fd5c402c038d6d84576fcacda25997600ba417582baa7f0051edd1b54e7c5561fe188fa5fe13038bfa692c660660bfd001f0c06e0165fc6f1fc84c2757caea4a87f2fa58dfc3cd2f0f30ff3c2c646370074e18b4a1fcc4b197c30014202ed4669ff018009b906025697292c60bfd05800bf2781df3341a657437d21802c2c41297a1df13e282d01736482fc8709fc0100dfcfb9e7e34b7cfc05220684be1ff065b796b62f566328cadc262912825353002a3477ac28ffc09dab8d7f0500c61374452920cd55e682ab00605b868f1b5d006aa40653fe02e11f6ffe7aaa9ffc7c8dca83e1b8bd5dfe024346ee3a658067005e085845a3a93c817dfb76f69254460f179a9e3de007093a1aa33d57f4b0420065edb8401f856a4092bbc2af1f2fb5225650e81501e2ff232d76108dff07020048033d85d1b72ab7d3a66ba378dcb558bd84b6bdd3fd36092079d0b272ed1d00f665d0c013dc9ff007c3bc73f57f2da9216816e56c2d096a4b4b30756db0db00355167887cfb6a0f420e9f0620a93f17156a82db4382f76a4f11f58d741fc40080920e7f07024895e001860d4c2346aa3ea92e474933242192034ffcf4092700f8fad7e105e8e1ba701857559612ee19e0d8b26e0cccdce62d3e00c13891fb006b68fe90ff88a904257024b6dc32256178c6d0988c5d8aaa0f11a23ff802f2006f5ab51a03cf761b6ccfe22fd2998abf82c248e54194aec1e5cbdd1c2c5fd3002f2f3b7a81f36ae969c0dffd410b75805f10261fc1421d029810ca55fb6f17004b5b4a47652ff632017707a381649fd6fe8d8588113498349deddd04107473001fd01094af019483415bc0b04271e01215934a41798fc0bbfe44b5f903683300fe0b0212f41253df6081ff31071a4b4a5bbb6c5d53b04a714f2383fb39e5df00e13038bfbfde5dfeff7977f989e5d01c243fe0a20ac216e465270e8fb38b350078c63964cf15c7512296aeb40380650a3da267fd90c9872a5d9b770946cd66008b402e51602e406108d8c0373f52c3861ff0980f9fc19a4dd2cd1f9d8b6cf300a6408e926c5bcb4b3267f0c07f95aada5d672e5fef114aebf52664aea234f1007693766c39ffc30376a40fd9516d7eef4d5904ec7ddda5529bc9e11fe1838200fa2703dc9fbaccd6ec2e4cbfa700989d0238133fe0cad881a13f05ca82e39a009973d1a13b6c82089cbf80238890fe0c27c79f95328f5be295587e33b8d849008394def716fbf833f88b4fe00d4f3bc576bd3009e1ef14cc9602e0e338e601007fc305a3d965b41eb5d9cc2dc597e52aed9f8f2bf62b8c2678005f08c93fc10044f80309ebca39b92c2ee90ebf43b264e7f605402232304a2944fe918621440064bfe0e0120aa0f28742ab6a7f10c3e48356e9d98336943d077f88c048e76b00fe0b23e6e09a522d59ef525f4874c4972fc27aab25c3d4f5bfcfeff9837904003fe14e1e545b56999c14d650cc8c5212915c19d092dc509890d21d551dd1930092db931c0c535459ccd21cd4961d545192129e7f880b6c70fe0e2db37c0ca1003740a9f2b3c8f17eb7cfed1346ee06b013f898b6c1dcc03601b2694194136f00af2fb66a6fc1a3f87d2fd040935cb7080bb385fe02287205d9c309830abaea00946abc2931f8147a3c5d66735d60b2ef47bcbbaf7894ea7d7e414c17ce831b00a7237b08d832f5e5327303ff4549bf8100760796ca752d3c6f47e654c3b97d00c5a71b11b5d60f840d35463a2f6c4be1317f8e9d3d8bf214bfd78c56c40c260006a64666272cacac86ccc6262caca70c468c8606c6acc646c6a62686e6c6ff00c7dbf9fe9f842f205fe3e37d4f7f81c2c86170702e6f6b6170ff0469b27f830015f2cbff8f80fcfe0638d6810a101765b813f80c0041282d45c9426e26d8ba008b0e76eeafe00de8cab460df3272781bded97f454427e5c327a94c57e8605a00c6fe1300eff4fc422dfe828880505d82fff010101ff018009060349972848d007c244252d37cb862ab72d58ce3680e4202c2d298aee03166a319aeec7a287a00ed336501adca1fc01c32db404238122dee60017c208aff048085fe08de9fca00346cb329f1c39ceec244e5bfdb40274368fe00e24e53037ac1117870c1ec5a0011e3ce3ab1d91b4663e612185a38ccc3fc15c7b50039fc0601f7b7f018009f00e02f15cca36948883bf4db08179b73b9774141dec1fe4cfa4078ffd5d0e50900f2025041080bb030a7fc060022ec18146964a18ed71680b3147cb55030bf7800077fe5e0c565c444a242c6302c31548d1a6c1e0cd4b827c1bfb27d202ff83b00c5a6e391ffcdabfc74790a29285ffc57c277f098105fc3bdd61f43ff15e48100fe3ee086ff1318c17f0221564dfc16095d23bca453ddb16590f715f8e6a9a2007d3e7c060b4a1bc2ffe9d040ab8526c0494f8b51e44bb0aec8660650017bfe0000eb54d0730617f803ada3b53a4425cd0cfe49aeaff3f2d3674991f1f422e0007e525e0805c3f23a57c2cc464812a1e0a155d4caf30fd7f00f5c1747ea3e6a0057bf36fb82c2793e90f1c19346bc1f37941e84b3bfc01daeb380f89ad91b3800ff91827c40917f82825001efb494fe00ee6aec624d03919af2def5622c10f4003226fc6ef5bbf8a3b59fe1300f3fbffb59fda11047df20810b5fc14102ff0100e3c9db631fcd810d2a7f6381eea260ebb31d4aaae9dbfd058f22a9d7991a4d00ffc6f5f0416840f6391a5618cdd19cf8b255da2d06ac057c94d0c7f15e3c9f00c260717f7fe3c9fbd01eda549c1152935b9c990cd852cc510dde9c9d98d4de001cda1459965d969c995b50da9699cd5d15531dd19c98d4d53fa2b1e4150762002863a4db810a9990e5ea114fd8c82fd754acbce29086495134a3076cb1061e0039141d70791c7a678a69e44af6eb4df855b2f5e62eea7c97bde494d97ef5fe002251cd1e03f424432541770b4a42ab2917e35e5a925a67054a4fdf8777ef8b0094b4ff8a271fa2006a94d74f43003fc201a488403fc14024a9044a0c49b9f600f2880b8b0ca7057f00460d898bf19c5b3f093dfe2a347814c88b43efc3ff04001a4a3304fe85086d904f2a09469e967b44a40e4a5b072d4ba435f157cfe00c00bccb5c7aa500e4705621ad7dd29ddad01320b4c3bbd2fa20cd7f8b9502420900fe0d02b7bb6290354b10b5c5e89f97ebf8023b5f5a3dd13e7ec0094d7b8973007d86a994b2d0573684689a43d13a754d68729b27ffe0128ecc953f80c0ad42000ffe0d03cb6734b09aa9439d74c0acda0ebec7d10d001f9a2251739718f65f00d9254dc4ba1050c3625974f28b4a121c046d0ea3aadddff80c04440fe0a0110020c06b9c6533ab2d25d1ba848a06ed4e0b95a4bf80113946532d232394fe1300adfe0211a1c7b903f80c13510fe0e04d563c54363af088aab384db0e25505100d841001f2fe53010ef3a6be1c010e60606a3791ac9b98eca6fe67f4bc3980700f0780d0a7cb6afb91b91aa5b15c50a24c35bf2d83b97e53fc86034408b7f05000229fc06b50cc7adeacbc2061cab4157def96df2548d7d11c077f0dad421790071a35d3948246968788c7370b3decabc73f30175ed8c03ca6dd7386b8d6cff00c66041a85cc94c2ad2147dcd2590020e6a0eefc9f6ff004bbff9fc360418be00f15dcd4763a8907ba940f4a9f5c9a003b566984af43012aeed911dc5da059700f19810674ce95c1e3c33aabcc5fb4faa95e227d301c94f1fc360838e9286570083c835102d5ad5f3e825197e3677981df4a688114b106947819cdb2fff1981000629f90b884f19aaf6a97eb2c6db6a5a5733c2fec9fc360c58c13b09e89be700335531188bdd314dc5774d07c3a9c58e488566e03fa1aff004e454825fc6600041b8298c8e763bc9b21fff006e080d14764837bab350f3cbfc361078e701310023cf592243f7ddadff6445907541513bf5f856b274443b6218c5bd6da7f1180020e2ffc1c083e31b5df633996c15c72566028c3cd2c574ae9a227f0d85265200ce91b3ec1d93625289b3bb38991728e5d9a99c308bba6b2b0800d1d4fb6c5300fc66041e5f828446740db20a9316119df943b166a572deaff0d862e0c8148a00840eeb0d306c429a37cf657309dc02d1ec6d6a60e339c4e56c02bdab9fc6600083c8f6cf87215cbe8d77233de5d69b9eb333e6a324ff0d8106014945dd476b0059b6977bc197e83b22ed9dd06320c78862c2f413c334c9228d83fa46258388003f8285340309eb9413ad9e62d3ddf9c3566a4dccb8402a437508e61bfe2254002fe40823f82c0490234af9410a1bbad5c0da2f937f01d8829676dd4fe00e59006443ca7f4b82335ff098085fbfe1cc23f68439847c4093ff0709d1163c314400978b867b7b40d273d8b20291ac724291fc3616c16ed740c3a916540357d16b00f31988fb0e190ba1fdef4550a1434ceb8ab568dbb7e920759827fe0e0a3f25004e51f7843f432410a525c8102107a7afb5b903f8b828ffe13010bfbfc28ffe00a20a3d18c7f82ca19b0fe006d0e500043bb621b40c9957813db84b03e1fada005f2236bf48c4d7981017f060093df69285f5239082da9cae9099738a7d1dc900fb5c47e744dfc508fb7f098079fdfe8fb7ed1094354031fe0e31a1c904e544009ff801d996e84803dfa9d3c7c0051ea8419ff0130bd7f0e98d06bfc163966500fdca751c1c3e04e4806e6eb570431b10dc230f026e58ca7adb84e104e1dd2f0041bea8bdd938cf1e96d3b314ff039b3d441464a4d5f1fc40055af9b7f051c9008da8f28befb77b5ecb6a993844d4475e5866072d517f14529050dac0341dad009eebc0cfc0c29ee74b73e0482a30148f0b3771bfe309ff6c19728c388a182f00e032104e3f838841483db4042882b2a0ee40bb3f1ea93c3fc31c9924fe24750034e7f82c840897e9415cbc0edb4740e483ab4f669075e7ce5d40986cdfd2410047427bfc1c6ae40a148f6afc39498d934fe4bfac698e1914be8ed7f21c7fc800085fc1649e3f87ca12bcc6c453ad998d3d2c3ff7b0f639ff00656ae6c1b98b00fa382859be406890ff82cc1403fe013c44efb58d3d27e409355f1a37e48bbd002c3c584d3e1a506b041213a95e5614e3edf6d2b3c3f0c3152a686a02e40592004b13d3f83137cfe1300f3fc7ca5a790a750721e87f4051722acf517341c638000cc679837ba7c5dad4252f107d981fe3e4c1b0ffe3e70b04cc4dcdcd0c4c0e000d4e0d4d8ccc0e0e4d8c4cbf4b04daba0f74288594365e048e409e24d66ca5001b6fdbc64bb72f675e6ff006866a914c547b5a4aab17376de54dc77b7f86cc00068397de6ec379181598b798adb2c0576f5bfb8c7fe446475fe0480c7f8302009a24e793bd95fe0034c5fc1947429cefbe8ee77729b50ec7f88c29ae766fe000b3fdf704e5055205d61e9e21f07280c0439a45b518df5fa9c27f9e1fe85956007758443853665053574b32447576457a4344577a347a46426b4e664a774a76006f706670646f6e6471735afe215c6ff8300eae5e994dfde8e927b385c9be1f00f011b43bfc56de97afbc157f2ff412e361b6c7a7fe8d729f349bc4329df3a6007d137cddee7d6ab0223e40661971024b143fc56b8dff0981c5fdfeb8dff74200e36a2968aaec6e4e88270aea262d0ec9accc4b4c8b0b0aeccd49ca8a4c8e280048accce64d696ae9098946ed2a4c9fd14b8de4541dcb37c1e151d4c3e714620037c31f2f97810c7b8ed42554b23ff2edf8d2a49ba1a9af5f4b45f60d51ad1300949b69f22bf21b035be0aa81e4ad1bd7e317917f115969f105030dfc1649880080d4a2bb3df5698e7eceec0599bc16775757f00c7c53a9cb9281e55e603a2b0036b128a67d96619b52554afd6fb3dfc25001bf07433aed6762d6de2e93f59300c6c572ec2680fcff11c007870325fc16875b59dca34cf167f8080e37b6fb1f00335e00a29f0899f0becd9212535c255e6872df15ffb274d64a89b15e4dd3600002bbf80e7bc84bb1efe0cb803f84c03cfd7e13281fa7e275aff930b9cfe5200037ff81424bb7fe0b092cbd46539828660e579532e7c58cd7ccf324c936c4d60040ebf854d82fe47092fe19e07dbf8397bf834dd12a44f447267bfe00551abe004ec27973bca776025ff908a62f9020381fafe0b0cefc472524fc079a0817d8001022aa8c6f223ac941378d7d207f4a04e0b7f098079fbfe2705bf6884e0b7100c10081ff061472652965c007ef5502a46e4c2250fa042f18ccfb6b02a3289100523fe380dad8ec61e5a2392c5b70a01307e7c3017149846b5dfe185df2fe130000eff8771d749fe1fb7786dfc45ad66a7d3d48cfc0d17f803fadcac93831cb00d3275675e97ebb2e5dcb288c533c7e50190442d841e57ec29419ad907b9a9a007c9f8e134fac71bfa2dc2a0a1de681acfd041408e1d080bacc30bfc060024700c141244a658ded5d5154159b949418af25afe81f76181eab7ebe8a0473131600166346633633535366566343335656665653065353832663261346636633230023762636331383238303630653764383633353563336534393337623632ff20003b94321b1c1c9c33199c32b09cb29b1cb21b9c331c1ab1321b1c9b9a31b230029c1bb1b3189c331c9cb2331c9a99189a1a3331b198b1329b30b21c9b9b30b002b2991a7f01c5295023fc120a241831c44ca63a6b98910ddd331125aba5757008987a2490564994a385ce2bf0ff923b0e0e1e76abeed74d1f9ab834c4301df00482949005c8232180d1b907f158b99fe5a3182fe05019bf874a783881ff5d000e91817f9f1b0e80a83fced4d04cc107b6dfc573e590a25f9001dfecd504a83008b199fddadbd0e576ff861dc9c7c1daa0000171d6294179d65c83ad9cdc4db00a24ff8ac05fff1f36738c4ef25bc73a87292812e68348a46bd5a6e5e4bc7f10059771fc7e05fff09855bfeba64e700c0ff4b7ab97f980ff5430d7f8b3afafe001f017ffcbc6305fe3a0089fd310cdf1fc314a3097f050957fc0646e3caeb89005dc96817b3dc4ef432bdaf6aabbe2e87c7f1411b9fc2601e7f7f91b9fd424600e7c8f650aff05040a40d52f2884b8007dc46de805d484790e9a2b19bb9808300f6d29fe26b13788018f533458c10000b91e84ff0f58d59cb438a2bfe3bb4fb00f5c28504b293f6bf432956f7fb5ac73c6946c67380f6f832d13054a38d29fb0075ddc7a6bff8ac09ffe130413f86399dfe06041bfc5c2aac0704682a54808d00fe2eccca3648fe0087f56bbfdc0643f4b047fcedb9dd0cf839687de432bc0d00d23454fc5bbd69627faf2ccbc37f8f5a7d03a0fe3d6d701ff8788330afe1e20014c33f8788730ffe1e224c47f879b3d12a0ff3d795c8b7f0f122633fc3c499008d207fcf084a113fc3c4391fc4485201ff16f60ffe5ab66eff5270437f9f880082c13f80ea8600feb50003fcc0434ffc440bfff07fdf029ffde220cfe1f0a800c71bec2307bd3941692b8fff0f267910c1c37d92bfdcc4661fd0609d9d7f0000528abffc10200013880097f0f8237fc3e1ffff191187fd3408f81227f1906f00e27fc3c007ff6706fe0209cb60f9fe18fe7978b1730c6b7f49e1650093b0cb0009f9df51dc831ffe4b188ff8c8263fe1f4c9cbbf8586d7fe152c485c03fb1c00000fe5321fc1ffcb956f3fdfe43fff6f89fe29fdde27f9e588278226d91eb20089f95308050ccbfd2f1fac3ff5b09fffc2aa037f7489fffc865bf80ff7f96f00ffc1e711b7da2444d4d534fb94812c69b8b5ff00399b96679bc309fdfe5bff00f0396fffc3e08dff7696fffc221bfff11312e25fdfe77fff0fb3767cf183ee00cdaffa022b5b4f73bdabf99826599502d8e47fbeceff00fe0a3bfff87c11bf00e1f6c5ffb7cefffe22705c0bf8baa31fed027ff7697b16bc02ae6772030cf80022207ae03009f5263f92f574fe5327fff859deffefe3bfffc44414dfc3ed9100ff9508363f8d1ac3fe9f1e7ff87c11ffeff2c7ff88c123fe2b751ff8fc79ff00d040b7d633fc15069817018ca66001560be9d9c39dba4fd06909444be7f808003abde8d7f51c4ba1ff0980b7fa3c21fc7f87f4d9411397d65a35f3db558c2500820ae261dd3a83471bbcaf4314f6270372965d45eff95f8af528378b21486600aa1db9404a43783d022fe225313a293871d5ead5b44ff1ff2279dc20107f05008246ee61281e781141b148b9d107924f4ffc014c81a696c58201c68fe8e84e009a4624fe0a88ebf80feb97dba39340d286ee7af6281bb403a7cfe00cffb82a0033017f4905aed167f0545060867c5289471d8aeceb8c640bb2ed21d0f5dcac00c5e26a7c5fa283649618d20dcb4b7dfff89f62ee12efe0b02c4f5ae51a03fc00272aa3a0d8558db2e56c8485bbb0ae12d3bf89e9c2fe1300eff87a9c2fd1f100067c369e623906400c3f1b264f213e27560393a065d6a33449a95a08b51a970090ab89aeacb12f0955cadea6a47b74203009f1cc3e2173b3f35e00a061d8b500ed78487e878005f07e8dfc154e0abc4ca00261c2376856c441075debce597e006e5c7cd82d3fe8d8948d02f902624afe0a904c16e4ce538c878c0ecc7c76bf0071055118f4b690b734275547fff126d5fc260887fa5a51eca32f86fbb76a8f004e1c117ad6207746bfc0dbc3255846b57c2f64b57df32a7853fd7cc7ade915009b8b7c4b0d324218f880ebf7e8bb7264204a35f39667ae257268c71a1b8c76000f45b53963072308a6b258616e1d2508512b98a9ea7e4e1f43cce1ce9f4af700fc4424021a67f05054ea41129eb38dc6574b924e53ba406b96498cbc913bf60060b295c2397ab26a96b5801fc017112d6dc325ae44bd221d9ac400dcdfa272005195767f8217a98853bf8385eb1f03ba4e360071e2c1f510b2e9139ee6cf0b006477fe4717aff84c05bfe1e17affc7c7f3a82bb2279ae18f33088d2579cbfa0012054463805ab7cfa7bee70a29ae02951e061703cc12efa787cba750c10191006606e9f2a369b3ffa02146a60f3f75236f7023f404497e5153ff110bd702b700fc161e79810ca55ed7b44263b0ac08d46ff005ef44b863a73332ea857fa3a100220a68916187c7e19f69101ba25d6ac60cb4096eb4fd59c18002f3ba86f9d3008323f48c6d7ab57f058cde0d3b294756df2e89098ddb373d1ab568ecc9f9ab00f4e163fc47e524140c8ff05d1621d232949db387b87d694c2c751436b3150f00906847208c128777dc5245e8fa4ed4e1f7c5a71b9855241da3a0bfc95a655100c0d37f0582a608012849d47387e8e8943dbd015a948bac8e9bc53e1151fc5100e1aff098079fc3e680d1c0e1da5da16b34b9251dfe8084879391356236ef4f00340fb422495d0979e970d82ff1f1a751e7f23786a6066606072726a646a6c600665fc59b7b27e3b04e606eb4deeb72827e3b2f82b79bd03fa264251bae613a00ce49c2d5f8e0bb60bb3eee092f1f3aef815f7778a85d8bae5a304a4bb7b1b700580d0128036230ff91991d826076ff82c27634af948f3f969b40c95b8ec79a00e51deef442129ad9932cfd2e08e27fc260217eff84483fda21743804c703f100fc1421c8393a9ca55492e7d54051bb2883d12d51f2734d84a092dc97ecd85c009665fd5f0b92c64c4cc66606cc860cacac4626262cacac26070c8cc6c66c46002c86864c4c270cdfaba1725804f3f5f02e4b7f1f01f9fc0e6ac0fc202e446100b7f0180087bfc086ac7b8c40f96aa2c12fcd36f118384c1731a0e86fb4ff0d009ab1f13657080b6f235d0604d083289059d118749f44aee6982855b957011100e45ce0f5faf03128c061a800be1801e1016a4445bf80c0041dfd041b29c92a0017664de9414d4c604549b867ba56c1687ad0bfa70366c617bff80c8af1ffe000a018804470e53979bb778ef16c48aa92f817b78755a71a0d62516509bb92e8007c005fd04710029ca445710e27a1710b3f9247e1022228fe0b039d618651ce00d3891ce2408196e73f322e456145fab0419bd3f5e85a219737fec78b443fe10030483e97ec030e0fcbaa4185b17abf8039e6b819d3eec79f642163ec8de7de00d980566c6c71fd5b16886fa785b5196a5919cf8d9d53c2e8e08dfaf0137633005a5b93c32e80719e4d727a2a8824756e3e4e3e148c94f6556ec2bcdfe02fff005444096e35dae0a86576235bb71ff014b587f1087d9cecffc14154826efcca00193421e56cf2681eacc90e4cd75d3ec4f535114a7ee109bc702f901438187f00e0b0e5581765376585fe45e452831b9f76bec8c0c5a8b97f8041402bfd281700931fc2601e7f0f376437fabe2f261cfe16bdbc9f2e2a84f33370bdfc62cebb00dde6a487a313fc021fd9f7204f2f04462129785c75f7fbd1b2c14debe09489004388f21850e47b48b3832078228d39903f49470e082d414dcff01800981fc00086832ac628415b0d02939defd36a429fb2efd5bf09a7fe92051ed023284059007f106fe040013f410268428aecc1a33371a91b93207f413d3c2c05de2ab99700e940e13efe1300f3f7fc531c7ed105eff02022484059722bffe0300131bf4100071a2256c9b7306d0033f53bd578bd1c0824d54b75475ff14040bfc2601e7f007f840bfd4410280f1167f05840aca11291f8a494394dfa6bdadfc01c3e859000d8155d23c0e376ef7ebe0ec082a9277490e8edaf9aad2f43eecbfc694a64fa001ba6fb7ca5768e41540c5e9840afdbf1d8119ebdda4d02af9feb00951ae6f600cf01783c262ac89a60ecb4056663f5179e8bc63e66db5ad118d3f5a287b53100b22e307faf261df3ac7444b495777f5a12cace25fc46866011f4202aea5404002047868c07f020be33f15b768f115cabb8dedad4dbf9db7f91c46626ffc50100f5ff098079fdfe1f5ff5007d7ea41080ab4360104c56528678ba021d89abbb008a550faeb2a5a86769c26ee5ffa2823d5412000be405041e1015585623f80c00004fd04087ae598a2586e040241b2a5d12cc86310b2aed1c6f6ffefa199c66006461373837393962343563646630323239353866663134633961316330633400656466316234316563373136326634653731626666666339323863366133ff00202785b21c181cb2b2311a9a329bb1321a31b0b2989b31b0b29b9b1930999c001b18b19b9a31b3319c1c18b2999a30b09b9a1b9c9b99309b9a9b1cb09c3130009a99b2b19c7f01b6b21dfc140a1ae7aca1185c9104109284b7b841ac77f00700bcb32e5f7888791bf28d9a417d1229537c91e546bcac6a8921700a450ad0100097344125bfa0c1ae23f820041caf59442cde7521410c6d582350651ee95b310003dd6cbbcfd5e1eb147e41fc1606244ca07eceed07b84d85384e838418f1df00f00170718b6e867b728ccd51e2abcb8062d610cfeddeba8215c1f79f7b101000956c9a5cdfc06062137f0500836f9b292361e5719347f78bf3d856ef7c0e1d005e27f01137fabc3cead18a7f8240c4fd041da0f95141eba7cf3ba092eed6530096e468632796c267bfa483e128aff828048034c6b941663beab7aa967d58c1004c91c8bcd74bca2e3295dfd430c4dd0067fc140bb5ae9ca0ebf18edace626600c81b74d127791bd4a975ec3b77eae8f807f9026253fe0b03b1580251c28149001a7eae7e526a93c6af1ae7b81021778b6ff7fc7544feff8ea89fd3f0b334be0031080a9225d5fc080024162adca7b14384568c3a7047c810599807826477c80001b6f7f0a0d4d01480da4b3fa381480c05e4ff93000be18067f8240618301d00b7a9474c4b7ada15138759cbbf38ef552e6f83fd716aafe3852021a67000be0028073f8280c48d879478985bcaae3dd5e3634c3b07273b7d0048a5100afd27000e4b5fc2601dfea10725a601cfe0e041405e0a3341638088ddaec88478dcc600f8282e5eac3f8e41059dfe0305a07bf8380621d6b739c87c8ff012592e98240011a86ff00564a6c55c70b3245fc720b44f7f01ae59fc16031012a5aca69bd700575ee3c7352479b199d1b175b05a69d36b6fe8f0e31217840543dea88305510028942281b0040ee69975f791521da812cc2066541d59fd151bc77fc0b2407f00fb0f8cff84c126ff1a072cbcc47e8f8bb0302a2f6fe1d5ab10a13feec7f3df00204b849080a5eaa13060d8f9b29d1b3daab6c8d3e129eac2b8513ad86ab7280089ffa021ad17fbfc735feff1cd7f4f85d0051034202903da47f018008a506000569472836bb6b80cbaea0fb7eca0654306bc94f6c67ccf7fe2e821364ff0f4001162825198193d044ec1b262559c08f7134bb69c47e8608966a2ee6fce4acb0062d95448729cdb781e3beb62504afe7ebc07f8752400864d9fe1fd34c9b7ef003f831224fe130503f86efe5a624cc35fe1f23683e1014542147f41061cd41400d66ca7f000910f338fa18e7386b8e5effe1515f1fc629e3a1bbfe669c7e0a80063fd89f925bfe0357391208102bf8140640515085f83080b0b94f7faff017900c5cc1674824de89f9d417f0069c6554853da8bbf289047af0c71c4e2cf43f80048b5a431b0fc69795fd9017204080b024939fc71f2e871afd49ff8710e27f800cbbf9fe1ff1755bf87f16ba3d2f55554f017b61b917f15b19b5664b99c6fca00000084627dd56afe3e1ea0a3f84ff6cfd2b083b9c8338c8624d677885788180013e1a7e0c9f05443c1fc8c04d7f09e0cffa641175ffc1184c4b405fc06121a00c418186a04a761b5624e381bc105f74a2e9fc8f86dc0df59206ca6c8209a9d000532492437bb267f22d7451cf718078c0524143dfff861f0014416073bf404005a77a6328d53393cabf941e332b23a42fe820e82efe030173f81006182d1e7009406ca0a868858db8211b3749e5e4a7b4a9177aac4ff2716e07e898ba49fe100d88017ed303e0e49bf81407c59d894e27f67788d56e184f854b4a69738f05800d2c778f7fe1ab37207f41c84467c80808efe851088d05715294ec6c52b721000ef12d4a6750b38d6c80c31de0af7994612af58f8016c06e603d803829ccfe0000043210fde1d86202e310192863fc60408a04d7f2ae330041fc7e39aa0c41100254eef7c46a35c10449e97f9b084ba672569827b56f081cbf8f33de40833980012446c8f46114a647acc3fadf61b9f082a3a2c37842e2671938e5c24f498bf007f11e2500261fc140820414fdca15978e1eef7607297205e5a804f2fa23846006807c7f1b0208aa4ffc8408204db79d40d8994bc45d359f6980aa6bd944dc3000bc822fd11e7002b9dd43799b89ba1528093f19124164468ca0bf23163bda0003dfd57563737c6aa53fdbad95e7080ff10c75e8209080e20decd081be945610004f25329d0f7069b2ad02e2162dbd5cf53be68fd22255b6bfa2a1fd800905a00e1383fc11c7b68003fa1641fb552d650139605331d390fc179f4d1bc962cc8000d92fda0f3f47483f69f827e85107ed5ba4946d937b5f47670a3c91d93495000d44ff01068fbcb5fc0c7f0e28b9f204042bfa1c3fd415600d738e23e77d3ad0065b04a9dc7bd2110ecca97f8a1c0bfe1300f3fbfdc0bfda40fa222dfa1c41800b98aeef3653dc109c79d07698cda20fc94ca644c57f6086e805a1930545a73007cd3f65ad6278c6a03214071dfd0c22423cb8c1c6fbea04b137e808f075fd200a15dedfc260717eff8aef6fde80cbeaa06e8accb4ee6c9888ac9082d0d670a00a62e06aa6ccc4d4cec2ee6c72ec9aac6864a4b48ca0a4d6aad6e8b0cbfb14100f44450e8d7511f1e1fd202a434d81238a9e77f3a671700efce6100fa949e9600c0797cda190e323125c557f8003083ee53ccf31b7c2cb3ed1a1066b26bf4e200eb89ad1a52513fd230d6682ffa1c418b92040fca78da8d6ea1b175f7aadbf10044abbbdbf07f48c8634fe8790a838c94a5c5043951ce54fb07397be73a2583005400cb6e77fe821152022085017a161bd5f55a011ab9b4060b000885cdac8d00bf0f7570bd2b63ddd77ff8ac454fe13038bfbfc454fee8115185d8e13540e100c4c8d9d1199151e9d58d29d4c5d4c9e5d5e50cc94cd1551965e1055de5091500b8e514dd090d0ffa284548c2492f9775db20c586f2db2eb6efc528c43d147200219edfa86d60add4055a0011c5ca352ecdb4b5c6f2174d447c58d081277f8d003788fff010304c8577f80bf9ce6aaa45646ff4cc8747efd2390bea967196b700754b4888c4144e853928177f4108174879dc7afa6846e1db3fc80b65090a8c005c8aa80beac229981dd56d25e6b50907fa581b95bf8480e2feff2183fba486000727a41585959656859665532674a454e46417835546b7469565467347469700a344d417378516f4875626bfd8b0dcadb624d286bb2fce7316f18beb2382dc0008aa7208c9a981892bc6d0e62f70acce68c1aa90fb3058b84f7cfa05307473000449accf97f87129ee8529876fbda63e3e71fc45de1c00efe8590e46bc946c00abb3206b47faff010b9eb7f144b338a38bf09585ac7eaf100dd603d84068e700780fe040013f4104f1dac5d8ccc073901dba9bd98d5a7716b09c0f83f1e7e9003092ce205f74ac6f9c32a8f9d3bc1b4f428c2ebc38fe0055be37f444840bb400b2ca5c3e2154e2501dd8b1ab8b9daf80d6f6839e0d4d7e9410817fe1300f3f007fc840bfed10632302021cfd0e2143b8f8eba7e3447e46dc6ccc4cb8819617002249f5a03fc50102ff098079fdfe102fed110a1d802bfd0b20b9feb294c25e001eb6773f5a03ea4c7315212ccecc6da4953fab844ce3e404ec2a1018d797be000b1926502dc337e5bcfb90b1e776c83d8d651448c16cfc1ff9f29c5653335300861616334613037303866643035346163616438643065373736643738383530033134326131316630623462323732616630336534333133373737343866fe500f017fe0ec5e1018d16e2a0a360653edb6b79660742135d6dac5630b1265a6a00a8f7d93f8555e804e24cf144008002f8a115fd0b1fc846b8d299da55ca380100091ba15fa021051fb1a4a771bf3461647ff5fc7f210afe870fdd98f50afe93008def353f3bccb407d82c5f197b4a46dfd441168233fc1c0340d8430d2d806c0071c6e40f8e307416b7e6e1d0828feaa0fe420a44001f2af2534a9e9333c9160017f7a80e8a4927fd240fdbe3dfc1c02451309e7477527a1da446f41e7f004400aca30a7fb2d513edfa603fa2c10f16253e5622d6486523f73691684f879c8000412f8e39727f458245840c13d2e4afe940747c0821fe0b03ecda6253c3058100b24ef2a22430a600476de29307ea9cf143f4b843e9ff098085fbfc2150c07f0068042a1fe8290097fcfdff2012ffa324025f6ff588804bb76a8c0239443d1700d4d8a0e6d1939f92bf4785d611a68d2da0f46ca98fb8f8e37f0f90c229fc7c0001fff8e237dac5b0411643eef3be5222544622739944c1330db420e26d7f6d008aeb500f41b7948b210809e5643d991ad3743fc08880a206e49ff1e0e72020008baeedd7de66c750706ed1582b150f61b3c99097f80197d4d1d6de1f5c5f4b007d5963928cefbb9070a9ac33135307f56670cb5074774832469e8ed5baca610004aa1eb08d2ecb82108b382bcf61bff1f0912b07f020b905dfc060021ac18000927a4a6995b6f5de832befb600e932146b1b2a811631a9ff131b57fc2601d700f01bda4c407080c0b1ef7fc0800241819493ca0fff80908a09395b9a4e0cb2008236cfed4ed8634a5759bfc5d689bfca14b4ff0980f9fe3ac78048ff1c1db200821630437e8f074d5ccff3429b980fa7f940c60b03e1044ff4147d4e80f19600ca3c30f2fa921aa91e7908af9ae0d2eb4c0bff00533c9967285b93a89d86ba00bbdfa28dcbfc00de3b8c77193befd67857e838d2c8fe04c5ebe40670eff8140004305149d9493dcfe00935d79a0492e177ab5d91e5a5890da17cad5dff4a020049d7f098079fc3f3e8a1e47dc277a246c3ad0f55093fcc7a913bf0391c142a001b139676ca3cd5e7a8ecfe9e8a788fd2809274706e6e6a606862646470706100fc58d1daf71d91e124e2c527677ea38675e775842b2e026f0d603f328404b80032c1538e19b429e344d469e8e770442e634740331df0dfb299d48611e3640e00cd99af8097e900fefef8db6dfd061f681d62d28932feb6e0acfbd4f974dc0a00113358aaf71d32ef7fa4e1448ff84c03bfd1e0f5cdfe3e93e61cb09d4f470700c798f6691560d3c7c48b90e4e6b1443212bf6495d18a0d428d7e5a10c34dd3004dc9fade3de7918e0170188bf6b66316175e24897862e64f43e8f46502f90300a21bfd081bdcecffe0851ee719a200f70ede4a152a2da89f0df56eb9a74a9200fff7c3b659bb09c9ab11a32b1309a31b19a1c18b0b1311c9bb29b1b99b2b1100c9c9b1a1c9bbf556d47b8e6e44e99a564bac889b69b287502a60b3e4538f0000b0eb5ed3995357fa5b897bf84c11cff9f3bf403b5d2b9bbe961a6a8ba7212d00f505823ceaed3404a7e00ad3ae3d191b171cbe625547512ba5524dccaa57000050db6d4e26746b07821c1a9ae91576ed5577d7e2c7f9f12d4904c17f1f7cee00e6286068afcd93e79e6bc20b917450ef6f2bda63a2a082482143f8020dd39f0002ed18081c64dd7b1ebc6802e3abc0fc234a5fb03ba90fe00bb7178a1538f100e734ff8f807fc0fe3d087ff887f15c89efe008682a95303c831eb7d84a20b700c2543d6a5458df80c1f372d319cbca62e2f1bf87e05d4f4b58ff203b4d510f00ff07074a3b48661d7b0ddfb658e2f349f734460eecc98f23fcf81d2b23318b00299b11831b1189aff01a17a6072c2ca68c26ec4726e62c6ca6ccc62c6bbaec0091eeb5d6834618decde4f7baa24871acacf7043d3d283f10e1e179d6ce5fc90061d2ff098239fd3e1d2dcd052bb1b45611016f3850dcd2e94b48e26637dd6000a8adb4b92e9d4167e0df52ea3804067c8fbab36e00986a95f0e2a1bc1ebfc3002a53f39d360a5dced57a2877f1f874b32fe5b1ab469177752eccefd09c6736001444c7fabf232caebd39ae46c6bd376ac4411c0966778793070f1bcc4d62bf008e0c5c5a3ad06b9f0f2a09c6808db98237ffe7c0bc6c0fe3d087ffa0c3a5f800a02cfd091e55f051b2728e160867471d45cbcb9214c0452bf823f8d14d017f00c4fb957f098077fc83b957c81b4177e858f353ad8a94c151442694791681c9001f2a056708ce31f2de964bfdce19d23fc260717eff8ce91fdff19d23fac83300a44c7f82836b0455fc94908fcb56d1cc39a61bdb6fb06a89ee72f8c5b241fd004218dc9fc0e02b7e8b8c6e4fe0b01bbf64c6372187eff8c6e4fdff18dc9fbf00e31b93f7fc63727eff8c6e4fdff18dc9fb0231b9005a6062ff42c7ea2eee8400a0c6b594818a1b03a22f371107ac380f5e1d309fcca3310bf5fc16f40dc5a900b6afdf58307a79d546469430da475abf0005c8092548af29dffad9cbfc190800b3f849c1e33bb96116e32213118fbacecfe33c526a98e2f5f28d237000700d003f973188fe05049bf41467ff4f7f05990b0fc128e0de7f6ebad66b6897312c0082bf99198ac5975ec1fa84429bff81c056fd171af57fc160377ec98d7ab1ef00dff214dffbfe429bff7fc8537feff90a6ffdff214dffbfe429bff60485378100b4c0e27f0628655929103ccf238ae4a1e37211198521fc01d4e340ed0969d8007ff0aa8646d23ad5f81fccea190dc2fe1727c208e209c2b033d4a84029904e001a0916b0ff00efd247a84a1fb3c9403210890e2ed44a1fea18849dc6d569ba00461bc2b7f39691997a0727c6669b92b1fe18e0eefe13038bf66063e901f8a800333d4c7f8f82542f3f8ded123f7794d785b2e0fe2c50cacee76ed40cf5dee50085690c1994be8251409e7bb3f8f3f31fe7a50c8052e554b102383f98d4320200c204fd0a1fcea0afd9328d2fe863b4a4b478259795e76587c49cb607b69bff00e2e51f284ff823261ff8fbf46513fdfca55e01781bfe324a510c565b1a502000fd1e09b807ba9fe3eb52afe1490fc07d3fcad7143feea73c2ff1332fa7f09000501fe3ac249600dfe050af80d31ae50aa9596718f4fa0389c176d34efb44cb00bd366af6bf902d07fe03d2183ff42881617f01e501465aa902c8a97f83fa0200463f323c602c747cda8464983f8a3486fe1300f3fbff280fea2ca01004bf8200c2041ef6949ef768515d4cd240983f335d36253f63020d9c86fd1b176c7f20004b82ffc0c155a9bcca3586c71e5299ff0060ca8702a2f2a1c45bf8dcaf5b6e0027fbfe14333f7fc28667f9f15b521bf82675c598292419465cca79890029b900e26e724d5ce70d48e4c6e2a56fd622a3d9f08037fc0c1926e25ca43ff0057000ebf1bbae5a8c94396e7990ec893555de38acffa401707fe40e889bf41883450020cc4a17e6f2a6f06eb61ab24f8768226feeeae7771f027e8a8a1c3fe06c5e0000ff4c050e1ff968ff57f88b138055c7dff3e0e91ff9f1702c0007f8f7f050003fd1f14387adfa5843af7f47850e1ff0f9b43fe646ce7fd2c14487fa64285800ffd30734bfae42850ff5004d57fc2cff02874704ea612837f3b43d6d7d8bdc001842ca8ed30098e2197ed5b3fa6a2d568b3a2367803e0ebf8183fe01a3e39400e8af84514ae61f77b42f9677da638626f2c1133a94c0b4ab5cb0fe00bf8b5b00d77f76cbdf043131804fe5efca03f812ee0f860fd0621c57fc0745bcd1ebc500323191ce63015a4c2b178b66c93252471ff0aec3bfc0a81dff121421f0c06b00fc0c24e19f14a0cb3333e7a168cb273496c6a8e57dd73c503409fff0aecfe80045283844ec7fc4a0309c94fe82109bb82854494e671898660e25c570de4cbc00cc2753bfcf355221ffd1a0a2d1f0b457fa0a427d807188e5041ee87f1b997a007584cb909f3b056991614acb943f89bf914a31a552c83720ee2862d229b42400a99d6aaf2a7ff85a2cfe09016ed92ad23d91b554890ee1eedc72381eeb26990020b7f89bfed438d2ce1857d8851c3c97d18a894c5b90ba107aff9012263fd00062155fe44b29ac16f66ed1a980f790bf02bdf9bb057db3541577284b9064730094489371366964630a2aa839344e83af0e048161f9fc01cd5091e5c7201afd00c577f860912742f9c14ebe6e1bda19985160ae2cf35999a85bf960842fe06000217fc803b468e87895eff391a5a8e9df27a47f5c9af3da93213b8e2852710b00b55837bfe04799ee3bdda99c14cf0a905e5ba370a1ca7c6f771fe00cb1b0fb004e5eba89b4c39ef2fb837e0fa0747f8142187b0c94ed650c6c3e9bd16451fd000118033e011d37e79c3007681fe2a1f80ff06288c15407e888de6816942b4c00b70552e7ddc0a75bf0b9a356d9a1bbc32fe1fd9b1bcd02c4e8381f67a9a93d0025a159d066acfa5ba30c3f995ade27951ca92e21bf412168e98f155dd90e2200380754b4c2f07437907fa023107266df881fad5ae3840307a8bc13f48c25de00997e870d6dbf0e0c2f69345dcfc619fccb8f579299bbaa582f8fe24eab4d3f0042c6c993cfe808bd7c7eed8fb220806034f9c4042813512b1a858a546ffd1c00175d4c74024eba49bfa44299314bf42c70e477da4a456ccb4f3c1be2ff006a000a0222e38e74c65bb4fc85f59bfa505474bf84c03cfdff22d99fb442f671860006e7f43071e71fca436f501eae2c286e2121c9686f5f4d6abf0c9512ff130b00493154c4b4bcbc7a0127d2fa86b63d2b2c6a4a5a5ffc07f7205fe850d558fe000345cd162023d0d9ca73e014205eed8556f3da9352a40ff51033db877e850d0057e69819418db1ea0341657df866f0982f5abaaf44a2aa70094780de72223400532f7d61ca3d147574f44a85c4244fd4a2bf7e3bfc140415b53ca486e6845600d98940a758951ccef8c6011d0a1294c7eaf15e074623fe0a0415b48a50a3400018844ccab6387dd5d46c6dd481be661eb287fc541a100d5e9c4739fa123356006008bf4286b44db274a4f0bb683eaeae7d0026b3bc5993c572b60a8a9da7ea00f06a3b6048fe09020bf410241848094474cf3bc1c50b670431a74fafb33eee00afbdff131084791fc55624a08303dc29b93f24ffdee8423b3ea1fc08283a5f00f0580c7df692814f38ff191074325cff373e7f2b04a3ff655cf71fc50283ff00098079fdfe283ff510a0ebe21fa1235a8209b51e523bf80099abf506712e4400fe1ed7c5615284d987bc1a060fd36183f1aee6b0198005f1ce2bfa16353f37007e6515c5e1fa6794dd20e4d5a86569ab7b18fbe9dcf53f7103d3e82042bfe80070d5e76cbfc235571a7fdf87b413b175f3b27e9781d695fd8226badacd3630006ce9f407561e8a7306f380f464bc1d2d219e984886af61c2db2cab72bfa561006357f84c0e2fdff20f99fbd0163554d9cd9ddc908dccd2961d10d69551135600559555dd0dd8dc959399961353921599d2ddcddd11138c8e154cd07f6282c600abefb2bc18b34b34e329f2d879372c6fb70ca105e82f6fca7571a32f4325100051732e9388429d1475f34946792bc63071d7864c15a75d0f38d05f5711254100d4fcd7e920eca5fd0c2b867c07b2809d984c839318ac658318c59efca92f4800100c4adfa8e22fcbf84c05bfd3f252457bf553229834f36e0bd91a43d55662003790d2a0ed41b2b0e2132bb38dd2958ad2b10331607449e79d95aa4fb9eb84004a3e3896742dbd438ee5a47de538e4e1074dfe44f3b86608fd0e1a9bd0808900608648cab7abcc05b907075b31da717e285fa86359f7f4406b730dadaec2a500a701c53ac6fcbbf122416879babe3eff2180d08a1bfa1435e538426524047700dc6705d8302135b673055ecaca586487ff804ed9fd1f2440b8005f10229fa100c3500c0a149305ab4ea52c41f0c7b7568d001e4756a7f4706a0193f4e0346100957f001d2a1345e14b93efa9c7534b73bf282cca4be6828da9fc00e206b2a900306ff11826837fc1c09a7a34da7ac919e3994fb308bd08f47829fc67150b7e00a116a86f9020221fe0b067a4f8251f6aad7cbc2503cee4f9cdee148304a72000ff06767f854cc0b901c41a3e7cfe0c8d841affc9d72f319d6b1b07c2f0cb8a00a0d0f5008bf833714fe130173f874aa7bbacff3e711f7f0fac80effc0e44eb009b7b1b4b0b616b1b7b73a3930b1ba16ff0410c8e6665cc2dac2f4dedcc2eee007fe0857bfff04576d17983c1b9c1832329b991919199a1a9999331bb21b18b001b099b2189a1b9a9b9a331a1a309c1ab19a191a1a179a1a18991b187f0791600dfc4c298aac51bc87157561bed67555d419bc1148ec290d179c978b798b694005e9446ddbf99e57c30653488032f97fd4576bebe2925a681410fda696abb570047bd604ecdd9ff1188184bfc1c1d1a89989687d42dacee869735e86db8a6d9008a63acdfea18cb8e6626fe0e1033cbac9d58ff116c7516762610adb7947927007b9a73f51077fb17fe858c4ce306f946cd881643b1109ccaa7148d9f3f081e000f438c5e0fd270f293fa6e2400e88cff430661c4d4a506fcd79f1ecef64f94000254a277b55aaef095b82fe9409002fe1300f3f87ddccbff7b79f29655f98700de7edfaa8b21b0129679c7683dbcc5df3e5abf727cfa34eff5d55b4fe8484600c73533373535393733fd2f12004d9dd1516b9da65c00c877b2a614f2b6501900f27393072e37a41be25943111f83cbca4253e7c8a8106c28dca7d2b640c0f2006b085b47e61267c0e0f06f61d7321fa4459ccbe40688d7f8301a56494707c600d6f1a2812e9e3bfd3c9e9ec19cdea94b72bfe280697f84c03cfe1f7dcb004b00b9e1de4b00a6c1b1ba6001a5e2a8f70f95675c20d50a59312fec5b1e53e3fc00f94d03fc500d29b18989a9c1c9918189cff16834a5fcde89aff85d5dfec0130086f4d97e7d537995f04ac0084750e579664eb28c5b0392ffc0119c1f30290000c108a22e74bfbc869c20555df753198d44bd7c0523aec1dd5cfe91894a136f00e0e0f3eb7ecda9496689ae832f2c5635bcb6f2ac4dc1303f9783cf020239fd000e18bcebae528cdc26de48036df3115fc00b42949a713f2078fb7f144abffc002601e7f7fcabffb44167980688f3f82c42f0400942dd8905ec757756202d9a00b16b2bf53c96aa9bba6fe2810bff84c03cfe1f8e8ab05ee16fb93755b4148b0072d40df913b238222ed7b76592c086d5d6f76138a3fc657081fa4a4c33bf8900c5d5393331343830363231303536fe2c10bc6f212bd540123040a9b14cb8a500252199c1b0acc84facb761b38069f540a0fc54d44f8fcaaf33a81155508d6400d51672f74de8b1534610a91836dd53874469f907f48c9bd5237f058ffe22f3002803bbc4718d127d6468b8c0159c96485ba9cea2d7fa2813a1bf9287ff424c00fe0b3a1e926250277c59a0cb287670f8cbeeeda7545911bb7fdc0bf450766900405c80820c65fe8e8d099010f6ffd1908bfe225540b764bc85fc572f67f09800139fc3ae82a009ff9fbf4ebf87f9f7fe033aa133f838e3f5aaea1ac955dbd600ea797b49d3f78d0122134ab48fd442ade2a1fc166849e2c4a167c371760e5100f5a7d4575b7268ed05a9e4ae7337ea10a064fe057417f4306d5164141a08b2008591dd21bbc8acfd6e6e7b1a7642d9ff142ffbfc2601e7f7faffbfb481be1d0077f4386abedc86c4434e6d8d7c7bd994741ba0c4a6335b9c9bff412d639e130053eb0e77cdb51f3e1b34513cc84f1a76823e19bec56d67a5c49f83e340e7fc0056b58ff0981c5fdfeb58fef48d57d695a6443754d6850666454657836784670094b68425a364e527a7542346f4a48346b524353757a6255587942fe8a5ac6800ad15d26a27c73e2d31952ea7a66568cdfc4e1ca442456d7e40ff1bfe222ede0018623769ec2cac90fae91653ca4bea14744e3190baf5a04995084097fdf905003fc8c6a940c90d3fc1633df1a1ca32bcd4da95e15f2290b24f75267deeccb400821e217f0e08160c09fc8220582ff083aaa2227c9d5f3f887fc00528d28b74008de188a4adb853e317a95bf78c273e4195b0bdaaee1569b290a47e808fbe2800076f2e9d9411ec817fe2b6af7f84c0e2fe9d102c1483fbfc40bfd492d81e6200e8dae8aeaa94f2b4ce88cca264cec8a684caee70cef2b2ea6cac94aaacf0a200cc68aae4a4e0a2a294eee5ff2c453bfd5219d608460f060cc6ec6c272cccac00268686a64666e6872ca626a6cc8c262cac860c46c686e66c660686bfc069aa0031b1b3311bb11c1b9b9b18319b181c9c9c191ab098b11931ff1e0d5a12caec00da75fe7463b6fe4203fd858cc5958d94e4dcd8e18d90d0c0e188d4d8d4d99800cce0d9959588c8d8d4dd98ccd8c18d88c0c4d0d8c8c594d998d9998cd4ccd50090c0d99998e59990e0dcc0dbf9f00fffe203be41ac10159c471a56d7b523d90020db502e13e1d90e2bc83822d2a00e3d464c65b3c424005588859bdb0278400093b1ec916acc6bbf11c64597c3be4cbb7f2575e1f23f88dbd86dfe0e6dbd9c001a6ab03097576956935ce2fd372abd61640fe3f90d7cb807dfe0a6dbdeeba5002293a473238691ec56fe73f6cd021e87fb0d5046a53f84e43aff1261f3ff0900c9d3fa48369a623f4386d34f1385e371160807a903e88aa985704a7b3f07220047f0aa723fa90369a5860797f82d06b2b4b949b4390dc9a06b92b4ab65fe9f00e00aa72d48c1953b1062bf49c80981eca9b29b093710cbaf23bb0a816320e0003d49dff02374c09fa162a34fbed251afe0d80793ba0c9d7c50854071868d5c0011433e07f8a2630fe1300f3fbfe630fea298c2041bf82c204306f940c4369700e3e08ae9c3de84188ca93702681e73bf1fe5d6b53f41051eefe848aba6c9370094defc92a9b6fe00b608f3c36fc0a7c09bd3429024046e7ff4e451ee846001007c23fe858b39d013e9394b678ec5f02816548b2f33aa8c30ef2502c37907ff00d210c485fc07104f410ff05815b288b28fa55b43ca21777cce7fc01de56216002d8a46c8d2842e017edc93c61049152f8967a5c18fe1c6984151ffc10525df00c3786694feaf93c61fd0129b0e9c68bd69d55fb573ea12277b25854433bed400c4d3822a8d2d5ed6018bbf64783d4a9638a428fb7f6844d89c5229178c8bf200e1a35ef7e4c127e955c0ba1caffa46284e08bf838235a82806bad780ef60bf00352d03633487af7a5d60e8945ac7880e0607d0903a4c27d0a7c886f39d9b5000dcfd062e127fa103a00097f4305a01b14a6975bf30beb3629ea859e778dc2c009196dc16d1117ebc0e80058574e52436e50424d4e397051565450416e6f763001614857516634374b6139354e6939337572704563747932fe20113cb7f8384004fef79382c884bbd07c9471364d853a7a771a02ae5fe5f6d520bf82c084035000a2947e8f4bf2514ca03b4de22f88d07df8566bb4f12eff2862b37e9913de00040ff6b1bae7f919cb9ffd4405f61389fc6c68c010c89027ab3ff8db98ec9a2006f2691b72ebfde0e77ffc2403fff098481fa3e104d0c3f82c3f3864194bf370067f520e72031b1617b33daae14af290f6e48947136abb0fa3d88e4b4d4ee5800fc1dfb8506bb7de780fd081e4f01081fa1c2c127b6466e600f9ceecab441b4009755c18822a7dab20bf4b87baeff098085fbfe3d337f68c5824d120ff058410072ae3281bde14e60253914a642f0d2c31cb79f65fcced11feaae51f01fae0d00dac528afe1d1fc5a953f9afe36fe3023c47a1203f92c09fff9f7a7f7f0f942003fc2611e7fa133d2f850bf42c5eaaee104a7e8098c8d86ee7b992a7396ff010020f0f0a759e9caf4f353cc7e9386bc8fe1300eff4fc5e7646319713ed322b00024aa97e8099704a294c7b05c480629eb80010d005d16ab757576fe002cd5ca001c8dfa239be24fce9b4d57d10aee15319a8a04deff9e7d920045b13ec776ef00f81059544fe0e16560dfa685980b4dd3e10e96b9d1f1fd5060a7d8dc7f8b850095fe13010bfbfc595fda31f9e6a5fc1c79f1ee2c60550c7a3115e0ee044f0400965442925cf7d7f2f1e7c8ca5fa1c3044bcf3dab2c338076a4d2e84239590000dc5f37650ff4948a47be7f058779bbf32866c3d130ccb26c0e7768078c47fc0001e894cc1270332697f626bb404130305fc1c1e1cb7e4a38c5f8aac528d3e3008fd1b45d4117ce3460ff170787fc260217f7f8787fd464ac81c0c37f058d6b0027c129bcd885ccb9a914954f4c036d64428591672d7903fc918587f0980b9f00c3d85856ff63e16063fc6d858278c24467e3f464f2cd3303c9fa39a76e375c008b4120128ae64e62dbbee0be5b6357468048bd71a8e6241fae4f2dc7dcdff8000bac49f127ad728981e23ff8028b9a9cf98079efe229f799e0643f42c76a0a006e9ca74527f0066e0c9cbfc009a3e3abb8a41d454db9cf3b5e7f0026a7e57700fc2b2d619ebac60487f14e640130333fc1c420a317d6c7f78e0563a0cf4e9300ce59f88ae115d851ff171083fc260217f7f9083fd44420b30b7e850b59c03400c6b9421af91a2da5936cb54a984d3968855a8ff010b962e38fea21a01d26fe000a01a006b9c650de390a6efbf37182c840d665b18fd7be17a341cbf4708694007c83d4197e858b64987e0943bf72df6a1fbefc1f04307ebd449cb3ed19e620009fd422d97dfc0e02b7e8b939fafe0b01bbf64c9cfd06feff96cbefdff2d97d00fbfe5b2fbf7fcb65f7eff96cbefdff2d97dfb065b2f8b7f4285ccf81a9bcca003546422d01b3b97c5cf60e75e6bc05fdcd7d6528feff85976fdff0b2edfa8000662e0e7f82826402069d94451e0df2b5f8334bd756442ba6e8cd7e82d6b1e500fe2349ecfc37f4285b112bc4ca7ddebf5f75750545f51ed9d5335f2792d6c3000e4afe8f0d241021ffd0b16b41e44b28dcba106ae4ea207f54c4a9ad9044b200f3259360cdfc51267ff098079fdff267ff51499f0bfc14102413d6fca1f49e00305d4a8de55a87a13eb6e1714737d69f256fe8a1624c85e8d4a510fd4a35be00845fa162df913a6a53e1a0d1bcc4b5dd14f0296cfd795ca19765175a53f510002816147f0506716c652997d18e1a4377f124aec413af1f33904df43cc863290047d75df11de896567ae1fc0120b6bbf48e780172f397ea5197ec8037fe0a0e00ef2c7252b3be0ad326396741af00aa05d74687a916f22d73f5745d30fc80f1003eff0587f8c9f9283b3dedd3269970c6660dce4dfe02073ac0d5a234f354fd007c1811b727baa964ac511e7991011b0ad9f8c04d079f86b41d620fc1f9e1e0001a958bb27fb7e6b2593f65ac2dd549812f1649e61c54a66b6826792f6888270011920f9ea33f40a9fec00daa8775837fc7a336ef94ab7e7d2ad4b998f22299005fd1c5ebb996bc300887bff88ffb1168405538a5bfe030011a60c0584de520003b4bee78ca977aec8ff24fcb468aa785f1ca733fd5c2686002e872781f0c04005080a98dd75060d260f28f5e3e847c9f8e732094f3ee252d1f999bc4db4ddf00c81682817c200cfe870b69fe5f1d6e8ce0b40f33bd7dd64cd494ee339ef426007fd1d153b1fc20021774a27c2980029a7bd9aa304a945707f809e87ba10fdf00f8780421bfe0e0217151319cda46b773f6d09178d0fb3376f4c66dd8bf87400085601bfd0e1705d40da300ba6b1edbcbc3e11503237c2f07deb6081fa722e400d28ff80c0e81cfe0e029468e3071ee5239dc0eecfe015676ce5a8bff802826009e45fd1d2231604c43bfc1405302e1efca60ae0588fa1e8ced2df020a89a9b00c43da1fa2251fffe24dabf84c110ff4b4a3dd64e47c5c01c5e2add048e1f6e00248ac11aec63495ebf63fcf78429dcec47b9737faf98f5887eafb99855a37a00933674157f18d59f5b6b1658164552eca4926fcd38734b61d06c2dbafbb30600c0b238ed66c2b9cfe6d3b87efca0c93f802a80cea04edec239411035ff230400f8b10f7f0604cb8f291c0d1b91f91f585f59e0119fbd05c0100e479d0dfdf800132ff098221fc96132e40285da49710046b01df3c50077ceaff7f12f3bd2e5005158332e78650f94523dff2f84cb9bb12648929c0b1fd7e26e859da32f6067002db52d193ad9126493cb241fa0c0706368592fcc2a7cfcc62f19ddf050dbfe00041f9948ff011f98d8741eb0fd9e43ebaee07e918d87b05220dfd0a16fa60a00788928d7e2470095eb9ed6dec38161d06790cdf31f8bedfe2e357fe4fe3c98009050f6e1825e6d07f87a62459ff9d1b5e393cffaf2321a03f8afe5aff201be0047f3f4cc9fc3e0afff9935d2ff8b3f19ff9f6ba5ff0fe32dfe643a92fe2cf000b7fe7c7525fc3f74aff098979fe84f5d2020830fd0b179f2695f295781f390005e76d9b32b4eea578901b2d6bd0f304ffc5cfbf7f098085fdfefbf7f51c7f800043ffa0a2f3eff410e0b7827d574a047d7cb70b77f1a01562912307f36b42500a588df87e9404d80fe1300f3f7fc39707ed1072e0e731fd0a17e00067d4d28008020cec5325306911a7a39cd8e8dee4f9f12c749fd8747cfc30137f0401d2b003fc087c9dbe2736f508e4fc4699626e11c63bba46c33dddcff1bf2d61cea5900fc0683e017f0400c4b10603517b28888e4a146faa76a20e4eab542907921b700db4e8f1fa3a4ea020453f828042037f5194eac2007dbe6d3b17d601008b0af00e00e36b83248b53a693f470942506c234c4d72e500bc4f415d306301233ba200733c78a1b370b03b3248ec3637f9022aab03f4109da37f02018169fe02617a0032c82eed82ff015ad8257327f3b2f14b057c276a7387fe900cde9f859fd051007d6904ea61286f897c4dc8bd6fc86c6a239dab948b8b742dc9a1fa6a48dfca00e5693d8000be1185bf4245f884181bf884a178904435478f06ff55e7676e19006949f5fff80a3fb37bf851223fe07028bf811229f83afe05011e0c0a418252001bc03b2c83762ed5ab6eec99eec4bedd0391a2bbf869266f83918fe05037d8006ea5094610ae582ad40f7c74383255ec11ac9e26f6937f8699adf9011b26fe000601df80c6538ef186120ad6811f36a3930e24cef03056c48c5bf51c2ea4ff000980b7fc3dd5c54ff0fa05a5102e6a57c5d56b7213090b9c0de7973adc81ee00dd5fe020719e66e797b5c0878a1505e0056e7559a2031b903f680a65ecba420011c3f316721cd394013f0aaebae04d7fe1fe9e3e0e8abf81833ba3e3942332008ec5f7f5eaaf9a582e72558912fe00ef5662672317f46838017c8101167f020080781e848129f674e4b65a852ce64b4f92ff7297ba59d499ef5dfc5d42aff00098085fbfe296dffa7e855f8402dfe060f541e625155ad5445ee81b477ea3a900eba45a61ab73dfbbc7bf8844bb7afe0501060ad1da503257355a20d05c813600050e2a637041455770a3c6522d70415e6b0996df49399c19d5927dafbbc3cd000ff919a5002f8663efe0b17f531ae514a4714d22834367a822eca2238c719b00bedfd149bf508e5b5fc81f422ff0580d283d729641aa3e61a67de5564c17f3001f5a02751e88979edfa3a66ee293f508cddc107e8f99bb83044324fae3a94d0029f59475a26f48a7c5bdfd268e585925ceedf5d88fe00ffa056ba63f4ac5f500bff0981c5fa7c5b6b883fcf533a5fa7e5b73bf780b6d77e9496d8e56476e52005644314b38766f51546f3477786d44477058795659415a36364256566b32410070456169417a643651fd8a17d2eb2162c2938bc670fd69a7276852d0b08fc90026483fc01bcfe0d3837d2609a520400775b7f4249bdfd5c0b0c2eaf870786c0076556cd24f9fbe2a7bb68bbf8e596c528211fe9185d93214bfe0a2a580b80f00652c7a1b3529c8e1a3a057a6d736f89379093b008ebf91c877fe13016ff8780087790fe1f6294b3d0e9bb214cf4900cb2849192af37cd687bdf0365ecd193e00f02b12a114ee8596a39e0a60992661da2a3bc0412f87fca09d5a658877a47500a071ed2bb7ff02cb3f881d6084fd063a26df0830607134ffe3c8387946c7b800f499a3a0c310e4a1c9edb8406e76459095087aa1338a22150008002f86028f00d093a1090602430f29d967b328ee54b8c2e8d00ee68662f3ec9035e581fa4c0012307f84c03afe04ba391ff4106f4bfe828de9c055e829428fe0039b014343008379b7ce5d8b110be281d2c40513edbf4a0b06e270e33041d0a7e89898f7fe0007015998bf1d3ff84cf81fe0b01bbf84ee8eef5d24dd392ce112641bd64dea00b12e8e19fe0082405f015f335514b603ec1385c49ab878180e0f386ae866f000e3a69fc776c287016b75f89c23c97cca556a26a0718d5ff8fee8e23fdff13300effbfe267dff4744bebd47f0f003e61fc3c00fb97f0f007e63fc3c02ff67e800f099d7fafe1e007edff87801ffbfe1e00fedbf8780ffe7fe1e047f9bf4784d001b8eff0f00fffc3c0ff81377f0f017f67fc3c0df967f0f003f4dfc3c01fb3700f0f00bf41fc3c03ff27f0f023ea9fc3c06ffe8f89c7762fe1e00fec3f8781100f6afe1e04fff8784ff029efe1e05fd9ff87819f65fe1e06fcabf87801f68fe001e00fff87843f02fe1e10fc0bf47c4f0bedff0f017ed3fa0a2210821381b2200103bb487ea0a2dd25194773e2ad219fed3565b1796f6e83cb5567293bff450006778c2f6be5e6c007e828fb7629840738b7fc8407d2c763fd042b85232da3700528773fc003a6395b9e333975079380595b7b24febd15b04abfd202b852520006ad229b98f4cafe97f1063d9e9048803bab8f269f28841f6161039cc5786c000dec207ee2636921c09aacc30d79f74cbd3202246889cd5729ef667ead878ff00a463047473f42867e95a5a4a4d33d804b05a454f0b9a8c598c8913dff488b100117f2ed41df204c437080d3d514ffc06002577f0260f3bc1092c466851fa10000ee92acb1a8b11180edfc00c0a2fff7fe0f3fdff83cff203770c425fa16330007958025353585d2df7dca46e1aaba510768b8427c670d6cbfbff2dffeffcb700ff500e0950afe869d4b32a66943e4ad434d3d98aeed641b6b2626910af9cfd005e1d279fc1a0415e4a6ce52723b5a2f1195cfae9852409a669c8c60a557eaf0015548026219fe0e0daf5ee8b845fae77c49a5f90b536aa0dc3628510f07fbf00f64bfeffd92ff90036b1afe0a0daedf36502ff2167dd7b9270ef7975e786000059624e1b4124bf57c75f1ff050105fa08307d58953eb525142864e85c4da8100997bf8011b652e9126384fe21db3be168abf41864dbbd744a17f1a4783ee5c00d389c42096592b754cb02c0cca8ff99a71f8668fd81e80529ff80e2b214fd0005396b84df871290605a19f28604de997be777e8d1baf9e9a7b03fc010b808e005a4d5fe9492d3efe1300f3fbfe2b2fea28ac904f21018cd09de1032bd826a000a259e53b86a0cfbb1aedecd4558cd00e5ffb54faf9200ebf4586e2152c4c210067f031aa21dfa1431394270d2a53c3c62644eb0bb9abd5e35d29550d31cf9400ffa34ff9e8d51fe1f79a9052c225c9a38480298bcc0f5c47ba9b904f516b9700505a56b403cee98cc160509d5e535fe6a9087ceb148310670a02ba1991a8590049e6d1524cee97db90d92fca1a7fc892b0e8023fa1c73506a3f8022091ecbb00df784a447f0f184f06d90de18e7d222fd1e287dcd025fa1c72b72d2de0d60700c7b0c8aabe3ba3b81909e5a5768bbebf538e56e7f0980c5fbc672b704ff43400e52cd07be8ad932a76abef7429fb00ded10f1b190e477eaf9cadcfd0e396be000f64fa789e5cfc33e1c7fc0022c21a1ef1d1a2c32403d7eae9cadc039f83160062fe060ac84fdf0253a4da17ceee80c05bc0af460a2eb7586566236543fced008e44dffe7ec75ffd1f38a57fa7c7152ffd198ffd2da200dee0352ae0f405210059172166e33d1dcb64206c1107ff5ac85d04b95aad45668aff1777d31e781200f693f27884ff8c9cef96a28cc6ad7fc7134e3643b1b45fcb4fd1869c18c1ff000d7eb8b5303ad38b81fec0c9f2d3b0f7fafa2efb43569bc64ab3713db2d64e00052fff390905f0924203051954ff01800967fa0815ca61c5d31cff801c170b00ee1ee1b3d8dba23728dcda3b8bdafd27185e5fc2601dfe8f13dd9ff1f5a34800e7aff000d4d45260b86abfc0002b62082fae386c0acdbbcbc83314ccb18df100634029e68e56508831f1927d61dc4c7110ba80619f91854c429653a8583f27008373ed6b447622ea7f0210be81080c126559fc0600259ff023ee67aa3722f3001c365f29e5395fe0287a9b3afb0232b5d31fe477dcff84c05bfe1e7dcff480007305c0cbaa1be3309c35ec7c311ebea983c5f074751e05201cc19ae24b3f16008fa519bf45b1f7167afb4a5e6d0b89e923b77f000306aae2f73c81066699b000a47366c2feb1c039fa4661d3cc3f42ce425c3f04a14b48c71f4aa7dd869209002773132e958f6404f1c7ea11ba13fe07015bf45cc3a7ff0580ddfb26135504007f7fcdd09feff9ba13fdff37427fbfe6e84ff7fcdd09feff9ba13fd813742600024277fc103d5bdfe829abd141e522581460ca9042adfe01c8801274b3c26a00746ff4e8b592c47eaf9abd1e6937b1963664fd528eb6b4515b375c503050de005a1acf77610da732b9f0931280c42566cc0f18201ab31ba95f7cc4db840d97009e062858c32f01b7352e1d121c5ff23302d311fff050248032d3f299df705d001d8702952f7ad273535a4e64ce5c78899fc2b9dedc8212407f0026fb4335fa00bc50a1008532843f801184af261090dfa7c524db868688a04d24c10b8baa9600e88da67c8c4e75ce069d3f1b7026ba517429c0df6c4d67f2ed96676aab7703004221672704cc22a3d71885683eb52ebc3605a4e910fc8c172366647d9d57030087005804e036c1362b232dabf39e916986ece3d0885047d0c2984f3b74f30100105784e2ce32c728673ee301e8ca5e4fe244f12b94576c7dee9c9b50d7f589002555b964e1d48b2b5719e6bb279d21a84ca8822f4c3021ecc5803625da906e008672d80c479e432e13f56c9337211db8188860b7d5c782fd010f28d8c8a0fe00455334f5e23490249263e21621d97fe021f9919416605cdf46bed5ca6aae0500a454b2434a1a906b3e159067db658a65b79ff195027087f0e02b81184400100060094c001fe225df2c3c33c2efafcbafaa3beafeb6e3ffe0c58fff84c1fcfe003eb73cf0b251c59298145a565fa7e20029fb665989c11a18ca52519ee1aa7800fbf800d07ab9fce1b55f78852d5ca198b453c9a14e9f7d4d23642c8c02aad0006eb7f37482ef2f9c810c6b269dfbde97c397b1b93d1547dc74451fceb1e0680064c60dee1932c697a970852632417350a7683fae943c56dce34ad4311c4c6500b48f3bef5d8f2eacb608421b8daab0947516c228f2026897fa9a12d7bdce2700a55b75fe00ad7d239799a7d10a057551d1b88bf1dbb3de8ab08e6473f7f57f00e00367b3761218f97ab7b346de7ab30739d947a1e569c01125ed9dd9541b5800d567a406ad6df8dd4f4ba35a9c0d70bf800dca1a0ae506c1dc93e9ce6a113a004a8ee045261a226b03026575cfc17dd31b3c703c02952c4346734001006b84008e2f0bc404590c574a238f2f28d600a5bf22c18ca8fe3006fff81690804119004213986408cfd113cf0734b33235a00a22a220b92a12f8dacdfc7c0efff8f900682de06b4ad47230886d98a9d58af98dc669ce16f1e6319f619765def82878002a56924703e40e73f418e756864898ca4260a0ac8c6140c0e92624bac4b9d700cd2bb1efc67fbe9db2d84dd90c58cd0d8d8c0c8d4d19194e184c0e4cd88d4c008c59994c0e188c98d9652f6226d74bde33e28b3f80186ac8a21d662ea5f5a2006f3d379064bdd7bec8533b14e5ff4b712f7f098239ff3e77e8d09b0003484e006602dd89f23cf4400cfa8751bf1c4a2deca72654234872c46121405ec86416002e7c6d0ab9d8e991f58bf581d4a9ec0b1403bbc7a9b391be500ce8ff3e05e30020fb04dd68dd567b173152a69007eec77b6237eb737b488a93a2cddcb28e690094369ac5020f640c346da5862017ef9adcdfd7b23613661dea50eaf054c24e0099e471fe9f8d149fe3d087ff60466d1fc3014fe831d10cf5e7944906f5541600f4e6177d768de1735d44b68fe6d44bfd4109a4df207441dfa1c346abae7fe500248c455be12236166348b914cf7a73b347f9f04066630376661323366396460033134626264623333356130623264373438626130302f20fbda2d96fcf0e2500e24974f6e99cc5fd0c98f652d24505c1541028b82bc25fe4b101bf84c11cfe009f101bf8014d289230e9057b722ded4a9c6d9bdce27702a7f1429925f32044000578252013a6066c7cebf74979030fbbaa3a6c4c44b8508de3f098fb28f83b00daeceb15847830cfd3f1aaa18d288daacb7d3d242b616091c7b9820789d88600ded6cc499c78a24746ea9f17e25f2717a0eef6e0be41f98b9186edd991c3ee003f18639bdaa3c5fa025db6fce3a856ba7f4fc68d57f1e843ffb08346aa004b00f42868d5738cca616d490c4cf5eab656aea4919b600afc3dbc63e87fa933e70049451a0a00cfcc3f414c4f4fe858d189fe03d227f404b679982a93140669bc00f7e21bc843b1edbe2f852cff136913fc2601d7e8284155fe0703956bf41084008c66d91ee4de5c5cb99eeb90aa6cf16be19855f029fe9c04155779bc0f8392001fd0537fd4b913288d4e11ca9a818d7b948ff007c54e576ec45bcdbbfa344300cf7e0fbf418de420493e04a47d596dbb27e74c38aae5a8ce8815963ef1df0600a4a30c1713ec48c58bf8f430bba7496ea71b9fc4296440110c06cbd74cb3740007c6dff03007e09b86528e13186999dbff4dbe4e839963082ac974c85f79ff00c4ec527f098077fc3cc527f8fbdd08706ac3dece733e89f02bd426b5653f6000ef2b97c8f8be5a900ed760117352564ac1c4ff338e6f15bfcaa33ad97c208500f67db4cda0a71e10e9a3d64af632b3db0c27f42459b701ff80b00f653c43ca00d3e8babd9d180e26f7e4a83c6d2d9e91317f7fc59b77ec08b36ed7fdff166d00dfbfe2cdbbe40e88b3f8243a41fcdc569452488578b494ae860704bc753dfc00edcfeff0e93fbfc3a4feff0e93fa083a4fe03aa5ccff42ce0e4f7da4a5b6a1000d55edae2d6a2edacd33ead085bf34e2d71fe942035cfe1300f3f7fce42b7e00d016f26fd0b38695dae1291f2f5d34aca68e7a36134065964e475ca54db3a700fb8270d2be2a60886bff418631cea11ca48576446914040081e8a7bb8aff220099aaf40b86dca61ed314e28c20243064449d33671dd970b5f5376405c387f800106f67fc248b9203910056a7d9b765b4d750d909e6c9d77a0d0ac391e707fc000064f13ff8a06f0e169bf45ca2fb7f09881c030bd9fa0c71a10120c0a74ae1000180ce362117dad9f9bfc10e96ce217b4653654c449c9689067bc61e71cff0003aac9299770a54c4e9c07f401f6912bbc08c7ecdbe4f4230171887a2551fe1008e04e2f432cf2cf63ae6868245cde5bb0bb17756edbfd1a134677863b52c3600b45218557e90fb408c2327f1f2b643f8f2feffa9191f0bf5d8a3dd4ffc01580064fcb1d7f0d55aedf7b933a8ffc3352b889cceea2f92ff8e33029982633370003e0e453f80c102df82651a94b41f4504f013c5ed6888f4e58a57496b720a6e00aefe15be43fc101a4bfa182e7e810c4a3c1307dcd11ec218c3ade744e078b0007dfe7f898e3a04669007a249040ab729733e5c34602b6340e7eef86039fe0500016ff80d32779d75bec89186b2cb51473b7d122e82d0d6f47f1fd4018b85f0008079fa0c7142e3df651f6c2f82734f723e42c8d19d7c277a66b3f365773f480008e58817c73b2fe851c63804ddf994f8783441db08308b4c4e2a8725e0734d0083c1e3d0fdc40a23a8c49080bcb92e9fc0600240fe8217b17065a97425b7b4004dc948ef8db556d3d6155d60d59fd241e7ea51fc1c0241ef32793aaacfdf9a0013eb9fa382494a3eba07542ff11809100a5fc12048c1657aca409b370b95c700410d09682a8ff849e113bbcb7206feaf0a673036820fd0b369917261285b8b0031050fa3b541d1c18964270a607d13132f25fb046d3231e7d822b2962919ff0009bc9b6c33ccb8689d75bd2e2879a47422c68015c04a46180a1eae7a81a57000b9aa38df9127eeb0526a6435da8b255ed34bb4e556e1eabfc302aa7fc26071007ea599e95020768507198ec993773986a60f0ba31f7fa8f73fd3932cd5604000cc5e5e83fe56a681fd2c32cd42d10c4ecc801fe5855b03d8e0229871abc7bc00a8904022eceb39c3babc629ff3d22730fa07fbc158c416bcc41e9003f590cb00357e8819e32e291d311600c4701b1563f35fc0e481f767d0da5fd9b33a1bc700779e96a11a24e1d580d742ee10c8b85289c25f94b482e91dc051a76271c27c009a534186d6ddada9f7d83246317b960971ac532ef114d3403481579671e19b00fc0198dfe920b18c22fe0a04900b80c6527fd882fc9d56ff2fcb59342eeac300409a94151e5bf91ec56fe13016ff47ce97d7f0fe96db0b33ad552509f55f52007149ef65878971fc451787e6719ec01a79d2454932b181d2a49d708ec129ba00d8550275dba4f529e40652df3c546a5d6c5898a5e04381bfe44f3b8e125fd000c32cb8cb2835f67661c7deefbe735ce37e276366668436e761fc4eadd7f09800077fc7eadd147d6e357115d9f6826b0fc146a76d58d9b1dd59524b552fef9300bffaf1798e1b913c635a75b7260952a20781cf7b151d0f90787483fd367d78003860ee2b514bf1ff01f92e09040319fa1c2fff6f21d10dc2f2db56afd77a2d00021bb3eed3158a70ff8a0e73fe1300f3fbfce73fda225d160f5504047dfa160066653bcde5246ed9d443400960b0adf1ce511d1e3876a1d32b3f8548a33faa00252260fe0cbd10d15471981df39d33012d386483a5d0d26e734687fc052d6000731742caaffc0e02b33178511ff09f5b3fc160377f098cc7fe027a2952e76200fe00e97f4a5c7dfb36e0aed9d75af00fe358c3bb04e16204ea5c5e801e81af005038280ff3a4b5d6d1ba95acaa9fda2af862f6bc4393508345bb529ee70f0700f8fef44fe0b70ccdc33f8040d44e77813c3eadb4b6bd05d1f18fe0fc5efe0b00bd13f84c0ffff06753cff020265fc23f09859d7f0f003e5dfc3c00f837f0e80003e0f6bfc3c01f86ff0f00be17fc3c03f83ff0f013e13fc3c05f857f0f017f0073fc3c07f847f0f01ff71fc3c08fdd7f0f027f53fc3c00fddff0e807e15fc000de8cff0c00bf57fc3c03fd57f0e813e19b9fc3c05fd67f0f013ff7fc3c02fe00a7f0f007ff5fc3c14f81ff0f00bfb5fc3c01f80ff0f013f83fc3c04ffe7f0f0000be01fc3c06fff832e103f86007fc0fe1e047ff4188b90ff0c007fc3fc3c1003fd77f0f053f5bfc3c04fe2ff0f017fc1fc3c17fd87f0f063ef9fc3c00fd8f00f0f027fc5fc3c0afeeff0f00fee7fc3c00fbaff0f037fb7fc3c0efef7f0f0300ffbffc3c04fb6ff0f047fc7fc3c01fb6607c1d04fe8319c9a1ef694399482500cb607d6747c264fe6344a1bf78cb82204fd1a3235605f1000ffa1464c97ae400a52aaf97cb029fdc92e2a781642920ad5c2ca062d3bf89fdddff2f589b822a0034817e83085b0fd0c178f92c4700ea3e20a51e3349fa0235b4b6144c3704930035ff510c233f38c7e8598da43ea69479afe85433a86cf21322ace6075cc69c00ac827707fdc427bce0c8433fc1407505cc60ca26ebff0035a11cf7a7fc0023006fd96ad391be70739064bc4f310ff0b60620c09fc85818ff0fa4f8062bf975003ab16f7c377a9e1bb88ebb181ee61d5323c044486056dc7372ad2cfb78539800fc3615de9237ce2521df799c22bc1a4faaded71ca0ca236dae28549ebd462300f66dd423c6d7e450c01602f367ca482be0727903b2899cbd9d1ecc57dcda40001b5f7f46262eeaa2f5f217c820748e6df0689798c386fc4be816e3be527c7800903c27ecf4323d9f7f62f5d935a7f926bcb56e6919594f559e9e153d422d9a00eb2c5884eaf4b6703bb311bf1e80f796326670399518bfa855c4219cade995008c653c5803338f1e230361239f8d684d27c0e1ef1df376e47aec472c1b3665007feaae6a313112907f17d9d82271eb3b5a630d7b46087a2f23ed1e49357e44003fbec7ed55fc6b81880211184308c2418027f08fc3a363c37fc120000f7f06004f53fc260fe7f1fe0624df4cfb33d5b1ce3db3d93de9e89ca31bbc8c6c21b700d5c3fbf73fa022fd5090785898bfcd5159387dc606ebf3b01f396ff800726e00ba5a0228b959433c2b10b1e56d42532021c7a6aa548c1172bed0a73883c7d400937d3e3f3686440801f5d713ced1b31b0a30d157271a418e3fd013cb0305b7000f599e419c899b8a43fc0039665c782e49b52472493023700151d9311c155b00c42e1973c0fb4cc55dcb4e62ca99b88f804cf4686ac2e516a862ad6b40ecd3003bee35bc3a0d7c6cdf7199d3e91d9431a98fa733e4e0ca6d35887b8f5878780051694d5d63894a7be91f52d30cc9161e73d2c4eff80a25a85bf0ab2ac45e7700cda456da1908cef008d9bc33d39479ff8bbdff7ff198027048f3f8007f4620005972e52fe007884811ca7d60d0fb01b5a2fa46b12382f1f5cdf8f2fade4be300fdc240dfed7f8c01bffe0507f7080a710464310223f444d91891d0d8c6363600360d8d976dd08938837f1f03bffc4181895c3959a95707c9502c4237f0011c0078f14d2c699ac60924ca6fd4ab443b96c506b386e2e69487b9fc85fa426b4f00fe111e7c690846f66a71ccca481f2cd34471f34b1385a2e440d2dbab58f451007bab35d50332a8d90b5011edc01b6cc54166da4940ce837009783b1e25d71f0044f95ac1e1a62f62d30337885dec289d1a9e5473edf2a145e6da2668bde24300dc9a3b1d5ed0c68409cdb467dfe0216a2f9e8451c8380d788e6eb0183d1dd4003a5565af40b28a73b054594dc5a61a235b64805beeb40e386248e81124715500ecde596c24b73f7abb68a1198d8701e9cb4ae237340f5857990b1a5e40828200318f9be6a88015b09484a3bd6511c433f9d3f783b9fbc810ddf42d24aef1c80011c26958e49b85616d79c55a4ba2357c7040d3ef81d9ea423eee1d6fd0122800a2bdfc600dfff0287ba8823290420a0241185fc221dfc68982b98d0d8f0f0f0063635555557f1f077ffe3e971fa8fe1f077ff8199bcfd0c31892b3e07d5dc10047e4283b049c654ad08ca881424b6ffa488ab8ca7f42cc92203720cca218cd00d9f7f0042c319bdd2c2fb9ffc005a0a4712ae24ac9584b7f8a3638220775cf00a256101f6cffcc447adfc26031ff9b94b4c7759566f6ffc686fde3b604914d00f83fe402ad714fe1f024ff80d383a82efe0b05dac07251fe07634255f94f7d00631f9a4b82f5c5ffc1095c9ffc507ad3fc0ed0eff9f394dbf41509e5697e8f0009c9d57ff981cc37f8fad38fffc9e997fc261217fa13607e03f428c8e1416400f2ca60e5b5af10301852e389b7e42764ce6892eb840bfea90ac5e218e59c46005beccfe11020bb35a533e3e1bf39b901cc5b54a230006e5f8b88f37bdaffce00c2687fe44af6f4636fe0e149db8c81a6a9112e30e5b6ee5293498d9c79f42100857f8905272844fe0b15c7bdc6532423665feccae0741d55db3c195b9e8a940083751ff4546d5e00b88a8e65c864fe888dabc34467914cbc5ca1b77f8113f500ca57f5149b9f412ff584417ff03010bfa3e3b3c395b66a9362135630672fe400f4ae213875ba21ff79f6df8cf3d9b62c8a91e473047e226dc3409502b7ad7a004a0caf86886766c6b9fde300e21eb0d337e5d8bae66ff41094912afe860b9900ad7943287fe004633f0565371e6684cdadb116e3ba9c3224003f6090311921003d42ac69ca9ff00509f75d30126c9d4497c15b717d50e8744da740b9524e30003359bfa564a48bf84c0e2fdff3b033fbd2698d1b9d5d591bdbda5bd4da564d00d4da141d5615dc5358911bcc9d90d65a549d5dd1545615d05c5a8d5a921bde003f628949132014a0392fcfa262b1678aa5c594c8fbbf58f4fed76234d3e13500892ba67653f2f2612e6d13b5c57aab45b6c5555898aa82e772da3d441eae83003913564cfa8427e922335d57fe0e102cf3c01a5fb527783cc87eb8fb2760e80054e1e245effa0840b1ac588bc38c041ff01149779ebbc07d9eb27c15d1b1540025cf9368614806ea1b381d17f158817fc260717f7f8817fdd0205b131b4b430069c2425a8b7b19bbbac3b2c35343cb0b6ba35b930bc24229c29bc29aaa922b00c1bbd3d292ba3bc287f450817f6f4a94dd228cc1938655d0f0bfc00c9d12910093953e9dfa7218c87047562fe5a4f7169a4d31957f0032a3a72035817f997600658d81d297c18905e1bdcc2937477a3565381821fa4a570b71bf438d1a0d00001d33f9e62d941f3136180f1393fc19faa6bcbfe971a341fe13010bf7fcd05800fed1a164a23820171fd0c18fbf0d2939f24240624a31bb82c8eff37554d39e0051e2ddbffa746ce1a9c17c442f283fc050f53b75c7916fe470bc64a758ef1900dfc0191e69e289aebe2265cdf9154f7f9f969b1180516f8fcf5b91812035730065690f09e8857074291135d66901d0bda6609df7d6c4a0bb9617a8c77a150200cc96631841e3811e0f6b2d47711fb56fe4e667552c7f49038e502fe851618d00fe039c9049be3ae77a5089dc3a52476f0f6af94e0600980ff9ea724fd202c600ff1783caef404e4def78187026116ee6ec713bfe02fe73049e2737d31949d30088301f4a71abb5aa6e9dd7183b235d4bc1258f537a6f17871801eb3a41106500bd36952825fe2297fff4405baa6bc0128e18ec74d616bdd2531b67882070250066c87e9c234e4848dfe036c242bf42cb4a179504a59299395a5411a548f9520004529650bab002b65c07ea1a40d8440dfd0a2cb6d5fdd28a1dbdef6c66027400d069706a448a2e78f9fadd9d3fc297e0fe82893d4ff060692fc809389ff05800227576b2992c239544f9baae98d38157c1bbf2749d47b73abfa2832cf218910084e72a03f48cdc07010f7f963c7dff84c081fd1e196425ffa966e03bf450fb0088017c2fff05025304da8f29c618ea5c7de216b10b6304ef4fb016dc7e733c006bfa6e1fb01b0dcc7f819d46fe0c08f37c184d9d7a7f3a3e89e8ec29d0d0c90066e5da19f3f5146c470c7e870a7dd39f2ef44fbc9a5253c82f9416a170796100d4efe017a37f454aeecfe990d88efe130173f877a1b9cc8fd991b11c646cca00ca68c4c262cc6060626ecc686262c6686060c26e647262626ac668667072cb00fa083623d8cbcccd8dce0c4dbf4d853ee906ea8db199af24797e373d03e0eb00e7c1aa940d07ce57456431c3a22f941f5c1140337015732d79e804f990ecc80086e9459940e6479888f21e566fc9edc6579fb7e918dc9b1bfe0e12ad0b6e82004cf89fc4eef324e97bfc05dc5eda22dab98a3dfa866c78d1473f82c3392294001c590c2ad305e81febcae18ec95652dd47555cff0130bd7f09f3c1fc0f9b9f00f8303499187ff82c4ab897e944542806ae6b14c17be94463a4731cd2aa7e2c004c5fe244e968bf42cb7ba8281c8ca31a4ac32d508eb5cc406fbba11e85731300537e87c7e9416835fe1300f3f87c2bf04471b16fe00ea80343e1a915182c8a0075abae5626946b629f30e0d69dd751ef9d16877f4f8c949fe940d25c3933350030313739343330ff2c31dd20d09d3d6425b2cb8358410632b0c9abb67406530030c36d4fe50cd0b11e1ab04f6502512d6ffb954d998260c02008c576880ae40056615dd8120526ad72364524326f7f91827c60bf42c5f2b0591c8ca3a91c03001de0b4dd8a014b67bb9c9aab9f18d0a907f0b42040489fcc508100836f6e1b005320a074be789cf8199c294cd173c9568570ef1f9a1a96ef0390a0000fee9800e1c283055c6fc388d8b38a2d6a60317266507e2ad2a3b3886518c781db0cff0000794768d42fb8551bb3462969996125e70db41e01fa0276a1b8931bd8377b002c5d962f0a89de473bdaf523a3b58b7bff30657c2c1c3722d428e0968ce0a700866a31ff0743608eb0979acd79bd2150ebe2305f65576ef3cdceea47ccbc4000f7d9946df28045410c30e87994915f0cfd45abf88e04bd2b0b8512cfa1a01c002b0a75812266960a4ac41687efa7e2d718592d869fd0bc57a34da9af83e6a2005397cf39a42145598aa350dda04ad2ae176fed7769baad7da1086c7cbaf00d004cc65473d80135083b3f8da10240008c20304a0190ff113474ebcf3cf3ff01008004e269b8e369bdfe187d22fe1307f3f8fe10215bad117e78f848575fbc61003d29905e9383e8643a76d6bca6c67dcb80ff5b31cc002f840fd0c17de03ded00289307cfe437402b6a7192a76964f4b4e6cee43f7ffa3c6dd308ff42cb9d0200635ca7f0050e564f47c32a5a2abd6f8cd02da1d7908b612ac97fc8728f2313007e871740931be18c99bf5cb5f203b3f13ca9b938d3fb8446afd242c1ab53fc001602483170b4a7d4d506869c5e49aa1c1e2de41a1bb824f84c7f97fcfbc5510099fb899ffd7cc56dfc2608bffb53c9b07ffe7cc72c7cbdf496e6a5354c22bf000dd86d680e059a5bf825153438785a8156b852736a9861ce0c9e5e8c6d436600181fb15936ce4c2c5ee9e30352b5aa86295af503c2c19ffa46743909bf838800c71f8ed29caceb00e3de8c62ad412c6b018b6f5611fe44a1f4aff4385b06670076623eabe5aa70a7fc6d0b2a127c5ae358d131ff6277e8cc5dfc1c0a95a368007c8f0c011529e886fd9341911094a5873fd7ea21a3d50230fd0e192e394043007a35e0d3020e9ac8cb1ed5676e7ab367b81fc51a567f098079fdffa567ed1800c97130fd0e192e3be203c7d6cc9ce1028b2b51cfec90de29c5c96b9fc2864400fea48ba324031fe0b1f9e8f8e503e58f47a8496110e268c68d8b2c13337f800031e709027dfd1a1f8d3fa0885c78e3f82882b0abaea9401891c3aefcfcf843005984f5e21d7d932b84e1382fd9b39adef9fabe5c360cd84d4c8dcc588dff5d004b86c0039febe170d8fe3e03f3f41ca3269f7f071e0ae80183dbef735add4300995d5f89c8f2431b686e0dfc4a782a37e861773b01941c676fab3faa6c23dd000461fae98520ebc72010d4fe283c17f84c03cfe1f4717eeebcb0ca009d94f30074691190e4e4958fd75b5b5405630c19e522523057762c3f59c97001c1c1c900b98999a981818fe968e162a8c4b7b595fe00d101ddfc7f7334a2a636054079009ff80340d4f27f276674e86fbf20c9f0cd1276aaa79973471a570be5a2ac0c00933abc89cf6e55dd351a6c4ed259914e3beacfd2314bc0a1fc1663f878a4a500036eeb6da46d09a70d3ff808c2907c24f3cb47fc04ee470929c76aa00073e80003c90c4fd004b66fa90e39e69e6dfa9433a3547f82c0832b4b94e45da06df900e1d89692b35c0479745e65b1f2c4bcfd2608be796100ff0aa3bcbb138c9df300e5c2e7674620cc3b1fc06bcda97f0700c4ae6c13ded3c2d2acbe3d6f8dd8af00a3eaabb92ca9fa4e119580e58b80a845635a9dfe5094b212bb626f44f77f4100067532aff05a47e0bc12805bdcdd9fc01aff4bd159fc398cd86c2dd91d010e00e1287ed0a0b0801ff3748f1ab902b889d43e17e8f236593c1dfd5f41610ded007d607670c09abecfeb3c32f066941ec2f9ae51fe135df1d85dac2649ab048a008fb057b8c78aa410b644b1fed6e396f5787d40401959285f98e37998a7294600dfc4619aabff05866adc3729efcb03f41d6a237cd0f91c77677cc43122b5ba00e1288056570e8aef33c99c9ebacb6f618c66c0918a85fe24c450fd2a27802000ad78ebc5ac621fa0c1fe3967f83880e12a9b58ce87361a84554e712bedc865009e3da703cfe9b2039ebf98480e626533636163fef6203bf8f00fcfe077351600ff83853873915d4775c83619fbc2e45ae7d1b2ac8222dd28fe2614e266b417009af6457eb29fc1b6eecfa18b5cab9181e7f80dd3761fe0e166ef86c693d5f9004553fc313f803afcf80517b1cebfb84200fe26166f2a7064d0bf303b6a39d1009416bde14882e09b25fff80dd3762fe0e3f0e532eae53f803b99df802560ec007ff06d50750d467a3a9dfe434c898197f82c603b5a894e14c4510190158f7600aaf7fe1d50779bc26b4a594fd154c097fc42f018000037e820e89072fe0b1e00c9812e5207eb222c5a558dd046b13e5288cf2c9908f29277f4a1191d7f09800079fc3d4c8fd7eafa323a589bedd3b918b9d9127d2c2130e7563dda264432e300be022d80d99f2ec3527a585f3278925e3f8627a85fb79958fe00f480cd42900058c19512ac8d086bb0fb29cac72623f8891d5418184fe0b23e2b9c6534328100303066ba3f803d6f63e282598a2d9b802e84e593fd1d17f3804070365fc1c8002f59e6cd73cfe04c9c8fd0dbea778ceac652f9157e9497397fe1300f3fbfd0005efda32eb3a0703e7fc1c103156af487cd975e6f6df648268ac70ea5caf5d600bbff14040dfc2601e7f7fa4cbfd46103324100987f062341f9283cd6bd7bb200f5a6ec8961b1c235aab891cd871687fdf84c89cb23319b1191a9832b2b0b2f00ef818279fe3e03f3f8186b94282023ffe0e1aebb11e852ae32379bbd3e00710079793ae7c857568e7f8746ba040a82041dfe0b8e9397a65354b4e47af7f80400eaf08346fa5017076d5d190493f78fd831d973c6d86d1c9a9d3ae431518e97000937a755dd0c4b7a70ca47597fe9aa8c7b970bfc5798f7f0981c5fdff98f7e00f48e8ad567579665073684a73636335617a6377393246765777665454447840044e435a675634426e7869704e784258fe8acc783ce35ce0ddfbd896f158a4600e0b718bdd6b4820acd6dbddf4f3c159df9c8d3ce05813ac6e4e998f83a52d200b2f0fe3bb5e189efe5bab97ca6a3b76033f52b31ff48511ba7c831e1dc202d004cae04185ba8dca78f0f7279b0d5447d2a4c793e09b698adb399a417ebe0440007012b782e236083d8b103a4484064d33945ff013d0f0620a14dfa3a8aa8af00dd64b33c8256b9f098759f05c6d492e6885342629a4341c3808840d0d407940046a1a6f47a0f55fe310d92552049d2d0288e6fada1d2d18462e222897828b800ae155f39ab4997e906bd1768bf55993477dac153ea77f7631e6830eebcfd9300352c79c142b1a206535b038eaefe809131a17f80537258675fa619c3e66f6d0021bd5e3c758f6d4c4368e2ede3c4be8fa044f392c1a65ef5629353c523451d0022ca2ace7c69fd6e16175242152df8311ae277d8e2f048aee1910677c0328a00d29d65dbff678593a0b8674f20657986a2ae839a3726e0848a4683bfa6b20500669b8baf459b4e37270e526951ffe358c106520401198020900008bf8458a50070ccc0cccc7b634d37134d34ccff0c7a12ff0983f9fc7f18207ee844db8dc2003f91483069ccf63664135c4ad984650114c9a77d6285f36b2190d8ad00ac0e0049bed06a0d7095f7162cf5a17100a57d470469dc0eb58f64a5ce3815153b24006017864c64b34f4dcd35754f902a328ebfa633924ac85a2b2888dc00258535008ae8abc6bc53f659e27d84b41b3241dd3c84b6d14a80a9688deabd36c0a25200c0cd321642aa3024272251a3052fd7b035bf48f75eb7ab58136dc24c43184300887e6fbd300b2322b1455e51b0165d98bff002a4226e678a9145bd46cad32800ccc02212d7458e4f5034847e0e29e7102836f8008ce2310fd1dfc0073b0abd00fc8bab20053d0b3ff9b9d0c9e322952c07cc2ddaf488246200f1e719ac5cd000badf828afe80a6608b72f3f47a3a878cc40187df812489ea0297bfaf014e6b00f30f6b4f358f0e3efc0c2fe3006fff4187006288a62042318407f08fb0a6e60038e9a6e3986a19999866ee55999fc7c0effe9007439149f23b91e9e4c37ea900a780a56a829b70ea07e905fc47c367efa44228ed1d2d41798a596c93998e6d00699f5615f01afc89655632f6a2fee195469bfc0333316cc0d471de2ccc18f800641f0f59e4e46f51c484bbeb86ff9c6c40dacf89f7bbf52fb2dc62492631b2003fb5679283c04d5b8cceb053ecc256ab12cd663c4b44d87ae211713418b1f4002ab8b80c566bdfe005b6c6b9f2e40077bb4ba3454eb40d599c69f7ae89429b00c5222d8059e5718da9fb4dea9f081485df290d1f3f4045668b15e8b2b3721c00a710f0ab21f569b0a81d92b08e6dec984308bbfb4db68db441f9087f316261008c947967d104a4d6432ff0003dfd444e5329b7c5803a9bd3c1824e02c304c000a6dceb9c1b762133e251faebbfe02799e2d2b50743bb31b6f33cbb1b1e62ab00f3f5b353301e53ae809fe3006fff81801f6214c4190a308cff115afc66663a006e9a6999eee99ba5557e8704407fe320efff87fa09a2fe1f077c0be118b3f4002cc5e4587e809d3f689fc76d2c670842dd0f8b51edc393ea30c0fa6fbfd23200f74e8c91fa1662e3225fa533946d9e05cf1c31f0c8db7332c52a3b65b107dc00ff49cb164fe848d17afe032b7319ebbfcdee45822438783d928ff801902786002eeb3f776fe82e7bd3739b0436f7fe54576b2f32d97032865b92a2d06d464f00c350615e3641c5c8b43f8afdfbfe13038bfbffdfbfde842c2aaae4b468e89400caceaa84b0dad6f2b0e2aa84e8726a8c70da98b4ee8c828ab09aa89cf4c2ec00c2c8ca946aabfb1685854abdff80da35fe00f3b81c333ba25d969c9caab53d00d53d7405e297d548096c5631747c58b19bedbb2e44814ea7a4a658765fb62f004d8dc256b45c9b91356afb332421d3f88f9efa924fe0a102ff80ea6c3b0ba800f569677cfa7ca4320886dcec070a7d1219fea2a9b1d7f97ea6cfe13045ff9a00aa6c18fe9fa9b064476f32c0d4c98500055880fe9dd7b59e663277dbaaf87c00823a4653b581c3b94f373344eef80434d534205b3d09470828b9789a806038007fe42a04f6b2f201d06ff494fda8ff048d6e67c528f27bbe51b8f6618e05b1006400418a20646eb8037ffa866848d18c7f42cc750c4bf4a4692313a8275588007cd6b4bc6e88e8de0c58dbaa77f120f66dbfa163653427ae501f0825d9b926002b504076a41c60f2303c625d26c3f88ee1401681cfd0b19db3f5a928d9f5010092a3b349df04127a34c283eda7a989c297fa9c97a3ff84c062fde112765f20003c904ab79080aedd5dffc060027f80877b864b542519c7516062dd984c4e92005facfb405e9c109367bce537330771b0d46370583df4bb1cb6b069bba69ed300e02e40692c14d5ff8fbcb758fe1f0fb947f8c879b0c9d3c4ddf19c4a0f8e8f00f212d14f17f0ec54e77fc2357c86bc5abc67cee4a97b460e530c7f2900be01005bbb9bbf0cfdc892c9394c51fc8202fe0017c402b4202b4ad6bff018009c30005b38f28243d7409f4176e7e1db2dc5b3d7a58f5e65e8a63fe4ec3d2ff2f17200b7e841c87a15fd0e1a449eafe431324429bd40a70d3f423f563091a19b4c5f00c50d8e7f098079fdff6c17f515b050043fa14351b2d156526195bc94322040006cbdedca1b6b7c43eb2d99236ff57cc48c0110ff06051033288f63ba018c4500706bfc0053f36d4089ff2e4552389c8fe9497738fe1300f3fbfc288fda10e60058b44ffc0c0ff3d744a2a855353ae2a0aa252ef6516ef7a27cacc1eebcdff9009a71f85d33261f54b8b7e104aff81805b770094b1e506593c7b0dadb7538be00f91ee4f06b5b271d4ff1506840c9f0d87c9de17ff027909fa0a4a037f8202a0030208fa94c3fc2378070f2e98bfbdc07d745dbfd6a57398fe232537f4446860091e85f670c63d2f4cd3665c627f005404a77572b6ab5123fa3c2750f886bf4002cc43e30ad4a0caf20852734ae107a61e569d18e6cfcc6fa95a6febe1946fc000999fa1b9542c9a0e745743e96d2b10620773dab4056bfb7f620fd4ccad43c00cfdbf1a7c3e5dddb785466c0a6412f7354feac9d3cd5d15a7254f3f6df416600c0e5b58139f6ecc428bf9662e474caaf0d78816e8fdf2ce53bce89b60915b3009b09e336edd59639fc4bfd37f048451a6ab2801f281d2bcc683b3e657c18cf006f252c6f07ea435fa404a8dbb47ff4844feafe878d2386ef9968d4d0b3b68e000bed35200c57f075dd9a8b3fd1d2fa7a8c2dfa1432117f80cc6b7af0a7cc1400e8991a3dfc65c68bd8d13ab577d613fe2431ae8917f42c66da81fe809f31f0008fe005f3c3cbd3005306183a197a8d01beedc6516d43ff8a309bfe1300f3f8007c2fad5f2b2a5b5ed3c11ef2e635d0bbb136987308cad4af445ebd85a7ccd2004e85d98fd67223fc6a7066686a626670626ffc5b84dea605e0d87ddcc1734b002718caa3a7994cdd5af46d8521c07ced7366e76094f5430f408da21b48604500b4c84078f126b1451c1509c434d8ed4b2391f0e2fd11f307e919f5ea5efe0a0007b804fa4e51d4ce0686909c4850501f591ae793e4f850df7e6652f25f529e004be60747416149bcb51c4b90985e456ff81fc25fe0759610d8bf82404982520008941d85bc0007c8163444a85a5bbfc16e610d3727ceff150fc000b2e10ee80070ff82960d804a606a7f42c656377114a6cf0ef5f3f769ab9c931be860583b002470a45a237fe971303b57accda3b4680f57dc5bf8d8c2d111c09ea0fc46fd007e260763695f09fb826f0c651c50d008a4822e33ae23661b9d410ab0f7effb003820bc13e22b676e694afb6cb069af6c1e130830fea07fc0182a033fcdeac600da96c1f9ef83bc801c7f0252c191fc161d63aecca08f5f715f922192daaacf0087ac1b9169ab2ceee747e8e8f98d01212bfd0a1904a13742d28ef902c002e7006eedc95f4f2d3b2fc0271e7c7c403faf483613f87cc1a419c7c3274180eb4a0068b39835255afcf0f7f1a360ecde6b250f1f05c4bf97500cb5c250ddfcf4190025d539b07485efb0dd1be642b9665b40de14801970909c78efbfd24246506100fc1409201701eca72c15cc3ba70531f436d9857288132455b2668057ea39230028fe13016ff4fc62ef78501a86f5f3eff592877592acf1c6167629fd1122e400bf0c492d23943a5c0db029e6e6e8b265d3f4e9928cae0b97d8c7f09752755d002764b070e648c0b0c42bff9098167e0e82ff41861cf2748ca38ff002cdbde7007917f84a3c36874285f0880827db7c463fc34143017c238f7e858c95d3e9390042d4f1d5dd18ca8a5c31309bc0bf944371a44d8cdfd2220593f0c055fa1231008a357719e1c9caf33f404e12283530838352410e461e91f7ea01362c02f90300e838fd0e186bf232095b6dae43c8ae826a21fb20f7f60082fa54bfb0430d7e00a67a2607a29253b4e6883cd6ab3615b723ed706efa657a53827db9760ff803004a2beddfe2b6be3f84c0e2fdff186bffb9030d7d41ad5d85e54931bd6105bd00a565d0c941a9c911194da94d21591dbdd5d4e129d99131215d898dc911c9cd00d52ffa2a5b579d5e82397b0479d38f3f319c543c9a1c7c006f674f0353bc93000bec796546be06cab11bee61b48b238557d590e42b92a5733221de72b4638000b915061c0bffc66ff233b4bf423ff0707d758c5ea565b65011c87eabf4de9100bc0453128a8cdfd041f5f60c69ea18d94a373cc37a31605ba4403f0b96dc940050d121d9096b4fd994a6abff1587d7fc260717f7f87d7fd901f5aab2b2b12d002836acac3d39b5a83128bab4a22631bca1262ba7209a18b5aaa89c353428a800a1b52725a83d287ec5858b410aaec0c9f2c2facc934625d201d1d0aea86a7b009d868a4250be91ec2c73b26ec0ca8e603fc71d1d3b389bd036b443c5fd9b9a00dbe508b54cd25eb9ba9da0263f7fe20d2ba1ff4214baea0407e852975d01a300e39429b2b2a84ef6356a5a2cc8f5cc300b2fe1f8ba8bfd1c0848df08ce7fa100ca5e83cc3e9e64caf1b7cdd9bd7dcce2628f409e5007fc04c2f5fc47ff071c000df7f058094240f292ebe2f1fb14acdb317926a6800c98d23f49b1103fcf890010575b205a229265cf3d309f019ceae6d87497ea536df8d6fc3a2fb75562a7006c12ff5fa4406518565129c996932348f281e498bb6527dfbbbf45cdf434f600b99a058a93ca5ab39ef1f10d995edbb935cb6d2a444e245f3a154a84142a8000f3aacea20a543977fc4259d1fc18dab43423b9aca7f8c20d8a520cb510c3d000e73f3f5dc3213bd8379078d2d6fcca1c4953f8021d51f0a800080fe040102100ff8740402b1b5f09f894c8f185b7b9a2637b17ae365cc2e887049c634038c4000080f86050840c0671be83050ebd949b595559fd011563f2fc223467d7d2580004c4d3402f289fc2af871afcbb7653317e93141632d840904d54e8304b66b9004638ebd03e7c80ec3718daf6e3f2c3156387c7816fe40e867e414888e101e1006fec20c104aa65254ff54fe4a035c28fd5d5c026e2cb5e08082b96ff870b920004e4fe412e481183f87e68bc0bfee5964d13d627e32dc67799097ad87340a7005a77c296c03ba83c6aa544fa3fe2b2e4bf84c0e2fe9d9a2c1003fbf8b9206400f6e654b6579fe432ec8cd95c5c541e4e505cdc8c919413939bcdd19a95531100dc9955cd98dd185a5a955c0cdbd2ccd41c8e1d4e0d7fd282b11fe7e6c5bfd4001233ecc4666c62ca66c4646e72647260c86a70c2c86064606066ca6ac8c4c60068cc6ac2686a6ccc6cc8c662666c6e6e687260686a72cc6c6c62c8ca68cacc00c460c66ec5fb3a463d82f20060e102d58440ea7d7f4050381bef52ffc6380b006623ae9ef9d8d6131672ad1e18b0266dc08ff0028111e023c44e9a371282020065321c792e805ce47c51e56e487435bbdfa42a14ea0057f428ca8eb434ca660084235d5d3aa04e138ea1323ae58d6ddb67cd9bfeaf8ef5916fd0d53b1d17650008ea8e583a87603916101483a03a41fe02cb68bcfd5e27f0cbe7d080dd4360001fc08002414657ca39476326a147767674dbaf38ef610fac930d14b6ff19b9004e21d31dfc014b47f00315041fa08640c4fff8280616d2294f9457c07cb53d00192f6b891148241b0ae827cb746fe1572b443786551dbc3f4249ff422ff05000091696928a1bd4ce60ac41ef3e23da9f8e57cb795ef536aebfcbc0d8307e860029d6724f49410c2f74639844e8cf5ef73a9642827b1ed7e5d79fd2608fb3fc002601d7f02b4edfa1a2fa8d0d19c5d1c4babef7af23ceccddb9c758cbbb929b00f490462d0cfe868bf6fbd00996e294386b0461505b829a740c16841b880fd500d17edff20405fa162fdc007ce4250c9d006bf1533622622b84d88d7c83722200dc9220ff4a070beff098079fbfe5517bf68cc36f917f0505116ba729c6859b002f62b75b05841363c00626cb3269dda4d3fabea92be02101940bb8bf80c00400e982b6a794fbb2fe00b81439450ee5ba33ae8a3736f6369f4123217ff97856008801cfe0b020a0a5252f0dc75bad09f2507a5a363dbf0f6a839ecf0bff578a002fab30f7f048105fa086ba65437dc6b987f2b31569ec5d017550ce1ab2e441003bf5082f927c809086fe860c07856942c00787e075ef42dea24386cd21030e00a9dd52a74fe7a6d2abff87c87e5a22b0f275736c670cc7b7e1af6ed5781de300206aa7a4906972af6efa6c30530c579fab73b9827996b7e0258d6a0df0fe01007f481b1ec643b15b59dca5ac1e59eef9c7f49033737e8628dbbe223949180f006c5c6f6205f11842d72d2b10b436583818cfe476d2bf84c05bfe1e6d2bfc7d006c9e83a2904edcdcf28787b6bf7f319cb35364db40a9041401f9ea704396fd000f967066a469ad56da1a1c02530b5b47d23236b08ba21dbb9ebd50f22d081c00b8bac99bfa4491d97e28453f42d43b01d92ca6ae12d0aedd89b375319cb96900342472f2579eba67ebf1891dfd0c3138207eb6f299da3746ca78817f934ce70048af30fb210fc36efd9fcf8051fc812e0c7e829815e08a5cf942ffcb225f3700eab1d185d92afa7c89a11410851dffffc49b57f098221fe96947bb1cd9aaa2008ba057ecb3fc2a7734b8cbce4df9f76cfab5ee4349a1674bfa5bfb1fe5fc920084f90cc9085255ac31212de16f80e5a1d76489ac8fae75b750b3595449010500975d1d93334fd0c34bc58f876cbe0edd337c50ecb7de47940530ddf25850d40055bf4805e72fc301e7f0284ba0cb509298859b8f324a235880217de27dbab10015081915f91fc81921fc2027fe8327ebc8f7d94a5f290670328a7b7170400a00fb18b54de20c0bcfe21590be406715ff41cc20ed04a324077f78663c5723ee00d2430302909d9b92d346bff144b01fc2601e7f0facb5ce9ba92aa641557a9200720a6518f45d1eabea0cfa4a9e7f7c3e81a7952c4e7dfe3e4c1b28fd4727aa00a726e6870626a726471fa5c735608643364f11ce0eb84c60f35e8289d1a1b30091e91f46c63736af8ff01457806cd1a337f802695da8afd014dadcce5f45e9009880ced066203fe1f2750b783f80d4ed13d460fd95fa40977bc1412074ff810041e2073b4e94419c21ce3010f219d1a1b0c51c228c9c2aa69b16946946057000c93f9de5e2edbc3052bf10125f0ca22dff064808805c826258be877f08604400869d24c90640892138cb06d51b42ba37fab097f5ac57a1789a54003f8ae04800fe6f500829ad3c2ff8f6f7c01ff2c29797f098387fc969aaff8f96ee3fcfcb00771fe983fd5fe20087ff8931bcc4ff423261ffa00430b012e3567fd2ca567f00c261eb7f0d643f1d2053d301fc760b3ff11060e57fec811defd164fc84dffa00142bb380cf0e250e080706cc6cf5e9e8c7bad6bc640ecbe8d58db03f49c4a7004957a8e3303a679fe89893e9fe07015998bb68bff84d0f8fe0b01bbfc4cacf00baec0e4467ba0a72c5731393e2aaac338721469146b1139a17908deef198fc00e4c33a3b0d298fc565cbeb810777c4d8f501dde80f5fe02826af1d6e3ff02300ced789eaeba7e9f91183fd0b33e575970bb52ecbddc30f8cfd60c901263711007259afffa12253a40fa3f4c44a7487937f0e803e13dbfc3c00ffe8f092690f0028fe1e017fd7f87807ff4fe1e027ff478499487967f0e81be1a95fc3c08f95007f0f007e93fc3c0af95ff0f02bffa3c24c24352ff8781bf30fe1e077ca7f870081dffd1e126121a99fc3c10ffb7f0f047ff3fc3c12ffc7f0f053e5ffc3c14f00fbff0f05be5bfc3c17ffe8f097c90d48fe1e0cfcc7f87833ffd1e129521aa300fc3c03fa87f0f013e9bfc3c1dffe8f096e90d4efd1e12c93fa3c25624353ff0087845f33fe1e11fccbf4784b04ad7f0f003ffa3e2672567f87803f55fe1e00007d63f87803f5bfe1e017d8ff87807f54fe1e007d5bf87803f64fe1e017d97f0087807f5cfe1e027d7ff414b9e9477e8718805de6d4a96140a5e270481c0c1c00013e2e7c25258b7fdce4ad2ffc260717effa5697fdff4ad2ffac695a5ea6060067f838b19e83e3fa921029cce85e88b5bfbc203824e576571fe422c67f81c00056fe172c67f82c06efeff2c67fbfcb19feff2c67fbfcb19feff2c67fbfcb1900feff2c67f854b19f84044fd0e2eca35b58477fad991cafcb2b6df4a624473700bacd1ba9fa3a8c6d60a0673f42d3d1c0d494a6f896076bf2062390e5ad48e20070ca7eff28c6fbf7f93b0f4bf4c0e00a800bb87f01cbde53fa0a2d564180ce0039a0c05e18a52105eda84cf08c8c3e4ca49a6bd78e18a2c32bbf89e5effe130000eb03e1004ff4105a5c7e82228c06c392ff650e7724b753049fa009f28ce500ebe3a1bfd212050e7e65fc0c020bb804a4a0dc93c9c243ea665b80d8b61b7e003c9c5fb32467e8f88539f83a35fe060100d7ca51790f2e5350ee6036624fb500b1a359ce0e055613aa53fc04f31f094e0dbdfc002fbdb8810c1c52a810b1c50007144997e839709260fe0500ec10cf8a522f9329fd47c0312f01af2c5c43e500ed0fe90da753f500b818017c81d10bc202fd6f42ff02000906070fe12945a50096423d860e645923e21b16d6b04f0e01134bff5047d4fe1f590d0fa2027a9d0023bfcc813b807c221cbc18f910197ffcedfb3410b077ff184545d0e67ce5e7002beba9d0986479ea4e4021120cf794ffdf51487fbfbfd6bfc591517e042d0b004c28a530f13fe82478601fc2ffd094f51e6db34b80576bda2f9db893ccc9f2001a8f0390f5d5fa50b05d3f84c03cfdff50cddfb3ea19bbe1818ff4245d73b400278c353f1b7f00362f3c565c9541bd4bee9aaf5fbe17fc83a6980fe7e828ba00a5830644e29437fb22336b2861d841e79d9a5271a9f3c45d7b13fd48113c3f00c2602e7e8f089e1c9fdc7113c26ffa6c2278692000395328ef0e14cbc716850073d589050406e1002c692bbc75133efe1ec053c189ac9a4c05386211b95dbd003546647fc05d509847353f04bce23eaecf17a82ec6b17fa42a85f81208056700f81826384529469ce139860bb9162dc3356d48495cbf90299f5effd725430100fa1e543acb1168880285480a05e00b6e12f4b6ac7944c75ee3043a970aa62d00dc7424c2bf8b36d4fe13038bf7fd39bb7ef42a18061676b4c325934543863700158597533677454456655767a545958513566364b6e355764615137704e70600e336afe8afa6e9ba1af0e958c1394f87c02179c9ed5909c2fd7249b7ded51700fbdee1b05f8e00de549d016292420f3a5be7aa579672117ce3ea8e1808d33700e36fc5c0be12b6cb46ff489466b14fe850bfc209ba22942584ce73da3b4e6200fca237c3952d94a8b8d46bd0fd9b1f8485e82a8980a7162b12efca9e10a2c100893b96654ae95e348a2b05ebb13f909c6ac1992dd97151b90f8d56ec733aee00646d732e7669ec1ed12844ce6d29399413c51fa469d269b60713f4312f3472004a7707bd8d9034e8829b0e4810a589d6335151f90cff0eb52e51fb5e9d26ff0084c0e2fdff4ac7bfbfe958f7f97da97801aa9b9fd0439a4089080bb6cd51fc00060025b41817f002e438f29d5341d0eab549b4c39385c5d3c755eef7715dbf00c2cd4d43c1e209287f019141fcc6f03e77e80abbfe47aaf3ce4bd0c3f34351001799de84ef63ef6380a5a8525a791ae022f25c7c13495b19bd735f172ed91f0019b002007a2b5e3a698b3070661a4e5446965bff0c2d05ff0981c5fc7cf03f00f0654bf48d6c0f49f0f089cddb2b5b9dca589e005255a55fc701b782d43bb300169aff0f9bd14ffc6fc068102c502d83f907f163c0f7a7c694d476591495f20030ae80ecf52bd5d15e2cffe7aa6810457fd6b44e7bfc581c785e19184ea2c700f26071e62da760d18ca541d6ea50d0ef3c107d9f621adfa32452e8eb3ebcc40096e3f999ea7c6fe0a10300f285e500a278ac984117dbee45c302d62d5c25ab0007f9003f5085f55ff0380adfa2e2faaff82c06efd9317d5625fbfe2faaff7f00c5f55feff8beabfdff17d57fbfe2faaff7fc5f55febf8beabfd114d3842d28002ff5b81e33ef7f3fac1a6e41bbefc334530a6dfb389a708a99858935553c5f00668976dd8493e9e9dc6f48b53652e0f2f7f0f09f6a303a9fcedc0aa119339600b6295647a80d46526b8289ab95502707e6d2dfe2ae01402e1bbf48c65350d700e870ca6a26b826bfd72566e419ca7a5801f5ea62f5a31c93fd27194d5fc260001dfe8f236a4ff1f77f88e3e3328436aad8a8637389dfd13ea3950f5b7895f50073ffe0fdf8c842665edf6673b531cb9afc79ae17a2b13684379793a09cf1e500c484ab5666c1c5bc161ff00088c6463fa289aa9bb3ce5e1498255aef191216004d8262eef909aa29f3fa6c2087fd088a807f5af351445191d22d90f32ca77b0064c2237acf6d0a1e311add7beb6316af6afec9123a5168c288e36f93f180b300d7b89ea777137cc4afd0158c111c232ec5fa689af2dcd2b0e648fada7129f000deac8f1ce97e6bb91fe1bfa6c32d1313fe0018d5857dc1119184fc4e01d96e00d90107798345492f3a0fe3bd8c3f5ecb546d9cd92885fd902081c9d875504b006029f888fbee1283181f734ff0ff187c9f296ff4d135e5b81c5fd9ebc11f4d00aa38248337dd3c65435e5fe0ff3d0248d7fa405f0f75ce4e2da5553f4048310053e6d69d6f98bdfb88121528e074539a6ddd6faadc3cbdba142318aebc0f8800d5207723d012dddc342c4181a6cdcb63e9ef6f9235c341cee8dff198249a4900d8e730b22214a5c988f9d73502ebccae8ed2ffb369b3c15911c5296ab09bf800037fe7483f9ab21c75d971e5ea64d01648827dee963ae7729b6ec3dc26f30c0050e35277a7d6011adc343af2f838a7efe0022c7f404ba188779b7863c09cba002707f1202483dfc1c124d1009b94c3f426617b1caf73707abd7a5fc657ef7f004d86ddb5a6a96f341d711b1bdd2894bc7cdb194cb9da60274a52cac79641e200995fa8f07c051e1e600abefe0b1054af3024d3be1bae07ed8a8ac6a9c76e4a00932885d8e239fa4c7fab7f430c80fb283ae80e1fce20da64cb579295ec1b480010390fe9486b68fe1300f3fbfe07dfda3401661053fa16350c8d2be5100117007eda9152d6c3de656f8c4796e2550b1e57ff4b92a53ff098085fbfe9485ff6008c97f90418ff07041648d040d5d9544f96387d7a5e13758888f96234fbfc5c00105ff098085fdfe105fed19517d33fd0e4e866b8d25368a1a3069b9e092f2d005752e59be7963711fa8497cc3e41ea3f42ccb8804a545ca7e8086ba5f935cb001c3dc1bcdbc90e982b9ff078f5e739fd4250711fc0e02b7e8b9bca3fe0b01b00bf64d41c414feff9bca3fdff37947fbfe6f28ff7fcde51feff9bca3fdff3790047fb006f28fe39ce7f82c7aabbf294dd79c78588f7cfb21d2ed87bce2c3b38006bb74e79fdc52701abffa1ca04126c22791406e9a1407bef20fce237cef3d300f8030da674bfe26d2f98d62cbc5562912d24f151c0dd22dc51da32fb707f4100c9db07e84a728ff11c9428df5560fe00676e3f899cf5b7b7f4055568ae190600edc9cad57e9413b60fe1300f3f7fcd720fed1aeae030fd0d33b990f369bcfe007868b619479b131bd8da6f667b80873fe2a0d0809b2eba83ca0fd091778642002bfa146752808e126521116ad7f59f17f0fa6ec1a9f58a668fb9562bea7f4e0093953d7a84c1b022a919e02911d9e6c4b47768582e1a7813f80df5fc5580ae0040b2197077f9f969b16d67a42d3844f2b977e448cce944f84a947d65e3a3b600e754de9de21e1415d1252f0a71a5ab18b0a8efd0d5a79dc5631a148bd070210026ddfc64f5a3c5b056180ff8912f31dfd0e33c17fa289d5f7f89f371fe130000f3fbfd2f3fda3101ca57fa169de07d650bdd69cc3e63d2faa08c14e532437e00b9419e750cff57c915dfe85a6ed4b4fa945163d2109ac93b447828789b8df50037bc9fa3bf199463349ba5e1f71252ecd56e8f950d1a518b400b60fd3d1b7500c140c0184b73375fa0a46ef8a7f42d34754303ca2002aebde2ec2108b7d6520012f0956d55c8f2d6a57e8f14ec729fd0e5ec5e7bfc002b96dc953c136476fc00948e4bb9f480f92f746157e9b93f330cc6fd0434547fa149803e0b11a25362001d17cb405286644c046e7c84973f17a84c1c17fc9c5b81bc3cb31702c40ee6008a8b1170bad6ba9dd864affe3a08e4d59fff0449aa81237e87264e5fdff4ed00b9fbe8be46d23f82c2eb261094b42308096f86d9c03b13fd0126968d71c1a3004ba5f4745fa7a298cbf444c552d0db66aa4267aefce6314a2087fc194c4baa0007dc7ec12d72e9cf1349eb131912e55a97319026a858f64d2aca757872d08300c4a202c6194da82fe2bd6b7f84c0e2feffd6b7f7a0fd16aa19a735b2a53832009aa51c37a41b39273228b3a1b331b7a6a43a9b9bb839b3b931a2ac21319c2800a99c37337ec5af2a921453c380cf4ad58827f9fed5a153860d82ffe009e487001b96555cc855d15219c9b45b071bbba5e117490ba49dcab461a747752783b30002939d19aa8e9b60c31ba211813f88a43a68820215fe0b1030cf8a5279c82d009605a7e395fddb29e3d177224033f4058556d7fea1890634202fd0d45bf6fe00007a3e447abcd62cbbe50fee17e280fdccbdeffe2aaf0037c7111af963ff04000f7f20077e870a9a717e01731a4512b373abc2ee4a966d8ec1288d2b4fd1d100534e02d1fa16966a40beb525085e55426136e8a3e7d0c7c6239e63d22bf3f200c2bf538482cff0980c5fbc449031984ff4385e968656eb5912db188d0ef67c0027e7ab79685064ac2b7ea1866d00369fd0b4a99816e36129bd557948822586007a73816a42ff8fa900e9dac5cffe2a49aeff0744bdffa19273033ebfceceb600ed57639fa348040bfe9494d98cf4b4f510b78ab814688e906e4de33367b02b00ea01d6b587e0fd10616275e45c7ede81b0e585927e3b5f40ecb4e92a5a7df7006ae9364aa95213ade6f83180ffedfe7c4b5244ff15264928b6a8233899a299009bbc2730b4b33425ad2a19b8259929b3b81c3d22a22d3abb18a322a33cb31c00b5a421a23ca834fe9d85fc44c715475757644385238ff74260e7f0c01fec4c00cc8968cb2a2ea986a98e4f4eaf2d06472ecace08e9ae68a6ee6d49cb4f4eee00e6c8acaace8cac4e4e0e283fc414330c7e862337f3d94ecf7229a977a703ee00d72d0513ac9855bbc8e04cbfd4734f19fc2602dff0f4c39fe3e48f041c330f002f178ef7e364a91bc54d7fcd8143f18b0102fe48c89c38879864d6376b91f80008de5def3f5ac8c61b1151c662411d686834f674de1d4fa1740356b975d06f00e23a62da07bf838666a95e52aa28fa613ac430d2bb1cd9e25c2a0d8442fe4e00199bf84c062fee2199b9c83f438bc9c6c2be6948b74820dc030e14d7c4afb600190f27613ff6230608047fc1c47fbfcacdfa7153f852a59282bcd37e80ac8700500eda48646fd1e1654f5249fa1c31db8d8cbf800675a0b2e05721d0fa14b200e63255bdcd809ba4fdff18edc00000029fc2608bffb53c9b083fe7cc72de730038ec5c4227db9631ae42867d7e281a3655e3d18c11469b4ed1f4284c682da9008a796600bfc01a22d02a2677fc6ba20d1081da6f7d0e7200b8a72b2c07ff000068b7dafba267fa4827eb897f8382acca7d2c4a98c3fb1f3d885815f267f9ac00acdda7f0fea20ab1a3f97c2acfe13045ff7fc650dff05e0b38fdd43d8c953200070732d39f50579efee3eccb542448b5fdf3cf60b96e5f2a732d67ed63a3d500832637c2a21cf873f4e852a710df4266f3a914caf3c760df17edbfa4c6adcb00f830ced91fa4271327cf8136b566d4870ff017a11c40747b1e37ea1a7701430025fe0d3d2ac2d09d7faa575e2d776dfaac4ed60433ae265aa2520ae75c493a00f86d04eedbf800c5340e6c7c6065ab02fa188038663a77cf3ff04723c7c810001147e872640641b3d0b5b25c92b4b5f8b79f277efd0148420af916085fc50f000cff098079fdfef0cfed2200e22bfd0e1715caf9b4aaa7a0f0475508ec46d700005f26505e303c9fc517cfff098079fdfec3b7f5130ec8c5dfa1c35bb5557800fa8535da3fca58725cc7cf092ed2bcd3adabf48c55da4099fe8723fa8b83120061afd011e79dcfcff7b55afd17d8fd2236aa4205fc2a9d07ea49a7a421fe0b0002100a91de5389f0cc80c904fc4640ccc20fbc969dd24bafb2e3f8ea0a3acf00a6d0b9738d3e74ad5cb0de84c2ee0863e37ecb363207419666d8110ae6efe0000884343f8fe0a38439cf82a322fe00f6028cc78f9c4af2923e59985ff3443b0079acbcf2d6fa2435021498bddac7b9883ef0870d53ca9501fd41b182f0f4d200c9bcabe61c0079910dd54e17f88e0a3083cfd0c30207472800701cacef2e8d00b44ca6c722714725a6f3af0dd9fc5d7c2ff098085fdff7c2fed1af94242fd000c17486c0bb2965a75bed6bc7d3a4b94f41f5859e2374859d6b71fa50bd1fff0084c03cfe1e130957f57d7a3f9f0ac2cab92c1c90600cc3ecd654293a3fa8a600260f69e7e90faf42e094d1d5901c190ca3777cc24e63748c75687d62b38911009b7b22987a954d6bf8a63fdf204c7e918e1f149fd0e194aa5198bb4f319ee10095067a9e606207cdc9cb2d33d7fc4d3e662447e617505ca04faf0b1129940f00929b14ec578fe8221bbcfd0b1974010541b299e8ec6281582101b83a4fbc0d00b59f97f4023cc8bfa6c86ef1692b03f5050dde18e623fa7c2b51700a6fe104006d3109224eb84486fb721c5fa5192124be8ab37f002dbcfef30a357f49be51009a4a36c03060aae4f1401aeef0575f94b367bea91b7ac5fa0271fdff88fce50050fd0e1c8fd9b03c7b8453b50d215302c8182ef0379416accb3fcf5d4dff8f00b83b90642f59f5b1485c16a4bde10ee36a4b94b3454f53367642e8cb53999a00312b86af9bff047f4051133efdcea6f7e2d66132a4fe84e1f77a649c5a8ba200a73031c33a28754fe91a16065afe0b1e1ed3fc04c2f5a51d30382cb16d456f00b76b19bfc2537b52f4fc49fa488bcb5b7f438c3ca8274ad306169bf8441e8e008a848d1ef213ed4fa25fea2187956271fd0e1a5a17fd3b68d2bf9e80e06c71005674d54626c95e3f5a9fb36a810203f58069681cb218b31bb330febb0d2d0100efd7d1a5a1fc7a07e7f03b17752fdfc1647b42e34a37159e60cb23a3a9c53f007058f1d0d160f684a1c94a4f409ebb30ebdab65e69fb9f4ac01cd904492f7c0043819f37c06502e35c80b2435f2f7f098da2f08092dce6c2dcca9adeceebfe007ee59bfd3e472fbfe8075f5fe1f118c054968837dc67c179954f92dd55af970096478b2962efd343f7bd2f8006d7e75bbf4815921822b9790de24abdc4f6e700b79aa8a65e08b1ef7728f4ababf1ce802a34c51b2c460017c7140c3fe8619400ce329434f1edd4fd011d65b777da5c1f76ca5a631a2f2933adbfa4e43d13f8004c03bfd3f249fe7dcf157f02fe79c102fc1d795008560fe0a305432fb9b4c500a2d99f9b74e81604579e7d5082c1d07c8ffc00eebd45ce0e42da3cea8bde6b006710bc6e9903f988e04f443fe829910b9cfd0e3191ac991aafde4c5d8df08b003efbe4add0cbc8d25a185fc5c5c4ff098085fdffd87ff51761e7e03fa126300092096e9251ccc2be7f4028b0cc3dfd7e87843c8ca302c87dcff4751c37709600fe858b433dc209420ddfc042eadd1ecf90cb023a20251bb12858103fe270cc00bf84c03bfe1e0ccbf47c31558db182a553939c926511f699a0ef72cc83d813007a941ae0d5126869e3f9d6907a08aa0170cbdc8a49dbfb806ada0c7dcbcd220099c59062334ca79a9556544107eea7ff01a15a5ffa166352ac3f405482cde200fd6f001dd830ab26f8c05861d36cab66977007e920fb4101fd0b31aa01053d003299334f9a8e807a076547f37cb99748c392d4670b1fc6a5a7fb06f6807f2000969f6caad30f98cee476850ef23192dbbc73787fec7ce94391b93e24af100c002710f8f13b8ae7258b300a78efb461b24decdd32a047f0cbc551462fb267f800da18aedbfa4c668cff828231329410b4ad9a41a2a8e9509df43fa2888263d900e9c7b9fe2708c7f84c03bfe3f1591032de8ff9fcd36ce4ce859ac2227c55e40024551139bf8033752dfabe66c0694565fac340095430cac740b49b02757fb10020c460da8d62cb24d216136ed1aa4e931ace95c002f84748fe0b08c4fa4e51009738532b8581968e0e5b7ff80237227db7481288fc014fd2334cfff08cabfc001c13d87d011f19112f564b3b171547abab9f584700a68fe923278e08fd09480037f056d092952dacbd2d3bebb5c4dfc015f3fbeaf8d3c72b93182c50fe8a8a00489fe48c079007e1016334f6ff80c004e7fd053b5e029cdb2a4b4a7429a5f30018f85aa7a607219b0bdfa3a37a1bf4111f3233f2527f0180096505d8e5291500c2ce85118105b49fa30376ece1c6fc86327dd7fc5081cff098079fc3c2ba2900ff2fa0721d611e86b1b7cd3b51a24d542ec556874e96a53a0f9d528aefe74700214e8bca307dd92e8f645820fc34954bbc39646cdecfc07cafb29b815655c200e8e7716c3909fa4887d787a101597a1dff80c00484fe04b64646393077d48f00e7317a94aef7ec2a929c110b904ffa0ad915c7bd726099281c71333588aa1a00f3837172c68dcfe00dbfab99e4e4208bb76cb2e463bf4b052d3ff0901c5fdf00f6c8fef42d6b664686a6b4d78335879714a69325a78584553773573344472600d39357238635474594a52664e68656b527932fd8b0c67e7847f15d2b06661a003268d5464b8aec71ed11dcbe92679bd66fc8231736cad804b22d798f6e0be600438c85eb735a2e223551564ab6871f5a4ae5388bd957e20dfc4707880f241200d384202b14232ff018008e7067270e129b978b0d9568543a327959a2cb503c00bf7b36851affa302ee338e885a57f8f52e06dfd1e54c88d40dfafc2ee320ff005785dc67e89096b4addff32c3ac104be8d0eb6fd411771907fa169174d0d3b00f40428793185c4c78810794e493a01fd9c432e157e8ca45d36801fd0b16c2500f59129f13656016786b546ff2c1625c8cf8b0bbca8374bfc9d75e7f0980c5f00bcac769bf430c5ab2927743a0fad4d3e2afdac5cb196876baf0b3c0c7eae330012ffd045640ffa0e2e10eebf802e19871167c4ec71658f6d9aa2918bf08def00478ffe15f6c48dd58ccd2f6e57f41c5c218f7e870b84390fd011e81398813800d4cdd1501197e68a32ff7d2b0ee3fa4a941f093f42cc5f1788e4a63ff007df003384acd55504fafe34c48453e8b7e76ead805fa528842ff84803cfeff88bbf0068d959492fe87247852a5b149f2a1e5bb76bf8ac47c30092c31c08ec46fe240033f8a7f42d238e02ca79f0dd4c946d041fcce9e5919fcc8944ba6d04fe7f2e0099fdf203c455fa1c63ad005b02a328638bea2fea7ba30eebc61513e7f4237f005f127a12c323e674cfd582cc0e8db926b58bcf7802bd489d01c345ff15ffa200975a2be737edf8a8b1389680104e7325545628f8d3fd01207c01f3739a72d100b94e5d00c0cac18972a1590ce86a51fa71fbf343175c7f16f7f3a39be1545c009520c610e5082615af282645e85fa4659e44ebf82c5c6bc942ffe000d994a600cb81ba1e5a4ef5d8ce8d1655695e3b8bbf57994c6a00c7e8718d250ba4674000939168d80fd7d08c40a7f5cc02f7b3ecfe1efc0ff43d22fd1b1eb5af87728c00282ad1a417513b4eb3e8f08f47fe9ca4700acc002f8a01dfd0b48e012729dd001bb5b9aa78055c2b0ac103a5a249c77fb55eb5fa4eae56ff84c03bfd42572b007403dfc1a0511f8c79c8191424525277f9efb05af8dd452289217f138145fc002601dff200145f0744f080a6db80906079cdf280350b5b497007e06a2a1fc0003c1fe0d8a08907cfd69ffe8e0b65b81fd0c3147a604329837656990decdbbd00cd7279d153be0ad5dd720ac7fa36aaa683a99b0295a15f742f1f7dace29092004dfcd6fba72c20f0af08b77aefbc8d3184bf4912e81ff0581080f4241281d20028ba0eca8576f0a74e270765246a317bd5509feb274baf58981fe3c5d9c04100a3ff878bdd2afe3ddf0bfe84eb6b053636a4902c3986654ab4a604fb5306bf000a0ec7716a1b4132095fdc0ad9e1723ef3fc01c32bacbf05844bc8f86c39e8004574c76a3a3ee7633826479c61f3c6729cdbe7f1269ba1ffa1661f0beb5253006127eac9dae764dfec1d8bbc9f6ff0f4bccc9f53f93bb44fe13018bf78865c00f01010bfe858bef9efb49420920e9b02ba481a12fd0126d54a3e9bb972e0db00e9917fc515d0ff098079fdff5d0fed19c0281dfe0e186f5a5c45a3d6ddaff800009357e973ce3052245855377c9f5fd1c5658c5dbf2fb9fc01e2f02fcc9cb20064204a73fe62450606de03af7133490829dba2bbbaefe931dbeafe080a201000f16253c823240b6e4f01f84cdb0356a215a44ca24be05ff510e8a75493ff050005e5fc07b51df544221421f316ddc01b960218587ee060b01877f516d47fab00e99ef053f84c117fe6acfd87bfa7f3f699ce9dbd688bda6ef7e2c627dc6a950034555be8bbd3574ee8eaed8a36bc9badbb4b6232beee0a689328f86b1b2fd30099ce13977a989729b55197715bafa31c199dfe23a7dd07f82c59e2b4b94cb50087903c6cd46d708d13e1f8c630b1863e1fc5bfe26a7de1f3853c47ce7e574d007df8436c2bd67566b0885abf4108321a5fe860c6a1929481dfe6d86d30027900ea1ba077d2948790dee5e459fd2818d43fc2601e7f0f9d92a064ca8d76b1410000f34b9fcefbf9814d7ec8c80236c9ef7a41a460a2f26a76a9fc7c724fe94100d8a0303331393030343035fd2e18d4329e3a255e1cba1019cdf51eeeddd5c60076ab085f530beac448b5665edc379617cffe3db040445f092800bfa023984500b95c3a5771f213f802a8ccd675f960f70b472302a0bc6fe23a5cd9bf82c91300421f94cbf1873b82c265c380614a3ef15be39da7c935bafd233471884f1fa100a31a819f93cfe7711a5ba06fd4ee1d832d61bcfb07a05a519df49cf6705dce00e755e8bedd46dc24350702ec97fc1d3f8301fa087c64b2ff8302973f94bb7d00e756c9c57707db52333a0ee3065791ec8894fd2730002bd7e59992a2dc18b000eaa00f0c519f85723c67dfc06f61a842028dc4d1c20291057e415a5a4a5c8600d24dcf53f308f03b147e72a710a04bd32a347eaf0aff13f10fd09189df04f200df294ee0d9c4780d8fb70cdc49f97365bc2cafe6ef1bfa344f97703e1804ff0041461e582191c4a2c5039fa8edc44fc12c4e04a0100ad12cc418a747ea1a0300c56919fd0b3185d181729c6f489af47afe68cec72b49809412181cde10147f00e2a3e16ff083d5afffa0f8d7f84c127ff3b3df1810afdbb7e9f14749ff9f1f00deaf8dfe848c6a0826d47945793594f0a3cdbe26dfac1f1bc8b8f7a9cf5ff000124c6fe9aab27b2709c8f3bcfd060ac99fc10166ff01c604dc8d034d027f7200994ee6794ef2cdcf3a75e05d3ffc4772dafa47f068154d1f9785c97a2e656300e17e53dc6b2cda61b26aaabfc6a0550c88c84d4efe822ab039dfe0b02ac6a400a5004ea5853957bf8063b6c23c99b31e86387cf6e3e368fd5e11d488304053009fa1493cfd57c25034194f0981904ceabfa4c2e63e62eb28f8e0ab6e53842b0074ab56469eb0f2919e22818a437805ee7ed202118caa694b022bf4205ff92300c1890a1b7f87344affc4d5e0328a73cae4f89317f5df880a0ee6eaf335dabf0029d5d10097db36d31e3c04f0181fc0a0249bff1180939319366774c69e0e680045768eb93b4859293e1dfc00ad54402cd82759f7b90117f8217a9b884bf438005ffcc250ade9a5ed42b3f3c5e22a16659c1c4fe0dde5ff3e2e8f8c128a524f006d3b2f517f73bfb68d75385970c5df08af0ca1a89141cc8bf0123bfd7eba3f0047d5031208a0aaf1e53dae8a69677d662a8923e74e0c35f62b544a5a6101a20003dfe80a07ed251648b6570d80e1c6e2f83bde32396bcd1a55be3d8f7c43d800d2cfd065fe22c944fd3bf8241e4fe03aa6adb44b83334ce5153717c9df3921002a05573601377f876a9a4781a6fd0e6b41acef189ae9b8be7af4be50c80b4400cd660ac3819d7fc4221c7e820c08588fd1d18088f85ffa022abb33f87c426a00583d570c950e3e0ee5d2ae21eb737da67eeb002000be19883f421acf283fe800226203d3626723542a76a9cb229b5f20bcbbd3030ddf66fe41feabe0ea0210001e7e3213fc11c7795b67ba974a7a9aa8ead3bc70a5b231ac4fa625280cae7b00680e0ee21b32364a339536b834d8b83df50a338c09f19101f08071fc0801dc001812abb4a49d366e7e0cd13f4577aa8277cd44b1278f411ed7e910ad52be8200392b840737110b8301e544943347dfa681c092d7d1262a304de2a1c7473b34007094a0ad79d995ddeeb18a14eaef56a549a04e3aa1bd80b901841decbf18c0005a5bded9811b47e087803ca261358d1ee20c2cb21f9bef0d8c3daa22ebfd0d003250e449c061e079a6881b117af1937ebda6c8b1435fe182f8e7e5adad9d00006f6e9e4c0b9087ceb1ec1bfb0bf3fe0706c91fd5a55ef1fe407c429c84b68d0046c48844760c1a8d08c4a99c52f326d12ebcb392777a9ed1c02c81ff1f1a750020b013b3e7d5adc922d43b1ffc010b2510ed34f963ec6fb6cf0954a13e249400258f341defd6ff0035abb66660375fd5dbd658442e06acc62fad4f3cbad90100005b040f3eabfa42d112a042ff4245dcdc181bf12ca79b981f308af3a9757500bf3de3863a026e69b17177e8e2c2acfe1867cd8e0a50f29073f88cb6114fd000a1783eaf132936ef3fe87dbbf5227e353eaae4d9eddb9988a421fa386c06be001045ff828041520894e0d893e13a1b8c26b32a91056a6e7c1fdbfd010adb56001fa2a94db83062971a23f810cce4621fd0d1794b255926f01b8758a5542c1e004032c52f58776a7163fc2b0878792dc5dbb707e8405ec10262498406e9677800840f76e11e8304d530948ddddd9cc4f144f05b67164b09bcbc7a9548bd66fd00ff41a1ffbfe8343ff90243c18fd0d2fa98a20e0a0dfc00172ff00181f60a9800e88442c14bcfc1b951efeedfabe7fbd067f4385f85d1e2e57f0076be47cdb10046f7a789fa027056060bc3443a825dbf899297fe1300ebf41cc3357e8618400047c9f8e62847de29f6f034b3a49673c03f70a54aefeff0d2ffbfc34bfd4140008b945fa1c927bc694196d0375766f523e408363574869450b50093f899561200fb5b7266c0c8adab3544b8f0ebba692df044b68c0f841288406502eeafe04900da69b8a8ab5e7c22a6bcb1a2c34c115a201c76a28d3f85465916de49fb520a007efe069da61413f4285f203cf0ca6ecdc07510c6e374bf5b318dac00d45ce200197445fe8a9b4fa5f75e784fd4a6c5dea7fa1c2f9177cef78ec83c945a3d9200428c7d86f7c6c8474445bf5048eb57c300542031ffbc2c181c1064a5e2bafa002f943285f96e4933a5179bc2d229c5670ff20a671fa1ad0ef80f66b650ec7b00324ff80454573989f841c16491427720264598afd7d48af7fa2490eb9c382400baf46e7531416e51e494e15ee0b141301d3f8bb9befe13010bf7fd21d77ed300243aefe01e07bf7fda2237e8c34446e4fd634875caf331e4376fd983c1a36e00a2b216673d791f2d9eaabd72b91edcbdb2fbed4c1fc3fc888a7f1f007ffe38008df64589cda65c18497f9fcb8c085b7339155af8254fc86d39383330fbc9a5004ec2ca0315ed2ff1ac2731e0dc56023c0e540d0a5357f78b6d9bb6650cf0b5003f543aee1bee72443447646961218c8c72acf0335ce15b82ee9b4cfe007f56008c1d2dbeb8306dd27173486f51ead305428ba0ddda406ca28df1786ecf811000a0332d45016ee7452d546ff4818cea8e7e82a41e60ea4ef94d57a36a8267ab00e3588c2990c43ebb78455d4a9d5fd9b1bebdd609a5c7283b26e1f7f85546fd007442a6a3b8db902b99bc01bfb00d09fc00bc54d3f052390679fbf2a8b6f1d900fe0b4024e6440e5b3626d6dacba5d8a2747e7377e80a64f48afd2167b4436400ffc1208ee9d2cdb0666a65a7abc2a626542cc2d852403a7ebd8835afd206570046e057aa0dddb0d65e52f216c4dff4b42fa8ffa6b9d3b53b4fd398c53502e800ed942dd0cd9bdf4e001b5357d3b124287a373ffc007ca4015a84d287f00446002f79da733eb10e80dfa42694d933f81411c03860794498abec5f7d868a5ee700583906cf4332f2137aa6bfd1b34d96f90402b9fc0801ec16c644a393bf0ff0000454fd39d5f2f78b2c1e15dd2c071e734e1b1fe4e2dc0ff13589bff0fdeec0005f1402bfa148eb43517251d2473a1b7d4d68589ef299cc577622660144a0c700f89ea57fe1300eff5091d680144c0c9fe85a2e4b996094e3d8413613c8119e0074fe008f56f92889a5246d1b21b3f4751d68812258c6b0cfff2f667436dd29007263a201872242f2cfa652c3f07548878e32a270b3c9f12e9c38e193d7f26a00c15ea9af3dbf25468ede7fbd286654a8a27d42f4f66520f2560b853b924dfc001850b7f0981c5fe56d236dbfe0093c2cec5982a3e76aea73fc8dbad56232cf00117d3f8dc05f66083b1566098caefe59ca17f48c9f447f06dfa752f2781a2d00e12943d0370867b70e18832d456bfc3d6621b267ea22c40e9efd0e153f6b1b0020be3b1aa84c79874042d2d6893b243694f15fcbadab7c80941cc20302209900ff0180088306157875281939cdb5a128f6c83a221c7071e2f48f694a0757fe002ad8e00e9b223217da25ff2411eb7f860ed97f84c062fe383c8838f683a57e0073fc65dcc01be96e963647fa3e9b4f053f87c093fe0446a04ff42855940401009b4a1d97b520b36c01eb72b80023b4a780ce8460093cfffe24dabf84c110ff004b4a3df83e2fa7f6fc24eafa7f005307cfd62c0b393bfc0100e3fad54034a1004ab7896a49f5ac134157f2fdc2a85eb6fa66a5787b67bb96764617b4cc726800783ae0a40d01df7f8e5b37fc3ed5473a694698b1264ddfc01511233a2ba04d00bd69f1b33280ff00c05262a21dbc7e5482b0ab5bfa4439d5c2bf4185635940008ca288b175d0c11380ed670146e6752d261ce5ed1dd7f0d65c3ea2bfa0a58800794822512a86b943f80180f56e45334f73b766aca0076efba0a8cfe146072000203e1ec67f814071037f5194a3ea14a4be455e5ba22b0e6f647bbe6993f8ce004bfe1b64654d4aee855e3f37c94c7be9faebe630bd68a7bc06b1c654f984e60095a0513e99cff48453789d8f7f028169049129114b6492efbe118fe25db51100e5a07112abaca7abfafacb0658d8cd4ccd98ce4d18cc8e58594e18d998d98d004e4e0d0d588e4cd88d9999194cce0c18cd4c8d0e58cc58ce0e588e18d84c0e004d4c8cce18589918cdcdce0d4e7fc809d58c462706468666ec666ca6eca72600e70686cc67264726c6668706ac67266c2c8726864c2cc68c4ca706ccc626c70026cc2c26c6869fc073de1c9918b29b1c9b317c3d15ff0283e36c9d2877906e00851d5f8a2a3b6b296be85b8b57467854e5fab6cb067e1e8bff81426dca889400de55a00357bf44ecbef63887a8620327ec308e0694fe13f343f51891fe7e82000cb8afe030ac83d09025289d9649831a90e934efda2fdf6d47237e01e7b33f005051011bd24ff02869768ed28141af93d6ceea0d4f53ac4ad85904dac0875b00a8bfabc6b8ec77f42d9572274d4a2cb299469c314f8f73e7ac506801f21ca50025f1327f21beb047fc0c0314303ca0769f51cd14ad2ba921f87b425106f60900077a334ff0d98d87e49fa0a87b27892a516f2be4277322c671234a1f539b79006b6086f1a84ff48107287c812e19fe83323d501009411c395e1c14f4bf632f00b64ca3b0f7d14bf2ba361feff63c7fbfd8f1fd3d6507802367bfa0c2ad254c00d65074a7f80675f373e24f1a12ffe00c6eeb3588f5260395cc927f51d0973f00f0980b7fa7e351cea6be5ad365334d2a25e1ee05a3e2b558033b1e7e59385700f39fcb99a5a47d829d93fc043062541c8c1a27249e1134bff170968f65bdb1009db39ac23f46bc3e8aea4e05fa403432d690ff41cb50708ca2eb6a531abe3800e985575b51a9f42dbdcc2a6faa7fe9397849558798941b4c5fe124d76b542a00afe606780092fe032c9d93f8284bf0abafc9465e07b735442e5994ee8a4f4300c5daf041c445830fd9b5ed8b05fac015a10d98cccd9958ff5d82b4200b2feb00e85684fe3d03f3f814b277b6dfe060b04bb6251ff0aa45a2cb649b1c0e6e5800bd6aceb1573f802c337b4cfd5b29a05f0b4dbfa125b5366e218338946c2bbc0077197a3870bd4800ce38033ff899d46796a5634c8eb8daefb61bf1075f5764001946a104f02f9084a25fd0a2d7800a7fd728a12214c21aa4299ad35331ee7c003d6529bc3958a7fe28681afe076c2c201bfcbcd067fc5af40ff123597fe406008b66f70656e4f6365616eff34347003907eac8d0e75a275669d2fe1e0c89240047f8eaaefcbba106e00ff3e34ebff0f8787c9fb1eb2957f4fd5998ff969ae900ff9081c30564aefe2b8667bd4e92f4385b3324459dc290712f4eb4451ef53f00fd79665e05fe960641ff4d70437f110687fb82b1f47f54d621afff7087ec040012baea7bf8334710cd67d85b51caaf7f6a2e3d4c6f557d4cc8d5118fe4b978007fcbcd74ffa70afcd404b3f8574cf0aff66697731fe823245564fd0e6231ca0049d2f112c403463fa0211f0b03e009983464f382d873f73993e0ff0981c5fb00fe2cc97f7fc5992feb28cdbdc8fd0b166450fe32934a5121204718e19664d800219d480e0b6af889b23fa4ed5c6807646d9820e5a7f44dab8d7f0380accc5f008d4bfc272d37f0580ddfc260960d8c080e6fc3042c32ab91fc6ed34d0a7b95005694fcb97884fe72acba6d52f2550f1358243a8f52fe809ee2bbe5cb82804b00fef7d32fa5f935ab8aaff0163ea2c5b345556347e9f9ea5b15fd5c33a0c7ad007fa3c6729b6bf87801fc9fe1e007f2bf87803fd1fe1e017f37f87807fcefe100e027f2ff8780bfccfe1e037d6ff87801f60fe1e00fd87f87805f5efe1e01fd005ff87801fc0fe1e00ff07f87805ffd1e3378c78b5fc3c04fe37f0f017eb9fc003c06ffe8f19bc63c62fe1e047d77f87813f63fe1e057f1ff87817f5ffe1e06007ff478cd831e7e8f19a663c55fe1e007ff478cf231e2c7f0f00bffa3c6799800f2aff87809f59fe1e02fd5bf8780dffd1e33e8c79fa3c67018f3f478cf231e007e8f19c663caafe1e05fff478cf431e56ff0f037f8bfc3c0efdc7e9f1a286f00d1e3400c794ffc3c12fd77f0f04ff67fc3c14fd160017c40897e858a340de800b9437c17bdbb8034dc4e28c0c74f6e3f3452117e74cfd3968f6586a1fa48c2002c3f43d8cae1f4f4aa03f655f29ef185d90b22008d3db5056ed7ecdb1837cf00992f08a11eebdb81fc671cd82ce7c5ea6b98771b9c87ef339bee50225d6c0c0001c0770b75234c8018036325a643b6f9516531b6194817c1b68bd0848eef8400ff0178517e9997c4e1ef808426107b98a0bfb1bf0ef8f8ae218fe004f28f64003fa6c12412e5663e67fcd905f8e5659b30435730bb6c4a2aa766649cacad21009fa363206b4566758f7115bc4d84bd5911974eb548d87dcb88a89894fe00ad00358b8338b177f405c685178dff1882482d287eaba39e85ac543e0ecaa2bf5a005b7b147af9dda5fd360921186b26c05e19074b44457ebfe80b131caf9582e900567aafb467e24d7305437f3e6f1a7aa90a6cedab88e6d7f849915b4da7fe0000b1a91e2be05cf97f780007e64ef2d3a221306ff4c58dd30b4a007c63294653004717800419771bb54fe55e077c7f4e049351e501505700f790178d6656d0b70016adc888d65ce1c658003ac6a4385d6e27c895c3e7044472b80e47cb02ef030075208a1c7b832c1d2248ac1b4c682b7417cbbffa68c732f2800b4d9f6e65a6003695d7efda15d7006ebf405135ac8ff4d86dc85846502632ae3df91f8621d700a4b15f2287a406c73bf0d4e894eb07269925664ce3eb234d6df601fea3467000bca33c93cc6cfaef91e52f75663b518d9355104c237fc660920acc1900588700434a38a3b751fc2565300c999c547f4d89269ffa02db11f4dc7a25723c7cd500c67885dfbd6a2eaca27a5b254ce8ff803e463e4d4cfc8b2345db59b4530a2800b8c05972b0c00522c9cdeb5ce16b8ae84a49a616f8bce5b776fe34049212f7003c44870ca0fd425dc9e399a4b4bbf80302f069606fe9b16e03a701808d63b700b64c1b95cacb8043f50e37c0b8211b6d598b38d51f644b748b9a1f83b84668000b71a92752d8a1bf36d1ac0d43ee7cb538b50a4c97136f92372d3f8d0249ab00ae06c6e5f81f008378952c1395b2b29467cc22fe9b049031e6f78a0859235a00f24f3956e32d4f66fe491b8abfb50e0cbdce52e0949028f10d53f801b69296000126b909cdebb0805045cb6c431cfd79afc7f61d16a4ce6386c5a3dfe3412400c8ff801bbdfaf32f0246fa39334e6cd76dc65e87d03401fe9b0492819c0fc40058f8dc444ebdb0e4b0ef124c9cd8b05db16e6715d5c786fd7d3dccfc6c63cb00e0f59909846a6c103839beef7f81da58ea17cf81e187965b12429a0d9ff4d10090afdcbddbe0ee66ef331935e870cfa21403e67742c17ecd8b46e6622d697000a605f8cf50c871c74182cccbcf8a9e9d0dcfcc7235d8b725bd5e51b25ce1b300a4f702fabc54af0394aa6e3080d40dfb771ea6e2d1ba8b74c71db1f80fd341006b279e90092e6f5a4f3b02648d368330d9ee5b25bfcdfd361b72fe37bc034c00306f2482a2044ebf492389cdaba7bb5c7b833963afc6cefd41f47b3ae24306005147d61b65726c58654bfbc6c7e80900a0b39b8f3ef771c6fe007bc2d55b430009e3f8d0124242e8e1d5490d5aceea448b965289380997806ff0130bd7f4d000927e53d0b3af3835cfbc21c4e78c6405644bcbd46ccc3e2e3047da23a7a35d0092f4a79cbf2eb76dce383c47a0552d613fa021275d3520831374ef65908ce600e339fcd2b677f8d0124bbebfcbc8b3eb8c5acc6e85f491136de8fde344efe700a0dbbfc7c079c8397b93ddd9d037615a1a123a9079aa1a9d2f8daaee04fdfe0044f126281ab1cc0267132c7906d2140ef83809fbe7557639be040d9caa20a8009cfe9a835301be0cce1fc682498102733cb1150f3a9820dc78bbb24c18eb0c00f8fcff4d8dbac23b89d2d9eb3a41f5ca54f3a037d2054da5b98ed51b6b5f4900d84b0375e124bccb862c381cd7ca3ce393c3fc00466b2e9968a86b5ebcccfd0033dea0899eddf8155927aff1a024821adb7ce934f889f355329bb699e37ae70004636fffd364012aacef513935bbf5c371b26f4834375f76748e85346a513800929fb1c9fba5d1fd3628136a2015834c885ec1f344ff80aec15069a75b9fb200b33a0c97a5b101282813013f8910051dfe0e36ef5d7141efd5e0ffae0df6280057f8023cb58240695451e76fe9b249f081bd6f8ef2fb68b43822bd9cfc101400a7e3400329590ea16c2fe2425910c11f13fe74b541d563e15d94884d6f491b00ae008c2fe4fc9ea1299f9b86d4ba1fd0a2c6ff8c412422949e13885db54e5000b1cff8358864667f79be5910fe9c04931790964ad49ea935912a60d04bb4b3004da55c8a4df3eea0a14b71ec59db18e805be304fdd29c5d016bc7ac1a6c76000cf7ac36cffc560ea687b7960e47541887a0bf48c90cf0f7e870b52e212f453001ff010b51226bee3101a9dac8a6a4879fa73d7ea2239d420fd0b64ae2c7e32008365837260e8cf73cf0c3981aa57f10887f32c07dfa40c1ca4da53fc85ebe80085fa162e0302e6306527576e4fcfeb2f35ef71e1ac032f9fb2556fa3d3ff5f0009e390cfdeef5ce0fe6779eabd27c0300da553d90a0b09f12fb9ef2c33e8b6005abb8fb07d1f13dbc3ccf6e5fd92755e9e156df0f869b75075edf4cd152963007efbffd3d030d7d16332af3af7d34061663b42054a3b7443be5e7212b3d3320005b7f004f90cb71aa488dd81721b196c97a47fa02e1fd75927bb6ab5647042006c8608cf97d08cc3a25978d4c0b2f76e90e193333bd57d87c1832241ea4fe00095adb02568ac513e0fa71be4049746d4e1cf52fd4ec1d4201119deaefd5144004d756d23bde158379e39b445784c92c497e30980d3809c0eefbdd6c5cd07b200f97eecff27ea0efef594041d8339a828434545d17b92982dcac6b6cd482526005b7f4eb8684387f802863a31e7a2b49ec7911fd362beee1021000c0010a21900fe22666a1111111044447bafbebfb8511111fe0c5087f84c1fcfd3f278e445001eb6d09fd4788870e5ada35fc54d42c50c12af56d6f8b7d37b49ebd4541c0e00471aff0adc6264ea40b6755177c9999748fc1cdf2cc95b1ff6c8c5c746a04800884194d7e52252c7adebfc0083b62ce00c6e282f9b79fd13fa08609a21e86e0046ff1fe8093a091884249eca4d3371b6c5217acbca3394e820f80adaded2b1001f0f0a060a0fa2323027e3ec5058d774b27325aa9c0ccebd3ffc1bd397fe000043099eb511a177aba1fdd394691532314665c446e99bf8029d621cadc2bc1d004ba95470633c2fd0159b4b17ae309af3cdaa5165f49033fc0087935b9629dc0092541a5fbc7c597a53e28c5740b69218f3f9c5657c109e9c9250695db11ff00005429e72057db1b2ef13f53a917abbe59bf6f172b0621eae0ce607acb7c8b000372220d8827bcb34a48a0df9b196940ef7f72f5cb4729cf6b5c25fc600dfff0002803d98433080720401fa24a8fc2e8444445112eefef444444eeb84443f8f0081dffd21278e54a0caca6fef9f651d9ea9640f4b58a58bdf34138da2a3710500d14e4b909acb83b3eced0eac22e7fdd820d05ece34ad1bc6bf37302fa36484009a4cf57bb6cc8b42a783c7b43bfc51a2932ebdfd59742f6ec0e55b528f282400e0673523434b3e66e5cd587f34d6107fc0093a61d38c5b25bb0e4846194a3200ccb7b5a79203998c8d5e5fce86d964166f5403f4e6c950f8471b3a51323bf10005b7d5b6381e716155b82571ca0451f70855905001de11af81b435edfc100100e836e2798ac0c31f28f79d8dd85a0079a9e18b3e767bf72b36a660e44948d200ded861550bf0de5fce7a88caf5489190807b4f842414183a20615ce81192d800fdd8be0b6196cc3dda9fd2845235ccdf8e40cff5611dd12d674114096c379e00b0432d73935804114c950a19d763eaaeea7f18037ffc0bf458710823090c53000447e88b9a104ebac4444ed2aafe070003f8f83bfff1f4b8fc7ff0f83bf800005f0c06ffa1ccd133a43b946fa8e29c83298edc0e1b14cb80ba11aff49cab19008d9d4ff90109be8e76ed694739fd2183e8a9a4c17f0180c4f9fc1c03135bec0050f56634896d42a28e4ba7f80934c0f937ba6f23f8980628b6dbdbb88b3b3000270d40f9369a572e4a71b2e83c002f8463cfd0e49ee277c4a79de7f155affe0002f423df0be34f94364e9e10ff150684065e8ac727407f840349180abf42d200777175b4a7bdb34bb9ea2bfd0055b668fea0b3d8f5d7ce082ff13021c503cc0003ce23a0153137760b59849e0209e75a313fa0cae36ff42127ea5a2aca5b1a00d4e8a5afff005d2ef46d1c758c28e52925d9a9d267fabcec38d18fbf42c594004834eca445b7a476dcff85c7b41d5649cd032b447dbd2c6fe91a04fba023840005d7cd9dfe030012ae0b5172539ea15d5e51360c60bacb3c7418f652578d1a00e707f49d942a7f098077fa8410ff4102153f430be5f62ca7a579643d895b8100a43d74382c30a30e49299c6b67ec1382e216735f490b6b6b49e6175ec6cf1400aa0dbf2d25155e3b962d0fe34d419d70001cfd2b20701fc260717effb54d8f00de92f164e288a0a262a2ce6ad0eee296726ea2ecae66968cc4f4f2889c6ca60062d0b4e882a48462e4849cc2c49aedfb16eb040520364c49e6846291437f260005a43051fbe153bdfbabff13e2c9156eba366518882e315575ac402e2c268f0086bc0e544bcfa85407b918e606385cfbcd1ef04833bf491d80e2cfe870afbf004d90711783dff3e0c6587a68d346ed8c7b553a48fe82102c61eac0db4473b30001514ccc42fbb8f28404c73c4ea537013774ad5eaba2b4a66ff8ac40bfe1300038bfbfc40bfde94a22e826aa6e28c688484da9acce06690cab4a6d2aeccb0a008a0aee6b26ee2908cb0da6c9084e4626cc668c870abfd14205d3c30465454c008cac18ea4de777e95c8a1d8f55ae6d2cc96de8094578d23db202bfb93ac0d50089367d51dc83b5dad567d024c77c8c8639cf1fdfe9e80bc04600eaff1246760005fa1c5e629c165bac19032530a6278fd5b61cedfee904973f5ec4a85c57e900038c18c209b7c2d875edd14434224465619e0be14bb470bb1231a1a16720ce00d131f721ee372ce3d2494d38678ffd016dc3725658cd8f09528c8f06feb7210047dd3de364e99fc472c2a102fe87098def36e65a851e6f81de9880cc959d81006bf74816e39fd2871abdfc2601e7f0f64c31bfabe222905a9a00fa12be2ecd0048ebbfe6d3fc0449b1e333da499b662d52685d76a26932cb047a3688b4909e00b152d1bf8af851542f8ead39efdef14eb00239fc02b681e18e710c989fe91a00d0c50bfd0e2dfde7a9205ecbebfacc0fc3d99532c9f069d83c71b87fa484e2003037f82c04875d994c66774f9dce98d022cecd810c0c6da1f12f0f145fd1c2006415f08c29fc1c0459a69edad283bcfa20cd2b8e92f418c407af32711fe9190042660408fd0b4653009001b28ef363f2cba1a949cb8f4d48773b801a79d41600d3dfd045ab9b30acfbb3cf679387f24ec03c3b67a8a700e0a21b301acae464005bccc5988bfe9614a1afe13038bfbfc74bfee81d2d99590dc98d3965858585002dd915c5e58595852d1135dccdc50d515121e54545e53969e8e5a5c92d04d10069dbf62d589c9faedcb008b8bc4e8f9d26ddc77d350b6ab76ad0772532c87200f3e1b2430668d11b8364c219703635d0dd308ca5c5a82be5685a75f2d5cd8100d1f8340bee5c1ca47e91ab1391afd2346d47fa428d1b7f41460ff7e8615e010078716ccc55168edc70f06bcca3f630eea717bffd0123523fa4eedb97f84c0300cfdff6f7bffb44b4e800d8bf42c5900049d40ca5cba682443185ac1a685ccc00ba7785ed8d6de946bff8b041180c93f4891a82d57ebf23505a0ff6f0871ff00098281fa3a4a310bbf8706d80646ecedff345c40ff8b047700193f4c987f8ff001c9c4bfe6072fafe32027593f8ec17f38c8a3ff1c0ab89c3ecac47e9fa3d3f00fd0b2ff4c025c992972546332ad5514cb2c2917cceea597be6915b5e129361007795e49be19df35cb3d470b55a6eb6ee64bdffa925cf351ff42cbdda81cc9b00ca5a9da21e16ea66b689dc8a4801108190cc6b4dd97f8ab63802aa1efb94ff00c21b1f7f20251fc1602501771a4a518de2af4f087f000bde6b4bd70e2c372600bdb8a42bcb59fa5c4f94b01c7473d95feaabe02cf6b34fe30c76ec73a4e17f005fc9f292002df862726d2576f545704c0cf7e7b56bc36d9cf3c25fd976168700ab88f723d2402c66a77f464c994ec9b013b13f82e1b4be4bfe0abceb8bc97900a5fe1a4da7f82039d6a48ff4385a63d9585f80de4d0697f352632d5feb86d7005642d5defed107e2372ff5f315b7f09822ffbfe5f0dbf430f90b02234f7d63009e4fd0fad9584bb9bfd2ecfaf04733e9b609a90e5b1cc3ab1f65b697df5f1000464070cdd64f9cd022bd946f934c965d8c32879ac1fcdb1a1ba6fe918f5f10002a829fe0b0f61b136531be9ae6021ba545ce6c2d594a794ec6fbff39bb3f45004cdd2fe830ab6dfd423374a0a77c3fa3c8e10d97f664cdd2fe9204bb8ffec700a68ff098485fe84d81f472afe0e341f27982060b8461f8ab8daad0d63d0e2000d06e52b3bf4944e9596ff07234c66efbce46436c71b574279d7befe02481470000a01fa48ab710bff838048edb5fe0119923d81ce6e48fc7e7a394736387cd0069ff4915706b017fe870aba3dcd3b6f989e74f6074e29325a674bbbd79445f0038fe2680a08ed3f3e54527baadb9caf058f4b638f5a0757657f80df7c30fd000e31bf0e01fbfcc99fc00389d6fbca165f2e8ac25498254f73bafe9b8ccad0a009f3ffd0469a21fa165f0fc0dacee51f9ebbbfc0512d4e1b99d367498c99b2f00a7e51acd7a45fa50c954ff84c03cfdff64aa7fac4c954d18c7f83831d2f11a00aeb49a040f7f4cf59aa28c21e509506cbbcfd2512b326bfc1c83796596468e00bd85e7f00204d8ca89c09102c3a27aee884dffc50837ff098079fdfe837ff500120de0a506dfc16b6558d74a4ff1c981e42be9c4a36ba522d1a020eaf5e0cf00337eb913a59fe00303974121988791e6ec65dfe9522de4788f4beca46b42ba0009e84cf666850270d4c628401e3daeadbf8012d3dd581498cc57d6fd2c4a8e001fc260717eff93a59fee87859694509b959e1991d9da984c991e9c188cd613004cd2db9390509a5d921b505d1490550cd4dc5c905695d30d91bf7309d2cb0b0021a18b31a30989c18989a31319a9b19b11bb29c1b9a98b09c1bb1199bb232b0029a1a9ab29b9bb2189b18b098331c189b1a331c3319981c1c9b9a9a9a191b30037ecea53506c2129712c86345a43818856e33a2993916f08e45e019182640500982b366e98a759d37a011cc18e496e258abcd794d88820d2d7d013a2c6553b002adcf63c62eceafd24171f873fa1c8e80061a9e07a2d4056997010f879220f00c85edd11c197f4b85c7e7f098085fbfe2b5cbf6910d409d7e870c1063c48ff00010b9701e3424e51dd37aba7dc9335cb725b4efe9421a81fe1300f3f7fd46b0017ed1bca013bfd0e32bddf4fcc71f8ff76145e429313ec4f3ac387e408d53f00a485aad4f3f838bd502cdaaf8c0282dd15bc02f7a7c1ef76f5bc52411fd24200c602827bfa1acb6582f5ac0e30bac698478bff801bfe88136afe005592602a00e689e7fdf5b2c6c6c6ca70ca6ec268c2c66466cc68666cc2646666c2606872006ac662666466cc6068c46872cc64686860646e6e62cac6c4726cc6686664c80062c2ca64c46ffa40ce9bd0194dce1918d84c18594d0d0dcc0d0c0d194e4dd800cdcc598c4d5858d8990d4cd90d195998cd4e4d4c594dce188e4c0cd8984e1800d8cc58d88d991998d84dcd8c0e3f80d81e43fe0c607b8e51b342ecaf778c93001c458a70cf7eac29c04bb80c6a53f44dbc44fea52461f43fe0e0846f1dcb76006b4c7f801725709dfd0132b20415f56830b26512c27fa48ef43527f438c9ed0022fa1632ada51f42543f0224675e5ca4725f1c3f7ea198f28012864fe0b1c700bf405df404a2491f23baa74c1c3d19568d94c75cd21a048ae46fe971ac58520046ba9ec74b85037048929c7e07db6c75a504b3fd7f358b0573b7548a254f5900586097baa2fe0b284ea418efbd9f184c4138804bc2a7fd2682a106bec8560c0086bceccb0fdcaf3aaa3c2fc5d4161bb450d6c5a0a59a2ad371bfc09220b3fe0087179392d3a20b9f5b4aced7fd46a85ca3596c7c4c8b261fe82be67405bc4d009adcc4d5bf1dbbf8afac51244687a3169c23f3a86f5778eee81b6657ff8aeb008dfe13038bfbfeb8dfde95a24ce6e8ce68d2cadcb2d0a4ceb2e296a88aecb400666ca2e268d668dab26ccee0e66ec8628ce872b28894f4edfb16997cf4ca21007ba1dc848ec55fd19c426651726e6ca5995ccf535a3bfca995787292cc11cf00e9c16b484c435b1dc54bd8b8c5ea3f801cc5f177a764b1e19cc699fb0c4965007647fe23679689cff4312911b2ca293604b2f090efa0adb9dc675cc1691bd8001248927faab947c037fafe77ed013fa2d9dfff301fea86c1b07effa5223fe000c1cc7f84823cff4267a5b0fe86986ec2b4b945ba65990cf61a963059af3d6f00193d967e9343be0fe26e4b5b61f8108a5dbc90a23eea4f6164c89e00467cd100f000be112067bf4346ef6befc2d166653863f7c49237f004d7842ecb84b913007a9f52916d46ae863615f7b1cdbb71e88e56acf961bf965100214e8348c4f0001fe08e3db8281d1fd0e6158a30928c6ddaa02ecba7f35aaf2b2e0e2e90966a0019fa36233fc17a623007dc9f865acb9ecfd2b76609e1f5e5bbf8fc1b78afcb0062ed6fb189393f89377b20fd0e2ec7d045f66d92645a5b6d48c350dea8da3600aa11171fb06b53f38f8b529e6632c4e8a3b473bf3d19d7fc05423bc2398772004f7a68b92cb2ad68aee5c9fc563f0ff0981c5fdff9b7ff74d84668c2eca4ea009cc2c4e4ee949adcd4cc726aee8ea8c268eab4e4a8a2deac8aa2946eae68c200b470aeb08a63fb166d0e8fd34cea4e29cf9149c23599ac9112f81bf8bcc7e700a3cc83838a2c34b0b1559e94f7984e22a31c62929ec3639cf426b157428ac7008ad79f2ad2c9a18bc9dea22386ff49548cffe861732836e2c983c1edfd012c00be3e28349220253643942858b9ffa4ad3b4cd7f82c049e78e94e4de2634f7d00f47e0288f5baf54c50339d4e9f807fe286ecff84c03cfeffb08ff68d7fe25100c0c1ff0504a00a07bb29f4076ae2262576f9a03c53a15f490f79e588b469fa00505a1ebf84c03cfe1f47965b6b977000c94b8d1eb1fac16db282dbde86455c00c6536c515c119c8e9f1a0bf87ff8927fd47699106c6662666c7068666ffa5c00287604dfacbc2b792f6be1b6fb47aeb42b4cabfe9b3c341428c0393993733100caaf03cb352efe8cd297987a5cebd67d2e0e5decdd055282357e15efadf9590032d509713f88f4fa0cfd0b48aca11f5293b5dab45a9687be5681714866e662007b8d4465099fa48915944ff4285ff9ee154a5e8dfb2d8a2ce8382b90dd1a0200a2b2e349b1ca1dfe8eb5d2b4080fd0b165643ded2937448e901a84754fcdda004dec72e7be09bd942ae7fa3c642a18853f4397d0998fbdf268a53ea6755ce70005529b8b7b5c14c38627effaa210fdff54421fa808301c7bf4345c9eed8bd100aeb60fb0bfdde28e88031703de9003ba85feae2fef6f904021efe060b890fc006535e84c395395a5275f449bb19b00e3727c50d048bfa0bf227fe6523da0b60067e8cad47bca2153b9af4eb4d918f2bcb21825b52a48a202f7b0fe2b4e53f8004c0e2fefffc8bfba3f2265747564574a4852756a485453465a37776e59314c00465643354c634369364b5a4d6944687979665a6f333735fe8a2ecba7e4d2900027a13c2f109be8f369a3d7e0a3089491ba833e8d7302e4b9a78fb858113f380049da441eb8e74c23b8439765ffb6ed8eae13adad5a5e1def395564598ff48500efc02310fe870bcffa5b06a5ae703426581ea5369cf791cfbc833219bfd24200af5c4bfa1ac073593a72df8622b008d6da1dbd18707d920b8bf1043f578247008d00d7e868b6fea59a25e451f70fadbf935d92f3471e100f6e88eafd276e1f00bfc2601dfea1afea21afd0e5fd457cc9f2bc90c887f0d40f2d17653dc0a2cc008d8be1fa72bfea2aff41052377e86246d7614e9400ee938750de7c56942dce00de0b357d689a776bd4fd7c615f307d83b164739448369dc3ebf5fc95c2fe7e004291c1f769f0d1f78c5135ff3eaf9fb7e591a2a0c5c0bc861769bcab17acb2001e721576cfe7f807a910567df278d6bbf8bb540a4920d252b59337afa6fba000f676633dd0875f253ed4fdfd915e52bb7a8e71e6847fd231b29b4037fc1a170058b916807b964f0582b21e3d688bfbb72466577a1ff1385d7fc2601dfea18b00a8d1cfe0d02896349749aad07b0e944608f5c2367f8020f5686e5ff8d3fe2700028bf84c03bfe52028a497b89400b83574d9f498f4ee5835d2f864c803ff8900c145fe1300eff90c4311dfe0e10c708bb19aefcfdddcc480b1f626a6f6c56200ce886bff8e4431adfd12179b37a2beb515d00a4eb8ef00a2b8f60fed0ae14500c97fc4e125ff098077fc8629bfe87b037738e43c049c5e3aebff01068fd5b30039463f3f2cca25b57f1c8a6f5dfc0631e907f0686a2dc3d12a2e695351dfc0001bd706ab3776fb51efe36c3c97ff1386a3fc2601dff200c7bf204044d080a500e1b43fc093c89cf13f3aad0db91ba213aa3a6f05455e46f3f8077f174f23fc00260217effadef4fe9f9e440be404844ff428595c04dd114a354a7367acd9cd0052604fe4f9733c0d59d650f57c7ecd95c9c55b2cdae3dfc17abd06a708af0f00e009bf4cc5e934bfc044fe794be153de298319c3906f1bafaff3e52d1b9b39001c79f51435ebb99632771cd3ca3505d83f10c8bb70a2504a3fa48a6c4057f4002d22a1f01eca4c58685c46beb0ab4207eaa006aee57f000f2161f7690ffa8e00a6c43f84c05bfe3f0490b4e006f2cc47a0949c76b62958b76ad62482b7e36100769266fbf405bd7950e95ff56e22f1fdee4fff0050758dc5cf87f7d8d51fb0008389fc0023599e7d7d54bb31d4bc198ac0c780b7f11276e8435fa1a5efa18d0025a27ea67032bf7cc4cc0598365d845ce1422651c41066d2a860c34a3c361d00ada77009336ae872561c0fea89489bf41c75930dfe858b547f11c945c6f4d000669137f4724c8ea085e8511997d31ba93fe28a87ff84c03cfeffa87ffa8aa100f6636fd0b179f467c5282fe55b31fa021748aaaaa1fd0763ff37acdf613f2000d43f45972febe26456c297e94404293efe0b0f5e25fa503c2f4176cc5cb4ce00657b070a3c333db35956484ff88ea884542fe0a0bf3842652439b93477e2760069a2289aa0c13b70a9982cba71bf4854e9dfc1cfe828b3ec825ba494125c5e00c1d3b4ee9b839b42131d74da48af0fcc8afd1a15fe31bfa14c05e173f4398000bc7706b9f19e425420fdf08e7f001873122d1358a9d1be53fa6836599a10e200e77f5098039ee35b506e375377c0666139f18ef94bbd1d8249dd02759c20030073cda061073d80fc72b8df8e64b0f6c9794daddfd5b47261c3d497e35e05450074556113605d8c37e91300734670fd0e161f99684d38e2ad9383147d9106a700890001ef3da26b3fc49630c187c1107e8240b0dff0647f9b1387f8a0d1e25200ff40a0bc0d69fb44888ae1f6f68ccc7adc2f96c61c4a8ff405befc1d4b507e0082300c139fd0a816a604a96bfa2b02d4ff4718060bf30c20906e605c280f770020e05c151e44a00b6c99e7c921a7951527b574b9d6f60aa5696b4ca67cbd6f005d6b4b3c0f35ba9405d0882050d10613d405c20ff85abac9bffc315d7ee8e400c2dce6cccae5fe12aed0414c4c59ff0857701919187f83b073d18dff42d1d7003587e80b6c6438b0bfec0f34eb3b6151fe01ad747c82ff206715b2fbf8843200ef9025c1e8407270e008309fa6b94f0788c69d4ee2508c5011a74fe002b87e00f47b943f2d2c7fbfd90ffeff643ff4f89fbf8a42038c241d4182c5bbca0ad800b134a982cfdb75f3389008fc3995505b63807ea040eb9fd041b89ffa122c59002da9e53616c5de17a737cb5c4decd0c90d4a9ae010b9da7f57cb4a1087e86a00f61a23e66e9326c23f3daf37390b132ea040e0ce5d9afd6045e5429fa1c2ba0044848414b5d02f39dfaa9b3f53193a99a976c1c953fbfdcdcfeff7373f90760033fd0f60eecd732aa0ad8a1f061917d072153a438563967590bfa52a26eff8004803cfeff8ef7f68d92c47e8823396053609d883f4eb3db205d9f61a6e98a900895bda00feff8523fbfe148fd3e7d7a7fa090094940bbabf8120c58a84b205007941a0eb9b8482c5ab667eae9f900185fe828316b6258d228c43adc2651ef200dddd023ba86432ebe0e6ddfb00eeb04f12a1b3d08bf8af45afe13038bfbff4005afee8d1699115d1c969d949454db5ddb8c545c5bdc1c58db5c9cd654591910039e95cc5355d68e5d0cddda95d29b93913f62c2ff45c1d46e4092c34dd9b4c004c33cb344a023bb541c4deba14c3d9bfa850a220c96ebf0d2fe7ff00325273008745078eb26f4e3ff1583744c4a52c58bcaef954725f209830fffa44fab73f00820404e5944572f92b418d1358a1c80e4dcab009e01c2c5fb2fe8293281ba30040909f8ba2a05b648de4d5363289b986dc89c8d409e7c619d35ecb26f89ff800af85ffe13038bfbff85ffee9101129cd61bdc5cdd50510d1e90d21a5cd90cd0065dd8931b95535210d558549b9e9dd1939e1a94d11d8c9bd45e7f62d5a82f40030ff80b1b990b3803c88ccf709db9c494d06c737754b852a38bc7be679b51900f110ba62f57715145809ac3d2ad08781f5fc25d70516ecf6a7419ea16bcf500097f6ff486032bc289fe868ba60383f96a8ad6d8d54a19264eeb982f98f352b00db09fd634deb68c37fa145e298081a7652116293929db38ac70b17b2ebb9e30035fff801e15fa59c9fd24081c44249fc1602499dcca649b63821a723461d2c009849c6aa6fae904c92dfe9d9204cb408bd30fe018a6594296a920537710f5c0092267c87f3f3ef1bf8018708b16e2f24b0188a8e0ff3f2d36727ada9324e250089883ce52667e4ea8e95d61bfd96afe0b489b36f2e0859bcee014e19a5be470079a327db293b0f323d456254453332778b90c3e076a1d8d947a7e90886d4f8007b18840629b3e483056ac5fd156017bfa36e839c0252fde819d70f10cdbe9800e5dbf40523d38b2412bfe7635859a4a5d38b253962ccfe910a7ce0ffd0e5ff00de948981b56aec28f0285d39bced9044e98f07edfe02617afd42842edfa1e800decff45203747eaea383681fd0c601b7c6dd29059b530573ec5e1b0e8000b800ba4669fe027484b571fafe1be1af2b52afe99d50e8fcec30ad71a5947b48b60088fcfe73d0e78c1d22f5bbf0a33d77f499fdae7e84c00af252e942410b891500843adf72a77ced60daeb0a2f8ef577dfe1be3bc363f2279b65ce3f34a3529e0058737d1cf1723d8ecd003878c7b92a9b18d35c883f48cfd7b91ff0583e693900b289958244ab18bae71b22e7359c9d12ea9f4fddc29fb86f529ff4111cd29b00feaca39a5ff4063af2faa3292f6b75667ff0046ca6a526c65aa48e75d8c0d600d75e224716da3f4300056e31bfc3e00fffb231f7c1ac3d3ff89908e9bfc014007035fdb8f1a36b7f8c80f380e33cbc7f802905ff1c4d78037e11d67f2d9c5500096d4b8801fe3ec2adff5f64f9a4301f470aba1de5a1f8e856869369def4dc00717e8fab0bcfd1a438f1fc061d09c7f4d0742882f6cb09dad5e7c9f5925bd3000231cd81a898e59e1e70277d48bc3d72ba30535fc3e00fff330743ebfdfe1d000ff7f8743fc161d0af8fcdd9c5a564e94c0e7a7512ea187769fc0f94ff1e87004273fd341d0fda82e26375e194d4daf9c9be0d19a3cd232231e1fbfa8b253f00d5bf29f30c5367f0f803ffccc3a1fb7f7f8e87fdfe3a1ff058e87a1e02ccb8007f3dd8ea1ce55c59adb019c7d1408b1fc7a3a19d7f4d0e8773dff7c8b8e62500a995fc0041387f2214eb996ce3399e791e884c4a1fdfe80a3fce8ae78624fe001f007ff998ae5f7feff2b97fbfcae5fd0c40331c5f600419e73eb0a37663450043a16beaf1972c3fc7a5729dff4d15ca4b57ebc5430da954bcf7928337cc0400857768a16a6974029a2ae05c87bcac1007fc3e00fff331d0ff1fdfe1d0ff7f008743fc161d0d01d24f8dd4719d5e435aae5052ff07d2262bbf1ff9c8482d80009bf4198762cdabd7fe822654df6a76acd9c69f59b12a97a6064232f1bd6aa300c91fd263b863fc2601d7f01ce7855fc12031415b274a3c9b47ab406101d177001788b3d8489a61e25a2afe7eaf2537e40118406081590fe0300125ff414f5300f0710b34131d76a04b4ff005f47cd6a1664da44a68a6bfa3a1127d7ff42a08000ec136a3ca47cd9a75164078827bb0e5ac759a2ae96ce86250fe9a8e1d2224009ad80e5fd044d86889fa148fb780d077e50ee5a49f9e05955cad53a6cb5dfe00097ba1303f1e3f609361a7a68e17f0021f3b40ce9ed46840db672566de234300c619f49f852b55df630dfbbc4f469fc56e887f0981c5fbfe6a353f720d46a30021ca6a71c38ba36b9bb3520a3b32ba8b4bb36a89aa3ab1b2131b59a3c2ca4200b2c343298ba313ab29caab87ec59030c1ab72e7177c0e7bc0c2e441089f3300056e3582751a237d71448c5745bc84d9af31f09b0503ef9a53e7a189f897cc500dcf7b38125ed83a55a92399ca22800fa57fd21092f1f203c417fa0c3394831001650bce8db65337b50071791beb5efa7867fc050552bf6f8f09f81e64c7f0b00d6da06925ff1ca3bbab9dffc3dbb317feaf9e13f40f88f28d7ac7a14f3d9a6000bda22f0cc7e7e7f9d0f0418adcdb6b34deebaf5777c17212c44032a0dd3d0003089d70bc721ee4e145d134d4a02b77b1091f519c672fd2181366b82ffa126004be9b64238e5eff4050897a8405f13513eb5cbc1b8cd37cf7ffe24dabf84c10010ff4b4a3dbd29973a87a20cc245295c7f008d58bd3cd587df787a5abe2cb20042623355d613a5bbfebe63d6152035f7b2c46e42c1baa80dfbc25aecc741f40066b1f8cf4c4e22d3238df388282cdfcde17556f2513f01f1b50551e6690ebb00adf3e646a4a8a4391c6f538e53aafd204ef988091fa1264a61199e76d6ecd200d4b09df4f7f803873503157255ecc981ffd2232531fa02fb72e5bf818043eb0038940ebdb02abe96a8df3a0d24dc8bcaec03a70ec533fe28b7a3f84c03cfef00fb7a3f681fcd57c500f42030265467f0180093505a8b9284af35ef2d51704f00483b4f7086952912a7c64a761fa4e1122bf84c03bfd430891455fc1a05113200106efb5472de86a1730c80b744b053bae6f1f7e943b917fe1200eff90c0a2100dfd0d6206944c1df123ac4afab1d7f0d157c7ab53664e49dc5fc4e0a2ff09800077fc8405140227f050145d9c529bc7e186b49ca53ee6206219bbf38e312cb0061d15ffc4f1427e89c1a6eff221ef101b424fe87310b7b93ffd0115a8cd20500afc6ecb0a70b1d8dee8c2c0fd8a1fb9c2ebcff84c0e2fdff2dc33fbfe5b86700f58df15ab4c0c67f0706d8304deeca93431fafd392c44351e850f9e970da3f00fb9cf8adbf84c0e2fdff7c56dfbfef8adbf59118ac95fe85183aa02e03d9440016e75e97216401ee96f931a79f50a25eacdcd3ffd475c383fc2602dff0f1e9003fe3ed67741c495e45a4769c599507a3e6f70a917f749cb414a97042c2acb50010c032d8e895a2050994e124d3ac0e3323e4be3139c82eb36119f9f93058500046ff09ca60775c3ff224ac3f3997f050246067d4d28eb03bdf69d97bc120da00f3f5957241f2e9f5d92bffd854bd7c1d04fe82984d202bf209458755e50163008e04a4255aff4d2c742f7898c1cfd1b30cf5fa08bf437f41cc2c88de426946007cbccfccee3d125bdb51a6f64e30e6a7e90985913912fd0847519b2375752d00095f3647d221f476d4c91b596975f79fa343f0bbe40970a7f4246adffe8a2f005e3fefff96bfbffe5afe3d39ad80abf81029afe060b84ad2e505b979576dc5003bd668b7f44cc2782d868cad18f3bf899a684e2ecad9aab120c7ecf7af6ea90075165d1b1827e3c0fd044971dfa0e62046d591eb6588d7abb909c99a359c68001e5358407ca7f504c408fc331a7f040bd5bf060741b929cbb266dc0c23ca77001c46dd1e1002fcf01c9c546bfc8781ae0a87f05025a0f4241296b264cf111100401d82f0483ac6e59a2309b63c4b9fa2ad286ee213f9085293bfd096d8b6d2005cc4d2e8c2ecc2e8c2e5fc062993b1897ff0280185e6c6c607066c4706460c002c462cc64cc6c68c668c4c4c2c265fa0e374d063f4246c64043b3b36c6fda500e81bf4dfd84741acdc127215107e8d34841fd050b9c3fa0a605c992532a2760081fddda09200e71f750592af72c7ba62413f9cb816db7515722b3342ea85820079536ace6bc63bfa54a2d4f408b234d78a25aa09d6f412a6fb566fd34ca73600f17fdb0706587efe2b6c17f84c0e2fefff06ff7a21179a92a9b3c20a69b25b00babba34b7bc251a3819a734b2a821bb18a61aa321383abaa0b5bbabad29b09009b32535387f45364adc228e3cb588cc91a224d8f157e97fa6c80fa939911500020ca2b7350d134cbeecb694c2ed0cf3a5026046975b2282e1fc01b56fd56ea00c28fb08c8f570f7e809b73c7c3f353afd22852ec4bfc0c220d719ca4fbdc45009f53503e4daf5a80422f0143d0dea3ea57f8b028940413f604d2567fa20308003f83270cfe130403f47424cc9dfe8498919789a31225fc0ce6c7872c498f4200f0efe00e0e725d1dbf5047962fc83d17e830dab1033be294abc3ae4e233a250019abbf229807d14671eca839fd1d7e62ffa1432d5018dc6d9820e897c306ff0074527b04b5f002babd65c2cb49b3871063f81c056662fc760fe1349b7f82c0006efe1346345634ea23f212a70c44228e12b7a8f88b501f32985d720be1c8b20004a51ca27771281d5cd480ce0b9d48cf83ab7bf404ea185830b7646aba59f100c4b8940a8f9b2a21c1fe9fab5b0fe0b171b3fe7b7ca44c8a8bf0914c1178000012e5190a80d43f424bd357e99a27c8035bfe1e007f4ff87803f5afe1e007d6007f87801f52fe1e007f47f87803fcefe1e017f3ff87407f02c5fe1e007ec3f8007801f2ffe1e007d1ff87803f55fe1e017e9ff87807f54fe1e027e7ff8780bf004ffe1e037ea7f8780ff27fe1e007d07f87803fbffe1e017e8bf87807f38fe100e027d23f8780bf2cfe1e037ee3f8780ffb2fe1e047d13f87813f3ffe1e057f00f87831f02c2fe1e067ebbf8781bfbcfe1e077eb3f8781ff35fe1e087cc3f8700823fa3fe1e097cdff87827fabfe1e0a7ca3f8782bfa5fe1e0b7cb7f8782ff200efe1e0c7e9bf87833fa0fe1e147c07f87837ffcfe1e0e7e0bf8783bf4bfe1e000f7c980be4098997f43070fcf54a515d63119749712a7834fcf60eda2595c4005f9f62fefe9387e38303736666636fdf54169ffc7a07e7e8428535fe0f0997008103e9d81065b30634a5dca442dfa57cd5228e6bf7f4722f9a331b9b181a9c007f3b04ca05fcfa132ff1e81f9fc0ec2334fe8725030a74e6973107928595b000c9366161be0414bc53a51fdc482cd3fc032cd48fe84998d6256de536c0bdef00d5c7988ad2c55c351988933ee7fe28966bf84c03cfeff966bf680cc6b3e40c00a7e830e74a115d94351d5e6a0ef13fe13b8c99e5e295f573e08ef80b9443b6006c8a6f5d337b3890f46908e7f6dfdb5e65fafd471df947d03a5fa7ac34481000207610179aeaabf80c004b6fd0416baac2c91eeadd9634c7cda7f96e91a030009e26402b6ffb050e2e373beac6ba16fa7372c12c883bd9577b8c5b00b448960022553818eb445574b3ed3f8af0cafe13038bfbfd5c4fde88155ccae0a48cc200d686f2b4a68ce8ea986ea6ea7270b0c8b0ece48270dca6d0dceaa4daa4de9c00a4969c8490e6a08dfd158755ebc06d1bfda041c3b9154cbc828a28479806110056e95c50fe8c6db305f47d179863d5895d7fb0b990890959722a99780032a900a8d37c30191158885866c5241528dfe933bf61e66399fe0300129e0c04b05e005231603e8cc907a142c5f47d8ca30c48de4e4312b252d8b1052afe0f0041f600e13e37872218c7016a35eff52ce5078cfe8530dc60493e094582548f94372c00a54894012e41f34972370368b84fd4833b93fc2602e7e8f227abcafdc744f500671fa6c89eaf491c1e058bb31d2e19a156a4dee0f16b50824ab747b688a09c006fe44dbe72936c1404a6884ff405540e30e1fc8d812a7432b16ad78acd5fd00057e3f5f445d946c4341d7e921f7232efd0b7d2c25bfe02617afae7d7194a83001663ecf1090094260da3912dedf4fda2246fb0dfac088643f848117ff6a793006137fcf98e584fa39783f0c6072f8c5644977d7b33ef505c74d884aeda789b00e3871e82a87b3dd72278a70cd614eebc748573782b280d088639830b70a0ab00dd742e186d34031bf48cc57e17fe8725567dc980d7e20ca648fe36ac56bc0100691e965d4115ffd272817bfc2601dfe8f3c1a1fd1f272d637737b95f3bc827007c3e738fecf50222055276dda62fb5f41fa031157fb436b8c895a0196090b500da1cf2b86aa5964f79dbbbd07eda5eb340ff8d0d4cde5a910cefc1da0b000b00e204dff439f97819a7f01cd960392013d61e2af2ec6a58229a90f37e8e306b00ee5565a6f7669b06e1dd7a8ad6d631db7750771d4a87b454033c26e0b8487f00d252973c81fc1430d0abaeaca4ef945347a8f9d27675da1293ea9587b0f9ab00aeaff7ea63ec666ca666268cbfbea52e7bf8f40fcfd0877d3485fa16c591fc0047252a7e328c9d8d60043b8f1fd53fc057f8641236416d83dfa50ad03bf84c0003cfdff64ddffb4718e3bf43df8f0cc292a5686cd2cac5caaf63f26ae8d9b500972b3167e920a7ee53fd0e18f69e9f87b31e861c8c445190d7792527347c0b001c1fa4e49c0b9579996163e1a8842aa11c46ba946d214d101ef3f415ab88fe0086b1895301e8c0e9d911a2f028368ea0a8a6d58a1ee38fd445fd968c3ffa1a0032075bcab3cb2fe76c4f80bba9c95dedc6a9f68244737fc541a101571b5c3d00d41fa12c5e3c77f434bb4bcecb57a18f8b9f36b537f97ddfb64859a39d4020007eafac82ea248fd0c606e00d283e5cbdebd45e3075fe02fff56767dbe4a59b00ee22a773fd283e2e3fc2601e7f0fd395b86a195396f2c469bc4ed5d375f6c1005bc889db0da89161f387f7dee49822a6cffe7cf2b8fd2473292606a66666a600a6c6e6e6a6a646c69fa5ad403b3dc29a88285311172ff0049dd447903feaa8006607cc4d63bb8644a791ee4f05f5b9f9940ae2f9b2068fcb5f1208e466194100e329bd4fdba127067240f23f573507f48e0ca0d100fe8539b75fe03b3c0a2a00b2334f46e25d7b323119831656b22e6136bf804c1cff7b3b6619319b9ab2b200b218b218189a1a1c991b9c32199819981b31991c9c9b1cb11a983dda24343d00b549583aed131eac9872a831115a3daeada543c2fbd45d4d90b9fbffa5b89700bf84c11cff9f3bf424050caf69d20ca34ccb580954554bf402693d0c76241100360a72628d88ada92b8ae9ecb595f0246134ae7193aec65a9982a3de2f258a004cc44c30044a95ff000c95cea1fa7e9f7a007cac94ec667a645c7b64a85831005a1ed71b1f66bd3f404ee4be1ece86d9f98fbc1233c1a271de0e0675725baf00f000d6f858cd4c63a7399dc52c094e6d122a66f7a3e6c5c9bfa7ed3ccbf8f40021ffd844f3c3fa208f1a2e6637c30e5f287788932e2f5a2b2f86e4ca9ba13f004e579dea0ff02242c15fa1c8e70ad2f1967189f465d1b6b767f312f7b93e9100fa434bf5218928ff0980b9fa3cc4946bff71d892899ff1b242cd9c36c8538100c32a8e92e5db99c6e90e72c25bb61167afdd4adbc3604414c0d846c527f3b4006d2064e9ec6b7ae657439212ffc008d96845cbe9b7fe25c4d550839d9c4a7f00919da5fa7f82c20503c45d9421def699eaa744a05e9724edad5bba7594fabc00eeff163d4f8636aaa17f0014f55bfe84391f020669a9fd1e5da10c9ff30398006fe06041bfdac6eb9fe6430a2ff8c7a98ff991fdabf8b19adfe32017ff9b01001fff1f18c17f098707fa86b168c082bf4391062d93d87b05e17170a37d83b500d8deec8fb217353967f143ebbfc2601e7f7fbebbfb46f95cff82c204024e9100943fa7205314e0b286b3626987dbbf8541a14467d3fd1f3f76bfa185edba92001a53dfb1fc890a061753cf47c9af43f3810e4a75adb3f4e9fd6c50feaf967800c19e2c6e43d75ef34b2613e3bd91c10a8a75c3cd155c45f7064179e20aa7c2008f11cf9147c8d48e41d5a32960b49723357689aed0c0baf59d93e1645aa4d400a3890ff232d76138a7e8624519a894a32babdccf43c9945f1b236e16d145c5003bd0a3f8fd1548a33fc0b46a7e9124519009003fe2b1363f84c081fd1e62070066ffac491467f435212419f14a4338a2f690c4b47acad724ff80a0844add1e008c3bbc0eff50cbf57b30f7e8717cbb6d18e91f27b1e82efc80ab59bcedcf1400e5b50fe8fd4447a9041fa1c2b0c6779cebc2eeff9ea94cea04f8550b9f5ea500be2853f4946666107e870a88a114830cc7328581e4f27a9fd013f8b794cdb5001ac3a76bfd0512770405795d6a5d1db497bb0dc2d53d40861f2deb9f0d35d20022e33541c9851ef10ff15c49dfc260717f7fc49dfbd29435cd1099cd904d1a004d539c9a5d585c5a591a8dde9550cc53129994d954ddce4ccd1c1b55135ad0009a5d52153f62d873f323cce2794be80edab6e887a039571772909858825a040069f5a54867be00ce2b3a0731528a5a5756c8c148d423ff41d0aa10be891a50003d0cad8240f8faa04b37e91baffe6623fe0e14986aac554860b4a16bf2ec78009423109991bb15cc07f514a1d57e8797a4ed5473ed362ac0b7858022bdc72f00f015a61c0049cb60ffeff977a1fd046d40ffc2408bfeff8c586fe0b502ec7d00cbf8defc7c7f80021ec5d0502e17b140465764ca707e0b91e7dc5a7edcc6bb00c18f1fd0f8f61ae62e7fb30a3e874708fa4fda4da9348c8d6306917619f1e5004f04cefe24259c93f439274082a285bd44637137149cb8ad1c986310590b4700477f0a92ce640b5eece1fa4893a07cd3bf8ace40fe130207f8789671ffe6120059fe4049c9ff82cbfb6104944ba0a8fd0192571fc00b68e91d5af0ed43d37b00f9eee31cff002dbd79fc7e54944aeff960449ff848081fe1e04a867f98812a000208fe0c04a8d2be52af9101b5ce5921107df3c9add0eaa49a97f8004f3913001fd2f5a99ffc240217eff967c0fda22cf808453fa1a2b3dd36a7746edecc1000eda31287cce62febb74edbb283fc555e0068ad5a15a9fe0c93530229fe0e4500f30da80d889d3b6944225c2e915709015da0715ff4a5d1faff098079fdfe8b00e7ed1b0e1a2afd0e61c35bd72061463c30b9b858a7176ff88a85107e29879f00abcbfb6ff834083fa6a9413976936850d6e20767d68786fbae10eb8c6a6edf00d142de5b01708827af3bfc28d5ebc20263ab7b234b1b5989b9c7f12592855f00c1ca4524e03715182cf5d8106650fe809cd230776261ae836fd2915655fc260001e7f7fa915fd44a457095fe871700a7d5e369ffd0182d120da1539feb925800eea5072da6d233fc4f4f3ff098077fc3d4f3fe8fbc8fc1cc2a9b363bdc4fe0000337258d0f157f40544a99d04a109396a8bfbd1b2c495a0c84fcc7f0019e6e000b42a903230e23a41032bc85f34e807036d482f5f6b04406c0384fadc687d10001e97fc088e016ff072380031b44d8323668b95f011d4159a2c26ef7e2dc7700fb06cdbc70cbcda5a12048524967c08f694e0e4365a20b16ddadb098821ae400274abe74bf8ad1c0fe13038bfbff40ffde992bece8eaa8a0ac98f06a6e948400a6cef48470eca4cea088f286d0e8e2a06a6cc4649a8c98e0ccee68d4ca66a700fb16fd6f474df28c1d236a1954064744615f5f58a2e84397cfde42b8e86ad300cf60df6436dc3f40534bb8fc30871f4b144d7b9cec133867234fe80bc1b57600a5c2b6b6d69f8c5dd0fccbfe236048a3f430689e30694a2368d20bb9a2329700a33271c6f0e745e8d5d22c474a514c54b6ba7a13e1906e1ae126b33116423000947043811064c71c7f019d57b2ea903ffab65da1d982127f4e85a005af310700a7f96ab41fb8759a906615c99c8aaa2f3e3540a1ac6fdb12e7f80c61b31fd000e615ea163719bc07702ebed465771dd08afc09f4902371fc4e30dff098077f00c3c081ff0fa57437b71d89129f23fc015bd26eef353ea412069390c164b8d600db6c00017da9111164a2eb70e23d1729dae9390f3335ba231967d37c357297005142bd9372c1de20e3fa4507360017c50fe86183589b9594153db59e43070f00a07ae4cc17ea440058762c2301942f6f07cdcf3588944bf4c42ac74ff24bf5006e759080b864c4de93a5ff386459fe8907152fe1301eff80c7a335fe0e061d002a88d05b6ec646e7b1b78e9cc0cebef35635e27bf89c187fe1300eff87828b00ff1f03200dab16bf008d5168e04a1761b82c4dad649a9ea2c2d668e180e8b800c2f685aed10f3558869d59d306af2d7f002947525ae09686ae68a0c51e62ee00df96a74e0158620efd33fc07fadfe860cf65dc1394b7262e5d1e12686c29be0036b6eab0150baf0be094fd7862c94cca4a666f2a8f2c6f2b4b4a88acef0de8006ece66ceae8626eb46af270666ae0a6868c66889c96aac46694949dfa423a9006cf3f438c9f349327ab3a7862c0703af934d3f96423114a7ee167ea3b3b73f00e13016ff4fc2cd8cde7e7a264531f4dd45118bd8fc2c2702ea8c3ee39f2794003cbd2976d972f64511862071e6460630fce0d83dd530b08f3dbe3ef73751f600415b65c1884716f3c8a0dfe9898546af94365b867b617784f1aaea0b3a2a3a00f27c2f5fda06fe2e47eff84c042feff47effa891fbe144fd0e79cd2a14a4bc00f330392af84f2b239627a41950cdf2733fc4e3437f098077fc3c3c57e8fa9100201b14776aeb53431dd5060fee0bad8b11dbb6cdbfc65d63b182e46459812a00da63d4277882bfba590a0071339f8bf159eab6cf162e813a2733b14478fd010082a0457fe02b44502fe03a9b52bf438c2727e8a0649efe25c547e52ce63d7500a84e0ea64f71d4eccdf8d4679ddc2bf410cde5aa7e8719bcbfae1f3018283f004e7db29159535b3bc2ba201fa93ff1524d700e35fa931ffa327f1c2b33f7fc00cde5db46cdd9d8b52b12d502224db0b7f1ea058fbe4e635f1147d9ae2b615900b56a74240aee00749702b62f0fa0fe80c1e4df79753127f2071a156eccfd9600a45816437130b1cfd5633796a4c2aa72889a72c866e09ad0e0a2e672a488a200b46e66a486c2b2dea86890968670eab462a4689aeae2de8ffa76158282999400dc9b524e5b10de557f764cde5f17e85a52a701826b94d7d71ed4880feffe0000c2e86da3251cfb62770fa76e8d2a528c3051aa05a4c7d84d37619dae77a39d00d25a553602e40691d49e2d73f4ed6321810d777e8f8eacba0acff016f29b6600d8861f271d6b2bfa7772d3bbf68b58d742f35151534595bd527d604ff9f1d7005c0ff8fa10dfd3f8a8bc82cffa02196bc0658c9f318241c3dd0519c2e4c792003314c0bd00daf0ea7db75b7e3c86c155ecb942790ef0c93a0c4ae9c209bc4c000c1c1d842ba7f31f5d2834b7497d5bff48d36462d7f0760463b992907cd3910073352afc787df043bf6f6a74e33fc6f8118316767f021d5ffa1693d541c54a00a5368e76b2dd271aa4dabe72ca9ef6052fef239493bfc55b1c04e52175da4c00d0ffe4823d6ff0c5ddb7f0980c5fc71804938a388a43ff0d57b64dc4d6ca2300fe409af014fe1f024ff80f8336cfd0e312a6eca39712ebb4fb63543d2f0b53002052b753c8fbe3fa84c43a7e307f42cc4a9012d414a366c43db19a7ccdfb76009c96724d1657824bc308cfe8a27c2080b8840d94b4fe0c0eed975869e2449500da2be631005e8f01e7b7d4e16bfc301cabfc2602dfe9c8cfc0d7d6a072c91c00fe039b54260637f839515cd68f5035ec08e245476cb78d5b348fe00eb4a0b0005099ffa09515af6988d6b97816acc1e96907e7d68563b0b3f909a359222852004468482bd69afd2c903bdfc260717f7fcdadfdd336b36a0a3a5bba5a52c21100b1a1929a2329c2aa120aca42236b5b4a6281cb131232536b928a1a2ab3a33b00922fec5b4c07fd01577a41739dd7b80c37463f8d352ff9092bd3b7fc7bb11000fb2d6c1155e36d78020db8d957de6af2a902c5e3e3b162e61c4addbec971d200285c07272ba389a8b80b1fe46647623818efe0b3201cde651a26a986ff80390067caf6e1bd37d21ef83e8688c954d92b94f9326b9aa3c9beef6557a508cffe0000fbcb9466adbfd58202e40791f85767bbf8af62afe130173fd6c884dfa2a500f1f3f836af03736353631313939353939373138313630fe2ee5ce286471df4002e7f4055b6c470f2e36c279baa0d48ca6916821640489b28ae9cbdb74821170015144880dfa6664b0bf0ffa43298b31b4ff001345a8de5f605b5661b350968006ad61fa7ee2498a2e309e5675dce53e0f8aed79284e057b48fa7b93fb111a400e99ebd0b70ba86d9c630d3e75e42fbfc0585ca6b8569a8bd8f6467a732b931002e3c7aad4721f64a70cfe5fa4812d328ff82cea6335794d2da8ea85c5b32ed00fd015d1abf5fa0256e454b4475de0e3e3e521d5085ac9edee6e369d10b16d400e1fb553cdc6923f529a22d81c0ed7f063d71512908d7945de3f2404368125c0039a198b8015c56a4affa5319823f84803cfeffcd0ff68c64f1a2410080fe87001975e552ee94df92fb77d2ffd0121fff3ea279072dd1465eb3fa5122f7bf8400c03cfe1ed029f3f57cc3924e602e62763850ec4602f7a1eb5f3c98f6c1150e00b4a059c9b2c9c5ed43fd138e9074682e297bfe80c4af435fe00fc46ecd063e0044509e42d2498b24a472ff38de5b2ff6bb497f88c5fa24820107fe0c17ee5600524c2a1365bae64cc93634339f2343f8021f591d825e474fe4817eff84c05c00fe5e17ee1bf8985fb383134363839323636ff2e653320e7fafde2842a8a71c00ca068621ac38d43b416831324d4a61c7c3dc0ff80877b9e175386a0de74b2e00f1048b3b164010df6a6ac75360f41a8026ce732b34457bf40547628f8aff1f00ffde75c52be0a23ecb662a3494b5bb3cbe8f38ed40840af978ffeba384a5cf004ee6b4d166a8913713617f7cd829a20ca3287ab7bab676eff83b861b12758900f263563dfa486cb4806f7f83b3b9aff561524fcb2a976aa060594b6c3f0f9200d800e5fd4228906803b080b6c85a7060a18ad288f6110b193537b7d04231d600951b104844b923483fa44aa7691c8bf438c64b99b50397da5c98ed4233dc830057e5fe8126574b38e26fd246662e055453fa16f4995430651d41b3c8c971ba0003543774cdbefd0cca5d6a711dbf853d9d8801ade0dbe1d280fd4351c1231a008937bfc3decf317f4bfb3dfc0e0837f25ddd1fd7febf7f098489fe84d81f46002dfd0e1a68f82799db3955c0dec4da5901a8787f0173c320923fa4838db8eb00f838048788a45c0c7345b0724344411f65ec1cc0742a68afe24012137f43920035cc7775fe397b86a4f8cbc304f168ae720c30cd002fe92a46b90ffd0b62b2007fa0529526b6cf9bbb15225f6fd55326ea90ffaca77c496b6ff538db2fff090080c5fbc6b69b06bf428c8a1b50f4a1ccc1ddc559d20a59b9be8bf6f266e9da00975bc447eafb63a9fd0a4914f05963929db027ac577d167841eda9a2105c37006a6d3c3f13dfabb2e557e2007ff828105caf594fcd0abe62639d36392342ba00cd95cb7c54e9cf58ffe5f02088bf8341055fa0c140e2bf5e3c09876ee9a484008b975828d38afd5f098a65207080af62603fc06002064183a972ca668ff51700176dd074ee71dda0991b8fb8fd8ac3387e8aa963503d28d82dba3ff0132b4700f9888f5bf84c063fe3795440f46925579ea03eff46445176099abcd95ff8fb00f9e45003c51d35a61bf0b369d85245e7a31288a912798bf441e928af8724410031594a7c73772a9f6c814a1e9fc5405ea919f549a5ad54fe8a3d2514780fe0005f5eff4318baa11f625f45cc9372f8fba0781004c03127bd6bffbfea236781001bfd0d7a0dd37f658d2d3164fe20598c3859f95154c6f09d015fabc2442e000077f42d8bebfe8b2220efd267c11dfa6e89b33f4312351127a4a4009e48c6f600ce4a8aecff2ca9a842da23e2f6dfc7f133ed7fc2601d607c820112fe848d3200298e7deecde34609ae6aba60838a76d538c847d87fe825d559947b929dfe6a00e8fb8dcd1257bf1262e84dbb482aa0c774b939734b90bf80609705fd2c969500ffc240717f7ffc59fbd2a4c4114e0cd19116111a908d55961ddad49cd5de5b005494921a58d85d160d1e131c1c105b55141c99d1531d1b54ffa2ac6b09166e00e7d3d401b115be1eed8e6b7e4d299cfbcde5ef76a9c872e7686fe847f35dad007c0ccdf13eb53e0d9f8712d56091159aaf9aa03a45854415abac10aa3d50fd00219654689fa16c7309b9f250ab4a6bd9c87ee937126eeba10458276870eb0000e7f48144ef7e822b9a6fd0749299fa50923c3f47d74b9fe82a490e02f8802d00fd0d31788ee14580a6d6c89aa4ffa02b475bc841f9b4ee8dee06f3f57dda3a001cff070b1b15cf0e5e6ef03e215b2e5b370cd46ddf41a6d4a3fc4c2c6ff09800075fc090c60c7e87249631dc48fa3da40d314594ca9b6564bdd9ccb10d572f00d7c7bba79b162de98a3b226608a346c75dc9991a7b06035707d0361b2e247600c784df0b8bfb7e8dd0b4cc7bec8bdb7cf91106153b2134d8efeb3a7d30eff90076409610b8280f333abedc8ec76fce3370c88f5afdf82a1d4857d70500b9fb00ecca12e15f55134b2d7e71ff88fe84fd1049693454bf9d160dbf095f0363c400be22c788fd2f978b5fcf80f2dda17aec49954fc587be0c090c52cbe7a706e900d4fae36d6a6a185ce647c86c39ff5f83cb995d58a9064b13ce49ced426b4170043de2fb7b05e7a47959f87cad12e7f1db04c8112191917200e85b74d7bedd700f38d4172f7a68fb3c0fcd1eaee5c5db1a2f56837fc660f2b08923222b7ca8100663a27a91ab0635524b2ee8387f3e03ca4ababdc8f816778469dd70a128742006e637eadaad78a71c3fb6ce6b1f57eb2243fd7e0f2ff80a40f39de46df7f8000265f3df6f373a61b58d4e69dd133a864d3bab5d78c30f3f8dd58d461cf2b0b006aff01149762b21ef3fd15f29503ce884a1a2944ca7f004d21a6ef1c2912da0017d3fc680f2f44971a26eeea98b6c916ccf665976c9b8195b8d7f3e03cb40600a1faffc000722389dbe035dc95a9cb2ae5eea2b9478abb7561a3c6b3322497005d277f5f879740ccb3f6f7749ece750537030433dd4618cb948e89cbb1198e00972b6af8bc15287d542d6903264398e8d93ee407158db15d77c78be3ef65ef00eab0542d39363137fc482d88dff070f2f12c47416de941e200ab493992581a0093c215c75abfcf81e5ae9f7a2f13d541e3c4054832361a1aa51f80c349beb5007011d366358109e8cb14ff5f83cbe20aa2a04b1163276428a899cd8c8f4f5800330d0ba4fcf3bb0022ea0fc6d8531ab09ad06f3f0f802720d4b9754a638bc600fb4ce7757bbcf44f6a8dfa024e707a2aa499c6ff8cc1e58722d529927c5d8900f1c276146e2afa310093b2f0fd7d3018c76cb00cad7a4511c53d470282f128004e441ab8935fc015a00c4eab0bc122e73515aaff5f87960e9810adf5dd0b9d00096fb9e9e1ab68ef57ec93f41ed6a180938d3721b16afbca1dc84f6619525d00f38d795c95c57cf9b804a04d1837234f70b39488073094ebfa470bc57f441e00ea1fe94b2557fd237bc936dfa26c94509da462d6bb97737c51fd8ac033b979000ad81e9687f47993207f078085a98294202fdf7ce66b4e198e250abd0330b300f7fa028cb4ff870042661cfd0f4a794facb52c9026b192e13eaa7cbd3f2b5200b65b201fa40df8056de3f8888e91dfe0e32d4002b372e614687d83cbbdb185003009b42c741884ff5f66b4948b6684c1b743797cc39a72c4e49209a39460dd0026f22bca4b4701dd44f5b5bff5f866ef292213577e4b4e3d59be3cb0fc629c006fe043acfa2fbc9f8ee5b4b390653235e5920a7e2f0ff0f4bfa02b8f6899a800557e2ca5042f30306d11f04b24da2a950d54f92c6ff495fb717f0605a9080000442db3e8053ca4f34c479e42b7227bfc002b4666bfe8f3288f1ffe0e0debf400a5effc7f1186f565fa09280d07ff43994263eafefb858e9dcc78c887197b300062658d53c5dfefe96ae7fe130443fd2d28f67e8297709a6ba7c2c4ff5fe939003465ea1fbebf8d2eaaa0f767097b5e957a23febee59b41eaf7dca8c7ee5ba200051c8390de36978297ca4c0e0b6ef664c24f8dc8e27721396dafe4d260ebfd000136810d3b4ba7322105153c861cc9e3bfc03ecd3837f259fbe7fa4910fe9000c96964037fd0431de1fa091034d8fa2d7cfd212e276e2cbb8712c2590ffd29000bc5bf8861f7f9012112fd0e1b9c715c49d05fc021cf56a1f350c5e57a33960064951dd3957ecdaf9f930db6657e979777fb510dcec3f6cc2def6e4fd0148300d99e8159466b0f699b9a5b903e9dbe8e425bb2d6371f26cfc92ca36cfe267f00fa0315b2aebecbfdb85393685e0d05bf4909d9b80fe858db790829e994ddc800d53fd9040ac2aaa9e2ac8a271064a2bb4d69fd367b154c3e5fa846f3b439fb0063f800a5e30d0372e1aaf4b38d5acb9c3a6b12e43797cf02a9684260a5f0010087d15832f307fc66d16a1d1194e83801b9d39052a5c806005d4821427b4e9100572aefd233682241fa14962b15e2651c8d796926bc3f800eb5d9efbb2066af00bdbaf93d8600cafd1d66b3002d069fa1c66eacadd1f0607e057e643825962100bde49ecaa18ef667f93a090fe13018bfb8a090463afd0e1b77acd0abf74bda00df47eb93e8bae7152b8dad7a6f18dfa4836ef7f82804882afee94344962060005947e2f69d40887fe00dcc73cb651dddca0d3f48d4e6333207e870dcb7508300af741bb0b0ed8109fb5c4fbecf7cc2f94542fd436d602034483fa1865a8a0a00538179045caa043bf8069f1f9348874b516f2ac1e6b74fd284ba89fc2601e700e904051c335fd2c0c7d80f1059ae75b664fe004760d08d16f08905504a3199002cc550259c45bff598cb511c199a189a9a9c9c98987e9706bd20043500b4a50000f1963db7ffe003ad2dbc9c733622da86f75a19dd1d9ef7f4071e1a2b4dee005c8855ca7b3353ac60f6c058e0574441d877c3f212a1857738968a3666a00600ff494f02f7e86198abc67b1066c7066f1bb93f958e4344e509dbce9303fe260079487b244bb13eb2eff29c6fe49b07271da6c965774bf80ccfd50fe0b0c095002d653866349626559cd1d485cea56e80e213aeb24377bf878a2855fe0e029400c602a91f6196ab0ef65398406d620d7e3802d57bf8980a5462bd024e5b70bd00779cd3c93fe004029927e679209ffc3000be205a3f82c0623104940e83538000f46f95beade295a3a21ee6a0b91069cf949dd4a2a1db6bc1168de7d758208a00bb109d9a386afe4cc08213f438712d20bbaa554c430bf883ecfb8b9845f25e0098a4de2c7e949cd81fe1200f3f7fdcceefed1399dd828196fd0e34bed919430008456ade9035be84cb9e3f46acd186a0b05fa36637900ea7ec613c131095f000674fc4747006ae8f46a918d04180921b2c1b2a6fd3ec63f4921eadcfff058c0051e5412964df4cca800fc37f9182ea68eb9c0fe6301289dffa8911ef82ff41004cb4ffe82190db011ef69477f40edef57bcd3fec5a07b6002087b91cd28de100fd1b1f209f0f5fa0cc93e1a607f455cd657f2d4fe1f0c04ffa0c668b7ca8250033f5e24695d0f84ec267ed69826731e9a18c10887f900121f89a28fe05037600364e51d3847521d2c96f0391363fd34c45a094f7ba8ca3f4a0bf437f09007700fc7e9ef7c4d14ff0401376cba08299ec2c21722dec6338ee44f8b65b2ffebf00c4e04dff098077fc7ea3d7c812e15fe8f25f50fdff13f33fbfe27e67f4f4b900ca51fe83327d801ae6c9409d2204135e691cfc097c537315099fe00710ca5200fe537f454e319fe8310e88fd1938c660000f080cac8e6dedceecac467fbbe70018cf1fec296d8cb3c5854359020e1d34fa1a87f802f1d361a2f74be0068e0300c69d81d32fd206ab5a3ac57988880460bf3d3006617367b35d4c35b3b375f60026dc6cd4d96aef3acb6ff203f85bfa3cca5fbf89f96dfd32652f1fdffcb6fe00c0a24e63a34fe060e8cd7ca506963b761e5c968bbef13062e7f4a58fe8bc1200383f4691594817c81011bfe85a65daf11c949f925d9084c23b49a111e47531000a77f5ef901f55fe282e37f84c03cfeff2e37fa88b8d4742fd0e4cfbf7bc1200c92dcc5076875062473eaf7e9e062f57693fa4699f7f8e08044bf818a2be49005fdd6951a921fa0ec9ac5020c6d5a27f4752eeb1dc48988435d3d48377c814009e094e86717dd82bec40166e901a8e16e7e8325e188afe1d0105605e5c71c000260e49be59fefaed9ec8370a06e7021c28cd003e756002000be2120c1352ce00113cf6ba57f80c004a3830153c294af8ae6955d07776ab690e565ba6fbc79b008de3a5dff272038c8877e80acbb2156b5a8203d24fcd152376f6c09640fd19009c6382790061ba9500181f0b243fa0897a7e0b4bd25229a4531beea794f0fe001faf2f0a5b6f8ed3659d2ff8ceb0500025d5c139000fe036b746a101cdc44000ff80c0040afd0469ca79b54d6c9df80dafcd3a864f92bf4d19d83be4291fdf00e573ff7f95cffa80dc2480ff438cf39a71cb324c9a3671a1b2a3cff000b82a00f6b7e5bc5110a35fa68679cc28b6b94351d96ff48e7b9799fe8699ded95ab700ef1f082fd010807eee1285d416299c4e68302347fa2ce69f09b862b93f4284001767e8731bbd58d4089eed2d5ba24e5f63f77fb47004a44867b1fd5f9c717f00a1e968c19f00f84827abc630bfc560e7992930551299c8f3f4912d180c7e8600b1d0c851a70724240615c354208e2454294391f45abbdfe5edd90098bf42d200d1801ab004a6aec0bce9c45714329c449ea7a36f9ba71305cccff7f8903fdf00e240fea00e8f225fd091d1e5c719753df3654baa97d02fe220a46bdd29239e0083fd05b4ae5937c5161bd1beba58e62341a5baa02988322c3bb1dbb090698f007a337c21738ff15ed2bfc260717f7fed2bfbd33e3e16940d4e1c588dd55ada00165c4cdace5d0e105113195dd88c8e1e110c959dd8d356509c930c5892105200de3f62c84dc450fbcb67a504dbb3a087b89d657c0908b8d25536f47ca2db2f0096ffa46e584b984da513e9f38ea1d017d5a96200af54cf56894668a6337bae00def8e06552b272f7e90ceb454005fd0a1c8cbfc06c13dff1dbc3ef59e73d7600f71990779ac9888c1db8ae7e8f1112c19fe0b010a932e533f7c3ff0f61d73d00802bc8b5f2917a0119ec72bf47e15778d7e870e4ebda4f85919467e22c65af00dd3007ebf3d82379bbcefd2264122f60d080c5053b50603282729b284136d8002307181818da22f913af91ba8649b15fa76c6c4bfc79380061f0b9040623fa000b3af1414448e532c35c527996d46247ab2fabb965dd6b081f5fece522a4340082199b7bb02048d113d9efd6c60d81d299ffc753d5c1bde8f4295f08001fa2002c7b195a5167590ab3d688cdbe37342182c8cfd5838afc1337f9ea4ccb8fd20004f0e6668489a65404b538a24b6d88acb4ab1947755d98ae1676d476d4404600dea492abe01aa4e87bc168792d7b8a271b310bc76f4f7c3813b781c7a869cd00e9cb3ffa4b221083bf4312f2697ca7b88caf7ebf629c4f576510e7ca76ed34000d52e1efea3b9cc1fe13016ff87a5f1b7fd202c009ee601fb6f738148ad93a0046606a577b83a97eb48958bf001c0f3380a0bda540c47610adeb8e584eb56c0032391c22a07e43e1aad4c3d30e44371f55fc017514ecb41f3ff115b39002df00a1ac76e7f452740bfeaeb1e3ca1fd0b9ca48080f3b29d8560adfdbc2ae4603000dfc017b42717fbb771d06b652efebf3e7ee401afe0a092806a2f65034dc4a00b210ee59add463a21fc44a933f49db9b2bf8744d7a124fe0b010807325136b000ca31e09ab534401a30c2cf06cb846a2c10a6507b5d72c5d7999ca1d1471e30063e175214d5d272da02e1910a13f43504c37f098077fe186cdb127a2783e1500a8d161e3a74ed45e9798ac2e7fe1ddb7007cd4bf41a72ca7f808080ff7fe7200ca7e8c4e594eafd639cb297f970aa602dcb3672797942ab32e1be7975185d6004839731677fe0238c41f364dfd0125909fe408a49fe3d00fffc711bed3a6950058c2a3d3f6732d1e8158f5e831dbee17eb14f9ce03b157c8c29050bfa0333000dd94e18357f40518f57f00663c5e52933f5dcebd55239352a241bb232e0b84002c9f0e25d7fc0199b040da62a8fdd2237a1e0f4955be24cbb7e150bd8c23f300aef47d49b3869154593714f1fcc53c8e27683475712800bfcae14ed0eb63b100f51e4583adbb43f9f9820865e7e904e5948011fd097c9f9057003281c147ee00a75bd8ed0e2feb298e5f05390383293c7faba11113f410f396fe848d5d4fe0003b1a4e4193a8fbc2a329e88afedb730c5dc1c3b244c7bf9eac69fd1f5519a80027be2dbd4fdc8f9481b8808e5974478fe66dda9c6239d3da0c065bd1d771e8008c66538be7d59c86889a45ae8c9a0ea6b3e5ed3502d46f2a36df4d448176db007fc01cef867e91c309743fd0a1ad6b5fdd284abe939c357be5174d3c7f404f00db7a6a48d395c7fc28adcfe82d0e2bfe06a5af05f7f429f34303d0904a78d300408fd0b27bf1760dd3f064c6cdfd43443853fec20bc8d3537fd0c1791a72720067fc0d76d4d057e829a185d467945bf821596fe9a99e003cd98f746e71a04700f9648afe2789f3f84c03bfe40878010085bf4266ff08751c10ddc15182f501005a1018978de147d2ebae4fec1ad5b157b440ddfe006b99f202a28a265121fa00106f185132a1d6d47443722f1e0b3593cbf8b1016fe13038bfbfd016fde89b00fc2a67266686ca0e288c6ee88ae98c2a0c6b0ceb494dea6a6ee84b2c48e82b002d6c87084aae2a6a89aee62a2abfb1649608807d4eec5af554f34143bd84920029d3691c2fcede218d602748800055edd1802858aa1fa845709563734c9c2200459b9d043d3c39b8aff801e16abc14e4e42f772b939fd206e84ff08265fa0c00fa9099b62539f3b36e038193dc63a124d7e1c024f18eae9216bfc55b1c0072000fdf834d1fe0ad8fc02f9036825fd0e197ed43f8cb605cbb7868d3bbfc0031007760a435c6b5b1476637ee70cbf6fe13038bf7fc65fb7eff8cbf6fd6495d5a00b1fa1698cb8017250425b96ded61001fa4c14cbf4044a849eb7bf0d344ad1700e938bf01070f1b66083b2afd1317e03fc0e02b3317e432ff09c635fc16037700f09825693925ec53d66e3f2c33cfbb37e4e3eef134e16275368df1cde8dc3900ad76391cc9bc8dde6f15b1e0e2967b392795116c1b13c4670ee603ea12fecc0083efee04d29fa9696053f5445f808126ff0f003e8bfc3c00fdcff0f007e81f00c3c00fddff0f007e85fc3c02fdb7f0f00fe7bfc3c00f9e7f0f003e77fc3c0000f9d7f0f003f67fc3c01fc4ff0f00bf07fc3c03ffdff0f013ff5fc3c05fc0ff000f01bffe0cb840fe1803fc63f87801fd7fe1e00ff5bf87805fd2fe1e01ff6700f87809ffd1e1830204b1fa3c2f2078bf87801f6afe1e007dbff87803f69fe100e007f9ff87803f67fe1e007dbbf87803fdffe1e077c8ff8781ff9bfe1e087e0057f8780bf0cfe1e097c73f87827f94fe1e0a7c6ff8782bf8efe1e0b7c53f8700801f1afe1e00fc57f8780ff07fe1e007c1bf87809f8dfe1e00fc17f8780df800bfe1e03fe3303e1e823f418d3c8d3ca23c9b83086e0f936cef83c4c63bac9900c2213ce61feadbbe6ef87a0ffe0601ee0a53780f06afc881bd3b4481ad6e82003a1f337338cb3ff96f3d2f901dcfd074afc4c2b528a4e983687d10ee60fe40003c74eda4c73a1c7b942dfaf81369348229fcdf8f15cdd5728487639fc131c100c0ac8b94b46bb6ea13942366e9ae2f7f6fc23f9375d5f0cf1648a90b4ce5320049d0877eff85dfae381c6f2d12af7160ec203372d3915962ee7770a531e21b00fbc48669df230dbfdce7aa2f9d3b4df0c5e3ec0267f9012d47e0f893f8141d00d0927c094c5c0a4462bb59cd1dc2ab13af8ec4a5b1a5ed59694de28f2aa263003ca3fd805346e3ba12c6c1ffd0186d28091004634a75a552f91501f07e4ffa0012966f805a0ca65011c0e712d98e68fc4df67ba473bc04bf4812cdf2cfe82800d43182753094d852ec611cbdc15615701c1420e44db0cf180517fd35399c06000cef39c01fc0b631ff0205760a0981fbacc47b7f415cd947e83ccf4a251565009c48369592d0a47d32135aa87782051ba4fd2e40549fc260217eff9f71afda0006b6a47e1dfa106aeceda5bc817d3531416999119b99b825c5ec91a5117f48004d5d98291107e831abb31ba694ac9d72eecd8e8b46e2d94abd756fc2a993570046c7fd82516e6a6a505f80b33469b9123163644af942a8d937de182e577b2f004719331033df9fa594466bf84c0e2fdff516e7fbd1320555cc5398d29bd65b00ce519d1419de5992d6968c9c559c90940e4cd5110e50915a4e119055d6965d00cc4e52cc553f730a88c98b098b23331b1191b1c323332331ab219b21833331009b31c331b9b9ab09a193198199bb2b0b31bb23330b219b1b09999b11b31991008191c1c9cb09931b11a1830feceba46a49a74ea102103a643d483d3540b0e2009a83e2bd888462f314466ab24a7ffe003f0763dc00a179b45758c2bf6948fc005069c2173ad7b57eaa908abb8a1bd8057afaee245ff88175ddc81eafd0635c00f3d62d29fc00f9022903a99b369af2ee17bb6a96e2c52930f6931fe943943a00fe1200eff47a3d757f0fb840387b1450e72b2d88f33b2a1ec3bc1214141a2700fe02a508bdf5cdd62b2522a6d45611641f2b4089ad3b70e15af78529bdfe00007f776de66d926a0e0aaa7dbb6c4287edc74eb7a7f80d48c36fd0a17ec6050f00c1295aef0f75a71252591eaa14233f7d2f4e40e64433fa853d7fbf81c056fd001798675fc160377ec9b893f04fdff677d5fbfecefabf7fd9df57effb3beafd00ff677d5fbfecefabf60a7aff417e85cb820037422949741b8f36994132c7f300b3a40c9b9931d5709e59f94e1175c146064b49682049d6f17833220b45bfa700080b90244ffa3051f7f8797133fd44e6160fa1fc7b3ce217e8e2d794012df600fe19f2d049fa6e624c0ac7fd6ce77f3a221ce3fc5603fff098481fa3ea337b00f42d27ad00d45cca26074a1966d023baa47b985ab95f395a3c2135f97f13ce002bfc2601dfea11c8190168fe0b02900beb5253e10d9caf67798eb57a175055004880cd582682a48ff53cfe09ff0900c5fbc414f7e846ff83020f95943bb2b7007f849675642719e4f153c22a87003f8669fe27083ff84c03bfd4295d01fc1c00051dcca4c6177c8a9051ff3a73323296162c1c9c2ddca3a7f138147fc2601d00ff218567444dfc140a4050392ca09fbecf6d5ca0c8b4e3f8dc0ba8cedb012a00c455e7e942b172fe1300f3f87ff4929489577ca0490dbbcc5920a96ad4268b0098727d3a78758d10d47321ed33e2dcefe3e4833f4a57107189b9a1c1b9a9c100afe97495809307c6acd384e1c43e3b36a39c039487a31f988f04f34ff6b1a8001a1044af91c66f7265193c8ae69f590e0bd79fe4edc4e49cd5ee5a90a30e2b00aecbe541665433fd2370fdffa1631fc808748e524c23a2b57688446ab5c93d00cf8a929545905137dbf5750de67e823c22bfd0c325e5fa283102ff50d89f7200a7e8724075fd1418857fb868a1139db3f8380e942ae01344692f9297448f9b00803647efd01997ece1da9ffd88074af9afe854b3488caf94fc0697ad131400005159da91634be44e756ea7915fff334e3f0c5eadbc2dd0007e82a9bc4fd0c90066cdad1789e72d180beadc0d2304ab94fd29950834ebfac04bbc897f429ee600e81a9bcca2f55e5d41777d4b425524da4a32b305f6ee5a5237eff8f097fdff001e12ffa80d5f5cbbf435efe2f344f4f9dbc4c4849120ec907f00eb9611bf5c008e2785fabed7874f7f42cc7f8047d4a7133647c1d47d62c765bf763ac4204000d50c6d063fe92204ca6247fe0e0cc512dca452853f1f61a7cfaec6034eab4800c124924ffbfc331feff0cc7f8fc331a029fd0d324ac2f89d6865bb904fa8f500560703aff6b1f5cb1d2e1fa5051b07f84803bfd433aca8c403fa1d1a7d644d00a876a674d32ea6697294f51d5207e713f5fdbfff126d5fc260887fa5a51ec700e663edc5a64f1b94ad34310c62192be295019eb234eda444f1ed19b26a652d007fd7cc7acb481b023c740dbf0cb04482a50ef427e76c0d7218868769de0418009f343a40798b254c0861be0561f6e0e3ec9980c30148ce139f5f3f44cf464900bfa026f34593414be3f48e1b49027e87169128dae1bd963de7579aaa0ad4e600215d982750212effd23735488e19fa142c573f40551104a572a71ed9677ab400d492ebc1fd193d18108f7c1e07e8acb3ed06a94d74f43000fd0a4918c1dfa100d1a90999ba074262ad11840717b0b43f5ab21922681ff5215d937f0980b7fc003dd8adb7f10762b729c94ce7fcc51965ced9730e43bcb8753ba8782aa3dec800d5a49aae800a93c8df88e5d1c187d0cf76c480c5c55855d4f0485c6e95aa6b008f243375fa47b0b0ffa46c1b083bf4384d1af88fdb91c58ff447efe5018cc900022133e704c89cfe9cc4d7483c002f83f11fd0d8dd71f454e53fa17683d66500cdbd6a3999104dba64b233fa3a7b16d804ff8380a4191b61d9d901cbe18ea40068080ad740fb82875e57fe390290c3f411a8a80a7e8623c5cb194147195bfe00389282e4d4df938f01517180585fc36fd5b6a2a1fe4059ab2316276977436c006e6aa0db3c8087c7708026d7b459a7b532dec4a327ac21a3f81aaecaa8d19c00a01dce12aa8361bdc7c2d755698e9e3575bf22a754d26bac95e416061d919000f553b0d2e94266b815928703ed56d4dc93d93ff4fe01d952324daeb92c47200071a225b0ddcc61e49939f5e8ea070fd739c5c005012f3d990668361fb9348700910f302350c23819fe593997825cd198250e677b330e1c051b049e363bb4900037d6dc0ee337d529850a582d7a1f073aa53211ba1a2dd7be1aa340ac28f2cf0030074f673906f2ec04adede4339aefdc4b2038d61c9b3909fd66fbcc4ad30900f59c22eeab8af42cb0f8951f1956f1098341bbae6b292053ed9bae43c9c26d005f156bf4d4d0518825094600082600fe892d9769cdd2671b71e717924671e7001b71bfe0ceedff84c1fcfd3f5ba2c103c7a8b5f80e4a60f7a52f95c0e8a9fe009c5c6290ebcb446dcdee76ed76d32a25da9b0b822d4a2fe1c931aa073dfdaa00f9ecf383a6ba289a3e9e51f608e399b9a0860cf6c47b6ed637517482f398140004d463630428f3f2f5b951cd060a411d8ba3044709c7c19c1c2c2980fbe00a002a8f7702d5cdb3606e66b21cdce7e86ab5e0a5aaf9526d7d397c3f6a87ca63000e7bcf06ee0bf94631d533900d41be7fc00c41b561c88c2802faceb2b61794001eb14dc042b6255f58ab5bd9abaac7abfd5fdd429b2bfc82968705869a2a2b00f9c7328ea040c59cc99fc19497299a9704b815389c80a6958e6c7ac7ce9ec0006258f5f2ec61dcb45f8822738df1b3dd903661381333fd835780d39d4009e70048e83a6978c6cdbfcf9110f2211dcc49f4c755ee5daef1c7749c7f18037ffe000a117b88120cc40906210cfe113176d34db71e71c937abf448cf61ff1903bf00fe3e5a0b5a11a3a8321f082a579e4ba811e06e13c7b4b9cae02ce598b10d0b00a0c536560d3efe041a485bf43863946d77e0ebaf161516f50181b4361099bf0051564448fe9d4c201b0c6afdef7e703279f8343a149e9dcb84a9545f5127b9005a3917ee8e975411d67ff3f437720a9610f4cf1e40bbdb90ebccf986bff80b00f9cc3103135c4fd9355bf40584c0442a01aeb76f22f37e809a2e064dccbc220048d7730a2e77f3acf25cb619182cde61857e146d990deb61bfd318efcc7b28009fa5970ede8d1e68b9a65a7b96d1b7a9cf041a57fc8e3dbff0980b7fc3c0b20059fe905387e0d7836cd3e8f25b20351a343b40dd5284b217b55ba51a990285006f9939e15921af3b962334eba2ba81248f2f34766ca88d6f72d97a175924b50032014337d8ffcfd27374ebfc1846e5d8861837d011579b609f99cf8243aca200ebf69daff238249fc2602dff1f824940d9b15cbe3d36295e1cee155d9b156100b98e8621e969df17b19d38016669ca94d10684ea95def3f7f1d865158d223c0028b670724d918ecb67dbcfee3bf8aed8e5fa60c2a40f162535461a55cf9fdb00a1be444c04a16a8d501dadd352ff50d237b9f8dff0691c540dfdbe649c391a00e25488d8b1b3be23721cee23dfa3c1bf03f4398520caca0607f398bec2b55400bf6630e6b36cfcca8f278531ff143259fc2601e7f0fa4c16b5626e0a2e02590021f161b9cd4be38964969497fa6c881ce3ed0f744a3ecbe0dfcccc961c9b9a00981998181b9c9a1c7f16b25994949b9963890baa50769534b621e379bea25c003be205a508e46a239b25f76caaeb6097d393944a51cdb218dee12f64cd9424002ecea3aed7e4492a0db9941fe765fa471a85bf4323d8c9f534a3ef6fab73f200b43e4d118e98c55aa77c124312bd0fee2b03b024fd0e18cb765ccb0e37fd5200d17599ec79375ae2cb5935a4223fa88f6d548bf82c15307a12094e82fdfa5b00c6d1adb951fdb9ff2dc478f8f0ea105fd5b421170ffa7c8422ff479379d1df00f8f3485434c3fefceb2f6d46a1e27a7a1d7335f450b3d12b96aeb151baebcb00dd575827f387cdd405456cc46e875825108c6ba69a65ef2e9a77713a7e95870076f78f4a923e132683193205fc462e4ff07851c288640c60526227fe5b0fe3000ed27e0a21f7e3e13fa881cb888497f4398b7b8f431fe36954c7ee4ce2d14800249a4d9250acf0607ebd26d14fd2071185e5fa02bfb19685c05132366217db0014beb892f2aafb4b94b1865a22bb7f25bb08eb4b11cfddcb09b1fcd66a15d7001be0d0356fe1edc99ccce224fed434bfc05e716787c693ffa461f09c9ff43900826d7688e39df56fd52fedb42461a3db23757448fc517e8f2c2932afe0e48b00edcd4743805d54bb144a52d34a05c766baad42567f49568ec157f060e71a72008fa5aaadd6e33f70de34e70b22110a470e10d07fc53032ff098079fc3ecccb001c72ead472c936ce7b6bdd21da779bf3bf19ed42dfa8a057d81b58ddb3786f00f0fba8823fc8f0329a181b9c1b989c1a9b1b7e96b117a2603fa97d891e4b890019060161397af8d516aa4ff015c2067f45bb48e2b4f8068caf0204096d5cd40086e82f62e3922d5f7b57186fd57a392f09cf6929401ad4116e0a70e7e9289a000bfd0c8f84b3d35f79ef85e2c6d3aa0676e863e2677ea4731fa02acefff891009d62dfd0e5eae2b9ac824f0a7fac905ac7ca0ee60f24f5a1968961fb3735200099bf5823bf59b32309c1a99b17eba8f95c020cfd7d8efd7fc7a07e7f039d0500d5fa168fcac1491fa51c5f2fef1add9dd6d3e5a88038b08eaaa693b8877fc5000208d100429d069189e0001720349fa44f3b96c3fdf42107fe2272f9fe1faa0003fcc46e51fe1a5caefe130523f465b321ff028295fc39c1a05bd6cfe9f865000c2ffd0e60e237cc464282ee465ebbddd2cf33fe8c14f8f29c87bfabcc1c47009ccbf439e30bf610b5a92239a6cec454958540f50409f90c702f7f62475fc20065fa1c8d7be668f2a3448eb4aff8d4568ed725662031f1a9b23f89f683fe130000eff4f85fe40e4dc32b2a1f689da6699e6c5438cf1e9a9e8a2d09a9b6089800d454cd739fcc0db0b54129d93893ce3200fbb94ed25ec9b7a131545d0a814000fdfc345212428e7d5c7f01924067fa1c95b08e6bdd476fdcf796e445e2f71900f603f0a5ab4f0dbf4742f6bf099ff07024d7f80907e0706e320e5c36bfc0170018c48d4b402f75527e94488d2fe1300eff87b7aafd1f28470389de9eb046e40059b6c06562a8606f5ef29200e05b7d8a8e99539975cf508899d32211902d0800f795c0fa93ff7483d5d64f53a08899939b6a2af19d684ab417147fa08b059800d3f839c34b80e477af243c0a8e641dba852b1da3c5e77e0d4fd24327e46bfc001cd100557bcef7d501f2a80869654248fdcc677909119fe9c2603d59ebfd100031ef40a2f1329def8721dd8b8cb1bbc743afd5c992233aae29719fd05f304900b3500f7f0060a563c1f07a8777e13d7127d25033f67cc9e78da428364d8e6a0041f6d7fc57f307f0981c5fdfff307ef4cbd75466770763536354d3648676d300165795138736d41396357755762554b6775347334594d536770756656767af00dcd593a8c8c270ca6c626aca726c60cccc62c8c2c872606a6ac8706ecc6a6200646ac86872ccc2c6c662c86e6268cc726272c468c66472686ccc646a7268ca00c4ca6c6bfd3df300c66bdb6bfe159e437039ce936eae7ecf7582d04571a56800c778835f4f5a8e004886f5f7931d61e6793159ffb93fc8cb718f17490839f500fa06306ad18517158fe918ab9ee737fe0e2333a34703eb4f9d185f75f7c410007033ebb817369967fb16d6638fe0e03a401ddffb8fe8972a6241251c58313400a3cda30da2ff716401393ff0581d4058d5529a35384117225b146c1b1e7577000e3060c744b2acffa2a360acd175bf66393ee393ecef6ff876a03030d40fe200bac9bf84c081fd1e7e5f457fac4c9f639ce7f838214c5c2702f6ed75031cc7005efea0ca206eb43d6b61dfec56094f3f839596a094ea65f3dc69b9e53ae6ba002c52d1324de742e0fe43565813f431edd28272ebca16610352c1d67575d2da00990f4ed42f3151b944307ec153dfe98a8e04499f76b10427df3ed5b37301820064140b4fe00c5ae737dfc0100a95eb48c201ff8ac97dfe13038bf7fe87fa7e00f450ff451556a537854323670377475587937514263593370747362414c6570085569377774784d43795142714655634efd8a149927b90846833a029a0ec2b00f1bab9e787305d17195c607fbce8757f1eda0c396e32ba0c24f0ea9d00752c002705bbe5229de5d2ca9d57860aa63fc503a3f1a7d8a9c7fa49172a10bf438600aa0a498a560888808a97a09f90d4645873bc8b0e0637ec197bf89d1dd1211900f85081d22d1334f3e8953353e591d66a9220454a43abaadf25fd2c54113fc20060717f7f8817fbd21c8fdade1a104d5d0c9d4d919b5a1a9e5acd12de11190d005d93995a9b5ada4cd59a8d9dd5d6149ad695d658968cffa2840be754c64e4400d777145a8644b194443715365304b0cc2e86149ec7c859ab60d5252f347933008850e7b7710890b824dd1ff93a5a2906ed13bf92bc5c7b130f679cfd2371c7001ce93fc1c5bfe60186b044787e80c8c914f7a89ebd4bb08fb8afcb790fdc570064a89dfa1c949e622f655a17d010947f10a7ed7cc7819bd028e9dd3f49d3d20033411e51d861ca870aaf6449996b9836645b97e820d2f64efe0e3332837fec0006423825ce2476e3761a48d778b59710c3fb1568359fe0e5a0ff404f065aba0029a8a3beedd5347468c34f1d9dc9708767e9404d07fe1200eff879683fd1f600745038bc05a1571d5766ae86e939db8a22eb60d8061deb1cbd34309b1c597800ef025a0ef9117455703e49df7d78dd134e5aadfa02c0fec39bbc8f3a342989003ac7c88faeb120bf411f83db0fe87314a3c9c468e153f548314dd0e4b5c88d003ce0a3e6b317fd28adb0ffc2601e7eff938d6fda491890d3fc1c102a032a5d00488946058b1a4a0ab7ad67068913a4debff14040bfc2601e7f7f840bfb466e0029da5b3f439379d3c6b4459a4a196503b02132a6aa66d8ebc09a635feb0a6f003a14dffdff1a6ddc5ce83319274be0e5daa5814d461d0f14904e6d44586fe900479fa028deb95ba58b32ec0dab1719c56aeb77bbd12d7888985f145735238100b7ad9e03ca0a261ef699a787f55d379d31baad28a3a3bb36bca1aa1ca73a3500b22ba2341b1c1a25bba8ad38bcb2bd2ca1213a9c373a2419262a3438fe9da70053e0a4f644f48317768777639fdd84de740404edfc1c2b93139d879eaea8d8001a6f64e40fe018b0fc9ef57cd7f140ae5fc2601e7f7f8ef1fb443ed5999e3f0083b07bb2baa4d90bae60817629d34fb4e984712784e7ccfe43c1ee0a0603f40032519bf9ca79af203e08b6170b3291a08ca930b52abb26a68bca77ac26a541007f000a7c70368eedcc0c13f9fe02d0973158fcd2fd4b9ab6d33fc1c0770943003d125f5b102ee03479d01a9527a296eccdcd7f21e2d4cf03d1fa1c68c845d300bb0293cf543650ebfe9b87a8a1b6812782c77f510d190f1407e85c97d311e30094c1daa72eb73b036def6e1287967695e40d197a58fd7c163bab66aaa20ad6009c2c3db8971bba20d62fd54f9c400c68dbac70fb18b2f308a4ffb802bfdedb004c5e3942baecc66c619b543f330c4317e2b07e7a0046cbc285a812d36b602d0049534840029ecb8e1b97744f520e364e2af229f358db09b7499fde2f52bf8e00a3f491cb0d17fe873e36f28c8e2d1ccd89ea420ac2057f642fcd456b3c8fd40030b45ffc0e02b7e8bd1d6afe0b01bbf7fc2d17feffb961afdff72c35fbfee50086bf7fdcb0d7effb961afdff72c35fa2ee586a88bff430cea4c94a092c63ad0017ea88474e6ef54c715ea3b29a8bc6c97f147649fc2601e7e9005451f9c2c40069d92312b7de4cbcdf5243c9bbe03fe5e7dd1e7280fe00ccc443ef41dfe20f00fcf9fb35fc51d92191c1a9c9c98999a19187f16f64871f203d822776a844240033bea9a0e0f9ca22a10fd6217fa029e40c27886acdf34606a088c69c95462d00cb91d6eb576ec1b59a9c8d805ec064e4ccbf3b9b8dcfef983307f4ccd09f8800a0d0c46cced37d83a5392bb176e25f2da8527e92d900f5bfd0b62a35e54128008ba8f6b92fb2720919cbd4170ea69329e4796833fa86292ba182ff4286631300d6fca70ec34267870f154d5c1fbded1d75f9578814abf7e8ad8ec6011c0daa00a8fd482e2ebf204447dfa14976b409613e52e2dfa49fb4272fb168392d181500ee6d232d20fc8ff5ea544e1b91fec7d5ce0fe130483f5eeae707c37b7ec18800f96b15a7a096f33ddc3015f623640ca46215bcb9533de3d72f91b309be518f0025e722efb04c2ac4965ef0cd8bd949a7a72815e7000580fb7600d7f109965f002033b0303fa09280c20c14528e518f28150eca4de976aa1652fd65ac1dbcbc007b9eb3f4a5a5347f090079fc3e759bd0e16e40a2d92ac3ab1843a89614e4be0074db8b2c459ce60170e3946717e80b1bd704fd3e2459ffc4fc769b9b1c991b009a1998191a7f1771da3d1ac1e6dd9179982e3d36fc21ee80b72f8deb5d89e200b5a04fb1ea5d02a85d261572f303ec6e926682505b9b2c19ab49cfa68d2ba2003742d1dc776c2907cdd989fa44bd3500ff4352c2a3e315b2d7252f5fa66107006695c03329b741693ae7eb05898416fd0b34487e72128b6b68592f3639a404005e9074b63910a3341378713fa50f4dcbf84c03cfdff88ca7fb471eb69886bf00438d202fb524f321407af67e363bea0f02ae8d9b11c25c5feff948cdfdff290019bfa8060af09ff424682fd2c7ced309385e47027b8db7d6f494bd8b8b0516007f414f12e5043a0cf4f5cbcc7a84f6314e439527e44b44d62d7cf7698b4ccc00f809e9d6cffa59220fbf8480e2feffae57f7a4f152b8bb33b299b932b931ab00a528b8bc1bb420b43118a2a6b2a3a7359a26b82a2cbc2bac28b721a32cb1bb0099a57f45572b8aec76566eced2036198ea2dd1d9a1c7d34c811cd8b1cdf87c00fdef705d522dd28371fe0216d66e8cca256980aac05576238107233c49352b004fdc1085a666e3b9a8e9fd22b060635fa1c96bfa255eec512d51427559a06a00b4a1583b4eabf80073086c5fd1e7d195fa1e6895bf4a5f4c9fe91853e5b4fe0013018bf4a5f4d9ff1180c56bfa246834ff4a58ca0fe889a0d3fe1300eff50a008a5efe880c435c10a6e808e911cbc361d18f3f77352e964ce1c5bfd201886b001353fa4348ffff43ccffb7e94b1800fe230747f41093cd0eff07019752a8dd00d3d167ee014c71a550b806ac71d2ba030dfc4006583b4ff188197fa52fac1700f88c29db7fd13186fdc4377b121caac10e8583255a65c72ea17e42f52ffa3d00259b7f4292c23412dd24a561f53eace917aaa74e43dd633dd24fe80b4c727c005950fd1d92cdbfa08a3fe3f430ce3a44bf162af19de0df25731f0f8120139c006608e8a9fea3c3785fe13016ff4fc28bebba41af45041b6475547eab05e08200f98864c08452e49f16dad798eefc7ea16adbb1920eb0baae98762caab406f500e3847a4b57c4d7f001d6f14d98c1d48a8f16b2325fa4b49543f83c1248231100066610e1e8c27fb51f604772796f9a0b4fd01a0619fc8c0927f0980b7fc7e0009256b6d3b34aaaee2bf02bb15339b097c8bfb536170e00d5d26ca15610f6d8007e80b15303f87b590582b5235b638e22ddc36c4b791603b4bb0ab5fe5874db002a4da822fde1cfd269975dfc180927c21ca4573433dd75cbb22823ff2252050099fe9347f238249fc2602dfe8f98439fd20779f2570188b2c0280e349f3663004a075de20bda9216c3b02facef32311f716adf9c7571be1da5dbcb793207ad009293d46a67b0d9db60d1e4d8a2771edcedf5579e41fa4e14f1ff83024938bb00fe0045100b7baa35f85250170298140d69473e393bf91c249fe13016ff8fc1002469ce2f69ca6685913b355543c731f6d84fb71b4454bb74f6276b3b17c7f300c6583fa60c5c7ff367026f08dc3920b469880a6f506ea386b2596ad2fc0830004857fd25a302649fa1c2f50fc6659cdfbc16e6c79368ff137c3f30db7f81410023f8a10cdfe1300f3fbfd0cdfda75158bfa1897c8f7b71177eddf1d427c6f20092d5704f82ac3aaf57f4a616bfff098079fdff3abff525da059fc1c102f7ef002bd6b591e960782207f4ec232d232362bf187f145da1fc2601e7f7fd2bbfb4008af1ad47f439f62f674d81fb7ae543d9fc70618e9ab87cce729226317e972800ad9fe13010bf7fd3fa7fed1d11130dfd0a6421a02062728c1bad9085c94a0400c0740c21c6740f345f6d0733dfe4ec3d2ff2f16859cfe80bb27340fe03e21c00b7f439f56e3bbec78b516fbf8250936a0cc95de7ecc1a812b47ee1961d4398000fd087d2e1defd34d82c292784bcabd43ef3f3ea87c020ffa7fc3472dfc1d0002fe84be772f422cbcda5d948cc627e7d5a33d90f181b940526fd1a0ac6005f0010c27fa149657649065003e4241219fd448b8c75a59c1c4ae3d7a7a73a3bf5008e2e3e2d10fe833e5f63a929466e7c764d41f45f8e69420afe63e4d487bcb1005adfe384a7c3e7ff83005b95ff017717c9f212e9e193b1f12c9a9f4eac40b80040ba7f1c80b73df0b445fc1205b8755005ad1bb26aa43b5838749b9c4e5a8b00c4e0c7f1c80b747fa085eb5bf82419cd7de94cb7fbd8c73d25eeb95781223e00d6492fe0129734bcd7ffc9c3f63fa5896dfff4188405607c80fe7e838c1b9e00fb494487f3b1828e4b1a549b8d3a8917723029f494496fe28db87f84c03cfe00ffc5bbf6806009f0977e84b256765141d0a600cd4613c39f60560bd04885d100ce844fdc27461ef7fa0c97b960a23f4058673ed513dcc4884be77f4440ff3300247c0b56d9e4d4a4a594fbb08d294c75407063d87a1c78026c80f90baff22e003c00127fa152b57867f43a562cabf746831a35067bcc160f633711b1fd5fae0033a4fe9b4ac59630640fd41958b26af3880a136c8da768697d3be5f257c7d100af41c8974ab2db9721b6e07363895e2fb0fbd7fa02d4fc694260b2adaf384b00aa92ad5f89818d2829b387adf39a237727ae7f48ed1248f7e8725ce233dd15009bccc2841ba7f8ad1b8cb8fd0171236ac2f6eebfa4aa1a68d3f82c14d2a0d9004139e4be3c08eb1f6df9486d26883fe0046b3a4b2c29a13f8d814d64dbfe420005347f0dd7bb3aa1dee2f4ba525e6370724f8da68883a7a8221ff803987e2f00d017d624167f783454afd97bd002b8e2ad02aaa1b291c18ed1fa02a16cb8ad001bf5cbc427e6cbcc76fb903fc80d975f0b3fa08f9b0ec20b4c1a51a01a1a9200c7ac404cf051a87095109f9ea90bf40acd517f99271fdcc4dc583adc003f410007b40fe84be71f02069d94b795b4f0e9e8d250fc527e4c646c40fb3016a4d700fd227a8d48047fa0ac78b40c434251e0fccdb7694284d9f732f4b908939180009bac08a3f880042fd043f621fa122f5c0093a46500e1c623f258ddca07ab3a00197eb4ee60016725343f474fd882f92fe86b182578c3a8975fc4c3f865beb600fab8211672f53e098afe3304b8818b16535fc003f414fdb97e86ca857ec30800ae23e0f47bd4ac6570d8d99855bb5d4546ffe23a6e503f82c04802595a949300ceac68aeb20267d3f66493f1861fb403c3ef13fd1e80abdfc1e021392ef32700046eabece9105968e4efc1a5f516fcf3fe8f3d21221fd0c62f8c709329c0de005385060edc598b64381c7b419294d99ecd63fa754b5beee9a6bca84a7860e600067632ff801341e4457bac481c0d85762f0a5e9ff53f1804063e38ff3f2d360008caa37c69739a973cdacf1181db8603e8c0fae0a68d1886610769d41a721f00398bb86cba7d8b85d9105ade583dcddd12dbbba51bdb4b2aa387b77a11b9090073f7fe99caa4bd2565d5a49c5c28afb2ebdb7124cbec48303177efd25a3782002ffa1cc619dc25ccb5036dc26232279f68ecf9c8c89cf36e6d3f8a2672fe130000f3fbfd5a4fda38d98c31fc1c1db6b0eec6c389740195bc05145741a1bd260047cc3ea7e8f335f353fd05b5eb01df6e35f060601edfa2b6bd63f48cf7041200ff0280900cb494d9fa08c70a2ed311ec619a42345d7aff80014abd6da8076f00e2691137fd266c805fc2601d7f01c9f64dfa1268ecef8b6fa890358f251f02002e68d5432596aa7774e67fa0a4fb5ee659b5afd16da049942fd81dd96ed56b0015bc183f8af19e83195d00206b5d86fe2b93eff84c0e2feff93eff7a4d3dc200c262125b8aa2622b93736bca8a5221ca9a9a63aa42b3918b9191c3c25272820089b242c2335231a31a29c39ff4549f7fa02af91e2c1d42e913dc0c78f880d20018d56e0bf3587c373b0aac150e9822ba213f55d4b86116543da0ef5c4a76a8007e3b88587c991a036648769469f1831eef131a47f8864fb60fd0b637a40243000f2900e6719d802dbdc57f5d5d55659db8bcce7f3be1fa4e3e70ff84803afd00051c043fa12690597226515f08c503ea852ea33f12e5f6f5401a61a1e0de7f00f47665eeb3087e874a1d521150a6525ff0121a348c3d7eaa21a609968b7d9100758fea1dc35c6618fe0e01a1fd8ad4354fdff2a3c9e9b4e3babbf36e15d1100043f512e0c50e7e85ca23e533094e575184bc803e454419665a168670dd0a4f00484c1fd1f863f841fa1c9775c0e4761df91c9755cb38c074725144f935eadb00dabf8b9846fe13010bf7fce148fed22d4b2fe0f082d6abe32b4cc3d2e616a10084c59463f262deebf4bf4be13187f098085fdfe105fed1d28d6fd0b4c3ddfc000668a32b73b574ae5fce885b9765b2c55bc0dc8bae3727f121a28c445fc16200bb2b004a6770e98b39da2851761d99d90920e84043ae9aff7fe303fdff8c0f00ea0892b1fd0f183d18775d2352d03db47a167f53e633594b41dbce0f5fa4e30007a3f84c03bff0c33c2f673da3fb953736a033fb74fcd2c1992a4b8d1fe8f000c1e855fd06b4efbfe022872fdffb4efbfa3169df7b7f589319b5c06d163c060077646b2009d3447097c439b847e7769a92bd64d1bc91b85b804f9fe8fb1e8d000afe3e00fffc711bedc835ac95d531974e8fc7e2a181ea17eed03a8a73358a00bcdfe800d8976c90d40ce83d9ac9f4d607b25f170720b2e31d41701214895700b416bbf4c7154e66c2357039fa0237683c995f4ef01bf36a8453d836942ce200c6326a208ddbff405a153a3913c21eedc5584cf863d0b7daeeb99fac2489bf00e80a4d819da774a7a08e3bb86ae6a5ecd15dad9d5e1cfd2334d4e79fb3466f0007f47e5441fe9f4a8a3fd4735493f3fbcc67d8e991161dffc6561d435e34d0003b7fa3892ef8d405e59bfd696cde07de380537fc3202f8d7ae54fabd87eb0900aa49117ad458118ceda12c319e135f2cd8a92417e5fd3d354927bfd341d0fe008fa6876fd3e4d12dfc8e1d0fd7f720742d80e06ecc421fe32382f11501330b002c8fe1bb860883c2e74fffd688a570e3bb957fc32f4788a95e2ecd88a07f2f00874247f24f622f6f9aa3ebc9e2937f2c146ca2dbc5b7fa7302cd133f424cad0047a0b3e0faba638a4a65d6e6686413c1e95d1e2857e90b2841025d81ecfe0500010c2af9c251ff304aeca9e473e63d68c49643ea1604c2a85ff804dabfd9aa009cfd15fabe1e7ecd0c4c0c0dcccccdbf7d1571eff1f01f9fc0b17081b4157e00871902f0e26e91aaa3c898c2f7e3d530c024d9cba27751cfdce3205ffc26070017eff9902ffdff3205ffac55807d18e3f82c36a3a7afd15b67c3fa446f190100ea16e10180eb95bf80c004648304365f94d186506377ee5843bb7d55ac51b70059501d8d20e6fd2764f60665238cc0ee8b5fa26bf3bbf81c056662f0196fe10038107f82c06efe1305d3903f763c78fe0e9368339970fed6550eddee05b0c9000afdf5742111228b7e0c8933e9b93627eb6e2ab74131a40f3ed30cb05c210400bf6e6ad28701be2f4da8e843f4fc2ae2047eae2fdee079efe1d007c1863f8700803f9ffe1e00fc87f87807fa0fd1e63a2ce3fa3cc64dbf4798e6b057e8f31a00b60afd1e639ec15e7fc3c00ff97f0f003fe3fc3c0bfca7f0f003f45fc3c01f00d27f0f00bf47fc3c03fd2ff0f013f4ffc3c06ffe8f31c7607a6fe1e03fe5bf0087811f98fe1e04fe2ff87801f9bfe1e00fe6bf87805f8cfe1e01fe03f8780100f8dfe1e00fe2bf87805f86fe1e01fe47f87809f8ffe1e02fe1ff8780df93fe001e03fe0ff87811fc6fe1d117c179bf87815f89fe1e05fe07f87819fccfe1e0006fe0bf8781df84fe1e02ff9ff87821fc9fe1e08fe17f87825fc8fe1e09fe2300f87829fc7fe1e0aff37f8782dfcbc002f9050482c85afd0632477fc06c57820088dcca59afcd56003b33656682905b46aceb411316dbed4a39e73020b01adc006b80cfb1ccbbc60a667ae4e3d0c05c8262258f1dd3ff25ce13fc3f4048e5b000106d9b9d1f0e7e6d4a44ab8499fe87bceff0ca86ec4ed532db93dfe3206e0600353a722a16000ff3c59978413ff8f3302988a3fcf41545ff007082ff80713e00beecbfae20994bb72801fcf4263efb5bb7459453034968399321d9c4e8d6ce00c88269e009413f310deb16ab79f82daa22ff80b00f6a50a23bba492a989e1e00d10a916fbf4fcb4999f4ed5fd4f4ba43e9edf0c79c1a5afde642bd22fdc5720013ea77012a68cd7646ba45ad16743c0ce11927e80bb6c6836a9917730084860088bfddc9b6ecdc6166d14852a8fd3f25f7fc5258d2c9c18dbedb90665b0af60010a8d9ac3d252c925f61c73bf9c79c8cea222459310495eae34e573618d2ad00c187e40e9898d7cb6196929c3e103d8428497f7fc7e03fae029248d48a2eb8005f760271209684e26f551cd5f14ceafceee3b93e6cda73478ccbc98225583a00f65047686575641ef25d5c4867c7ac265d893e6fdedd01d104fea0130bfa45007f0718671953de4ba6e836dbd7888b45f1272d1bf5b7e9278800d2e4d563af00227dd18e151d3331f6e6a74f5b6afceb057caaaafab42b8f7be148316207df00d248fddc5ffa1c674b3431428b3de850ab0e7677d5bb2b2bb88bda9c48ff5100e3f777f0980b7fc3d76eff8f8acbd05a25692689e2b29550cac4f673f680e7003e24bf4062ece8b6dc90426663aaf7a25bba6bf160fbc457a48462345e7ccb00556b7cb8d46e6bdc2434e3822c7e487958b820f7e90a746d60fd061936bfa00081979875cd7fb289e4c67d203a1f21a608b0dc8b4633f5098d69310bff030000c4b7fa2d08e77f5356f127f0980c5fbbe41ccff412776a7e8499a2cfe03a48004072a509e4bc9df891a2a73077be2da7f290d7fdbf89a921fe1300ebf80f2200f28fd0b336a8166d284290f07a2ecb7b077e3280a72775d5d98148710bfe36007932f83b2afd084ed3e2eba80fe7b148c1f8573af7809b077490b7c9eb7fa200b388aff81655280f83a2efd096477fb5d9215d45363a298279a8190e3ffc0100a61ac2773efc9fe8db23bf5a3dfd1e4e85dfc4a08c4ab8a5ac34791caf8ef60062c5db54a8dd0b8c1cc6017c43267f04822ffc07e9c0848ae57e04232192bf00d05ea6d998cf7f1c2efd57f317a71f2027885fa0c617198aae52dc5936c48a00b08fed575242229b25111e0147fc04dcadfa516fbebf84c03cfe3b253ff50d005d20375ba7f59f388790c507b08361a46ec878a267f60dc34628055a94ed6300eef9279f8288fa0afcaacc053d5a1baa5c2278651cbf7176d16871a6a863bc00c2ff808080eb3f482cec5031e22fe8318eb5bb0a94aa4df07472a1490d9756006f7b0313fe0083e2a278ec402ff5f1c0d88874f68416ddd497e1963b27ac81009fa1dbe7869bbb70abcfa2875f0ee76f293c0189a6246b2f2ac1e5985752ea00e2f61ae917a9a2a5a12226fc59e2f62121e86580726d5bd1218b984a5e9f8700d5dc622d28226d7f006ff45a4e971ff7f4dcbac4523f7a484c9a8c3cb371b600ee69b97829c0edd4abb78c9af7de394db9ae44ab4274b33e50bc0e494a7d6d0057f1d3c9a7535a21893de03e9d49a69016d6088a9b76189a103fa4233a389000d3cc28faa25702179ef7071f05db6dd4ef150f4caeb0420be7ac3fa572f5cf00c05c18c54b838c9e7f8107991119e96dda93c3052fbdeaeaf8c72e174fbcbd0024465d1341d3d7590edb41aea2bef5b09a731bb2086ed1334ae640b7fa6ce0006c628c41190011843f84980c71c333fe03000334d37134d34ccffc3194cdfc00260fe7e9f8a49a1e929ee9b515a56973b4d6cea04bbcaa09dc631086e40fda0041b6bac9ae8e505b294e0a66615ef0d095a073c0c7c2151f4ba5610df53f5400f32c1c03a81b62860d09102b36835604898e3d18dc30bc107a377189360396001ce12f38e0ee7d367d62300f45e7b3836029db9b81cb10adae895fc32cdde100f6a92454cdbb096e15a5ab2f074f3bcb004ea14112a71eaf6482a6df05b46e0008e168c01718d2709c2f15740ba93ccfb756b36943b2ea39d63e691a5431140019e1a6622cae9e2ea1fe008fdfc0dc142d2a33e053d14ba4df75eee967a9b4006be5593b98791b0ad5dbbcf3d895fe52b070cf29a04458b8d703f802424b5700e709376e53e450f4f634388ba6ed58800dc3d59aa237a265cc225371b35d0a008895c7053eab858dcdd38160506594ae3f12deb10f5fe3006fffc141dd71c8002298611886209fa2222844dcdd34dc7337330c3ddc8cccc74d37f8f81dffd20007036209875bb9a3dbd58fea82c17c0bd06f2dd407d9d5023d9ce0e8a3331800c7d05b9c5637b36a9ba2eb3f45aceb72eeec71946b04c3d629ca80b42eebb70031d834bc2631970df3add5b540cca6f3363648678a14ed602bd2ac3e8982960009066271c9a82f5fc147cedfde30f874d1e83b213fe999b42608b580b06e7e00b4ff83e3090b102cc39e1a80bb1d38a124a1509622220c2c284b8b7799ce5400eb9745e8ad48f1fa022da31f6571f88323aa7bb3075ae3ff404bb397392be000baee8b7cabde7eb8c7b773cf0a380fcaa17eefde97e80d1a78e9f5601ad9f800025dd8bea46a4e763ef202b2cd5db574bf003d6dd3c0cd5e2b4938aa97e5060043201bbfc16fc49ec3e44778f6a5bc5a79982c8b715be7cf1cbd1d7193a3e30044ad54a0f3af17b39db5a4aa903943a2ad0a1afe3006fff8168738e5194c21000c4108862fd1213ba81555fc140007f1f077ffe3e971f82fe1f077ff41828c0067e8625c5ba0fe00e139a509ca6fbb34017358c3cab951509553f267f5e58400f67e9032b1f41850cb6e9a1e0e80f3e7e310e1f20f7b08024b84bd183e888f000c11a9496310ef65143b7a24f8ec4cb156e1cada83144f40993a1ca5fa0d3b00b8f90f95acb56b4cb1bfd25556fffa1262466ebc6515cf8b9b435f9836572a00e33da66f194f7d0035393f472ae5d5e9ffc7b5162ef2151f77f00fe10481b0002cf72b1410b8ef52d51236b0a9c64ec07fa468b9a08ff42e4bb21f49ca0b6e005ecbace9d0e6f1f4103bf0266bb7427a22b77e92a2799fd0b7b53a0a25fa0200d3c78a4025ceae31a2afa88e83bb3bff07d57e6d94393f4909abfff0780907002a49d1866283ff004694215862a4afc077ea759fc6802460a3853163af302300e4e2a9d56e49a0bbe5bf5b96ff1a012289b6caef0a9f07c13392115844a8fa00cd8b82cec1fc6806d77c011718908aecf33546a9db6a7ebc15127b6f7ff120002464dfc1c0b60b4b520830b090133b3b403cb6b6b00c32c63e197f1202d85100fc1c02451198e970577940679638b54191f30a87e796ba67f1a009086acdbb00c99356adc19eb2a3e78a8bb588faba285fc480ff14ff0701b45989aa29d5cd0059e5c27cfee61e5fdcbc01c6656bfc6802448dcae573f48997c42dbd28116c00207b638ac06137f11fcd40f5059fa175d079f56e50aab0d37e11eebee10fe20058aadca7b4cf41081dd3f47258e2ff053bdc803e38cc103711fa26c13a3f8100c056662fa8c4fe13f8c3f82c06efe137d8e1453f404b474c70ed1dca43d05c000bcb0d40559bf74c994488cba4af7a9436364b83f308e42fad0e0b44a60ec600a6e22316b72baedf3c2424dceee6de185deee58d4777f1fbbddfe167f3dcc700d8b270f4ff3adad231220fe00b4ac641d88da616b9bf49471387f028265fc2005141097f0f003e2ffc3a01f8d1c7f0f00be5bfc3c01f987f0f003e65fc3c0100ffb7f0f00be69fc3c07f82ff0f003e51fc3c01f95ff0e81be2f9dfc3c07f9c00ff0e807e302dfc3c09f9eff0f007e3ffc3c07f817f0f003e03fc3c04ff27f000f007e07fc3c06ff2ff0f01ffd5fc3c0afe87f0f02fff9fc3c0cfe9ff0f037f00a3fc3c0cf927f0f037ffc3c11f8c7f0f047e31fc3c19f8c7f0f05fe31f1fc300c14ff8ff0f04fff5fc3c16ff87f0f057e15fc3c18fff0f017e2ff3fc3c02ff00f0f817e1ffc3c04f887f0f017f61fc3a1ef8cd27f0f067e67fc3c27fa07f0f00027ffc3c2df8cd57f0f013f5dfc3c2bfa1ff0f01bf59fa091e408b7f4398a000d8fcae8e678163daa0d7d8fff000d0f7c716c4fbcff820bfa517d83bf84c0300cfdff382bbfb4620434c7f4392d6a43243cdb737c71e20316daad727c3c2d6003c320467ea225ad4fd0f620d9fa2929d73f511d934287f0705ae52f4102fae004ff58eedf2ca11b22ecfd39644d7fa035943ff89c2d7fe1300f3fbfc2d7fda003709ca4dfa155ef16d2d252f8ed94cfd051f0badac27dfaa7f3b781a780326007f57a160504817e85a4c1e0c0a24fd1660803fe24b13880b908c4fd6f5070b00fa26c1227f52e9b5bff0981f9fa3ec130bf8733215f4f12ff1d5f49ae2a7f9005bf66bf5caa6edff9f3e0080903fcf8e24901fb5f5045d69a32c5130a1772500f3b3fc04931bc7cb5c956eb2fb7ffa6ebe8aff84c263fd32a75affa414dc5f00f858357fdc3a6e2ffa615286ff87c15ffd3faa47ffb7f4e06ff87c563ff2b10006c7f130a07fb9f4feeffffc43f7fc40091ff150f0ffa894e06d081bf438aa00bfc4d4374a6c4c66e1a789a34ab2e1a4e0406b7235ff1444c7fc2601e7f0f600fa0a9fcbf131b16d5649e4e8997c7702cd8d254a5d6735f2779d4b2643dee9001bb64d27eef24e31d628436cbb01655a7d8c138d65ccb687ca3bd70c6769de00e092a1989efa0b5e7e92140b608fd0b76da223eb28f83d42f4d2dc5812ea2200a2974a57468d4fdeac03faf84fb40573f7353f801e2fa56a6a0ab6f790590100448f56f56bbbd78b70ed2c533017669c4559fdbf2723c8d00c6dd883a5be77001697846615160a709eb74a8fe3cf664a2c0e2e7225bfc00bdc2106da942a97009bbe805c3f6e8d0c8994f6680b8e7341d0ecdbebb421fc8fd96951ff91256100d0c3bf434be5ffe8a2cdfc7498683a4ce27a24bf07747af8bea65150208fda008806695a8d5e3bfd0541a66024ffa16c16380a34e650aa9de61eb3578f4ed300724f07d3c8dab5961a2e4ff454c01e7f02e381fa44600f00ea98bf8ad11dfe00130207f47a4d859f7eb0d87f8f88017fe0a05c3ae1a5224551400dba11d09c008fcdd5859812bd3f01c676ff560880e07a17e823b2b92218fd0e17eccca04200ead118ad8b447cf647072ffbbdf78d0b9effab6b3fca33f4f967f94a7f0f400080cdfbbeb3fc9cb64d52e0fcc19df5229b9c88f3279e0ebf123874f0c3926d0018d5ab145ca02049066ed83a9a0a6536af5cc472d1372debdabd729ccf8dd800a41750e97c1b5076ff48e562e8ffe87093c513b8bc4961387ad6749023b34f002f6a1fa3ede7a2fd4493a961041fa1e60d38c78c1b27c31afdf9fbdd7a4714005e5b1cd4eb97f4be2c0f7f090085fbfebac3ff68af7ee7e8898ed242fe005300ea74a40af2599398e0040e455686e9e295381ff60af4ed3423fe51369e9d3000446737668dec38945b2f86aaf7cfba360de6e5f90876915c7e95b6a78fe1300038bf7fedde87ef4a030231597977653368627037556a47316338375a6f476a00345842666a436554624b566b5a38396169336d676234fd8a2a14b41c5fa02a00b5a43a55d47aadf1463577007cee10bc42663c24958f43f8056d65dddd83c10042f8b50f9224f8f38787727827dfab21a96b8744d6fdcded281fe01c3ef600008b32dabf4ccc7693a7f005437f2b56a241dee67968a8b6cdee8ab89a61a29f00a8632ec603f428c612415b414a7de6791b2ebc1a0c78520ca7a073292278e100a4897eaed3689f86025fd0e5f49759b838b40c6582f99843af1a7d97ebafe900ea33fa4e4dc04f5f4cde8af403de6a3db067e1c2448d6a272a47ff811d7c2500fd0e7b32fdf719cd9065b21e9c0a47f826761d4988f717b9bfa912c89bf84c0005cfd1e9644d5dfb8f2c898cbf4dda7daf57b640603057e80c45ac0c3950eb00cfa43670b883f1f1c52fdde93c9b7eaa49e70d17c4f2f5dc1bb959b78accb000c53d350b349ff875a349dc270ae386c4bfc650fd231afc7ce4bfa1c2da903c0042b5792203b51493a243ec80875c6e7cfcbe77f7145b525112fe873ca81ff00011497659c95eec407017dacd58524297de2362a99fe94399e5fe1300f3f87d007a7cae69b8c0e7ce001e448e885c5ad241ed5f7c961dbf71fe9dd773b4a49a00867fd1f7d73817fa912af90d4d8c8e0dce0dcdcc7f4b5ba327afbcd566785400657bf37edc93f20bc87b663c2498a8ea53016cbc88a2994b54da7af306384c00cbfdc859bfa602de7a8eaa177013dce6b28690d97948a989798588e7e92c070036fd0c5efe22ffa0333f142776d8ab21995dc107f4064205f565d6f6e45dfe0093981cafe1300eff4fcc0e5164f90795440b72c9b9f1465a906f10b160910500c9cb444eafc4f7f8085b582e3c9ed53123c4d65f54ed8c24fe861df7438f8a0015ea019de89a6ee2586289b2aad9237bf80ee4a28fd0e475a891f814e45d36003c7762e0e423cbbd3d273b4c6ffa38b7f988360bc67882b31f73d78d8b978600f3588b7a5e506e113c873de8e1327703a5bb7f491bf0095fe873e3c3573c0a00e854369078ea7d297d92a929c2becfba42fd7a673c1fa40374000e032294f800198299d2147e4a8c6efa20bfda62c6e9158b27d7406b69b737d2e9bc3fcc2c003cd74b32fdf88d711717ac63f406eead24962fb85372faa628f4a03eda44ff00119de469fa1cc62fac54216ee470c55238d13e865d29f01f7558b296bf9122009939fe0e01a3353284f15c9d75971d949cdaab8e6fafadb6665bf91229962300afd0e78128a5348d2bb901c44f2d63bad2e559a558e036b9bdfb3767e9623f0058028931a1a98989b3132fefa2a8dffe3e03f3f41ed6ed9dff07157b00b50400a660c4e8eb58171ed9a361caf98b87f95ffc4fe5ca4ea75fa4ac3d69158ced006a8f732e5c3121ab5fe87a4b6602897e94de03fe001e4790f2c5d5f209c65a0074a3acfe8af4a648a7f49ec35b7e860a6328e9e584b0d6f997a52971a4c579008312e05eb1c54fd44b28f883fa1f543c3e9d8fd7828f27d3df42697dfc5cee000d040edb7f90d33f0368fd0b7a38a055b1528a3342ca0217b170db4f3ba57900822a772aa83bf67fb9c14a97f84c0e2fdff0a54bfbfe14a97f5882952a07e80063d53077bc943fa8de6067c020518c89bb03b96fc5caa61243c0fd1dc5c5ac000a9fc1c2961cc981ff0018b8159b10daea748d04d3da4b0e8fee650bfc4c7f005363d131d4da041cd9e619123c3c789b767d62a93ff0219f4b1fc1c67d17de00e327529c0697f09369f9f00ce0e6ad393d12ff1419f5fc2601e7f0fc9442c50043302faffe1b9e49fe6fc7014930ac57211651bb36abeb39408fc70e47fabf00a3f5cc8ff510dab71b9c9b9c199a9c9b1c9c1b199b7e968a11ba9608ab619600b57d4c37857d7c728d2869c831aaf4912274f2d90717ac8c2d29170bc09c83003cdf4fbe7d809f1a4312d2ffa4da4e7617840a46da23bd470d2fe00f3107c600ff4c9e8ae597e24bcd221c2d11c0a5ffc4e94313904dd2d1b7f1323e7b448d007491c998fa5f0891731cdfa02a172483668b8c57000be0f18ff439ee199d06004fa854faa11b997dadd17e13b454513ec48c7f0a0029fa0d88b5d93f88c03f00fefb28f4cd98c194c0dff4106a31987ef89cebdfe3d03f3f4222b2cb57f0700054b1f1f1107ad48a653b194b18496b839514fd6f7fb387448df7f585ef6cb30019189c1c187efab0c08fe3d03f3f81cca36efe0e1ddac5d69ca5ed117cff880027d035bbc1a1d8fe9952cbf8997618dcbc97d63cf6af3b3e3bc37a706ce77f00d013247b73d3fc068f3b87e874abdbbd96475b02450a2ab70cfb3cee3ff24200e969a516fd6098d60ebfa18fb9f722513ef08a21bb364d3045812c00aeba5c00b139f84717f8a07fafe1300f3f87ec9d59e6416a0ea15afa573c610d96484d00c07c77b9f39bfadf013f83ef7a8ef7215ffd6648cc06e60606c686472606c6003fc5ca7a8b66017ca0819395de5f13c088f3e3f4ad0dd0e0886fc8b7a5ba9600e85c4442caa49ce55dd7fe5700cd7538db053f3fff8085cb375518051e0c2700002db65ac03eef7f48cd7ff8101c0c47e873d434fd14619d3fc4fb84fe97b000ceafeffdc27f61cc015557e86182b7028c6394333a718e587f22d77c8261950092326b5f530ef2e6fe142ea3f422f219ff08975ffc26021ff0fe0a4ff9a89900df441a20cff1cdb70c91dc8974adc8b61eb556e3e5828b7e3d91127fc3f91b0012ff230768686666646464686e626dfa5d444b585cf80313c622e10f6d17a3002e3808c88c8ff838137ecd9e2206561cdebe25750a8651978d9b8d4b733da300101526478e8af0d4221f039400b3edbf800d7b2f2e3c5d90fe222ebf0a06ab00f438c5aefe943b1fffd12316bbfa3eec7e3f84c05bfd42316ba0593037ffc10073fe2504ca3f556fff001cffd064297de312c9ef8984790833202a19fe28f1005486fd0533781720509d9b769fa3a9ea48278557f8ff628fd3e5e312c5febe0062b6fe1304dbfda9e4d8adff3e6396d8b1826d593e08d0db967ec54bde075600825f7e91a61317d930e4708b436743d718cd30310ded96360aa3084b2519f5008bda57bcdfa1b17bb1e452228a5085ebecfe223d078a0717f839c3d206439200e364aae110206922c4a9613f52cb3cbd1fd28621f9fc2401dff0f387bfc3e900990e74302ac65eded2aa4681ba59c22f44fdef5f96875ec4e4fe44258209bb00120b74b3cda769e961b784fad3d4e42849f753c238abc6c369b5e53425e6520062e466467f029057b9fc1c415fe8a55edffe27fcd7f4caaf6cff7ffe6bfd08004159424c202ea85cf7f01800951060e501f299a9d0097e64d76975f6547c0000dd242d251de9c7bfe2ad8e01e07c928981dedfd315a1fbfc260317f1c7138300b548fbfbffc3541c0ec22798fa427f90091eff87c093fd062be09532b81fa000cb1d53ca8251a166a127058fa87b093f68c36261cd7821ed388bf510dce50f007e8725228dbc041242d846d5c1bd40326e65ae38c144f3e0ffd24b7d344f08000af96fabfc060026fff02472da01f6e2e2a5300cd9beb85a37dfa02138fcf00092d48183f70c4b19fd937e828b2ae08319094facfa8784f5d3f86b097db5c800ad13a6020fe005c180487f4dc48176b7ea13157b223625bb60af444ce562bb007954a7b862780d6e2d90efc5fe000255151dc394065023152d0a17851db1db00c22ef4506d9e03370abb6e28b256dcbe62d6427ee0a0dbda37f48e1bd90dfe008749933d8499349d483017ebaf935eecd392db3f88ed78afe2837dbf84c03c00feff172bf68de3870ffe86d5027f022ecc9190c6ccf32882d74005f24d30530088493fd5c52e97fa166001f965220899dd0f846d8472ac1d097cb4346766b3008bd7ffa0af616d53b08fe7bf6a8e4de947e97caa26e95eb5566b504d9cbd49008cb3e6ad600cbafe2bbd87f84c0e2feffbd87fba2f614e69696768754c534a0057795446746233414d5156703958717765434378626677664a4175356e7a6600554b35fd8b9c6ca6d6ffe0242281303122d001571b3e7c63fee0140c073c41005498df32cc46a2d0113134d06e304729c9f88a1cf3233502bca9d78fd01b69003543f7b1fc01f4dd410e5b1b00127467e900f549f85a29fd097921bfa50ba4000ffc7939262dbe659fee34fc05f10059fa1b5590368e0b6cf7e661138084010047cc9aecfdb0f428cb7f57cc2e8977f068acc3e3d0c90b96e87edcffe02287002fa28a16c4083135a34fd5fc9b2ccffa1ac322cf1be908b1e1f8223d432d1b00aa268dd911ceaa2aff5bd8645c9eca21ffb582d1edcb2d6c3c13715de06087008657e8f0b18cfd0faa719fa52c333bf48c82b95f7e89a5446fd2979561fc46000315de07e890b29543006abae1b9ce6ab459beb63f72ef7ec17b7ffd1e125100a803bfc1c0211270bda1bd3b44f5ee3ad1d42c62efc4c3b8cbbdff0e808502001ffa1cc2fc82dff17628c5a5fa5fe32e7ab1a26bf2fce25b133f472dbcaea900e0e5af9d90fab25467b359dc5c6f5983b0ed08434938b50620a3be48e7e922005656fd0a491b705a8b9285ee85c2ab627a2553941a5f76fcd6415b14aae57f00a4e94dabf84c03bfd4321950048bfa1cc240ff451bbe07f13b23ffa64ddc6b00fbfcb28fe832ca305e7f42e4a1bad414a4ec21c46d2389f22c8e807a152f3900e7c57bb100f7f13aee0a4054f2ef62153235837da3c13eace64ab1c0dfc19f00037f0980b7fc84bb800a24100fe85a4fba01604b94a4f4bbc5cc40ec4b82cd0075edd756a55d52e15f43fd28c4bdbfc2601e7f0f537219fac15a551fb57b8700cc2d60edfe1febe16068dd5ec9636043fcaba307edbb083b22a499c72e02300018aa3385088184045bbe39a8fd7cb96d2e4033d4428afdb5fc4224e17f48d000495177e8749232aec14e20d15acbd466dbe4b16be31bbcd3c3bb65fdc592460046ffa162a30c861e5317a80c55deba59183b6a40abca79826b30b617f49d7a00e3ff098075fc07c05e2410205ff0500ca0c2b0bfa5954a0e13f68aa941ff8f00b9a6c029f6ad4f2319df051cdd720471fa0ebc9a3bbb81c0004101768d68bf00d2cd637fc3f2eafe89ce03bfd4b991ddfa6712b73f56aa9cf7f0980ddaaa7300a06c08714cccc22918c6753e12cbc90508bfa4754c0dfc43f41581b0c3944a003a24babd28017e80bb8e1cba6a88df2de37f630ec3e5dfd6047637f202762300fc0a040c1244a2c3dee58f3e7b14cfa4d0efd4a9293681843d6c17ebeda9450035346166663534636336393462383735653832303038656330356163643830006537646134356263353533393161353931663265346531663939336461343300fd215c82472606260cc7064607070c266c2ca62cc6a70666e646aca72c26a600ec8cacc666e6c6ac27268c4c8ccc26e70c46668c2667268c8c6c263fa094f000298cc8dcc7e0ebf41c559fcc084a782dd10a47102a388c4ee7a4b37038bfb3005eb2b6fe8d5d134f8e12cfd1e79a9bfb8229f97f406e9057e82968a058830d00bba094e7798097e7171b2922bd953180ac8c3bd3421b3b940aff0143d4af57001e0bbc54722fae18f2450d2e509b85c05c62ff80a903ff829955494697d2ff00091a750967e5d3d324648137f21d77f13b7f80903dafc4a3e27f801fca040400549dc8d52cfd158960db1fc0d400818000008a1763d3069599c943e3ccb4d800f9dfd8ec0d793ffe8a44b0d86fe03e55c07f81803577a1542eebd006a99e8200068bf3e60741be73ccadff1318c17e82c4b72fe0700d65bf43183819c7e91b00070305780a9d214f27c94d09f7e869699b8a9b6b5fae88062cf5246d0c800c00fd0460e07031ffa1ec1244112b630344693bf4058370a963d29d6573689eed000c7e93a539421fd234a728501c6f75f5dd70d1a4bcb06b744ae33970220649000e0bbec966ecdd29fc06049301d7e8525394fe033d73f4a529ca7f119df38500fa085f55c7e1047868c03f810004fd0465dea5c678c3a520764ac322d15931002ea18fb32ea903ffa6e5f55eaff909979de676d74968ca9bb806315f14fe62009e6738a3cc74ae1c405b70bcea3eee937f01d741506f7b302a7e21a75e9e8b009b31a6080734dd87327f9a38497b9f2fe0068d79f4ff48a9dacef41291b42000702ecec41845fdb7f8a3190a53be5716db2ed9bb7bf801a86f66ee8ca5a05f003c2faeb9c80b902a479fbd3ff1970ee8bd040c13ec4b4ffaea321bfc35a4a900fc261dd807fae3fd6c0683f4fad1a77faf8428bf87d72c10fe4b1db3fcc9fc00cc81febefd3af8412ffd057924e078f3b280ec188d3807fd56727b1a2fda9800b29d694954901fe2a0d08693051b282fd0656491fa08f869ff42731645b27400a6b9f1b26cc596bfa9887eed6caeeca9f7e80bb44f3e0ffe5f56d123f4373100644a9cea761afc858978e465e0249403f0e24304fbfeaea6e4601c411fd0510057c203a6c9294a044ae8672baaf14d3e43d645f86a108f74def72918959ae900fa031e96617cede4450cbe99e1ea85101be2e20153c606e3de1c002e40613d0014bb537f8ddc46fe07011bf862f6a4d9547b9b92fabfe2be0aff84c0c435330034333532fd5842b31fc3e1f78a7e9f2936314fe13034ff83df6b7afd05929500bfa0b99767c47252e43459045fb6f865dced56d31b7327751d21184ff4a2520034ff098079fbff45d2bf68a8ba5430a4203cfc63cc205b7a960413cf0ca09600c909e0bd057e4456c366eeea6e940f52283487eb1e6695f901212afd062df9007a1fa035f413f412c5627e8a48f4dfd469fda3fc2602dfe8f8aec0fe1fc45c009f0bf29804e74a1b4b745f3b1b8f63b58bf8001ff0833ea0c1fa8ab3e0f1a900a40a61a1575bcfe00b05064d86afc9cc93f1bafe3b7ac3b75935777d7f3e020037f69aaf818dc8bf49061ee08fe850b11afe030ece625c3ba619aca539cc9f00624be3420b542f07d9f3f8a03b3fe1300f3fbfc3b3fda3a35fc29fc161020f007b4a36d9ff004c32a03a1e6fc36202af5fd241fc01312e3598f6bdf7e8e968000980fd0b61d036d05287d839c5b0c995d7ef946814dce99b93a9993d02ffab00ef1770d3f42cb8ab2635ca4372a628d5316b2acc832f605782ff0083113037002a7ffa87285540988a2101a7493b7f80c004f4fd04255bac95f26a1daec8b700b4c26b917c2c79f941a31268bfbfe87a9ff7fd0f53fea0d7e7ffd0b1639a0200c9f928348f6cc835908f092368e044f7a8b59a6573ef33faf817838dae686a003ef79d00c98c60e2e6163bff4057db800166ce0625908900e45b1391f5c92700edf9972d959372e9a9baa278bcac8a0b45aca60c9f065a032f085058b5ee830094a1cc0ad96fab762d2cbfd901214db1cb59fe0146fcf3575b1b599ee059b800560e17dcb648f783f48e4b677e87666338799f88d98eae9ee53b2f30fa43040077f4c4dcc83fd5eaf5788cc1fa1d583426dff961a4b1d72d4f40fc33343aa1007c7902dcfb7f4898c1a208afe84b0de27f630dfab835ca16bfdda7a5f9ea7800b5776f6ca0fe153c40970cffe2a1ee7ff41511fe7e8625b8b288c41a51155700cfd018043da9f0589e1837389130fa3bfd0549340ad222d3e5bb3509272d7600045247dcbdbfcbac3cf66e4555fbedbf7871e017e961a92efe13038bfbfe92006fee8a49955c9e5152d359145e11d64cd69212d54c5458d45551d519d8d61e001b9bdb55d512d9dc591b9b521a94d51d1bbf62c802c435249ca746174d42de0028552a63febe5b47f00df5ec2aafaef0b68fb0b2482528ea8ac655a4b348240035eb28df5acabe407d38e3a73ce24617d82b28e20c44ffc01838b67e90962800124fe09111e470f6f4259e3d733ca3655288127263a64d90bf456172e438a8002c9a76dd0a5ff03888e4dfc1222390851d41ad3103dc41563cbf9ab1513fcb00be99107f415add3249ea898be338e7badac6fec52e110af4491e47ebe184c7009b673265572d113dfc56223ff0981c5fdff6b77ef485cd06944475567347260024771503565344662783841746e354e7a70447037737550784a6f326f61625002436953fd8b6def9c3516ae8039cb41c4f23814d3e3564aed515d26c326d0f0064df6c65315b70cd20c8b48590252d530747f4993f62362887a2c76bdf554300aa129dca87f15e79b2a7fa425db81813ff4385c0d2763ee4322f3ff80b0f9b007aebf803d4c518a36594fed9ff2fd2717035fc2601d7e82a5a3bfd042ece8c004edfa2b5f49bf55cbb3a014c087c6d97fe82e623804eb1694322f35cef407000da8fe00d74204d810c575544ccec63627f89fb86fe1300eff87bb86ff1f6aa0030dc23de8928118a8092194e3384cb1172e5ccbdd7bb3def7b0bd3505fa74700b96d08ac5283a4c52bd1a552e65c550cc5e2a6973c6f5780b52f0e42da445c0075cf3757c3d01c20310b7e7417e0cca432a64c7a5897e80b92b6361e74d1a5003c27f4d0c445e6ff3b1c317e90b0eadfd10cc4a7418a42854ea0129d4e4b0300de0bcc390ac3c15d79fc3b65cd08dfe85c9678615294b8a10e6d8abcee1fca002a80c302675fcc03511b2dfe16b1d993f58a1976007e89d5bb99aade45ab0d000e6f59a93f3a1e27fa75533b84320fd34cb48a3085b25f5bd29b01ecceba23006238d702ab7720d9fa89158c7f43d2d9cbb45527b523281b281c95c7571b7200eeafba99aff6351264bfa165d8f8bb0a5120258a14573008f4fe4a4e80022900e3f196fb98b3f8984bbff017ffb0a3a441fdfa6139e54f8fa3a6a36f4a06f6006e07c59410361fe82e58cc064b3c94da44a1ed127691decb80d8a6072e8b790057fa6ab69463c24babd1e18c5f17fe007bd2e73ba97db8815d21de3602e1e700f42e36f18e30d6f0463080ff1745ba020001d69643ac99f07cad0c1e2e728a00502fc981f43a733bfa2b1b7a10bfc14e3c003c9f2080403fa0e5c28422531200b281f551a543556e32fd9c003a35afba30e9bbfa0b746ae241fe4c29f9401300e5d0c83b4bff146e9a3523abeb68e54c91804fb10362841fe2b275ff84c0e200feffdd1bf7a32841b3292d2b30a431a5bc282cbc1c2319a5ab992b2a19ab3900382a392320b3aaa133a438b221b8a337b123b4237ec5d7382d964725f0019e006ed81937c1c86fd0187629921e26c2e1b5f48dc5999bee9f998204a423fe0200172e7133cd5c12e20b55255c6b11b6a0d5c14bf2ad77d2c94fe11ae2223bf100fe21387c63f426ad9470b8a816c3caae3f5c160bc86727bb0a1dd6acdffe910055b28040219fe09111e22dc80829f5bb913078acf39259d71012e3f3ff60cf00ce1c96ddfa14fc0d8fc996b7e80a800d75a819107c66c9d482af358c1b721100aeefb6eef6fe2cee3bf8480e2feffee3bfba04475654556b503262513455690065444a5579636e475457676f527048684e4736327547726d4d79376d754d6e0047fd8b3772dcbe2cd18867e19da169a84d23236e87cea0c66152fe92c60a9b00401361eb0a34ebadc394bfa038b0c6efd1fc9223ccfe7aeb7ba0eb3ab8f6c300b41cefd3b20b603ea403f4818e3601011efe8324cfc51e4942590f2a23555d00e01d1b3fb7e100763a268917858fd2f2c9edfc240217effb5c11fda1c688340047ffc0c304d4e64a7a95534bfe7f009e0c27413885246415fc02fdcabd70ec0067ea161a3afe07015bf45ea9aaff0580ddfb27868e8c7f7fdcb58feffb96b100fdff72d63fbfee5ac7f7fdcb58feffb96b1fd7e72d63f0b70375fc0c6f9631001ca2242cdb0aa8e9dd3d33d34a9c237cdb584a48e4e7f132f89343886c72460080fe047880e321c2fb11dd083635405f1400dfa1ac926c489f2b485531975a00f6bca3495ed78b948252208bf49d4a847f098077fa82a46d804de0805fff410059105092401ca794d8c65bc350228bc64774898f07e8089e49567bdd2bfe1600da67f4059988ff8529a812acac75703fc24fdfb735f848961894e071d0002d00604b9134d44e16733ebd7f6e697cb15b5fc289ddc37f82212d487fc11331e00020003fe02ea84858cb23950f6981bd3d1bb11cc36da83de9cfbff131b9400c000557f0580707735fa277116bf44edf0900c2ff843053393d771b2ad2c8f8490034e9ce8b3f803d2ce32dc070f72dfe1550b7f82f6d202f9076b8202c48406000423d4fe0300138a0c0d285652e2e2c1c9d4571ff199d795849c298d64426c5009b7f8509e68703297345d9a000b90724fd097c0a1c636cc0ddd2e7ac557c01006c054953bd7b61574706ee28c61eabdfc1002b973de9ff09d553fc16037ff000993cea0018c681ebc1c4266dcc6191da69dd15a1eabac8269792149440a9620085a51fa038212895c741720c5da23b3f2ca043f3f4053d77e36783dba8a44a0087ac6c741f2b963a7e7f1f13ce81fe16c971e0edc0b61d21472516de6356d900ca0e9fdaeee47b0030fe07279c0bbbf84c0fffe0585fff814132ff12160d40007f0f003f09fc3c01fcf7f0f00bf39fc3c03fd17f0e813e4d37fc3a00f9250700f0e803e4afbfc3c01fd47f0f00bf3bfc3c00fcbff0f00fe9ffc3c00fa77f0f0001fe73fc3c01fb57f0f013eeffc3c00fd0ff0f00ff35fc3c04fcc7f0f017f2005fc3c13fadff0f023f4dfc3c08f9e7f0f02bffc3e0cfa67f0f013f05fc3c0500fc1ff0f02fef3fc3c07fbfff0f03ff33fc3c09fc3ff0f047f27fc3c0bfb9ff000f033f65fc3c14fcb7f0f057f23fc3c0ffdc7f0f033f4bfc3c16fc5ff0f05f00f99fc3c18fff0f037e4b79fc3c1afcfff0f05bffc3e19fff0f88ff87fc3c1e00fff0f043e4b6dfa08883440ff4205778f6ff82147b945e172e7b17784cef3900ca30860b26de17566d3a3fdf4ed96c4c466727272c26864706468646ac271f00a0b4b9c58984ccc0c9898d9184b62b8f16381abe6e2ec84d1cc774f14a2c1600e719a9a5d6135be7545425fb7e87fd2dc4bdfc2608e7fcf9dfa264a66ba563003225d3bee8d257544e0d1def098e2de6086b2b6dcf85fe753005e05c8d7ecb000d61e80f6007900158488d146ece1972b780675dbe3e69a659e8f57bf4fc5b000e971603aed2f180e492fce013991b9864e95ab870795d76c87f007b30754600a049f3ac46ec05a38acde2e1c75d1d1f3b05acd49e128005fa032db3c21c6f009ffe6d55c21f2ed17f4fe4d59ff1e843ffb0d5c0102bf8383a51551438765500db3a15cc52f3177a933698348e08efe7c0e959598dd90e4c588c194dce198d0019594c98598c0d4e0c8cd84dce1958998d990da84ad820b246bd9bbbe4f84c00ec0eb5f848879c543a6155bf40488a5da792c415d627d7f25874bfc2608e7f004f874ab03552e18fb1bcb5bab0d5564d97076e2540826c1c571e0d5315b32d00e42a250449893bcc30416602828ea09fb5eb3016f8fe83bb41b40f3b04b2dc00ee73b2731ffa7e891de2a1c2abd026e66e1fd270b4256a6972a282e91b3456007a182a4cdf8f28e42befc744ec56ffc04ecf01afad1c3cf1c4a5baadd82b5e0035026d825fa02cd25ae9e3547a3f2fb7f4fd123bff1e843ffd081d283d40df00e85a57d087e09422948b260d5576a9cf3cb521e16a2c4526886469fd42cda9007fc0e02b7e8b91d1cfe0b01bbf64c8e8e07feffcb337fdff9666ffbff2ccdf00f7fe599bfeffcb337fdff9666ffb072ccdcc3f4392fbe1a2fbff977f57befc008f470ad4749ecd518964a7c7ea3d413efe13016ff4fc213631051f0a4af15300fa7e36a476dc53688dd3dd8b38f21a091373c74f5fd1b592f3a473e12fd1f00060f2bf80dfad343957757f809e8a409ac900477391e3d7c6f6663a7f48e31000103d4c0dc7f0711a23407b8370f47fc00c04a4af6eda3eac9c954d6283a93100ff2111a3fc0e02b7f0b91a3fc160377f4991a243fdfe468ff7f91a3fdfe46800ff7f91a3fdfe468ff7f91a3fcfe468fc30017e848c9fc6195334a819474d8d00b8e1840f036e8714c422a69fd4154a9ffa08ac21bf424644c055992ca6514b00254ce871c3abe2f541918bdf9fda66e06cdfebd3c902bdfd208381c25849f200092e3d0a1f68e85891b335c376a8fca58ee22f9d974bc29e95985388a8ba3200a9d1cbb7ffe0278b23445f135e391b5a5017c476d6a607c0bc843bcb9e7abf00d2167fe28037fa0c99f18e9e651e9e46f6b9c1708a579b16cd6355a15543aa00a056bf85779dfd05171a7fc09bcefe8258e1efd074c84b05922fd72e84774b002b86ee9a8bad03c02e75c3d3fa827253cebf81806101d4c09405820a0cdd5a001c14ef84891e2441c736c3aa40a6fd1b4d0d4f449fa10cfa91bd1d766745ba00eadf149a3eecb734952008841647f5719f523016fe83193d9d0e994600a5aa000ac564cc4edeb003d5551edbea31652d9fe410465ebf415f74c415a82ca1b200c08c6287e80b0a40672b3489aa80544f124a5484cdfd27708f9fa6893cede800d3f81407beb86943adc5626158362a93c931dfd01c771bb63813b36246e9fc00b1e4c80c3507c82017e833ef5004f0b7944594d54541bff7a2af5e2ead253400d1a18b79491afd835ab5b11314e7347d3dbc397e2679a4a50b86726fbfe02f0015c4161f37d673a5206fbe381fd2c53a9bfc240717f7fe6bdfbd01bbb55d8d000508d0c9cdc591618589394920d55cdce18551bd0d1dcd34ddd1bd99c0cd1d005dc1952d34c9c19d214bf62f44152bd70b09aa3f7a3503617a8e819ed1b3c400a655976cb50caf98179d4b9fc85cc0859903fa9f224039f2839e267f004f5200236f0cbc544c56063b5d6b50f3b991f9530c59fa426e17e18dff434677e5ab00d4e9c1995b08b72fe80aebaadf7189892e3d7faeacfd64d753f05033bfa163004278feb7f455faa47e9c66f8104b0fd21cdf03c22ffa0cd01c7bad250682f2005cc5bb3affc053795119f4009f3fe02173dcb6feffdc24e0e7f2053871fa0c00fba82418e535eb65e21dbf8068a21b8c90655da5bcd91e64e4b5baff18728f00be8864eb7f9d3d3c8c43fb06b73f8ef4e901b628d8fd5ccf7e5fa42367d3f400b16bebff0982b9fc7fa94ff9d9f38d9821a9f3fcfcb4d91aa30f021003fe020017bda5ee203c0056375ab5e6b306b11862f128820ac9c2da790c544e3196fa00e403f278c18c5e0f1c1bd5cf31b6ae63a08870d447a7ada6d5130afd209f0e008c075fa12fc6852b69ad32fd850c0fca6f22e36f18137690065563f505344300812f4100cffe83260debe709445f707e26a18547192820dcf01a05ad2712da00db4fd9bc733d1dfac03ac7cd594d8dcc998e7f7d4758fff1e81f9fa0cd9ab4001e1017c0388ff81000483011dff0130bd61755eec3a5e5560ad0aa40169833001da28e3831cff1397b5fe6c3dce036c2efd0a95c86055b152932dca5f575ab000a791415c8ae8b28d67e5f9ae46dfc2bc9b7e835c620fd647dab437eef5b22007f27d615ea8b3ac3359dd95d1af5fa017d1df539e58652c7e74a3b4144425000ebd798774712acd2fd98f85b656e26b517f97ca11ddcc49ae4d32130dfe18300aa5fe13038bf66b25e1903305edfe8fb0ba8affe37edec15275f7f79f843f5007c4c7e84fecc64bc31ba123ea6b10fd677dab40f5b0321080bb83c9ffc06000022ec1817370ca6dd6296ed7245636cb64338d08ce9ee674f22200ff0eb66ad001fc46d9aff0380adfc2ed9aff0580ddfd27203917f7fc80ffdff203ff7fc8000ffdff203ff7fc80ffdff203ff3f480ffc0c3d800a0837e84d6faa82824894d00380ae63cf3b32c705cb15438b3fd222682d8ac7ff7d6cb19c9c98b3329bb130019a1a991c999a1a329a321c32181a9b9ab0b21830981c9b1c1bb299b19c1c100b9cb11a189c30b09a989a321ab31c9a1bb29c1a9b333233337f2f80bffa229008488b82a53efc0c80b43073df651381c8f83f2688daf561a73f689c25048ff00af98adbf84c117ff6a793611ffcf98e5a462681cec9ca052943511dd04495e00503f3f404d39d59a5f740cc797204f5b02070d203e538cd33f0e5dd9a9664a00230ef9383a667662735cbd3615a66a39668d2002ffe91c908afd0b967360b2004dd28ebfa0211fb7c734a3bb37a4401141e7ae3ccb9050e5ebf4e4c4910de0007e82d0832fd0c65531aee8db99a1b0d4b8075e520fbe601e20adfc01a722aa0037ea232a9841fe0e01a081cd318679fbb0058a20f4adf4e5c8e4925c85bff900500683681e7ae8e21afdf21a21f10db059216c5820a5bfd436b59015fa0d2b0063a8f8ff45656c77e8d924f945fd0aaea25055fdd292fe45f57d8c22468e5a0074f8016d6aa2f051617fa2addc521809184e72a3fc201a487eb1fc14023b2100f4a27c05369544cf46d9532bb56726e81097e600fb7fe8f1d1272cfd0bae6c00361fa038d7b35ef4dbb80cb0965eb6faf7da3e33e1b3b499ca4ff48c8e0f300019fe87573aa474e29ac23538b51cc9f01b4f94946fe0067b14c0b776bf49870050768dc1f9a4bcd2ed53fb7fc33d639e15fa97ac48fe0017c50147e869919800a9be3f869ee11f05a665a0166f1ac941bd10c641fd27086a3fc2601dfea16400c44e737fd0b7972bbbf328139eebd81040b434c0e9af00797e717c8b6ebfe900fb88f0b450e03f43462385167d0065cad52ef899c6e9c0f34611dc9af3398400a2f404d42d50c154c90f6e88520b1ba2dd9f1b1424400dc44abe813000dfe8002c4d8cfd0b43ac40df4bb2844691e3976410c82bc6c8b85924f73c376891bc003fa2a847f011b8e6f3420bf4045d5f7f9888f5bf84c063fe3723f011b5433d004d67f86797e0467a62a72eefd203479e29fc3e049e0017c83417e86193f5cc00bd940104fbb39fd0d03aa0066dac66686d5afb237020fe166c381913fcec6b0030aff443fa0316c2b9a4ff4782ee0357f1034ddfc7cd07217e900b5e5ba9210014273b197e14d095be40ebd6c039cddef545371a53130fc15ef005c6f74f1800a8c5d639942e0952a1064ba748679fd015b211356c13153e9640a818895e36005bfeba64e70200fd5a5e70c09aa493b47fbff516abfc3559b9fc2218e7faf0008cc3f4f17aa344baec507fb58dd73f67d2ca0ff0f827ffe6430a2fe2c9277f0067d2dc0ff8f8c60bf94c2fffd047308411fa1cf4e1c60721a5ae65cf3aa0b900268dd4769d7b562ba72f3f539e9c3ff0980c5fbc6e6109a7f42d91b98151ce004a4259967f000e49f2de5c9de3c0802be301ccdff6e5408329fa26f72e61ca0046b6a3037f412f19b5705c8f2ff1eb4aa5bfe38042e90288189be6b672a39f00d01328e259ae609aff3aaa0b6e5ffc010b950de8a52a2dd46049844fb441a10047f9eaccbff5347e6e7f098287fe32a934fe05051bf47ecb1affafaaca58d8009c9a5919ff4e2e98987b53ab6b832b91732bc31b430b733b2fe8a07b62fd0b001a0856da329a58b8ed256d64f91aec13c95cca5d3598d2db063fc2b3ac017100d9fa6d7f24ceb07e1ffa1b82457db56ae581785a078675882706286be11e3f00800a26cd15fd1d70d71ce21fa1c5e70849820877c2e5392e3b2bc25e2ade1f0065deef386ff714d3948afe86ca070252ee64fdd9c775f2bec5c19cda61502500314b904fd3471f152d0b41c882adfc060c68fff06831b18f24d7ce678a5b4e0086eaf7fdecb78b8ed2f067ffa3e80b2087f83863190492a953cd8956b08551000e8e3da5f05279a2746fe4e18c7f84c062fee318c4208ff4398690e8781bd4002e8883b06dadeb727f80b3d0c36bee7ab17bbf4b9e30f7f098085fbfeeea5300f689dd4a7e86d5b3d3ea694a8e837200c6b09c8e7a73c6577f69b6979eac0e004fdc5a9d2e044ffa1d216ee82da34248bbbbfc12efc38830bb94b37e51fe3f003f4a36f4fff098079fbfeaa7bbf692feb0157e874a6b1a23c0f592b17433210045cd2cf7f9c591556aa02b3fd48afe81fc2602e7f0e84476fe9fb895fd00c000ccc3f4dd3f82a1125f94a891e63cc522f756f39449cab3a5f2b2a207fca3780056026b8ab21f681e96c6a85ebfa9b3ee327f00eca4bebb367619e47d464df20024a0b186d44463c7c1cdfa4669ad4abf438c94b61a54174d9f75870563bf9d007a6e81ece7f005c195a9d35fa4973204aff4398808d167c32bb956e8a72523001d7402fb9a657b1484f47e92e53ec2efe0e1e4ff452afee7f168f27fc26021007f7f8f27fb474bcdd88dbf43a4dff7e8a57ee2fe9abf3e3ff982fcf3664656003343333fef5bf3ff8f40fcfe081c24dbf4391d60ad2f813a15b678e5f1f1cf003d9099fc0001b13586ff14121ffc2601e7f7f921ffb462c9a884dff438d2ba0074b774d2f85bb7fa52184e1a7f0036d7e87f7be9db12ddfa8f62df3f84c05b00fd3f3dfbe56e0db29d00dc1e22b058370c0a08232b9dc50f748f8b16bd97d4006d2639e8bae6842c22448a417f6a1a45a7024a4c4b20de40e66cd177a6926b004538dbb840ba9fa462823ff43cc5f6d6276564f1a2e29557519e01d88a849800489af1ebfee298cd73afe0e4c511c0170fd3d4ae14167c434eda4f1826350b006cbf8073fafec403a4f3f83c0e9944968d0b3b7f1c4396d9e75ca1ae58076800b5bfec5074cf7f8394e80aeb59024d08abb8a1d24934a88a4673cb731efd01008a287fd87137c01ffe858e56f92944a1b5a403137b6a0f8471caab2e84e9d3001bc18d3fe27da8bfcbc1ac84f773ae9fc073962c7e879a53f5d4da6533b385006bbb275f593f7b9390cb9aaabfd444e184b3fc1c03470133f266b99560b9c000759d9a41f39497e80e0f7e2957fe4401a16bf8380d15e4f812beed13aee4e1003d2bbbc2a7e5f7a5dfe0001abc7f950068f383c61fb284e167c39874e562e900b1ee2da13c2efe4404e96ff8380d14c19ce7e6d60043578dee2f2636bb892200add2fadfd45348a9fc18034dd1c4a72bb2f1194e91d398ff57c907f8086f660064ec76a7ca9e53b7ab1c5aadd4db2c66b4669e5150006468a070ae02e392e100469bfc3091e1fc2601dfeaf2ad34416b6b1373ceea36b9ae97156a88c3116900b7b058df32d9e9e9787c7134cabb96915243ff010b972b4570b5369566e790006d824b69e735549fd7a21b2fb5a7177b820de8fe91c76965bfd0e2f483087e00fb91ec7faf6f3058ac7e7cbb59e44b3767e9fc88198af7f0703edaa5a6368f0082ef77e5042d091a53198465d80c3d9fc881cd327f0704be052f8fed1cd81f002e499ceec8b09a56932d05647bfc86201b0337e873da95b6d55052b8ef658400239573b9a81c94c7d2708ae1fe26a53da8d0761fe1a2947fc511c7d1eab63e00969b67fc04176bfa0828516ebf8390e10aac011058e332bab220c42ffae216004894e04dbffe2443840e0763f83958022278c9683f83fbec67643ba4f7fd5000c4c9c12adfe2831c3f84c03cfeff31c3fa8d580048203fd0bac34230d40128003c7ddcb6965023f48f306e78201b1962def72af728e0e764dea4e64353d40800c0cbb8a482e7854990ddfc06ac11ba91ba2feae4f3d0fd21d78800dfc6d381005fbe44a0cceaff8d3b9803778e838d033f481490d7f8f247089c6bf47cfd3300ff0f003e3ffc7b67293797e8f64fa846fd04ca6fe57fa172a8305b8d8252e2006dc17ea91790b03f419d28d083c049b1c65f36509b3a8b54628db900484a79005fdd01b9c5ac2354ce02e29000000253f8f91c4ff2c2242ff0fd1d1fa278ed004b000be18a08b3f82da7544aa209432d143c79cab48683bbe6bbdf140e6762004c40bfe012df7f8500e5a400004022fd234e39c420dfa14308b826e85a517200298a87d58d7f5f8c35c639cd0b3f33abbddd4ff66c2866d87393f04aaa81e50066bb28db24fabad4137159006c2eb056cfa1086c9f4cd46106c665570f0d85003c05556f169ac68cb70fd94bf06ca9750c4c6b4f159cff00573c6ca9fa4967001949bf83012422946f00ccf4fbf427603fb5d02018aa19554285802cfe7a040092e7f4820f32044463479d86f6a82961cc27c0db084fd59a7e724f3068a48a00d484afede71627259fc11782cb84d43313a3db811e0e2428d6c7ff0059759d003b403e71bcd06c867b7dfa49c026ce3f82824904e5e994ce62d83634596af400dc6a370df2783cc1fae59cfd8332ac4a9554d7561f6069a802552b88bcb69800be9877ad7729a0fd5df0b4f6399144261fa571602ff84c0e2fdffd52c7fbd0002f8c161e58da59da1e9b949c11561a98d958db9651d159965591dd948cdc530095cd1e8d5a948cde1a5c95598c538c7f6291f1c28363e08d4c0c02358780140031ce892886703832f63b8133f0f55f3468be01c638aaaaf230c45214c3343b00320619809e29d8dbfaa9787a2cfa996722bb235d17d7f91991d988a61016e100f92bf80c00456fe046a15250b96b618d38ef46a737326f501332792e7ba73f00a6da858dfd61094aacc6c68646661fbec12957f8f00fcfe077e2507f42864d00f7f019cbdfa28326fbf48dadf4097e853df5dd45c9446b7b2c369d8d56382c00a751bcbd6df76a140508efe27dfe3f84c03bfd433af9803fa169404420a8360053a9c333b4ad72876504ef723902edd78d4e36711ff4db02cf35f97ea1157f006d1b121528b1ef88173602093a07a3d99fd01adf29af8449ee56b643ac7e7d0020f36d083e9280f608b296f7d47562ce0a118ccbebcd13d6994ea4d09ede5b007c9e33a82a03fa6493877508ab711096d7d141347bd527c7ce8a14e651b97f00490ab35a2fe8756d73b3d679ef8cf28fdf6d92eb47c271e726f69285fd1ecf005388c49080b4dbccbfc06002367f0275b1fa2930d3ff4924e429bc202cc1dc006ff0200090606885b28cd3182d50ef51dbfafa4104bc67273e9ee007f9ffd000449ba19e8a692c36b6079d63ba80fbe4ea6cef92e3c84b6306be0ba89a926800920043ff15926ffc260717f7f926ffd3c49b87a232ba7e826b29bfd36dc15100fa146b09129618d58dd590cc9a11939dd0928c5455dd15d6155d98db93110c0059d550995cd293555cd69d1acc8dda167fa2893771b4f7782c5805e3e4179d004cbff095586a830e85c74c85cb0ad56048a6b38bef1e7a10f24925062c1d4c00ded0e1214fd008f02803901fe85f91984e7b4bcb0bfd2341c180f53034708000b260d4dfc0600259fe826de88fd018e719c2659b1c76b1e06872886d3e39130015a09771fa85b7a23f81c056fd18ae393fc140377eff8686afdff09a69fbfe00134d3f7fc269a7eff84d34fdff09a69fbfe134d3f45c389e1440c64202c7510027ff018008bb060cd141fa61774cae390d1f246abfd44e5fffa7377447f84c000c1fe1150c2c2702a37a0b90b4e4c50f0a3f492ee7880b4847e850d8b80105002694d83953601068bb2e2075bbb424e8454458d53236947e63a5f1a8f0b4d000934b2f2327daed3f6bb2ee75ff0844bd009208c3767f860738bf84c043ff38000187fe922ec2121fe18445c0d842b0dc444e71bf47b74f62c7f0feb2dfa7f7003a5bf80dfda2dfe0b05acad2e50329dab60ce06aa6ed7f32b096b4c7a1534a001b77bf899fda15ce078270c2d8d7ac53f3fe0064aca3cad3e94d914f43f80c00f402ffe0b073ab9c6506946bae82d5599ee2f2ce104495a8da011eddf0ff48004de567e848dacadc3294d511f091d215811ad1187daec9fb01bbacba1980fd00274fb39fc2601dfe8f66f42a0fd20bae9c220225fe02ec2f3cb349ad0723b800d78314cab888e29f6ab55bf423f94f44c596111b82479c8e5296f8e5098427003c50f92be388c44aec506f34d72774b222aa2efd05cf89ec5fc1417b0281fc004a23cc0651198473fd1c2c7e80a8bb73a5f3b08e0240876fd2893083fc260100e7f0fe7e23371df3d759e2ac59bb81e434f8b0c9b9260450886afbe8d36ba9005b3682921fa3e16eb8abf5211d7e189a989b9b9b999c197e9698d7a95c4cf600e61f4a1ea44a23af005e52ce9b93b20c36d3ac96485404228fa2786ba295fa003be164129c52548a99d4d478358905aedab02a44d65174a4430cb5e52fbfd20036ce5952e3fc1424e01462e4a0d9a97722d5fda86db43b1f07a852ea35abe6002c6fe978e75dfe13010ff87f59e91e660268f056726e78ab886a3ae886c97100f83c382fc113643d3e99620d17afbfe1e66e867f9141ac353538363330303800383239ff2d31dca0e31cf1c0e40dbcddc711ba123e0549f584d708452d779c0037ace6ef90b9b38cf2b14329c9d8190efd8a3a580028b7a16a13efa2ce6fbb00cc7714c5544a3264d87e91c375c07238194fe0a192818bb925288b72e3c28a00120a2449021bcd6ba76ca8001a58bf4588e5d837eb83a041fd3f8b46dcbc330077e738ed519301691e5d913a1bd0ef7ebfe187c82fe1303f3fc713fe4ee8ff00e2e84b52d40be06ec17cb5efe175fecb5ebd40c6412784f87f6788e5dfeb65006a0bfda3cabeffc3e121fef6e55f7ff1110537f0f8707fe5420d8fe270c8ff00eb04257fa4517b6bfffc43f7fc40091ff178b4ffa7b94bdfe20a08048bf82400d7182ca36941df7f562f33bdeb744fe00310a4f661d643f11d40ac0a3f49f300ecc7e898fca8ff232a94654100947f051bee0e93fc03356b9249b00c7cde9e00013c624599b0b43be8d6df3e6fe9f8ee4505ecfafd7e1dc8ae3febe62b6fe100304dbf7fc7722ff05ef937527e59ecc5e9b348d275a7ab75c83a3e8431620c00f82b45cf1467b5d2e034a6a1a26f93675d3566ce515f4a526fb308801d85590003531047aeac426ca1ca4d803fc4661320844202b5ba837f0180082905d8e50028ab9bfa0305ab887cceedb04afa1379076e071e2cc9127f4a539d6ff09007009faff02c31744f37433578dbba66d93e1158d987490a7d25b43ed341e5d224003c67931929c5d31ba5cafad6d0fc18bb90a677125f0cfaadfd12274443ef3d00dd1f9c7ccf17f48e5bb380e4894202ab0ac87f0200090602bc8729effe024100e139c735c2508108c8d42efe00437a21b668d1e0d3f450659d4381ef80522700a9df7e9f0cb3900fe06011bf8667a1eb65ef6f92c1fe2bff33f84c0c33834300533fd5a5c1a5fac032ce7f84c0d3fd0fa58882ffa1b2bebd04a762d59e248a0038fb9a557d311d60d09410b7bff57f98680dfe86befc5186262d4fa6a7c3dd00ac081c90fb48b2bfc792be9fd60644b437fa1ccfcdfce68904f306666295e200255d273b42b011a511e1ff7fd71fffeffae3fffd4063bdc43fa129ae460485005f0697a538f207072c71547585e626915157fa0a4204b179dda406dd775b9900d9f291d0420eedebf1834d8d8e2961bc0b90b92fe01e79fb7f8ae420fe1303008bfbfed58fde90f9369c68f4ca8272e29aeeaef0e896ccd284e66662f288a6009cca706ac488d68c86e872e8c49cea62a486a88a6ffd156ac1d602d547f0030024829e0d662ac2b11be43b70e6126c96d50f634f9168af698a88665d0985cc00319a143e911c239f116abb64bc0db4b9c3ca27252b803791f20b71736b7fa400718d149bf42dfdda9c1eca7e80a2cc52f412ccf3f7988bb7f4b9d475873d1c0010449fd3ad581b7f08a58c45261effc46fda2cc0fcea5438e661dbc192a5380020ed54f0f19d7893fe7eec92412d919bb379eb483e1930be7c1cb815e0a86000ae922c2c2bd0b4d577b9d0911fcc68cce527eb00f7b70623233a2676f5d77300276758b079e6bf5072631970b39ffd24c8e36c483fc1c3c7cd9b48bb352c84007089b954758e33815f0cb71574ff7f8f1ffdfe3c7fea08cce719fd0e4c1ba8003f2844b55e764e6c87d5a05b7e0217ac746f7e3faf84abd853af17323699440051262e69b9d3b19fa2ff4606ac0ce1e3cd02e02975d89db5e7f6fd320ade97005d293f51badcb97623f28f405c2d1a8a12541fccb6dfebf0863254284e4e2a0028696342953d3b13efd29546dbb66267aaeab11d537076a231f3eaae5d91e800ff913cee17c73f4372160a4f72f8939019081ae0e74e16457c6264e638481700e9b642c10214201ec0fd067d94cb1052c0d297f3188853368d79d5c50e60ad00c1727e0cad0f181fa4174b101300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -2 -testfile‚€ * “<'½¬kdr3RÄí(:aÐX}1áÄá>×9]‘4 \ No newline at end of file diff --git a/go.mod b/go.mod index 1c1aebf..1fcdb75 100644 --- a/go.mod +++ b/go.mod @@ -12,6 +12,7 @@ require ( github.com/go-openapi/spec v0.20.9 github.com/go-openapi/strfmt v0.21.7 github.com/go-openapi/swag v0.22.4 + github.com/go-openapi/validate v0.22.1 github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d github.com/jessevdk/go-flags v1.5.0 github.com/node-real/greenfield-bundle-service v0.0.1-beta @@ -47,7 +48,6 @@ require ( github.com/go-openapi/analysis v0.21.4 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.20.0 // indirect - github.com/go-openapi/validate v0.22.1 // indirect github.com/go-sql-driver/mysql v1.7.0 // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/google/go-cmp v0.6.0 // indirect diff --git a/logging/log.go b/logging/log.go index 0e2311c..9bbac2b 100644 --- a/logging/log.go +++ b/logging/log.go @@ -1,11 +1,12 @@ package logging import ( - "github.com/bnb-chain/blob-syncer/config" "os" "github.com/op/go-logging" "gopkg.in/natefinch/lumberjack.v2" + + "github.com/bnb-chain/blob-syncer/config" ) var ( diff --git a/models/sidecar.go b/models/sidecar.go index 43ff2db..3636414 100644 --- a/models/sidecar.go +++ b/models/sidecar.go @@ -8,6 +8,7 @@ package models import ( "context" + "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" ) @@ -17,22 +18,86 @@ import ( // swagger:model Sidecar type Sidecar struct { - // name - // Example: Art + // blob Blob string `json:"blob,omitempty"` + // kzg_commitment_inclusion_proof + CommitmentInclusionProof []string `json:"commitmentInclusionProof"` + // index // Example: 1 - Index int64 `json:"index,omitempty"` + Index string `json:"index,omitempty"` + + // kzg_commitment + KzgCommitment string `json:"kzgCommitment,omitempty"` + + // kzg_proof + KzgProof string `json:"kzgProof,omitempty"` + + // signed beacon block header + SignedBeaconBlockHeader *SidecarSignedBeaconBlockHeader `json:"signedBeaconBlockHeader,omitempty"` } // Validate validates this sidecar func (m *Sidecar) Validate(formats strfmt.Registry) error { + var res []error + + if err := m.validateSignedBeaconBlockHeader(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *Sidecar) validateSignedBeaconBlockHeader(formats strfmt.Registry) error { + if swag.IsZero(m.SignedBeaconBlockHeader) { // not required + return nil + } + + if m.SignedBeaconBlockHeader != nil { + if err := m.SignedBeaconBlockHeader.Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("signedBeaconBlockHeader") + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("signedBeaconBlockHeader") + } + return err + } + } + return nil } -// ContextValidate validates this sidecar based on context it is used +// ContextValidate validate this sidecar based on the context it is used func (m *Sidecar) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + var res []error + + if err := m.contextValidateSignedBeaconBlockHeader(ctx, formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *Sidecar) contextValidateSignedBeaconBlockHeader(ctx context.Context, formats strfmt.Registry) error { + + if m.SignedBeaconBlockHeader != nil { + if err := m.SignedBeaconBlockHeader.ContextValidate(ctx, formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("signedBeaconBlockHeader") + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("signedBeaconBlockHeader") + } + return err + } + } + return nil } @@ -53,3 +118,145 @@ func (m *Sidecar) UnmarshalBinary(b []byte) error { *m = res return nil } + +// SidecarSignedBeaconBlockHeader signed_beacon_block_header +// +// swagger:model SidecarSignedBeaconBlockHeader +type SidecarSignedBeaconBlockHeader struct { + + // message + Message *SidecarSignedBeaconBlockHeaderMessage `json:"message,omitempty"` + + // signature + Signature string `json:"signature,omitempty"` +} + +// Validate validates this sidecar signed beacon block header +func (m *SidecarSignedBeaconBlockHeader) Validate(formats strfmt.Registry) error { + var res []error + + if err := m.validateMessage(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *SidecarSignedBeaconBlockHeader) validateMessage(formats strfmt.Registry) error { + if swag.IsZero(m.Message) { // not required + return nil + } + + if m.Message != nil { + if err := m.Message.Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("signedBeaconBlockHeader" + "." + "message") + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("signedBeaconBlockHeader" + "." + "message") + } + return err + } + } + + return nil +} + +// ContextValidate validate this sidecar signed beacon block header based on the context it is used +func (m *SidecarSignedBeaconBlockHeader) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + var res []error + + if err := m.contextValidateMessage(ctx, formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *SidecarSignedBeaconBlockHeader) contextValidateMessage(ctx context.Context, formats strfmt.Registry) error { + + if m.Message != nil { + if err := m.Message.ContextValidate(ctx, formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("signedBeaconBlockHeader" + "." + "message") + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("signedBeaconBlockHeader" + "." + "message") + } + return err + } + } + + return nil +} + +// MarshalBinary interface implementation +func (m *SidecarSignedBeaconBlockHeader) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *SidecarSignedBeaconBlockHeader) UnmarshalBinary(b []byte) error { + var res SidecarSignedBeaconBlockHeader + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} + +// SidecarSignedBeaconBlockHeaderMessage sidecar signed beacon block header message +// +// swagger:model SidecarSignedBeaconBlockHeaderMessage +type SidecarSignedBeaconBlockHeaderMessage struct { + + // body root + BodyRoot string `json:"bodyRoot,omitempty"` + + // parent root + ParentRoot string `json:"parentRoot,omitempty"` + + // proposer index + ProposerIndex string `json:"proposerIndex,omitempty"` + + // slot + Slot string `json:"slot,omitempty"` + + // state root + StateRoot string `json:"stateRoot,omitempty"` +} + +// Validate validates this sidecar signed beacon block header message +func (m *SidecarSignedBeaconBlockHeaderMessage) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this sidecar signed beacon block header message based on context it is used +func (m *SidecarSignedBeaconBlockHeaderMessage) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (m *SidecarSignedBeaconBlockHeaderMessage) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *SidecarSignedBeaconBlockHeaderMessage) UnmarshalBinary(b []byte) error { + var res SidecarSignedBeaconBlockHeaderMessage + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/restapi/configure_blob_syncer.go b/restapi/configure_blob_syncer.go index 727dec7..4afbe88 100644 --- a/restapi/configure_blob_syncer.go +++ b/restapi/configure_blob_syncer.go @@ -4,26 +4,18 @@ package restapi import ( "crypto/tls" - "fmt" "github.com/bnb-chain/blob-syncer/cache" "github.com/bnb-chain/blob-syncer/config" syncerdb "github.com/bnb-chain/blob-syncer/db" "github.com/bnb-chain/blob-syncer/external" "github.com/bnb-chain/blob-syncer/restapi/handlers" - "github.com/bnb-chain/blob-syncer/service" - "github.com/go-openapi/swag" - "gorm.io/driver/mysql" - "gorm.io/gorm" - "gorm.io/gorm/logger" - "log" - "net/http" - "os" - "time" - "github.com/bnb-chain/blob-syncer/restapi/operations" "github.com/bnb-chain/blob-syncer/restapi/operations/blob" + "github.com/bnb-chain/blob-syncer/service" "github.com/go-openapi/errors" "github.com/go-openapi/runtime" + "github.com/go-openapi/swag" + "net/http" ) //go:generate swagger generate server --target ../../blob-syncer --name BlobSyncer --spec ../swagger.yaml --principal interface{} @@ -77,37 +69,34 @@ func configureTLS(tlsConfig *tls.Config) { // scheme value will be set accordingly: "http", "https" or "unix". func configureServer(s *http.Server, scheme, addr string) { var ( - cfg *config.Config + cfg *config.ServerConfig cacheSvc cache.Cache err error ) configFilePath := cliOpts.ConfigFilePath - configFilePath = "config/config.json" // todo + configFilePath = "config/local/config-server.json" // todo if configFilePath != "" { - cfg = config.ParseConfigFromFile(configFilePath) + cfg = config.ParseServerConfigFromFile(configFilePath) } - if cfg == nil { panic("failed to get configuration") } - //cfg.Validate() - db := InitDBWithConfig(&cfg.DBConfig) + db := config.InitDBWithConfig(&cfg.DBConfig, false) blobDB := syncerdb.NewBlobSvcDB(db) - bundleClient, err := external.NewBundleClient(cfg.SyncerConfig.BundleServiceEndpoints[0], cfg.SyncerConfig.PrivateKey) + bundleClient, err := external.NewBundleClient(cfg.BundleServiceEndpoints[0]) if err != nil { panic(err) } - cacheType := cfg.CacheConfig.CacheType - switch cacheType { - //case : - - default: + switch cfg.CacheConfig.CacheType { + case "local": cacheSvc, err = cache.NewLocalCache(cfg.CacheConfig.GetCacheSize()) if err != nil { panic(err) } + default: + panic("currently only local cache is support.") } service.BlobSvc = service.NewBlobService(blobDB, bundleClient, cacheSvc, cfg) } @@ -123,40 +112,3 @@ func setupMiddlewares(handler http.Handler) http.Handler { func setupGlobalMiddleware(handler http.Handler) http.Handler { return handler } - -func InitDBWithConfig(cfg *config.DBConfig) *gorm.DB { - var db *gorm.DB - var err error - var dialector gorm.Dialector - - if cfg.Dialect == config.DBDialectMysql { - url := cfg.Url - dbPath := fmt.Sprintf("%s:%s@%s", cfg.Username, cfg.Password, url) - dialector = mysql.Open(dbPath) - } else { - panic(fmt.Sprintf("unexpected DB dialect %s", cfg.Dialect)) - } - newLogger := logger.New( - log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer - logger.Config{ - SlowThreshold: time.Microsecond, // Slow SQL threshold - LogLevel: logger.Info, // Log level - IgnoreRecordNotFoundError: true, // Ignore ErrRecordNotFound error for logger - Colorful: true, // Disable color - }, - ) - db, err = gorm.Open(dialector, &gorm.Config{ - Logger: newLogger, - }) - if err != nil { - panic(fmt.Sprintf("open db error, err=%s", err.Error())) - } - dbConfig, err := db.DB() - if err != nil { - panic(err) - } - - dbConfig.SetMaxIdleConns(cfg.MaxIdleConns) - dbConfig.SetMaxOpenConns(cfg.MaxOpenConns) - return db -} diff --git a/restapi/embedded_spec.go b/restapi/embedded_spec.go index 3e4f82d..8056820 100644 --- a/restapi/embedded_spec.go +++ b/restapi/embedded_spec.go @@ -30,7 +30,7 @@ func init() { "host": "blob-syncer", "basePath": "/eth/v1", "paths": { - "/beacon/blob_sidecars/{blockNum}": { + "/beacon/blob_sidecars/{block_id}": { "get": { "produces": [ "application/json" @@ -43,12 +43,20 @@ func init() { "parameters": [ { "minLength": 1, - "type": "integer", - "format": "int64", - "description": "blockNum", - "name": "blockNum", + "type": "string", + "description": "Block identifier. Can be one of: 'head' (canonical head in node's view), 'genesis', 'finalized', \u003cslot\u003e, \u003chex encoded blockRoot with 0x prefix\u003e", + "name": "block_id", "in": "path", "required": true + }, + { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of indices for blob sidecars to request for in the specified block. Returns all blob sidecars in the block if not specified", + "name": "indices", + "in": "query" } ], "responses": { @@ -125,15 +133,57 @@ func init() { "type": "object", "properties": { "blob": { - "description": "name", - "type": "string", - "example": "Art" + "description": "blob", + "type": "string" + }, + "commitmentInclusionProof": { + "description": "kzg_commitment_inclusion_proof", + "type": "array", + "items": { + "type": "string" + } }, "index": { "description": "index", - "type": "integer", - "format": "int", + "type": "string", "example": 1 + }, + "kzgCommitment": { + "description": "kzg_commitment", + "type": "string" + }, + "kzgProof": { + "description": "kzg_proof", + "type": "string" + }, + "signedBeaconBlockHeader": { + "description": "signed_beacon_block_header", + "type": "object", + "properties": { + "message": { + "type": "object", + "properties": { + "bodyRoot": { + "type": "string" + }, + "parentRoot": { + "type": "string" + }, + "proposerIndex": { + "type": "string" + }, + "slot": { + "type": "string" + }, + "stateRoot": { + "type": "string" + } + } + }, + "signature": { + "type": "string" + } + } } } } @@ -152,7 +202,7 @@ func init() { "host": "blob-syncer", "basePath": "/eth/v1", "paths": { - "/beacon/blob_sidecars/{blockNum}": { + "/beacon/blob_sidecars/{block_id}": { "get": { "produces": [ "application/json" @@ -165,12 +215,20 @@ func init() { "parameters": [ { "minLength": 1, - "type": "integer", - "format": "int64", - "description": "blockNum", - "name": "blockNum", + "type": "string", + "description": "Block identifier. Can be one of: 'head' (canonical head in node's view), 'genesis', 'finalized', \u003cslot\u003e, \u003chex encoded blockRoot with 0x prefix\u003e", + "name": "block_id", "in": "path", "required": true + }, + { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of indices for blob sidecars to request for in the specified block. Returns all blob sidecars in the block if not specified", + "name": "indices", + "in": "query" } ], "responses": { @@ -247,15 +305,106 @@ func init() { "type": "object", "properties": { "blob": { - "description": "name", - "type": "string", - "example": "Art" + "description": "blob", + "type": "string" + }, + "commitmentInclusionProof": { + "description": "kzg_commitment_inclusion_proof", + "type": "array", + "items": { + "type": "string" + } }, "index": { "description": "index", - "type": "integer", - "format": "int", + "type": "string", "example": 1 + }, + "kzgCommitment": { + "description": "kzg_commitment", + "type": "string" + }, + "kzgProof": { + "description": "kzg_proof", + "type": "string" + }, + "signedBeaconBlockHeader": { + "description": "signed_beacon_block_header", + "type": "object", + "properties": { + "message": { + "type": "object", + "properties": { + "bodyRoot": { + "type": "string" + }, + "parentRoot": { + "type": "string" + }, + "proposerIndex": { + "type": "string" + }, + "slot": { + "type": "string" + }, + "stateRoot": { + "type": "string" + } + } + }, + "signature": { + "type": "string" + } + } + } + } + }, + "SidecarSignedBeaconBlockHeader": { + "description": "signed_beacon_block_header", + "type": "object", + "properties": { + "message": { + "type": "object", + "properties": { + "bodyRoot": { + "type": "string" + }, + "parentRoot": { + "type": "string" + }, + "proposerIndex": { + "type": "string" + }, + "slot": { + "type": "string" + }, + "stateRoot": { + "type": "string" + } + } + }, + "signature": { + "type": "string" + } + } + }, + "SidecarSignedBeaconBlockHeaderMessage": { + "type": "object", + "properties": { + "bodyRoot": { + "type": "string" + }, + "parentRoot": { + "type": "string" + }, + "proposerIndex": { + "type": "string" + }, + "slot": { + "type": "string" + }, + "stateRoot": { + "type": "string" } } } diff --git a/restapi/handlers/blob.go b/restapi/handlers/blob.go index d657088..09adb12 100644 --- a/restapi/handlers/blob.go +++ b/restapi/handlers/blob.go @@ -1,23 +1,69 @@ package handlers import ( + "encoding/hex" + "fmt" + "strconv" + + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/go-openapi/runtime/middleware" + "github.com/bnb-chain/blob-syncer/models" "github.com/bnb-chain/blob-syncer/restapi/operations/blob" "github.com/bnb-chain/blob-syncer/service" - "github.com/bnb-chain/blob-syncer/types" - "github.com/go-openapi/runtime/middleware" ) +const rootLength = 32 + func HandleGetBlobSidecars() func(params blob.GetBlobSidecarsByBlockNumParams) middleware.Responder { return func(params blob.GetBlobSidecarsByBlockNumParams) middleware.Responder { - sidecars, err := service.BlobSvc.GetBlobSidecars(params.BlockNum) - if err != nil { - return blob.NewGetBlobSidecarsByBlockNumInternalServerError().WithPayload(types.InternalErrorWithError(err)) - } - payload := models.GetBlobSideCarsResponse{ - Data: sidecars, + blockID := params.BlockID + indices := params.Indices + var root []byte + switch blockID { + case "genesis", "finalized": + return blob.NewGetBlobSidecarsByBlockNumBadRequest().WithPayload(service.BadRequestWithError(fmt.Errorf("block identifier not supported, only and "))) + default: + var ( + err error + sidecars []*models.Sidecar + ) + + indicesInx := make([]int64, 0) + for _, idx := range indices { + i, err := strconv.ParseInt(idx, 10, 64) + if err != nil { + return blob.NewGetBlobSidecarsByBlockNumBadRequest().WithPayload(service.BadRequestWithError(err)) + } + indicesInx = append(indicesInx, i) + } + + root, err = hexutil.Decode(blockID) + if err == nil { + if len(root) != rootLength { + return blob.NewGetBlobSidecarsByBlockNumBadRequest().WithPayload(service.BadRequestWithError(fmt.Errorf("invalid block root of length %d", len(root)))) + } + sidecars, err = service.BlobSvc.GetBlobSidecarsByRoot(hex.EncodeToString(root), indicesInx) + if err != nil { + return blob.NewGetBlobSidecarsByBlockNumInternalServerError().WithPayload(service.InternalErrorWithError(err)) + } + } else { + // by slot + var slot int64 + slot, err = strconv.ParseInt(blockID, 10, 64) + if err != nil { + return blob.NewGetBlobSidecarsByBlockNumBadRequest().WithPayload(service.BadRequestWithError(err)) + } + sidecars, err = service.BlobSvc.GetBlobSidecarsBySlot(slot, indicesInx) + if err != nil { + return blob.NewGetBlobSidecarsByBlockNumInternalServerError().WithPayload(service.InternalErrorWithError(err)) + } + } + payload := models.GetBlobSideCarsResponse{ + Data: sidecars, + } + return blob.NewGetBlobSidecarsByBlockNumOK().WithPayload(&payload) } - return blob.NewGetBlobSidecarsByBlockNumOK().WithPayload(&payload) } } diff --git a/restapi/handlers/handlers.go b/restapi/handlers/handlers.go deleted file mode 100644 index 848ed7a..0000000 --- a/restapi/handlers/handlers.go +++ /dev/null @@ -1,40 +0,0 @@ -package handlers - -import ( - "net/http" - - "github.com/bnb-chain/blob-syncer/service" -) - -type responseWriter struct { - http.ResponseWriter - statusCode int - body []byte - header http.Header -} - -func newResponseWriter(w http.ResponseWriter) *responseWriter { - return &responseWriter{w, http.StatusOK, []byte{}, http.Header{}} -} - -func (rw *responseWriter) Write(body []byte) (int, error) { - rw.body = body - return rw.ResponseWriter.Write(body) -} - -func (rw *responseWriter) WriteHeader(code int) { - rw.statusCode = code - rw.header = rw.ResponseWriter.Header() - rw.ResponseWriter.WriteHeader(code) -} - -func Error(err error) (int64, string) { - switch e := err.(type) { - case service.Err: - return e.Code, e.Message - case nil: - return service.NoErr.Code, service.NoErr.Message - default: - return service.InternalErr.Code, err.Error() - } -} diff --git a/restapi/operations/blob/get_blob_sidecars_by_block_num.go b/restapi/operations/blob/get_blob_sidecars_by_block_num.go index 0ff0a84..40ca57d 100644 --- a/restapi/operations/blob/get_blob_sidecars_by_block_num.go +++ b/restapi/operations/blob/get_blob_sidecars_by_block_num.go @@ -30,7 +30,7 @@ func NewGetBlobSidecarsByBlockNum(ctx *middleware.Context, handler GetBlobSideca } /* - GetBlobSidecarsByBlockNum swagger:route GET /beacon/blob_sidecars/{blockNum} blob getBlobSidecarsByBlockNum + GetBlobSidecarsByBlockNum swagger:route GET /beacon/blob_sidecars/{block_id} blob getBlobSidecarsByBlockNum Get blob sidecars by block num */ diff --git a/restapi/operations/blob/get_blob_sidecars_by_block_num_parameters.go b/restapi/operations/blob/get_blob_sidecars_by_block_num_parameters.go index 221be7e..1d1d4f1 100644 --- a/restapi/operations/blob/get_blob_sidecars_by_block_num_parameters.go +++ b/restapi/operations/blob/get_blob_sidecars_by_block_num_parameters.go @@ -9,9 +9,11 @@ import ( "net/http" "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" + "github.com/go-openapi/validate" ) // NewGetBlobSidecarsByBlockNumParams creates a new GetBlobSidecarsByBlockNumParams object @@ -31,11 +33,16 @@ type GetBlobSidecarsByBlockNumParams struct { // HTTP Request Object HTTPRequest *http.Request `json:"-"` - /*blockNum + /*Block identifier. Can be one of: 'head' (canonical head in node's view), 'genesis', 'finalized', , Required: true + Min Length: 1 In: path */ - BlockNum int64 + BlockID string + /*Array of indices for blob sidecars to request for in the specified block. Returns all blob sidecars in the block if not specified + In: query + */ + Indices []string } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface @@ -47,8 +54,15 @@ func (o *GetBlobSidecarsByBlockNumParams) BindRequest(r *http.Request, route *mi o.HTTPRequest = r - rBlockNum, rhkBlockNum, _ := route.Params.GetOK("blockNum") - if err := o.bindBlockNum(rBlockNum, rhkBlockNum, route.Formats); err != nil { + qs := runtime.Values(r.URL.Query()) + + rBlockID, rhkBlockID, _ := route.Params.GetOK("block_id") + if err := o.bindBlockID(rBlockID, rhkBlockID, route.Formats); err != nil { + res = append(res, err) + } + + qIndices, qhkIndices, _ := qs.GetOK("indices") + if err := o.bindIndices(qIndices, qhkIndices, route.Formats); err != nil { res = append(res, err) } if len(res) > 0 { @@ -57,8 +71,8 @@ func (o *GetBlobSidecarsByBlockNumParams) BindRequest(r *http.Request, route *mi return nil } -// bindBlockNum binds and validates parameter BlockNum from path. -func (o *GetBlobSidecarsByBlockNumParams) bindBlockNum(rawData []string, hasKey bool, formats strfmt.Registry) error { +// bindBlockID binds and validates parameter BlockID from path. +func (o *GetBlobSidecarsByBlockNumParams) bindBlockID(rawData []string, hasKey bool, formats strfmt.Registry) error { var raw string if len(rawData) > 0 { raw = rawData[len(rawData)-1] @@ -66,12 +80,48 @@ func (o *GetBlobSidecarsByBlockNumParams) bindBlockNum(rawData []string, hasKey // Required: true // Parameter is provided by construction from the route + o.BlockID = raw + + if err := o.validateBlockID(formats); err != nil { + return err + } + + return nil +} + +// validateBlockID carries on validations for parameter BlockID +func (o *GetBlobSidecarsByBlockNumParams) validateBlockID(formats strfmt.Registry) error { + + if err := validate.MinLength("block_id", "path", o.BlockID, 1); err != nil { + return err + } + + return nil +} + +// bindIndices binds and validates array parameter Indices from query. +// +// Arrays are parsed according to CollectionFormat: "" (defaults to "csv" when empty). +func (o *GetBlobSidecarsByBlockNumParams) bindIndices(rawData []string, hasKey bool, formats strfmt.Registry) error { + var qvIndices string + if len(rawData) > 0 { + qvIndices = rawData[len(rawData)-1] + } + + // CollectionFormat: + indicesIC := swag.SplitByFormat(qvIndices, "") + if len(indicesIC) == 0 { + return nil + } + + var indicesIR []string + for _, indicesIV := range indicesIC { + indicesI := indicesIV - value, err := swag.ConvertInt64(raw) - if err != nil { - return errors.InvalidType("blockNum", "path", "int64", raw) + indicesIR = append(indicesIR, indicesI) } - o.BlockNum = value + + o.Indices = indicesIR return nil } diff --git a/restapi/operations/blob/get_blob_sidecars_by_block_num_urlbuilder.go b/restapi/operations/blob/get_blob_sidecars_by_block_num_urlbuilder.go index d946804..037eabe 100644 --- a/restapi/operations/blob/get_blob_sidecars_by_block_num_urlbuilder.go +++ b/restapi/operations/blob/get_blob_sidecars_by_block_num_urlbuilder.go @@ -16,7 +16,9 @@ import ( // GetBlobSidecarsByBlockNumURL generates an URL for the get blob sidecars by block num operation type GetBlobSidecarsByBlockNumURL struct { - BlockNum int64 + BlockID string + + Indices []string _basePath string // avoid unkeyed usage @@ -42,13 +44,13 @@ func (o *GetBlobSidecarsByBlockNumURL) SetBasePath(bp string) { func (o *GetBlobSidecarsByBlockNumURL) Build() (*url.URL, error) { var _result url.URL - var _path = "/beacon/blob_sidecars/{blockNum}" + var _path = "/beacon/blob_sidecars/{block_id}" - blockNum := swag.FormatInt64(o.BlockNum) - if blockNum != "" { - _path = strings.Replace(_path, "{blockNum}", blockNum, -1) + blockID := o.BlockID + if blockID != "" { + _path = strings.Replace(_path, "{block_id}", blockID, -1) } else { - return nil, errors.New("blockNum is required on GetBlobSidecarsByBlockNumURL") + return nil, errors.New("blockId is required on GetBlobSidecarsByBlockNumURL") } _basePath := o._basePath @@ -57,6 +59,27 @@ func (o *GetBlobSidecarsByBlockNumURL) Build() (*url.URL, error) { } _result.Path = golangswaggerpaths.Join(_basePath, _path) + qs := make(url.Values) + + var indicesIR []string + for _, indicesI := range o.Indices { + indicesIS := indicesI + if indicesIS != "" { + indicesIR = append(indicesIR, indicesIS) + } + } + + indices := swag.JoinByFormat(indicesIR, "") + + if len(indices) > 0 { + qsv := indices[0] + if qsv != "" { + qs.Set("indices", qsv) + } + } + + _result.RawQuery = qs.Encode() + return &_result, nil } diff --git a/restapi/operations/blob_syncer_api.go b/restapi/operations/blob_syncer_api.go index 32096d2..04468b4 100644 --- a/restapi/operations/blob_syncer_api.go +++ b/restapi/operations/blob_syncer_api.go @@ -256,7 +256,7 @@ func (o *BlobSyncerAPI) initHandlerCache() { if o.handlers["GET"] == nil { o.handlers["GET"] = make(map[string]http.Handler) } - o.handlers["GET"]["/beacon/blob_sidecars/{blockNum}"] = blob.NewGetBlobSidecarsByBlockNum(o.context, o.BlobGetBlobSidecarsByBlockNumHandler) + o.handlers["GET"]["/beacon/blob_sidecars/{block_id}"] = blob.NewGetBlobSidecarsByBlockNum(o.context, o.BlobGetBlobSidecarsByBlockNumHandler) } // Serve creates a http handler to serve the API over HTTP diff --git a/scripts/format.sh b/scripts/format.sh new file mode 100644 index 0000000..7c7bf59 --- /dev/null +++ b/scripts/format.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +which goimportssort || go install github.com/AanZee/goimportssort + +for entry in `find . -name "*.go" | grep -v '.pb.'`; do + echo $entry + if grep -q "DO NOT EDIT" "$entry"; then + continue + fi + goimportssort -w -local github.com/bnb-chain/ $entry +done diff --git a/service/blob.go b/service/blob.go index fc6fa8b..bce1e9b 100644 --- a/service/blob.go +++ b/service/blob.go @@ -1,26 +1,30 @@ package service import ( + "fmt" + "strconv" + "github.com/bnb-chain/blob-syncer/cache" "github.com/bnb-chain/blob-syncer/config" "github.com/bnb-chain/blob-syncer/db" "github.com/bnb-chain/blob-syncer/external" "github.com/bnb-chain/blob-syncer/models" - "strconv" + "github.com/bnb-chain/blob-syncer/syncer" ) type Blob interface { - GetBlobSidecars(blockNum int64) ([]*models.Sidecar, error) + GetBlobSidecarsByRoot(root string, indices []int64) ([]*models.Sidecar, error) + GetBlobSidecarsBySlot(slot int64, indices []int64) ([]*models.Sidecar, error) } type BlobService struct { blobDB db.BlobDao bundleClient *external.BundleClient cacheService cache.Cache - config *config.Config + config *config.ServerConfig } -func NewBlobService(blobDB db.BlobDao, bundleClient *external.BundleClient, cache cache.Cache, config *config.Config) Blob { +func NewBlobService(blobDB db.BlobDao, bundleClient *external.BundleClient, cache cache.Cache, config *config.ServerConfig) Blob { return &BlobService{ blobDB: blobDB, bundleClient: bundleClient, @@ -29,27 +33,79 @@ func NewBlobService(blobDB db.BlobDao, bundleClient *external.BundleClient, cach } } -func (b BlobService) GetBlobSidecars(blockNum int64) ([]*models.Sidecar, error) { - blobs, found := b.cacheService.Get(strconv.FormatInt(blockNum, 10)) +func (b BlobService) GetBlobSidecarsBySlot(slot int64, indices []int64) ([]*models.Sidecar, error) { + var err error + blobs, found := b.cacheService.Get(strconv.FormatInt(slot, 10)) if found { - return blobs.([]*models.Sidecar), nil + blobsFound := blobs.([]*models.Sidecar) + if len(indices) != 0 { + blobReturn := make([]*models.Sidecar, 0) + for _, idx := range indices { + if int(idx) >= len(blobsFound) { + return nil, fmt.Errorf("index %d out of bound, only %d blob at slot %d", idx, len(blobsFound), slot) + } + blobReturn = append(blobReturn, blobsFound[idx]) + } + return blobReturn, nil + } + return blobsFound, nil } - blobsMeta, err := b.blobDB.GetBlobs(blockNum) + + block, err := b.blobDB.GetBlock(slot) if err != nil { return nil, err } + + var blobMetas []*db.Blob + if len(indices) == 0 { + blobMetas, err = b.blobDB.GetBlobBySlot(slot) + if err != nil { + return nil, err + } + } else { + blobMetas, err = b.blobDB.GetBlobBySlotAndIndices(slot, indices) + if err != nil { + return nil, err + } + } + sideCars := make([]*models.Sidecar, 0) - for _, meta := range blobsMeta { - object, err := b.bundleClient.GetObject(b.config.SyncerConfig.BucketName, meta.BundleName, meta.Name) + for _, meta := range blobMetas { + bundleObject, err := b.bundleClient.GetObject(b.config.BucketName, meta.BundleName, meta.Name) if err != nil { return nil, err } + header := &models.SidecarSignedBeaconBlockHeader{ + Message: &models.SidecarSignedBeaconBlockHeaderMessage{ + BodyRoot: block.BodyRoot, + ParentRoot: block.ParentRoot, + ProposerIndex: strconv.FormatUint(block.ProposerIndex, 10), + Slot: strconv.FormatUint(block.Slot, 10), + StateRoot: block.StateRoot, + }, + } sideCars = append(sideCars, &models.Sidecar{ - Blob: object, - Index: int64(meta.Index), + Blob: bundleObject, + Index: strconv.FormatInt(int64(meta.Idx), 10), + CommitmentInclusionProof: syncer.SplitByComma(meta.CommitmentInclusionProof), + KzgCommitment: meta.KzgCommitment, + KzgProof: meta.KzgProof, + SignedBeaconBlockHeader: header, }) } - b.cacheService.Set(strconv.FormatInt(blockNum, 10), sideCars) + + // cache all blobs at a specified slot + if len(indices) == 0 { + b.cacheService.Set(strconv.FormatInt(slot, 10), sideCars) + } return sideCars, nil } + +func (b BlobService) GetBlobSidecarsByRoot(root string, indices []int64) ([]*models.Sidecar, error) { + block, err := b.blobDB.GetBlockByRoot(root) + if err != nil { + return nil, err + } + return b.GetBlobSidecarsBySlot(int64(block.Slot), indices) +} diff --git a/service/error.go b/service/error.go index 411c506..85e37d6 100644 --- a/service/error.go +++ b/service/error.go @@ -2,6 +2,7 @@ package service import ( "fmt" + "github.com/bnb-chain/blob-syncer/models" ) @@ -25,17 +26,16 @@ func (e Err) Error() string { return fmt.Sprintf("%d: %s", e.Code, e.Message) } -var ( - // NoErr - success - NoErr = Err{Code: 200} - - //InternalErr -internal error - InternalErr = Err{Code: 500, Message: "internal error"} -) - func InternalErrorWithError(err error) *models.Error { return &models.Error{ Code: 500, Message: err.Error(), } } + +func BadRequestWithError(err error) *models.Error { + return &models.Error{ + Code: 400, + Message: err.Error(), + } +} diff --git a/swagger.yaml b/swagger.yaml index e8685e9..8ed4e99 100644 --- a/swagger.yaml +++ b/swagger.yaml @@ -9,7 +9,7 @@ schemes: - http paths: - /beacon/blob_sidecars/{blockNum}: + /beacon/blob_sidecars/{block_id}: get: tags: - "blob" @@ -18,13 +18,18 @@ paths: produces: - "application/json" parameters: - - name: "blockNum" + - name: "block_id" in: "path" - description: "blockNum" + description: "Block identifier. Can be one of: 'head' (canonical head in node's view), 'genesis', 'finalized', , " required: true - type: "integer" - format: "int64" + type: string minLength: 1 + - name: "indices" + in: "query" + description: "Array of indices for blob sidecars to request for in the specified block. Returns all blob sidecars in the block if not specified" + type: array + items: + type: string responses: "200": description: "successful operation" @@ -64,14 +69,42 @@ definitions: type: object properties: index: - type: integer - format: int + type: string description: "index" example: 1 blob: type: string - description: "name" - example: "aaaa" + description: "blob" + kzgCommitment: + type: string + description: "kzg_commitment" + kzgProof: + type: string + description: "kzg_proof" + commitmentInclusionProof: + type: array + description: "kzg_commitment_inclusion_proof" + items: + type: string + signedBeaconBlockHeader: + type: object + description: "signed_beacon_block_header" + properties: + signature: + type: string + message: + type: object + properties: + slot: + type: string + proposerIndex: + type: string + parentRoot: + type: string + stateRoot: + type: string + bodyRoot: + type: string Error: type: object diff --git a/syncer/blob_syncer.go b/syncer/blob_syncer.go deleted file mode 100644 index e3885f0..0000000 --- a/syncer/blob_syncer.go +++ /dev/null @@ -1,458 +0,0 @@ -package syncer - -import ( - "context" - "encoding/hex" - "fmt" - "github.com/bnb-chain/blob-syncer/config" - "github.com/bnb-chain/blob-syncer/db" - "github.com/bnb-chain/blob-syncer/external" - "github.com/bnb-chain/blob-syncer/logging" - "github.com/bnb-chain/blob-syncer/types" - ethtypes "github.com/ethereum/go-ethereum/core/types" - "github.com/prysmaticlabs/prysm/v5/api/server/structs" - v1 "github.com/prysmaticlabs/prysm/v5/proto/engine/v1" - ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1" - "github.com/prysmaticlabs/prysm/v5/runtime/version" - "gorm.io/gorm" - "math/big" - "os" - "strconv" - "strings" - "time" -) - -const ( - CreateBundleBlockInterval = 1 - - BundleStatusBundling = 0 - BundleStatusFinalized = 1 - BundleStatusCreatedOnChain = 2 - BundleStatusSealedOnChain = 3 // todo The post verification process should check if a bundle is indeed sealed onchain - BundleStatusExpired = 4 -) - -type curBundleDetail struct { - name string - startHeight uint64 - finalizeHeight uint64 -} - -type BlobSyncer struct { - blobDao db.BlobDao - ethClients *external.ETHClient - bundleClient *external.BundleClient - config *config.Config - bundleDetail *curBundleDetail -} - -func NewBlobSyncer( - blobDao db.BlobDao, - config *config.Config, -) *BlobSyncer { - bundleClient, err := external.NewBundleClient(config.SyncerConfig.BundleServiceEndpoints[0], config.SyncerConfig.PrivateKey) - if err != nil { - panic(err) - } - clients := external.NewETHClient(config.SyncerConfig.ETHRPCAddrs[0], config.SyncerConfig.BeaconRPCAddrs[0]) - return &BlobSyncer{ - blobDao: blobDao, - ethClients: clients, - bundleClient: bundleClient, - config: config, - } -} - -func (l *BlobSyncer) StartLoop() { - for { - if err := l.process(); err != nil { - logging.Logger.Error(err) - continue - } - } -} - -func (l *BlobSyncer) process() error { - ctx := context.Background() - nextHeight, err := l.calNextHeight() - if err != nil { - return err - } - - // the app is just re-started. - if l.bundleDetail == nil { - // get latest bundle from DB or bundle service(if DB data is lost) - err := l.LoadProgressAndResume(nextHeight) - if err != nil { - return fmt.Errorf("failed to LoadProgressAndResume, err=%s", err.Error()) - } - } - var isForkedBlock bool - block, err := l.ethClients.BeaconClient.GetBlock(ctx, nextHeight) - if err != nil { - if err != external.ErrBlockNotFound { - return err - } - // Both try to get forked block and non-exist block will return 404. When the response is ErrBlockNotFound, - // check whether nextHeight is >= latest height, otherwise it is a forked block, should skip it. - blockResp, err := l.ethClients.BeaconClient.GetLatestBlock(ctx) - if err != nil { - return fmt.Errorf("failed to get latest becon block, err=%s", err.Error()) - } - clBlock, _, err := ToBlockAndExecutionPayloadDeneb(blockResp) - if err != nil { - return fmt.Errorf("failed to ToBlockAndExecutionPayloadDeneb, err=%s", err.Error()) - } - if nextHeight >= uint64(clBlock.Slot) { - logging.Logger.Debugf("the nextHeight %d is larger than current block height %d\n", nextHeight, clBlock.Slot) - return nil - } else { - isForkedBlock = true - } - } - - if !isForkedBlock && !block.Finalized { - logging.Logger.Infof("current block(h=%d) is not finalized yet", nextHeight) - time.Sleep(1 * time.Minute) // around 15 minutes to finalize - return nil - } - - var sideCars []*structs.Sidecar - if !isForkedBlock { - sideCars, err = l.ethClients.BeaconClient.GetBlob(ctx, nextHeight) - if err != nil { - return err - } - } - - bundleName := l.bundleDetail.name - // create a new bundle - if nextHeight == l.bundleDetail.startHeight { - if err := l.createBundle(); err != nil { - logging.Logger.Errorf("failed to create bundle, bundle=%s, err=%s", bundleName, err.Error()) - return err - } - } - - err = l.uploadBlobs(nextHeight, sideCars) - if err != nil { - return err - } - - if nextHeight == l.bundleDetail.finalizeHeight { - if err = l.finalizeBundle(bundleName); err != nil { - if strings.Contains(err.Error(), "expired") { - err = l.bundleClient.DeleteBundle(bundleName, l.getBucketName()) - if err != nil { - logging.Logger.Infof("failed to delete bundle, bundleName=%s, err=%s", bundleName, err.Error()) - return err - } - err = l.reProcessBundleAndFinalize(bundleName) - if err != nil { - logging.Logger.Infof("failed to re-process bundle, bundleName=%s, err=%s", bundleName, err.Error()) - return err - } - } - return fmt.Errorf("failed to finalize bundle, bundle=%s, err=%s", bundleName, err.Error()) - } - logging.Logger.Infof("finalized bundle, bundle_name=%s, bucket_name=%s\n", bundleName, l.getBucketName()) - - // init next bundle - startHeight := nextHeight + 1 - endHeight := nextHeight + l.getBlockInterval() - l.bundleDetail = &curBundleDetail{ - name: types.GetBundleName(startHeight, endHeight), - startHeight: startHeight, - finalizeHeight: endHeight, - } - } - - if isForkedBlock { - return l.blobDao.SaveBlockAndBlob(&db.Block{ - Height: nextHeight, - }, nil) - } - - blockToSave, blobToSave, err := l.ToBlockAndBlobs(block, sideCars, nextHeight, bundleName) - if err != nil { - return err - } - err = l.blobDao.SaveBlockAndBlob(blockToSave, blobToSave) - if err != nil { - return fmt.Errorf("failed to save block(h=%d) and Blob(count=%d), err=%s", blockToSave.Height, len(blobToSave), err.Error()) - } - logging.Logger.Infof("saved block and blobs(num=%d) at height %d to DB \n", len(blobToSave), nextHeight) - return nil -} - -func (l *BlobSyncer) getBucketName() string { - return l.config.SyncerConfig.BucketName -} - -func (l *BlobSyncer) getBlockInterval() uint64 { - return CreateBundleBlockInterval -} - -func (l *BlobSyncer) calNextHeight() (uint64, error) { - latestProcessedBlock, err := l.blobDao.GetLatestProcessedBlock() - if err != nil { - return 0, fmt.Errorf("failed to get latest polled block from db, error: %s", err.Error()) - } - latestPolledBlockHeight := latestProcessedBlock.Height - nextHeight := l.config.SyncerConfig.StartSlot - if nextHeight <= latestPolledBlockHeight { - nextHeight = latestPolledBlockHeight + 1 - } - return nextHeight, nil -} - -func (l *BlobSyncer) createBundle() error { - _, err := l.bundleClient.GetBundleInfo(l.getBucketName(), l.bundleDetail.name) - if err != nil { - if err != external.ErrorBundleNotExist { - return err - } - err = l.bundleClient.CreateBundle(l.bundleDetail.name, l.getBucketName()) - if err != nil { - return fmt.Errorf("failed to created bundle, bundle_name=%s, bucket_name=%s\n, err=%s", l.bundleDetail.name, l.getBucketName(), err.Error()) - } - logging.Logger.Infof("created bundle, bundle_name=%s, bucket_name=%s\n", l.bundleDetail.name, l.getBucketName()) - } - return l.blobDao.CreateBundle( - &db.Bundle{ - Name: l.bundleDetail.name, - Status: db.Finalizing, - }) -} - -func (l *BlobSyncer) finalizeBundle(bundleName string) error { - bundleInfo, err := l.bundleClient.GetBundleInfo(l.getBucketName(), bundleName) - if err != nil { - return fmt.Errorf("failed to GetBundleInfo, bundle_name=%s, bucket_name=%s err=%s", l.bundleDetail.name, l.getBucketName(), err.Error()) - } - if bundleInfo.Status == BundleStatusExpired { - return fmt.Errorf("unexpect bundle status expired, name=%s", bundleInfo.BundleName) - } else if bundleInfo.Status == BundleStatusBundling { - // trying to finalize an empty bundle(contains no blob) will fail, so we need to delete it so that we can continue to create a new bundle for future blocks - if bundleInfo.Size == 0 { - err = l.bundleClient.DeleteBundle(l.bundleDetail.name, l.getBucketName()) - if err != nil { - return fmt.Errorf("failed to delete bundle, bundle_name=%s, bucket_name=%s err=%s", l.bundleDetail.name, l.getBucketName(), err.Error()) - } - } else { - err = l.bundleClient.FinalizeBundle(l.bundleDetail.name, l.getBucketName()) - if err != nil { - return fmt.Errorf("failed to finalize bundle, bundle_name=%s, bucket_name=%s err=%s", l.bundleDetail.name, l.getBucketName(), err.Error()) - } - } - } else { - logging.Logger.Infof("bundle has already been finalized") - } - return l.blobDao.UpdateBundleStatus(bundleName, db.Finalized) -} - -func (l *BlobSyncer) uploadBlobs(height uint64, blobs []*structs.Sidecar) error { - // TODO concurrent upload in a single block - for i, b := range blobs { - blobName := types.GetBlobName(height, uint64(i)) - filePath := l.config.SyncerConfig.TempFilePath + "/" + blobName - file, err := os.Create(filePath) - if err != nil { - return fmt.Errorf("failed to CreateBlock file, err=%s", err.Error()) - } - defer file.Close() - _, err = file.WriteString(b.Blob) - if err != nil { - return fmt.Errorf("failed to WriteString, err=%s", err.Error()) - } - file, err = os.Open(filePath) - if err != nil { - return fmt.Errorf("failed to Open, err=%s", err.Error()) - } - err = l.bundleClient.UploadObject(blobName, l.getBucketName(), l.bundleDetail.name, "text/plain", file) - if err != nil { - if strings.Contains(err.Error(), "Object already exists") { - _ = os.Remove(filePath) - return nil - } - return fmt.Errorf("failed to upload object to bundle service, err=%s", err.Error()) - } - _ = os.Remove(filePath) - } - return nil -} - -func (l *BlobSyncer) LoadProgressAndResume(nextHeight uint64) error { - var ( - startHeight uint64 - endHeight uint64 - err error - ) - finalizingBundle, err := l.blobDao.GetLatestFinalizingBundle() - if err != nil { - if err != gorm.ErrRecordNotFound { - return err - } - // There is no pending(finalizing) bundle, start a new bundle. e.g. a bundle includes - // blobs from block height 0-9 when the block interval is config to 10 - startHeight = nextHeight - endHeight = nextHeight + l.getBlockInterval() - 1 - } else { - // check against bundle service if still exist before resume - bundleResp, err := l.bundleClient.GetBundleInfo(l.getBucketName(), finalizingBundle.Name) - if err != nil { - // if the bundle recorded in DB not found in bundle service(shouldn't happen), then need to reprocess all blobs within the bundle - if err == external.ErrorBundleNotExist { - err = l.bundleClient.CreateBundle(finalizingBundle.Name, l.getBucketName()) - if err != nil { - return err - } - err = l.reProcessBundleUntilHeight(finalizingBundle.Name, nextHeight) // make up missing blobs - if err != nil { - return err - } - startHeight, endHeight, err = types.ParseBundleName(finalizingBundle.Name) - if err != nil { - return err - } - l.bundleDetail = &curBundleDetail{ - name: finalizingBundle.Name, - startHeight: startHeight, - finalizeHeight: endHeight, - } - return nil - } else { - logging.Logger.Errorf("failed to get bundle info from bundle service") - return err - } - } - // could fail to update the DB when shutdown the app previously - if bundleResp.Status == BundleStatusFinalized { - if err = l.blobDao.UpdateBundleStatus(finalizingBundle.Name, db.Finalized); err != nil { - return err - } - _, endHeight, err = types.ParseBundleName(finalizingBundle.Name) - if err != nil { - return err - } - // start a new bundle - startHeight = endHeight + 1 - endHeight = startHeight + l.getBlockInterval() - 1 - } else { - // resume the current bundle processing, note the config interval might change after the reboot, but it - // will not take effect until the last existing bundle finalized. - startHeight, endHeight, err = types.ParseBundleName(finalizingBundle.Name) - if err != nil { - return err - } - } - } - l.bundleDetail = &curBundleDetail{ - name: types.GetBundleName(startHeight, endHeight), - startHeight: startHeight, - finalizeHeight: endHeight, - } - return nil -} - -func (l *BlobSyncer) ToBlockAndBlobs(blockResp *structs.GetBlockV2Response, blobs []*structs.Sidecar, height uint64, bundleName string) (*db.Block, []*db.Blob, error) { - var blockReturn *db.Block - blobsReturn := make([]*db.Blob, 0) - - var ( - clBlock *ethpb.BeaconBlockDeneb - executionPayload *v1.ExecutionPayloadDeneb - err error - ) - - switch blockResp.Version { - case version.String(version.Deneb): - clBlock, executionPayload, err = ToBlockAndExecutionPayloadDeneb(blockResp) - if err != nil { - return nil, nil, err - } - blockReturn = &db.Block{ - BlockHash: hex.EncodeToString(clBlock.GetStateRoot()), - ParentHash: hex.EncodeToString(clBlock.GetParentRoot()), - Height: uint64(clBlock.GetSlot()), - ELBlockHeight: executionPayload.GetBlockNumber(), - BlobCount: len(blobs), - } - default: - return nil, nil, fmt.Errorf("un-expected block version %s", blockResp.Version) - } - - for _, blob := range blobs { - index, err := strconv.Atoi(blob.Index) - if err != nil { - return nil, nil, err - } - b := &db.Blob{ - Name: types.GetBlobName(height, uint64(index)), - Height: height, - Index: index, - BundleName: bundleName, - } - blobsReturn = append(blobsReturn, b) - } - if len(blobs) != 0 { - elBlock, err := l.ethClients.Eth1Client.BlockByNumber(context.Background(), big.NewInt(int64(executionPayload.GetBlockNumber()))) - if err != nil { - return nil, nil, fmt.Errorf("failed to get block at height %d, err=%s", executionPayload.GetBlockNumber(), err.Error()) - } - blobIndex := 0 - for _, tx := range elBlock.Body().Transactions { - if tx.Type() == ethtypes.BlobTxType { - for _, bs := range tx.BlobHashes() { - blobsReturn[blobIndex].TxHash = hex.EncodeToString(tx.Hash().Bytes()) - blobsReturn[blobIndex].ToAddr = tx.To().String() - blobsReturn[blobIndex].VersionedHash = bs.String() - blobIndex++ - } - } - } - } - return blockReturn, blobsReturn, nil -} - -// reProcessBundle is used to re-upload all objects of the bundle to bundle serive and finalize it. -func (l *BlobSyncer) reProcessBundleAndFinalize(bundleName string) error { - startHeight, endHeight, err := types.ParseBundleName(bundleName) - if err != nil { - return err - } - for i := startHeight; i < endHeight; i++ { - sideCars, err := l.ethClients.BeaconClient.GetBlob(context.Background(), i) - if err != nil { - return err - } - err = l.uploadBlobs(i, sideCars) - if err != nil { - return err - } - } - err = l.finalizeBundle(bundleName) - if err != nil { - return err - } - return nil -} - -// reProcessBundleUntilHeight is used to make up missing blobs until the endHeight(excluded) in a bundle -func (l *BlobSyncer) reProcessBundleUntilHeight(bundleName string, endHeight uint64) error { - startHeight, _, err := types.ParseBundleName(bundleName) - if err != nil { - return err - } - for i := startHeight; i < endHeight; i++ { - sideCars, err := l.ethClients.BeaconClient.GetBlob(context.Background(), i) - if err != nil { - return err - } - err = l.uploadBlobs(i, sideCars) - if err != nil { - return err - } - } - return nil -} diff --git a/syncer/conveter.go b/syncer/conveter.go index b6ab70d..8e68957 100644 --- a/syncer/conveter.go +++ b/syncer/conveter.go @@ -2,11 +2,14 @@ package syncer import ( "encoding/json" + "strings" + "github.com/prysmaticlabs/prysm/v5/api/server/structs" v1 "github.com/prysmaticlabs/prysm/v5/proto/engine/v1" ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1" ) +// ToBlockAndExecutionPayloadDeneb extract beacon-signed block and execution payload from GetBlockV2Response func ToBlockAndExecutionPayloadDeneb(blockResp *structs.GetBlockV2Response) (*ethpb.BeaconBlockDeneb, *v1.ExecutionPayloadDeneb, error) { sbb := &structs.SignedBeaconBlockDeneb{Message: &structs.BeaconBlockDeneb{}} err := json.Unmarshal(blockResp.Data.Message, sbb.Message) @@ -20,3 +23,19 @@ func ToBlockAndExecutionPayloadDeneb(blockResp *structs.GetBlockV2Response) (*et } return signedBeaconBlockDeneb.GetBlock(), signedBeaconBlockDeneb.GetBlock().GetBody().GetExecutionPayload(), nil } + +func SplitByComma(str string) []string { + str = strings.TrimSpace(str) + strArr := strings.Split(str, ",") + var trimStr []string + for _, item := range strArr { + if len(strings.TrimSpace(item)) > 0 { + trimStr = append(trimStr, strings.TrimSpace(item)) + } + } + return trimStr +} + +func JoinWithComma(slice []string) string { + return strings.Join(slice, ",") +} diff --git a/syncer/syncer.go b/syncer/syncer.go new file mode 100644 index 0000000..b0e090e --- /dev/null +++ b/syncer/syncer.go @@ -0,0 +1,371 @@ +package syncer + +import ( + "context" + "encoding/hex" + "fmt" + "math/big" + "os" + "path/filepath" + "strconv" + "strings" + "time" + + "github.com/ethereum/go-ethereum/common/hexutil" + ethtypes "github.com/ethereum/go-ethereum/core/types" + "github.com/prysmaticlabs/prysm/v5/api/server/structs" + v1 "github.com/prysmaticlabs/prysm/v5/proto/engine/v1" + ethpb "github.com/prysmaticlabs/prysm/v5/proto/prysm/v1alpha1" + "github.com/prysmaticlabs/prysm/v5/runtime/version" + "gorm.io/gorm" + + "github.com/bnb-chain/blob-syncer/config" + "github.com/bnb-chain/blob-syncer/db" + "github.com/bnb-chain/blob-syncer/external" + "github.com/bnb-chain/blob-syncer/logging" + "github.com/bnb-chain/blob-syncer/types" +) + +const ( + BundleStatusFinalized = 1 + BundleStatusCreatedOnChain = 2 + BundleStatusSealedOnChain = 3 // todo The post verification process should check if a bundle is indeed sealed onchain +) + +type curBundleDetail struct { + name string + startSlot uint64 + finalizeSlot uint64 +} + +type BlobSyncer struct { + blobDao db.BlobDao + ethClients *external.ETHClient + bundleClient *external.BundleClient + config *config.SyncerConfig + bundleDetail *curBundleDetail +} + +func NewBlobSyncer( + blobDao db.BlobDao, + config *config.SyncerConfig, +) *BlobSyncer { + pkBz, err := hex.DecodeString(config.PrivateKey) + if err != nil { + panic(err) + } + bundleClient, err := external.NewBundleClient(config.BundleServiceEndpoints[0], external.WithPrivateKey(pkBz)) + if err != nil { + panic(err) + } + clients := external.NewETHClient(config.ETHRPCAddrs[0], config.BeaconRPCAddrs[0]) + return &BlobSyncer{ + blobDao: blobDao, + ethClients: clients, + bundleClient: bundleClient, + config: config, + } +} + +func (l *BlobSyncer) StartLoop() { + for { + if err := l.process(); err != nil { + logging.Logger.Error(err) + continue + } + } +} + +func (l *BlobSyncer) process() error { + ctx := context.Background() + nextSlot, err := l.calNextSlot() + if err != nil { + return err + } + + // the app is just re-started. + if l.bundleDetail == nil { + // get latest bundle from DB or bundle service(if DB data is lost) + err := l.LoadProgressAndResume(nextSlot) + if err != nil { + return fmt.Errorf("failed to LoadProgressAndResume, err=%s", err.Error()) + } + } + var isForkedBlock bool + block, err := l.ethClients.BeaconClient.GetBlock(ctx, nextSlot) + if err != nil { + if err != external.ErrBlockNotFound { + return err + } + // Both try to get forked block and non-exist block will return 404. When the response is ErrBlockNotFound, + // check whether nextSlot is >= latest slot, otherwise it is a forked block, should skip it. + blockResp, err := l.ethClients.BeaconClient.GetLatestBlock(ctx) + if err != nil { + return fmt.Errorf("failed to get latest becon block, err=%s", err.Error()) + } + clBlock, _, err := ToBlockAndExecutionPayloadDeneb(blockResp) + if err != nil { + return fmt.Errorf("failed to ToBlockAndExecutionPayloadDeneb, err=%s", err.Error()) + } + if nextSlot >= uint64(clBlock.Slot) { + logging.Logger.Debugf("the nextSlot %d is larger than current block slot %d\n", nextSlot, clBlock.Slot) + return nil + } else { + isForkedBlock = true + } + } + + if !isForkedBlock && !block.Finalized { + logging.Logger.Infof("current block(h=%d) is not finalized yet", nextSlot) + time.Sleep(1 * time.Minute) // around 15 minutes to finalize + return nil + } + + var sideCars []*structs.Sidecar + if !isForkedBlock { + sideCars, err = l.ethClients.BeaconClient.GetBlob(ctx, nextSlot) + if err != nil { + return err + } + } + + bundleName := l.bundleDetail.name + // create a new bundle + if nextSlot == l.bundleDetail.startSlot { + if err = l.createLocalBundleDir(); err != nil { + logging.Logger.Errorf("failed to create local bundle dir, bundle=%s, err=%s", bundleName, err.Error()) + return err + } + } + err = l.writeBlobToFile(nextSlot, sideCars) + if err != nil { + return err + } + + if nextSlot == l.bundleDetail.finalizeSlot { + err = l.finalizeBundle(bundleName) + if err != nil { + return err + } + logging.Logger.Infof("finalized bundle, bundle_name=%s, bucket_name=%s\n", bundleName, l.getBucketName()) + + // init next bundle + startSlot := nextSlot + 1 + endSlot := nextSlot + l.getCreateBundleSlotInterval() + l.bundleDetail = &curBundleDetail{ + name: types.GetBundleName(startSlot, endSlot), + startSlot: startSlot, + finalizeSlot: endSlot, + } + } + + if isForkedBlock { + return l.blobDao.SaveBlockAndBlob(&db.Block{ + Slot: nextSlot, + }, nil) + } + + blockToSave, blobToSave, err := l.ToBlockAndBlobs(block, sideCars, nextSlot, bundleName) + if err != nil { + return err + } + err = l.blobDao.SaveBlockAndBlob(blockToSave, blobToSave) + if err != nil { + logging.Logger.Errorf("failed to save block(h=%d) and Blob(count=%d), err=%s", blockToSave.Slot, len(blobToSave), err.Error()) + return err + } + logging.Logger.Infof("saved block(slot=%d) and blobs(num=%d) to DB \n", nextSlot, len(blobToSave)) + return nil +} + +func (l *BlobSyncer) getBucketName() string { + return l.config.BucketName +} + +func (l *BlobSyncer) getCreateBundleSlotInterval() uint64 { + return l.config.GetCreateBundleSlotInterval() +} + +func (l *BlobSyncer) calNextSlot() (uint64, error) { + latestProcessedBlock, err := l.blobDao.GetLatestProcessedBlock() + if err != nil { + return 0, fmt.Errorf("failed to get latest polled block from db, error: %s", err.Error()) + } + latestPolledBlockSlot := latestProcessedBlock.Slot + nextSlot := l.config.StartSlot + if nextSlot <= latestPolledBlockSlot { + nextSlot = latestPolledBlockSlot + 1 + } + return nextSlot, nil +} + +// createLocalBundleDir creates an empty dir to hold blob files among a range of blocks, the blobs in this dir will be assembled into a bundle and uploaded to bundle service +func (l *BlobSyncer) createLocalBundleDir() error { + _, err := os.Stat(l.getBundleDir()) + if os.IsNotExist(err) { + err = os.MkdirAll(filepath.Dir(l.getBundleDir()), os.ModePerm) + if err != nil { + return err + } + } + return l.blobDao.CreateBundle( + &db.Bundle{ + Name: l.bundleDetail.name, + Status: db.Finalizing, + }) +} + +func (l *BlobSyncer) finalizeBundle(bundleName string) error { + err := l.bundleClient.UploadAndFinalizeBundle(bundleName, l.getBucketName(), l.getBundleDir(), l.getBundleFilePath()) + if err != nil { + if !strings.Contains(err.Error(), "empty bundle") { + return err + } + } + return l.blobDao.UpdateBundleStatus(bundleName, db.Finalized) +} + +func (l *BlobSyncer) writeBlobToFile(slot uint64, blobs []*structs.Sidecar) error { + for i, b := range blobs { + blobName := types.GetBlobName(slot, uint64(i)) + file, err := os.Create(l.getBlobPath(blobName)) + if err != nil { + logging.Logger.Errorf("failed to create file, err=%s", err.Error()) + return err + } + defer file.Close() + _, err = file.WriteString(b.Blob) + if err != nil { + return fmt.Errorf("failed to write string, err=%s", err.Error()) + } + } + return nil +} + +func (l *BlobSyncer) getBundleDir() string { + return fmt.Sprintf("%s/%s/", l.config.TempDir, l.bundleDetail.name) +} + +func (l *BlobSyncer) getBlobPath(blobName string) string { + return fmt.Sprintf("%s/%s/%s", l.config.TempDir, l.bundleDetail.name, blobName) +} + +func (l *BlobSyncer) getBundleFilePath() string { + return fmt.Sprintf("%s/%s.bundle", l.config.TempDir, l.bundleDetail.name) +} + +func (l *BlobSyncer) LoadProgressAndResume(nextSlot uint64) error { + var ( + startSlot uint64 + endSlot uint64 + err error + ) + finalizingBundle, err := l.blobDao.GetLatestFinalizingBundle() + if err != nil { + if err != gorm.ErrRecordNotFound { + return err + } + // There is no pending(finalizing) bundle, start a new bundle. e.g. a bundle includes + // blobs from block slot 0-9 when the block interval is config to 10 + startSlot = nextSlot + endSlot = nextSlot + l.getCreateBundleSlotInterval() - 1 + } else { + // resume + startSlot, endSlot, err = types.ParseBundleName(finalizingBundle.Name) + if err != nil { + return err + } + } + l.bundleDetail = &curBundleDetail{ + name: types.GetBundleName(startSlot, endSlot), + startSlot: startSlot, + finalizeSlot: endSlot, + } + return nil +} + +func (l *BlobSyncer) ToBlockAndBlobs(blockResp *structs.GetBlockV2Response, blobs []*structs.Sidecar, slot uint64, bundleName string) (*db.Block, []*db.Blob, error) { + var blockReturn *db.Block + blobsReturn := make([]*db.Blob, 0) + + var ( + clBlock *ethpb.BeaconBlockDeneb + executionPayload *v1.ExecutionPayloadDeneb + err error + ) + + switch blockResp.Version { + case version.String(version.Deneb): + clBlock, executionPayload, err = ToBlockAndExecutionPayloadDeneb(blockResp) + if err != nil { + logging.Logger.Errorf("failed to convert to ToBlockAndExecutionPayloadDeneb, err=%s", err.Error()) + return nil, nil, err + } + + bodyRoot, err := clBlock.GetBody().HashTreeRoot() + if err != nil { + return nil, nil, err + } + header, err := l.ethClients.BeaconClient.GetHeader(context.Background(), slot) + if err != nil { + logging.Logger.Errorf("failed to get header, err=%s", header.Data.Root, err.Error()) + return nil, nil, err + } + rootBz, err := hexutil.Decode(header.Data.Root) + if err != nil { + logging.Logger.Errorf("failed to decode header.Data.Root=%s, err=%s", header.Data.Root, err.Error()) + return nil, nil, err + } + blockReturn = &db.Block{ + Root: hex.EncodeToString(rootBz), // get rid of 0x saved to DB + ParentRoot: hex.EncodeToString(clBlock.GetParentRoot()), + StateRoot: hex.EncodeToString(clBlock.GetStateRoot()), + BodyRoot: hex.EncodeToString(bodyRoot[:]), + ProposerIndex: uint64(clBlock.ProposerIndex), + Slot: uint64(clBlock.GetSlot()), + ELBlockHeight: executionPayload.GetBlockNumber(), + BlobCount: len(blobs), + } + default: + return nil, nil, fmt.Errorf("un-expected block version %s", blockResp.Version) + } + + if len(blobs) == 0 { + return blockReturn, blobsReturn, nil + } + + for _, blob := range blobs { + index, err := strconv.Atoi(blob.Index) + if err != nil { + return nil, nil, err + } + b := &db.Blob{ + Name: types.GetBlobName(slot, uint64(index)), + Slot: slot, + Idx: index, + BundleName: bundleName, + KzgProof: blob.KzgProof, + KzgCommitment: blob.KzgCommitment, + CommitmentInclusionProof: JoinWithComma(blob.CommitmentInclusionProof), + } + blobsReturn = append(blobsReturn, b) + } + + elBlock, err := l.ethClients.Eth1Client.BlockByNumber(context.Background(), big.NewInt(int64(executionPayload.GetBlockNumber()))) + if err != nil { + return nil, nil, fmt.Errorf("failed to get block at slot %d, err=%s", executionPayload.GetBlockNumber(), err.Error()) + } + blobIndex := 0 + for _, tx := range elBlock.Body().Transactions { + if tx.Type() == ethtypes.BlobTxType { + for _, bs := range tx.BlobHashes() { + blobsReturn[blobIndex].TxHash = hex.EncodeToString(tx.Hash().Bytes()) + blobsReturn[blobIndex].ToAddr = tx.To().String() + blobsReturn[blobIndex].VersionedHash = bs.String() + blobIndex++ + } + } + } + + return blockReturn, blobsReturn, nil +} diff --git a/test/testfile b/test/testfile deleted file mode 100644 index 89ff043..0000000 --- a/test/testfile +++ /dev/null @@ -1 +0,0 @@ -0x0006eac4e2fac2ca844810be0dc9e398fa4961656c022b65e4af13728152980a00ed090001008d08010100aac800010027c6000100f3bf000100b5b2000100e300ed00010003be00010069a8000100fee0000000017e3b0866ff05091fa3377f008211f2ff80c0040e8302897e94cd5252d852c57b8c28b80ff3941be4c64dc300175394cd1ea9e70d0260c0f47d217ed6d5be9cd4ed34fb865af3107a400084001249c58bc002f866388459682f00fe0300103a0c0d31ae506ff056e179916000548501c95639540a83de9675da519b33088150eda0cbe4f0820bb75ef867080077db03f818048a4efef39a1ff22179d2032421dcd65007f0200090602ef79200990064ad19f073d70d040c63ec6288734b957471d28c97c8dbc693d6e0921f0094929e1a3876fb46e30e101089ce3b25b8005f1005d0814542145fc060025400c134084a391a8e3dbed2410b54c5a55e37a693e1707f802cc8d7532524574800d6064bd50a7e9bb9a9b9746cdc09b5602ebfd216ba5f10069fc140413ed0ca007659ecdb5228936c3df4ee46c62022b5cdc11366ca2f66f3be08f2943956f5009f79ab2ffd0595e60e347f2481050c2908121ab0e7081b28096f04f3c3296c00fff73528d831cca53aece3c11734f5eb80d1b5285266e93c8af2daa1d7534600a5a53ddadfcb15f177fc0c0fcdc227815e36aff0c8363fc0a10fff8f955c7f0080c23a0c8406ebb059fe0400120c0d3a6a51ea780407a89d2a9a7bf2f8e5d600c9bf6320538fce511e1d3fc2fbd8074602a2994ea44baef80dce686bf8bc2300a14fe0a01a009656a52035892943ea69a8dfab6e25667b141a95bb0fe3652c0062de11c1c845eba18fdc7e51cf55575807ad4de021053dc43fc0d80130033f00c120214134dcca2804cbc98169188b93473fd9fd96ce5b099905f5ca21932600e6795dff800ffa03c875c47919417130c21e7ab4bf92423a6619fe0b04b93100ae51b51a0d322597722bd470b97f773dbf5d54a8cc83f90c12e801efe0303900947f80c0045882b7cd94d0b9d06cfe000351af20e0461a3110c14023f0e81400698252e67954d3509403ac756083ee8eee105b32dd8e5bf9280eb1484069b50079cfe0300128ff81021abeb9efecf18bec474ebdd00289f49d5955a467adfe004311551857f82806801b4ff0130bd7f808b6143089d0db397f646421b23647008a7e39b8971bf888507f901e216fe0b012594225199553be874a042dd63079009169c5b6b13414d433250d2f96e30c3b93f781a7721e2625a1aafa62111c20002e4069384e49e3ffcf8a5a7fe3e7ba2007164a2209ce82d248f7ff1af1a02d00ddeb635365b3be190e9e62308149b47d714ff5e3aeb84ffaf1584505e077b4007d0de081a66365635fca3eeebb8126a6ffbcef0cd9be75ead27b752c80f7040078f7fc0596d1292e7fb6ebc7856f9bdea9aa0a38d6eaebda6054099d92afcf00c7fe46605a0817fe0b0a611a6252c30b76cd4cbd4ec97c1f05604641ac041b008ca4aa5046573d97e0ece95da3cf125b4e816b5904b192de1910d9316ec00200e40f13448ed363fcf91313fc2000fd1540bfdbf22a0af492e4406ddf4e508f007819a61ed296a6f31ad9fed37252031425698705d972ca53e07829a5407ca700f8d30813f8140a6fe0b092ff84c0e2ff3d7ecd81207f9e92b480b03fc9567500fff70b9fdfe3f02f8213595d1853585cdaff8d810735697066733a2f2f516d006362366b6252626251565145556f63626e5061316d75786332386b6758396b00727a35716f393768596e396938fe8905d1051098213a25b2c669097b06a1aa00543e3ac706a7f8009dc8b4e916ee48aa13b69b287da2a099c3d9afe0027bb2002e84b9cea60bae5b679c9fdf55507510ce2d0c968ba1f866d93fc89e7708c3003fc1c31d50f6c031bae1405a912b81862b9cf2237d8a56bdff11968501fc140002441658e4a1811e379946834462786b4cde6ac69e5eae0409eff0a120dfe90045501021bfe0b1af7c8965018140c2f3dd396c19b328d57d7497d037f92f1e00650613959de24316b7558f79e17f8008e6371f6c188d3db680b901c457bc3d00ff0c4b8fff098079fe7c9972fe0c18748758932119c96af87879f598ba7ec900d2664026abfd756d200341fe7cb650ff2c11a7ff1901be03fe822364f86004008405d75045fe0300113e0c0b24de51f847ea8d9b7ff136a4e3c748d25e253a007c0b6b37f854b27a4a694fcff1d67a507c06f60017c1e02c203395bb37f01800008e3fc320317f0980290101fc0601f034203366c267f018008affc6201f7c0081312942032d2532c206a7b3c24182df3f4a79e7e562400620998dcf45f4620073992242af48caca5048981cb377afca67b47c2ec496394feb61f985c05c81001239c54fd0ff1f134981fe7c4446009ce46a75af5117679e3393d8844ec85e00d684cf325e48be9822469e12cfe53482ff4b2ea67fa915af7f8fc9e460fe3e000e1a83f97c818fe033029044e10194683f2101946840e0a092252b2ceb140400b325a44c98b1eb011036c65e385d1c7fdf03338706c64c8c8c668726e6464600cc4726c6a60726262c4ccc66a726ecc6662c6c4c46a666cca6a64c2c460ca6008c462c66872cc60c4c46a626acaca6c606662666dfe3eb14a40336166323330073464653030626362383036653264303537626461663730613635613461303008643661656561393336393137393439643364316362386162336361fe041a40045ff8241448301f11c94764a8201ad2c233fecb79bfb736644abbd76612094009df3c2c75a92069b99c73bd386961631f143727cfe131a47f84c03cfe4b0b200bfcc9fb0dfcc0348ff9d9f38c0003fce83641fc92348a30eff0504080411f500295e712f82893a076a3f119fc207320805cc3b8439292e350e3fb10235776300ebc7f63b0950e7a7039dc90c5af3107a40010975d60e3181f208043ffc0a1200401a1f8ca4c491a0aee1d5db9be521eb0033a131e54ac376b7f411b64fc5080081a6f0b602c4d49d68406a94b7a98eff2a77a23c88bc524926ecd072247fc50066d97f0981c5fdfe6d97f741b64b2d6dadaa08296deeaaa9a908ac6d070947000b0cca49aee6498a06a6cc2b06ec6aa6e9ab2acac64c4cac69099fd146d94e00db4085edb6e7c979864cb9e959df1cc63204aab80ebb0c209a0a98ec859101000281eb27e56b2c81299f9c6baa62bb0a9d0804c378a611aa4444e9399b42ce00ed7f900770be200eff828797ca36941a1e90b3c30985bbb1a857f77ca01b7d00190271ed94ea81a18fb97401a9f4b79963090c65a3a30ecdcefe495361191a001019351f02102bf800e2e222c83032783948a98ab1c5a02a5357364ab049af0091f7d5cf81d17fe22134004f607ae10188e9f020c058a66520d7050d47c7e600d9f11665afcbc255bb6606f6e5e53172e65c05b268eb2472f8c1b966c122a0004b015bff80c860a2a953ff0c39df7f098079fc3c2ecff8e0c2d404d35f2bfc00fc4aa9c9625de2bb25f937b60cb865133d6847e9339ebf518a1237d551e76400ee0197dc081411fe0279dafa51f24f52883162ad366582e787ca94ae7d7eee00ef7dc1d7a9cf141bfe20082d0042101864f4dbf810004fe04604f13c7deeea0016f77ea216916e6a08e937175f14c1bf86d813f9026213fe0500f40e2fc2530012b3f80074edfbe7183b019a8b1793045b728baa20425ff145a26c301d1a9400a207ffb8f8cbf84c126fe1a15cbf81012afe1d185cd0d7fc7c0dcbff763f9e0002f9016813fe0b0aa3f801ca10094855c61774aadaa1fc136b06e42d994e3b000b0af8894ecbee1a087aa83db1fcc6c2c5eff012af405e58c8ac4c344364c500bb0005c80927b24129eff1584d5fc260317f863231b8902ca8d8d3f35ca46700ad6469c81ef77bc0f37f8f8a0dc0fe3e293783f908a6d8014fe09104e0bb95002525207f8005a57d7350580cac2b414685fe0007f1b4ded0323d6ffc9d87a400d8be59d156bac683752ac790594ff4df4186a2c3fe44af6f8015fe0d02083500e1ee8fa7cbce0e27a9a65f5b2ce998e6ec245ff970082f9026215fe09135b0005a1e4f8f2670ab88d8932b29f1915ed6cc9db57f8544d602ba7def30fef713005bf84c126fe1a2dabf81012aff1e160713ff6e09adf1422dfc143bf020888400a411cbdc1f786669ab69118c4a6b0fd5cdea58e01ca7f0986890170c81814e00c61fe566917c04513e23efe0025c0b2ff2d8cf46650c1376da37df7f8784ae002710fe03827c5ff828822fe03827e985843f8009b6642cf1fe0026eb3d7f11000b1336dbf80013795e62857fe43827ff8400689ee24c8583f87ebc5b1bb9b400019c7a6b9ed3284efe4384211877f82c8f408fa9412862b60ddca22c145b6f00e0019606ab538ea691fe3a347f884a7d02f8661ffe0e02c71500cd663957d400cb45d4c2cfa61d5828340e006bf8522c7fe2c86ebe40afe0c4007eff8140af001b40d09421c3de23d98caddc406e3d31b25e807addf33633ffc76557ff1829005ccc111fabfc7cb277f92374b61fbce7beac58b4667a6a30c61a7d28f77a75002fdf3e080d522e7664045f9383bffc7cc5edfc7c01fff8e237d9f3552e49bc00d8916dff5dcd470be199e4cc4921506d98d259a0bac848cb20d90db829156000f8e889a840bc2e4103963d350a1d4f0fdd0321ed54653cf6c30783286c3c72000745456e77abda362b41ca985f15374ee0967fbcfa582fd9e2afded774845e00351aedb47862cf058cd703987b0984ada5137844c7e13b4c42ff00ac7f483f00fc7dbcdffc07390030472d17f01800953fc09390551ed8159d1e093a7c7e050044030281c7a2a325607f21c9cb0233080c0cbb65fc060025cc181bfa8ca4bb00c35dc96bb11c3e3cb388f17ade38e7afa14c9ca2486bb58f4a0c53c5aa01ba0005eb86fea7b003f07c05c221b55c3620d9c3f826b4d009787bb07f9e98564000ab3da40035f607ba26ae399981e2f6a44ff11b88e106f080c0b1ee9fc06002004141811a57ca6c7e2fadf4b1229fc3b2ba56cc30e3322e056ea7ff0a1ec7fc000d42bff09389bfc260217f25c497fc5aaddff08cdbdfce4e2681ff1fcefdfc00c2addfc808440ea420302a8f5ff018009f3fe0874866726eb020584a9754a000f4faf8b560eb8a00da595940fd0c5984a65e08a86547d3b1c1ea29f0d86e7d00a8612309ce54000b8c44d3a59ff0c2a297f098083fe3449f6fe040117fcecd0022e10f2da5bfc80b63fc809e4042030291a0418118bbca728914655a60dd4f006db4b5424b874ddbdd2676b17f142359fc2601e7f0f2f0c3bfcbe8d679b9ab00ca270277e70b7f808347cb478a6e23a658d3e1e57f350982ae4109d0f91a4c00d32ec3da8753835ef3e34a0100c86e9d51f993cb813a43ac618e90f255903300183f87d3b8fe0d04fac570fcfd0589eec85bdb6f06430813edc064733bf8a1002ebfe1300f3f9fc13ec519ad92c5f896a78aa3f0cc397fdc556a4bda28ed7200888fc91d6f86a5352222010d69729cc21de2cedc93e59f853dfe0050e27c330047744d6de3e0e9ed6f724b44e833f8b413e5a7a9185749bbb40a56157f07e100e5c906ef08bc4fe2850abf84c03cfe7f04f99a3e8205ab5f6cba43de271eba008184cd211509cda5fcaac17f93d8b741cc23a0657a8572ee5f84f1c468e5db005f443baee527eddf7b2942072e87625786bf52b46ff8b013e3fba3eabe8c080090eca315f3559bae94783739f1ffe2804fbf84c03cfe7f04f9287e67bf5bf8000168c1ea171b75698c0bda2593cef07eb878e37b1f4167f1f71ee5c945a648009b4246aeef83602111dd79f10de1e22308a75f842a09e0e6bff01719e7f00100c732dd3fc4009f02010eff02827c09d43529d449db2df973881503b4671c4100eefb4dc47b65c7fd04dbd002eb1966caddb9eaba06ea01eca33357da48ecea00c283a9aad9d0a5b0e11392e7f15b6f5fc260717f7fb6f5fd3cdbd062930b130013c902bb0b63632ba7f1e36f4a0d06eacc284f4b2c4e498d46682a2a48e66c002949062d0d0a2ec9cf2eaa69862c884eeeed2e49ad498c472cdfd15496fd0900b1ed2eb041eb3f7f8085b585ba93b8aae611f64b9d1146ae18055af601c6d700c386c4008dd0f1a9d01f7a24c7f4e44ce4b5808ad62f79e243adf6fab205cb00a7dabf880682021c1ffe06150d73f80692746c3440d28bca43ee8d1067b62c005b82e4a1a21aa9470bf27bbb562a9b21fe6eaf2b7832c476691a39f80b901e0041eedb607ff4b1bbe7f089e8873fe18d6eb967035b7cc9a323c6019fb0b9c5003a308d2ca551cff5e5b28320ab714ff8638777f84c1201766569b823e88ebd004095cf13886f63d229d9941bf652c3fb6d798ed6e3ef18afe5a863105c00fd0044cb5f1e1b6f8b6797fc8eda6f63a348e04a2ffe0b4c2663f8bf80063aa15b00af7d2482a7276d7f9ba482a36b14400986fe0051424b300dc93c75c6175be000dc3f84fcf3f881b8df907a82a840604eb5dfe030011ae0c0a1f8250144855a00928797dd14aec4de651ba0f4e5b09607653f84dd74860f761ef61000b9076400a4d73041fe0682ac6d9820e9427d8117c96093866751ecaba4f56bce5ee67e001e6ff81c056662fc78cfe138ecff82c06eff132b3eb46f0d4246b1c25041f200f55ea0f8fa63f1002294763d97d87c156946e4b95b14a151512aa39fa7a73e006c5025e7b72035cd153c141df68eac6f3fadcd6b620eaeff1eb20a0d01fe16009e65578705c60609c9f02d8b7c1d83825e2f031e35aa0032fe068ddb2007d200a1730934dc39e696dfb4b6f0826924d575b477cbf81a98b761eff134d7787900e627f0f003f51fc3c00fd07f0e803e7a2bfc3c01fc7ff0f003f33fc3c02f8b00ff0f00fe17fc3c03fc97f0f007e29fc3c02f847f0f003e15fc3c07fc9ff0f0000be0dfc3c09fcaff0f02bf21fc3c02f84ff0e833e7785fc3c00fdd7f0f003f0077fc3c01fde7f0f00bf7bfc3c03fa47f0f003e95fc3c01fa1ff0f003e93fc300c01fdf7f0f00bf87fc3c03fdfff0f013e89fc3c05fdaff0f01be8bfc3c07fd0087f0f023e8dfc3c09fa5ff0f02bf71fc3c0bf9eff0f003e7ffc3c01fd8ff0f0000be79fc3c00fd97f0f007e71fc3c00fdb7f0f007f6ffc3c02fda7f0f00fe7003fc3c04f9f7f0f017e77fc3c06fdcff0f01ff67fc097a208c203024ca97f01008008c10610068f293bdffe023ce080372b461f9cc1eb3f3d6050923b976dff00fc49b57f098221fe96947b9951c6d42b23ad0768bd450eec19dbac3db5340500dd3b5d78770ee5f7dda4e391ff5f31eb3654817616ff003c6d41849e22ff42000af3922b359cbddc07fc0114d0623c27323963b031bf6b965cb79b69885050008d522fba136ccb0033c519008d509e6bcc5f7d01580c52dff912561e046bf80028264090b149467cb4793690997dfd6e63e91a3b3917d50c69cdeff270060f00f9624bcc26409254ef97fc1060ba4261fc1417481701eca1f7d302e607089e00a1f10d4fcadf06700abec4587ca6a0d62497f002283b8ce3d72cae0fa3bdb500a9d6f6ddf8b0171c891c66705fc578a6ff0980b7fc3a65c9e517f10762430000825a387e15479b8b558982d5b32d40780baeb530c983be2b6ba4b5baa140e100ac75bd412427d88bf2d2dae0a0daeba87031447b492e3fc010095e7b714b6500715d7f11f62517059d5dfc14093035d774a2a59ce072044f83c4dcfc76f10600b92f0d7fc02e5ca2e58c5b727379da367323587a3826a9b9262ef82c38091c00bbe8ae9d35c822250082cd37f15bb5a4e7ab35da5af262cf82c5cc9722c42a00960eb07fc59221860de859e1302d3e519eb5d6e86342f08dc7b37f0f092ead00fc189e635baa8eddd717db9467c28dd772e1d296fb7b0527f1f6637fc3b9ae0004df0fff8fa1cabfcad4d05f360a2e9cb72e4337515ddd58d1416b33b88b7f00e3cb5290264cfe7af7cfe2b010ff87c0634186bfc76e2e237523cbc30fd22000fe00521415455ad3f865510698893953d20ff3f2df5d07fbf1101983f8fa09001144b656c7044616f2052657374616b656420455448ff4a7fb77f0fe62a0ae004e7fc5a0387f1742e225fc7d9189f827f040b64b304af1328c62e1a6635fc000012ceb1fcdfba67d33fc16e0207875d54a1bea5fe462c1e94bd03a06b9a593008f564d4456f27f831e51fe407f027f81003c8301efb494ecabcb41867ece69004d1c15ced96b7d1ffc1d335cfe28ec17f84c03cfeffec17fa7fb05fe031fd0005ff82424183026c189487f95545fe00addcc019a4b302c1a8f66fbf76880050011e501be64520e240c589456be99f56e66b683e5e473202e3906c343aa3f870087b4a6a5b9f050214bc3860ecf29608c2be6992b147e44bada26e3f7f7db50001723c8a6ff3f2d36444ae64574544b00288cc2eb5da94647dddd90a9ea02f600273b8263cc18b4f9ae19a1a51d90f242efb6ec5b20d87d0106a3678755115c00d92133a74ef309339f9a7f107df7f07e3bfc0a1afd2834a6040f70f5824a9800d1f8fc47562194f58173320eeca31e710decd7c6630199165812f936dab3ef0040815ff03fde9f713e763f0804bfc0c0af6b07ca52613da19578de4022befa00034c5da3c6486725afff104d07f2027851fc0a1d3034504ca614755a0fd4b300a492944d5ac260352ce5101797fbeb658998e1958590c4dcc8c4c4c0e58cc000cd99919584c0c994c58cd4c0d0d988e4d584e4d4c994c184ccd8d0e58588e000e0ccdd88dcd4c8ccd18d9990e59998ccc8ccc7f87fba534306337653865653009633961343334386634313435623930643437386165633735376233393966f00e03e794ccd4c8d0e4ccccc4c8c18d998588c58ce58cc4c58be1e8d3f81452100b64e943a3cd5460bba200be5e730a63bab245c4610ed29fd2708fbcd495c7600005406790467e9f79c273c5fc003e0ff00e22cebfe40a22ffe030d890bf82c0036233c59449258e819a7656f333811c48fe00aa3aa4b7803e557abff8e8362009aa938eb322cbfbdc51352d05b42ed683ad611adadac64568302fe00bcfd0400a36785e673f8fc362b345a26870479576d434bd30017ed7c81cc9c7aa3927d00f297f3d92f925cca239538c6a2b98e1a159443d29eb450b466412a2935e3b600d7b24d021f4b5e6087e7aff2279dc4140ddff020d89fc0c3461fd6ca475cad0065f4bc626e9508dbf83514544dfd040ef07e8a04ba880fd1f09745fe0ac3bb00fe1f8c5f03e38e080447f81407f04fe00c1e19a50d6c4d337294f5526668c9008fd22f49861722949e3f850228fe06a8b2e2936174f49ff8fa9815eff072bd0047f01b6c65cd2dffe104ca27972656964777834756176357a6976766b376b70046f327077737a786c6371617a71706278756232347a626b6b35787a6d6569700567646170342f6d65746164617461ff062bfb817c7391c202faf0807f020000090606939b28cec6d60d3fbf45890c72046d0e7f611d056ab555fc2a0747e830004d11fea403a303e40788ebf8140e402981d94ee9773ab341722875814bf6c001be91b7322a694be94b4e319a082c61edc7fdde36ec0f5f8b1f495d87a86c100107170ae26b901a4235c9238ff3f30df7fab1a45c0fe0cb8bab3c152ffc71800408092de489fc3c21cff8d1b977f814106fe3eca1907aa100338adcc49008800d586f10786c76e2658c7f27b898baf2ca75eba5755ed64e055a6ee4ba1b33200256428c1876f0a1e7ab2d5317574c5563a0ae81c4cd619fff8863ed1b43fe000507903a94065093a73786624c7fe1a5ba2d84aa72c1a97660097e50a06a55d00a64595574725c0db80cc6c8cac5bb6af202e393c581866ffd6cad62cc1079f00c3e02fa0cb7a98796962c2cf56282d2f1e61aa24bba925f08610e03814a3ea0040c991de75107aef4c0f2ffd18d5c4ddaa3d09ff00dd66aad78cee7dbbfc010086060f5bd09c43d2b12f47f10c799fc01aa040c37f030607d671290905551d00013da847ae7d4856af57f2985d97e033fc505ef7f098079fdfe5ef7f4f97bd00f20407032dfc0c2f428f24a4ac75a8cc8279f32ed0fc9d81b1be41bca76d46004ff175939fc260217f7fd939fd3f64e7c83b6c10087ff028e140a78e72976d0046c9e3daa4d27177edc52fcd89afe13d22f11294210b70b32397c39e54946500191f6be18967ef5db0e0221b262dd8001720e59cf595649fc7b10b838079eb0018b378652b61e0d1a847e701ff006b0c19e7f6d3fe302045fe13028ffd01ff0035fc787a6027f0f0c1a0bfc1932b25d9a26a71894397b9a9be310ee19ab84d00998d7f8618ad60297c23e2795777b3bb7fc050938c25f70ffb0301f01fe7c800cc6fe3ce199981cc7cbf87001ff9b8ff2005e35a47d8a08ea6d27f84025406000e36eebca057f4dc2d84f346f86743bf805941cb9f057d077d85655be882390061c4ff0144b55ab57fa216683f8c803fecc4824bedfbf2b55346eed2fa90b2008d481444f6ff1e59571b7faf158440bfde5a5b616c86b20c1fc5800fff0f8500bffedc705574fbde60fe2c007df57d167c73ea59f558331b119b9abc8c35e60067f87845f0144b8b0158b9a6ed3c923b5d5a853ba8fbfa2a95e75f55ddb420008052204571a3ff262e1a3530c1f48013dc9a3920989c0a42dc9c0481f3365b00c137ed1b1b83cefcc1b0000118b303e176e7037599f40a82bb8ce5e96fe00600013d76f64d7d8539958dee981a4abcb80d7538614de919e8e89cb6353b19000051980bb4dc58b06ace6610ea1c3e6c3bcf3aac757f8018373f2d2cfc91eb83007e964bfe00610a555dd3e31f8e94040dbacbc1ae3ded1b9c21fed5f3519656007900b70da1edb140de0e400af38788590ca2a33e7eae80092832463ad5b7cf0044d4b072b3eeb08fb9810c23064c13f801889c907e4f60d7bd7bfafd39daa700a933fdd90e4fc917df06c0dfb332bca4332a41a69ee532896e6a78e5799a5b0007d21df09d3c80c75e4d6aec640fa8b1613a069d033a516b796a65989cd06c00cf85465f828486ad9c6c8048c8de033f301e0616799e3591975ace243a473f001fe3aade9fbf86a8d43bc5709a6fe6178c62fe00ef71762862a280b9030c250010be2f71e7c2fdd02cd228b7783f94da45d43ebba16082ba7d30dc320d950a001845c7802fd4230516bd9bb1f12e0e9401a6703f5291e6ba0c02fc031cb11700ef2586eac4d141e125b1438d32af667189c3fc89f2da9b4917fc06281817c8002040fc202f4ff80957a3f80c004cf8304e5e994870a7f2a24bdee9457f6d4a009d12e3501161d8c96fe82b82729f4f7076c45dd5ccfa729cc8c3ba8162c2ed0059f4b5a338ad0f71cb17795ff8bf8aee09fe13038bfbfee09fd9f0930892dc00d4cac6e8cac9fa801261140d1414150c8cd2d4d4d94d9a1410d0954d5d5ad4000c9c969c9d58dc95dc9e0d95d65e1cd39b5d8d908d4d517fa2ae09ac8e464e00fe01761ec4ac6ba136ae30a6d44b9fc5a334b1ce4aaa10de4f35d7a57159ec006ffc05042396991bf70315bbb1e80f187f867afc1b9d66654d4042f73c097c0014dbfe4409f103686c8405e294b0fe030012fa0c0ab62a5283df77c937cf4b00844b8cb7a9c6260a3425f1c557f856bebff055a725c81923a23b9f8ff2f3410043915b06494fdde06a5c20a93476cad1cc92317ecaa4dfc01172bbdf50bd030007d2736ff2a95d7ca07f00255e6252b886814f6f3f0d0b0a869ca0a26ef75d0075b4439321a092a9fe1865cafe13038bf8f5acbfe0d0c28d229671f80a26bd00f06c28960e7f801344ddcd9ac65dcefe3846a01f618998bd97f87d1acc8fe3007e98c060b63823d7ec3fcb0ab6192bf2964fbd723f2e690ecbd3645e7584b70055d35fe6e42aaff0629c633ffbc158c41f9451067ac3fd80ad61fc081b58d400202ee3fee7f018009d5fc081b5d1d3b9d93d522982a42f77f5fbda455c18f0002fcb7f4086d637837c5b04c5162d19b93f6704060be21f031796aea0dcbb4a00c8db5d14f29182b695428129db600419e34a59014203fc00b12c3e0046705e00cf01a1c5e1c837c5124fe7f8602d17f84c0e2fe970dad979139d1982f6eaff00878777b3fe37f73c2a4fb88fae7743f97c36bfe1e7e54bf47f9e036b37438d00cb56d0fe630dac1ea0a7f82c36b87e0940fa839eb29203c45478446c15ddb700063fc64995efe42cb0ff81c056fe17cb0ff82c06efe93cb0c77fbff2c3feff00cb0ffbff2c3feffcb0ffbff2c3feffcb0ffa072c307a98180fe0a1eb01157f00250d0f1e5af51655ff802c849b796c155e20ec9096b930fe16e9c032ee841b0083f833a704fc2fe03e9c2f5691afda6ba634db5c5bf802a2ae1d1033626a1800ff81c056662fc7f9fe136baff82c06efe13311146e48e94f29cd93c6bcd3130002bdb079f1eb8919c37f80316a22bc7c4a2e0bbfb753e10ce8acb095b8d5b800c7772c9a77a97c80397665451c50968976995ad2cd659770fe4b1eb0c1ecba00777c3643e6d7372a25a930e4da4c6ac0f3f82fa70fe1303fff81af6cfe040400cbfc4991807ffc3a00f840cff0f003e2ffc3a00f884cff0e807e0c3dfc3a0000f87557f0e807e130dfc3c06f9a7f0f017e1dfc3c05fd17f0e817e01ebfc3c0000ff0ff0f003fb5fc3c00feeff0e807e033bfc3a02f81577f0f003e5dfc3c0000fc5ff0f007ffc3c0cf8113ff0f017f35fc3c01fd27f0f00bf43fc3a0af8183007f0f013e57fc3c01f8dff0f017f65fc3c07f94ff0f023f4bfc3c09fff0f04f00e0639fc3c0bf8a7f0f02ff69fc3c09f847f0f02be31fc3c0efd5ff0f013e2d00fc3c10fd6ff0f047f59fc3c0ff89ff0f043e9dfc3c09fecff0f02be41fc3c000bf947f0f053e13fc3c15f87ff0f03bf47fc3c0ffff0f0abe0523fc3c11f90f00f01a588d5040299fc1c963034d0cb32d05019649885d3f614b89c6d30ecf0600ff0aa58ca3b5840ffcd0963152e93e6299f115641b7a5b62f9f3ab292cf93a008bf46324032c4f5df530b133d274ea5fd5c402c038d6d84576fcacda25997600ba417582baa7f0051edd1b54e7c5561fe188fa5fe13038bfa692c660660bfd001f0c06e0165fc6f1fc84c2757caea4a87f2fa58dfc3cd2f0f30ff3c2c646370074e18b4a1fcc4b197c30014202ed4669ff018009b906025697292c60bfd05800bf2781df3341a657437d21802c2c41297a1df13e282d01736482fc8709fc0100dfcfb9e7e34b7cfc05220684be1ff065b796b62f566328cadc262912825353002a3477ac28ffc09dab8d7f0500c61374452920cd55e682ab00605b868f1b5d006aa40653fe02e11f6ffe7aaa9ffc7c8dca83e1b8bd5dfe024346ee3a658067005e085845a3a93c817dfb76f69254460f179a9e3de007093a1aa33d57f4b0420065edb8401f856a4092bbc2af1f2fb5225650e81501e2ff232d76108dff07020048033d85d1b72ab7d3a66ba378dcb558bd84b6bdd3fd36092079d0b272ed1d00f665d0c013dc9ff007c3bc73f57f2da9216816e56c2d096a4b4b30756db0db00355167887cfb6a0f420e9f0620a93f17156a82db4382f76a4f11f58d741fc40080920e7f07024895e001860d4c2346aa3ea92e474933242192034ffcf4092700f8fad7e105e8e1ba701857559612ee19e0d8b26e0cccdce62d3e00c13891fb006b68fe90ff88a904257024b6dc32256178c6d0988c5d8aaa0f11a23ff802f2006f5ab51a03cf761b6ccfe22fd2998abf82c248e54194aec1e5cbdd1c2c5fd3002f2f3b7a81f36ae969c0dffd410b75805f10261fc1421d029810ca55fb6f17004b5b4a47652ff632017707a381649fd6fe8d8588113498349deddd04107473001fd01094af019483415bc0b04271e01215934a41798fc0bbfe44b5f903683300fe0b0212f41253df6081ff31071a4b4a5bbb6c5d53b04a714f2383fb39e5df00e13038bfbfde5dfeff7977f989e5d01c243fe0a20ac216e465270e8fb38b350078c63964cf15c7512296aeb40380650a3da267fd90c9872a5d9b770946cd66008b402e51602e406108d8c0373f52c3861ff0980f9fc19a4dd2cd1f9d8b6cf300a6408e926c5bcb4b3267f0c07f95aada5d672e5fef114aebf52664aea234f1007693766c39ffc30376a40fd9516d7eef4d5904ec7ddda5529bc9e11fe1838200fa2703dc9fbaccd6ec2e4cbfa700989d0238133fe0cad881a13f05ca82e39a009973d1a13b6c82089cbf80238890fe0c27c79f95328f5be295587e33b8d849008394def716fbf833f88b4fe00d4f3bc576bd3009e1ef14cc9602e0e338e601007fc305a3d965b41eb5d9cc2dc597e52aed9f8f2bf62b8c2678005f08c93fc10044f80309ebca39b92c2ee90ebf43b264e7f605402232304a2944fe918621440064bfe0e0120aa0f28742ab6a7f10c3e48356e9d98336943d077f88c048e76b00fe0b23e6e09a522d59ef525f4874c4972fc27aab25c3d4f5bfcfeff9837904003fe14e1e545b56999c14d650cc8c5212915c19d092dc509890d21d551dd1930092db931c0c535459ccd21cd4961d545192129e7f880b6c70fe0e2db37c0ca1003740a9f2b3c8f17eb7cfed1346ee06b013f898b6c1dcc03601b2694194136f00af2fb66a6fc1a3f87d2fd040935cb7080bb385fe02287205d9c309830abaea00946abc2931f8147a3c5d66735d60b2ef47bcbbaf7894ea7d7e414c17ce831b00a7237b08d832f5e5327303ff4549bf8100760796ca752d3c6f47e654c3b97d00c5a71b11b5d60f840d35463a2f6c4be1317f8e9d3d8bf214bfd78c56c40c260006a64666272cacac86ccc6262caca70c468c8606c6acc646c6a62686e6c6ff00c7dbf9fe9f842f205fe3e37d4f7f81c2c86170702e6f6b6170ff0469b27f830015f2cbff8f80fcfe0638d6810a101765b813f80c0041282d45c9426e26d8ba008b0e76eeafe00de8cab460df3272781bded97f454427e5c327a94c57e8605a00c6fe1300eff4fc422dfe828880505d82fff010101ff018009060349972848d007c244252d37cb862ab72d58ce3680e4202c2d298aee03166a319aeec7a287a00ed336501adca1fc01c32db404238122dee60017c208aff048085fe08de9fca00346cb329f1c39ceec244e5bfdb40274368fe00e24e53037ac1117870c1ec5a0011e3ce3ab1d91b4663e612185a38ccc3fc15c7b50039fc0601f7b7f018009f00e02f15cca36948883bf4db08179b73b9774141dec1fe4cfa4078ffd5d0e50900f2025041080bb030a7fc060022ec18146964a18ed71680b3147cb55030bf7800077fe5e0c565c444a242c6302c31548d1a6c1e0cd4b827c1bfb27d202ff83b00c5a6e391ffcdabfc74790a29285ffc57c277f098105fc3bdd61f43ff15e48100fe3ee086ff1318c17f0221564dfc16095d23bca453ddb16590f715f8e6a9a2007d3e7c060b4a1bc2ffe9d040ab8526c0494f8b51e44bb0aec8660650017bfe0000eb54d0730617f803ada3b53a4425cd0cfe49aeaff3f2d3674991f1f422e0007e525e0805c3f23a57c2cc464812a1e0a155d4caf30fd7f00f5c1747ea3e6a0057bf36fb82c2793e90f1c19346bc1f37941e84b3bfc01daeb380f89ad91b3800ff91827c40917f82825001efb494fe00ee6aec624d03919af2def5622c10f4003226fc6ef5bbf8a3b59fe1300f3fbffb59fda11047df20810b5fc14102ff0100e3c9db631fcd810d2a7f6381eea260ebb31d4aaae9dbfd058f22a9d7991a4d00ffc6f5f0416840f6391a5618cdd19cf8b255da2d06ac057c94d0c7f15e3c9f00c260717f7fe3c9fbd01eda549c1152935b9c990cd852cc510dde9c9d98d4de001cda1459965d969c995b50da9699cd5d15531dd19c98d4d53fa2b1e4150762002863a4db810a9990e5ea114fd8c82fd754acbce29086495134a3076cb1061e0039141d70791c7a678a69e44af6eb4df855b2f5e62eea7c97bde494d97ef5fe002251cd1e03f424432541770b4a42ab2917e35e5a925a67054a4fdf8777ef8b0094b4ff8a271fa2006a94d74f43003fc201a488403fc14024a9044a0c49b9f600f2880b8b0ca7057f00460d898bf19c5b3f093dfe2a347814c88b43efc3ff04001a4a3304fe85086d904f2a09469e967b44a40e4a5b072d4ba435f157cfe00c00bccb5c7aa500e4705621ad7dd29ddad01320b4c3bbd2fa20cd7f8b9502420900fe0d02b7bb6290354b10b5c5e89f97ebf8023b5f5a3dd13e7ec0094d7b8973007d86a994b2d0573684689a43d13a754d68729b27ffe0128ecc953f80c0ad42000ffe0d03cb6734b09aa9439d74c0acda0ebec7d10d001f9a2251739718f65f00d9254dc4ba1050c3625974f28b4a121c046d0ea3aadddff80c04440fe0a0110020c06b9c6533ab2d25d1ba848a06ed4e0b95a4bf80113946532d232394fe1300adfe0211a1c7b903f80c13510fe0e04d563c54363af088aab384db0e25505100d841001f2fe53010ef3a6be1c010e60606a3791ac9b98eca6fe67f4bc3980700f0780d0a7cb6afb91b91aa5b15c50a24c35bf2d83b97e53fc86034408b7f05000229fc06b50cc7adeacbc2061cab4157def96df2548d7d11c077f0dad421790071a35d3948246968788c7370b3decabc73f30175ed8c03ca6dd7386b8d6cff00c66041a85cc94c2ad2147dcd2590020e6a0eefc9f6ff004bbff9fc360418be00f15dcd4763a8907ba940f4a9f5c9a003b566984af43012aeed911dc5da059700f19810674ce95c1e3c33aabcc5fb4faa95e227d301c94f1fc360838e9286570083c835102d5ad5f3e825197e3677981df4a688114b106947819cdb2fff1981000629f90b884f19aaf6a97eb2c6db6a5a5733c2fec9fc360c58c13b09e89be700335531188bdd314dc5774d07c3a9c58e488566e03fa1aff004e454825fc6600041b8298c8e763bc9b21fff006e080d14764837bab350f3cbfc361078e701310023cf592243f7ddadff6445907541513bf5f856b274443b6218c5bd6da7f1180020e2ffc1c083e31b5df633996c15c72566028c3cd2c574ae9a227f0d85265200ce91b3ec1d93625289b3bb38991728e5d9a99c308bba6b2b0800d1d4fb6c5300fc66041e5f828446740db20a9316119df943b166a572deaff0d862e0c8148a00840eeb0d306c429a37cf657309dc02d1ec6d6a60e339c4e56c02bdab9fc6600083c8f6cf87215cbe8d77233de5d69b9eb333e6a324ff0d8106014945dd476b0059b6977bc197e83b22ed9dd06320c78862c2f413c334c9228d83fa46258388003f8285340309eb9413ad9e62d3ddf9c3566a4dccb8402a437508e61bfe2254002fe40823f82c0490234af9410a1bbad5c0da2f937f01d8829676dd4fe00e59006443ca7f4b82335ff098085fbfe1cc23f68439847c4093ff0709d1163c314400978b867b7b40d273d8b20291ac724291fc3616c16ed740c3a916540357d16b00f31988fb0e190ba1fdef4550a1434ceb8ab568dbb7e920759827fe0e0a3f25004e51f7843f432410a525c8102107a7afb5b903f8b828ffe13010bfbfc28ffe00a20a3d18c7f82ca19b0fe006d0e500043bb621b40c9957813db84b03e1fada005f2236bf48c4d7981017f060093df69285f5239082da9cae9099738a7d1dc900fb5c47e744dfc508fb7f098079fdfe8fb7ed1094354031fe0e31a1c904e544009ff801d996e84803dfa9d3c7c0051ea8419ff0130bd7f0e98d06bfc163966500fdca751c1c3e04e4806e6eb570431b10dc230f026e58ca7adb84e104e1dd2f0041bea8bdd938cf1e96d3b314ff039b3d441464a4d5f1fc40055af9b7f051c9008da8f28befb77b5ecb6a993844d4475e5866072d517f14529050dac0341dad009eebc0cfc0c29ee74b73e0482a30148f0b3771bfe309ff6c19728c388a182f00e032104e3f838841483db4042882b2a0ee40bb3f1ea93c3fc31c9924fe24750034e7f82c840897e9415cbc0edb4740e483ab4f669075e7ce5d40986cdfd2410047427bfc1c6ae40a148f6afc39498d934fe4bfac698e1914be8ed7f21c7fc800085fc1649e3f87ca12bcc6c453ad998d3d2c3ff7b0f639ff00656ae6c1b98b00fa382859be406890ff82cc1403fe013c44efb58d3d27e409355f1a37e48bbd002c3c584d3e1a506b041213a95e5614e3edf6d2b3c3f0c3152a686a02e40592004b13d3f83137cfe1300f3fc7ca5a790a750721e87f4051722acf517341c638000cc679837ba7c5dad4252f107d981fe3e4c1b0ffe3e70b04cc4dcdcd0c4c0e000d4e0d4d8ccc0e0e4d8c4cbf4b04daba0f74288594365e048e409e24d66ca5001b6fdbc64bb72f675e6ff006866a914c547b5a4aab17376de54dc77b7f86cc00068397de6ec379181598b798adb2c0576f5bfb8c7fe446475fe0480c7f8302009a24e793bd95fe0034c5fc1947429cefbe8ee77729b50ec7f88c29ae766fe000b3fdf704e5055205d61e9e21f07280c0439a45b518df5fa9c27f9e1fe85956007758443853665053574b32447576457a4344577a347a46426b4e664a774a76006f706670646f6e6471735afe215c6ff8300eae5e994dfde8e927b385c9be1f00f011b43bfc56de97afbc157f2ff412e361b6c7a7fe8d729f349bc4329df3a6007d137cddee7d6ab0223e40661971024b143fc56b8dff0981c5fdfeb8dff74200e36a2968aaec6e4e88270aea262d0ec9accc4b4c8b0b0aeccd49ca8a4c8e280048accce64d696ae9098946ed2a4c9fd14b8de4541dcb37c1e151d4c3e714620037c31f2f97810c7b8ed42554b23ff2edf8d2a49ba1a9af5f4b45f60d51ad1300949b69f22bf21b035be0aa81e4ad1bd7e317917f115969f105030dfc1649880080d4a2bb3df5698e7eceec0599bc16775757f00c7c53a9cb9281e55e603a2b0036b128a67d96619b52554afd6fb3dfc25001bf07433aed6762d6de2e93f59300c6c572ec2680fcff11c007870325fc16875b59dca34cf167f8080e37b6fb1f00335e00a29f0899f0becd9212535c255e6872df15ffb274d64a89b15e4dd3600002bbf80e7bc84bb1efe0cb803f84c03cfd7e13281fa7e275aff930b9cfe5200037ff81424bb7fe0b092cbd46539828660e579532e7c58cd7ccf324c936c4d60040ebf854d82fe47092fe19e07dbf8397bf834dd12a44f447267bfe00551abe004ec27973bca776025ff908a62f9020381fafe0b0cefc472524fc079a0817d8001022aa8c6f223ac941378d7d207f4a04e0b7f098079fbfe2705bf6884e0b7100c10081ff061472652965c007ef5502a46e4c2250fa042f18ccfb6b02a3289100523fe380dad8ec61e5a2392c5b70a01307e7c3017149846b5dfe185df2fe130000eff8771d749fe1fb7786dfc45ad66a7d3d48cfc0d17f803fadcac93831cb00d3275675e97ebb2e5dcb288c533c7e50190442d841e57ec29419ad907b9a9a007c9f8e134fac71bfa2dc2a0a1de681acfd041408e1d080bacc30bfc060024700c141244a658ded5d5154159b949418af25afe81f76181eab7ebe8a0473131600166346633633535366566343335656665653065353832663261346636633230023762636331383238303630653764383633353563336534393337623632ff20003b94321b1c1c9c33199c32b09cb29b1cb21b9c331c1ab1321b1c9b9a31b230029c1bb1b3189c331c9cb2331c9a99189a1a3331b198b1329b30b21c9b9b30b002b2991a7f01c5295023fc120a241831c44ca63a6b98910ddd331125aba5757008987a2490564994a385ce2bf0ff923b0e0e1e76abeed74d1f9ab834c4301df00482949005c8232180d1b907f158b99fe5a3182fe05019bf874a783881ff5d000e91817f9f1b0e80a83fced4d04cc107b6dfc573e590a25f9001dfecd504a83008b199fddadbd0e576ff861dc9c7c1daa0000171d6294179d65c83ad9cdc4db00a24ff8ac05fff1f36738c4ef25bc73a87292812e68348a46bd5a6e5e4bc7f10059771fc7e05fff09855bfeba64e700c0ff4b7ab97f980ff5430d7f8b3afafe001f017ffcbc6305fe3a0089fd310cdf1fc314a3097f050957fc0646e3caeb89005dc96817b3dc4ef432bdaf6aabbe2e87c7f1411b9fc2601e7f7f91b9fd424600e7c8f650aff05040a40d52f2884b8007dc46de805d484790e9a2b19bb9808300f6d29fe26b13788018f533458c10000b91e84ff0f58d59cb438a2bfe3bb4fb00f5c28504b293f6bf432956f7fb5ac73c6946c67380f6f832d13054a38d29fb0075ddc7a6bff8ac09ffe130413f86399dfe06041bfc5c2aac0704682a54808d00fe2eccca3648fe0087f56bbfdc0643f4b047fcedb9dd0cf839687de432bc0d00d23454fc5bbd69627faf2ccbc37f8f5a7d03a0fe3d6d701ff8788330afe1e20014c33f8788730ffe1e224c47f879b3d12a0ff3d795c8b7f0f122633fc3c499008d207fcf084a113fc3c4391fc4485201ff16f60ffe5ab66eff5270437f9f880082c13f80ea8600feb50003fcc0434ffc440bfff07fdf029ffde220cfe1f0a800c71bec2307bd3941692b8fff0f267910c1c37d92bfdcc4661fd0609d9d7f0000528abffc10200013880097f0f8237fc3e1ffff191187fd3408f81227f1906f00e27fc3c007ff6706fe0209cb60f9fe18fe7978b1730c6b7f49e1650093b0cb0009f9df51dc831ffe4b188ff8c8263fe1f4c9cbbf8586d7fe152c485c03fb1c00000fe5321fc1ffcb956f3fdfe43fff6f89fe29fdde27f9e588278226d91eb20089f95308050ccbfd2f1fac3ff5b09fffc2aa037f7489fffc865bf80ff7f96f00ffc1e711b7da2444d4d534fb94812c69b8b5ff00399b96679bc309fdfe5bff00f0396fffc3e08dff7696fffc221bfff11312e25fdfe77fff0fb3767cf183ee00cdaffa022b5b4f73bdabf99826599502d8e47fbeceff00fe0a3bfff87c11bf00e1f6c5ffb7cefffe22705c0bf8baa31fed027ff7697b16bc02ae6772030cf80022207ae03009f5263f92f574fe5327fff859deffefe3bfffc44414dfc3ed9100ff9508363f8d1ac3fe9f1e7ff87c11ffeff2c7ff88c123fe2b751ff8fc79ff00d040b7d633fc15069817018ca66001560be9d9c39dba4fd06909444be7f808003abde8d7f51c4ba1ff0980b7fa3c21fc7f87f4d9411397d65a35f3db558c2500820ae261dd3a83471bbcaf4314f6270372965d45eff95f8af528378b21486600aa1db9404a43783d022fe225313a293871d5ead5b44ff1ff2279dc20107f05008246ee61281e781141b148b9d107924f4ffc014c81a696c58201c68fe8e84e009a4624fe0a88ebf80feb97dba39340d286ee7af6281bb403a7cfe00cffb82a0033017f4905aed167f0545060867c5289471d8aeceb8c640bb2ed21d0f5dcac00c5e26a7c5fa283649618d20dcb4b7dfff89f62ee12efe0b02c4f5ae51a03fc00272aa3a0d8558db2e56c8485bbb0ae12d3bf89e9c2fe1300eff87a9c2fd1f100067c369e623906400c3f1b264f213e27560393a065d6a33449a95a08b51a970090ab89aeacb12f0955cadea6a47b74203009f1cc3e2173b3f35e00a061d8b500ed78487e878005f07e8dfc154e0abc4ca00261c2376856c441075debce597e006e5c7cd82d3fe8d8948d02f902624afe0a904c16e4ce538c878c0ecc7c76bf0071055118f4b690b734275547fff126d5fc260887fa5a51eca32f86fbb76a8f004e1c117ad6207746bfc0dbc3255846b57c2f64b57df32a7853fd7cc7ade915009b8b7c4b0d324218f880ebf7e8bb7264204a35f39667ae257268c71a1b8c76000f45b53963072308a6b258616e1d2508512b98a9ea7e4e1f43cce1ce9f4af700fc4424021a67f05054ea41129eb38dc6574b924e53ba406b96498cbc913bf60060b295c2397ab26a96b5801fc017112d6dc325ae44bd221d9ac400dcdfa272005195767f8217a98853bf8385eb1f03ba4e360071e2c1f510b2e9139ee6cf0b006477fe4717aff84c05bfe1e17affc7c7f3a82bb2279ae18f33088d2579cbfa0012054463805ab7cfa7bee70a29ae02951e061703cc12efa787cba750c10191006606e9f2a369b3ffa02146a60f3f75236f7023f404497e5153ff110bd702b700fc161e79810ca55ed7b44263b0ac08d46ff005ef44b863a73332ea857fa3a100220a68916187c7e19f69101ba25d6ac60cb4096eb4fd59c18002f3ba86f9d3008323f48c6d7ab57f058cde0d3b294756df2e89098ddb373d1ab568ecc9f9ab00f4e163fc47e524140c8ff05d1621d232949db387b87d694c2c751436b3150f00906847208c128777dc5245e8fa4ed4e1f7c5a71b9855241da3a0bfc95a655100c0d37f0582a608012849d47387e8e8943dbd015a948bac8e9bc53e1151fc5100e1aff098079fc3e680d1c0e1da5da16b34b9251dfe8084879391356236ef4f00340fb422495d0979e970d82ff1f1a751e7f23786a6066606072726a646a6c600665fc59b7b27e3b04e606eb4deeb72827e3b2f82b79bd03fa264251bae613a00ce49c2d5f8e0bb60bb3eee092f1f3aef815f7778a85d8bae5a304a4bb7b1b700580d0128036230ff91991d826076ff82c27634af948f3f969b40c95b8ec79a00e51deef442129ad9932cfd2e08e27fc260217eff84483fda21743804c703f100fc1421c8393a9ca55492e7d54051bb2883d12d51f2734d84a092dc97ecd85c009665fd5f0b92c64c4cc66606cc860cacac4626262cacac26070c8cc6c66c46002c86864c4c270cdfaba1725804f3f5f02e4b7f1f01f9fc0e6ac0fc202e446100b7f0180087bfc086ac7b8c40f96aa2c12fcd36f118384c1731a0e86fb4ff0d009ab1f13657080b6f235d0604d083289059d118749f44aee6982855b957011100e45ce0f5faf03128c061a800be1801e1016a4445bf80c0041dfd041b29c92a0017664de9414d4c604549b867ba56c1687ad0bfa70366c617bff80c8af1ffe000a018804470e53979bb778ef16c48aa92f817b78755a71a0d62516509bb92e8007c005fd04710029ca445710e27a1710b3f9247e1022228fe0b039d618651ce00d3891ce2408196e73f322e456145fab0419bd3f5e85a219737fec78b443fe10030483e97ec030e0fcbaa4185b17abf8039e6b819d3eec79f642163ec8de7de00d980566c6c71fd5b16886fa785b5196a5919cf8d9d53c2e8e08dfaf0137633005a5b93c32e80719e4d727a2a8824756e3e4e3e148c94f6556ec2bcdfe02fff005444096e35dae0a86576235bb71ff014b587f1087d9cecffc14154826efcca00193421e56cf2681eacc90e4cd75d3ec4f535114a7ee109bc702f901438187f00e0b0e5581765376585fe45e452831b9f76bec8c0c5a8b97f8041402bfd281700931fc2601e7f0f376437fabe2f261cfe16bdbc9f2e2a84f33370bdfc62cebb00dde6a487a313fc021fd9f7204f2f04462129785c75f7fbd1b2c14debe09489004388f21850e47b48b3832078228d39903f49470e082d414dcff01800981fc00086832ac628415b0d02939defd36a429fb2efd5bf09a7fe92051ed023284059007f106fe040013f410268428aecc1a33371a91b93207f413d3c2c05de2ab99700e940e13efe1300f3f7fc531c7ed105eff02022484059722bffe0300131bf4100071a2256c9b7306d0033f53bd578bd1c0824d54b75475ff14040bfc2601e7f007f840bfd4410280f1167f05840aca11291f8a494394dfa6bdadfc01c3e859000d8155d23c0e376ef7ebe0ec082a9277490e8edaf9aad2f43eecbfc694a64fa001ba6fb7ca5768e41540c5e9840afdbf1d8119ebdda4d02af9feb00951ae6f600cf01783c262ac89a60ecb4056663f5179e8bc63e66db5ad118d3f5a287b53100b22e307faf261df3ac7444b495777f5a12cace25fc46866011f4202aea5404002047868c07f020be33f15b768f115cabb8dedad4dbf9db7f91c46626ffc50100f5ff098079fdfe1f5ff5007d7ea41080ab4360104c56528678ba021d89abbb008a550faeb2a5a86769c26ee5ffa2823d5412000be405041e1015585623f80c00004fd04087ae598a2586e040241b2a5d12cc86310b2aed1c6f6ffefa199c66006461373837393962343563646630323239353866663134633961316330633400656466316234316563373136326634653731626666666339323863366133ff00202785b21c181cb2b2311a9a329bb1321a31b0b2989b31b0b29b9b1930999c001b18b19b9a31b3319c1c18b2999a30b09b9a1b9c9b99309b9a9b1cb09c3130009a99b2b19c7f01b6b21dfc140a1ae7aca1185c9104109284b7b841ac77f00700bcb32e5f7888791bf28d9a417d1229537c91e546bcac6a8921700a450ad0100097344125bfa0c1ae23f820041caf59442cde7521410c6d582350651ee95b310003dd6cbbcfd5e1eb147e41fc1606244ca07eceed07b84d85384e838418f1df00f00170718b6e867b728ccd51e2abcb8062d610cfeddeba8215c1f79f7b101000956c9a5cdfc06062137f0500836f9b292361e5719347f78bf3d856ef7c0e1d005e27f01137fabc3cead18a7f8240c4fd041da0f95141eba7cf3ba092eed6530096e468632796c267bfa483e128aff828048034c6b941663beab7aa967d58c1004c91c8bcd74bca2e3295dfd430c4dd0067fc140bb5ae9ca0ebf18edace626600c81b74d127791bd4a975ec3b77eae8f807f9026253fe0b03b1580251c28149001a7eae7e526a93c6af1ae7b81021778b6ff7fc7544feff8ea89fd3f0b334be0031080a9225d5fc080024162adca7b14384568c3a7047c810599807826477c80001b6f7f0a0d4d01480da4b3fa381480c05e4ff93000be18067f8240618301d00b7a9474c4b7ada15138759cbbf38ef552e6f83fd716aafe3852021a67000be0028073f8280c48d879478985bcaae3dd5e3634c3b07273b7d0048a5100afd27000e4b5fc2601dfea10725a601cfe0e041405e0a3341638088ddaec88478dcc600f8282e5eac3f8e41059dfe0305a07bf8380621d6b739c87c8ff012592e98240011a86ff00564a6c55c70b3245fc720b44f7f01ae59fc16031012a5aca69bd700575ee3c7352479b199d1b175b05a69d36b6fe8f0e31217840543dea88305510028942281b0040ee69975f791521da812cc2066541d59fd151bc77fc0b2407f00fb0f8cff84c126ff1a072cbcc47e8f8bb0302a2f6fe1d5ab10a13feec7f3df00204b849080a5eaa13060d8f9b29d1b3daab6c8d3e129eac2b8513ad86ab7280089ffa021ad17fbfc735feff1cd7f4f85d0051034202903da47f018008a506000569472836bb6b80cbaea0fb7eca0654306bc94f6c67ccf7fe2e821364ff0f4001162825198193d044ec1b262559c08f7134bb69c47e8608966a2ee6fce4acb0062d95448729cdb781e3beb62504afe7ebc07f8752400864d9fe1fd34c9b7ef003f831224fe130503f86efe5a624cc35fe1f23683e1014542147f41061cd41400d66ca7f000910f338fa18e7386b8e5effe1515f1fc629e3a1bbfe669c7e0a80063fd89f925bfe0357391208102bf8140640515085f83080b0b94f7faff017900c5cc1674824de89f9d417f0069c6554853da8bbf289047af0c71c4e2cf43f80048b5a431b0fc69795fd9017204080b024939fc71f2e871afd49ff8710e27f800cbbf9fe1ff1755bf87f16ba3d2f55554f017b61b917f15b19b5664b99c6fca00000084627dd56afe3e1ea0a3f84ff6cfd2b083b9c8338c8624d677885788180013e1a7e0c9f05443c1fc8c04d7f09e0cffa641175ffc1184c4b405fc06121a00c418186a04a761b5624e381bc105f74a2e9fc8f86dc0df59206ca6c8209a9d000532492437bb267f22d7451cf718078c0524143dfff861f0014416073bf404005a77a6328d53393cabf941e332b23a42fe820e82efe030173f81006182d1e7009406ca0a868858db8211b3749e5e4a7b4a9177aac4ff2716e07e898ba49fe100d88017ed303e0e49bf81407c59d894e27f67788d56e184f854b4a69738f05800d2c778f7fe1ab37207f41c84467c80808efe851088d05715294ec6c52b721000ef12d4a6750b38d6c80c31de0af7994612af58f8016c06e603d803829ccfe0000043210fde1d86202e310192863fc60408a04d7f2ae330041fc7e39aa0c41100254eef7c46a35c10449e97f9b084ba672569827b56f081cbf8f33de40833980012446c8f46114a647acc3fadf61b9f082a3a2c37842e2671938e5c24f498bf007f11e2500261fc140820414fdca15978e1eef7607297205e5a804f2fa23846006807c7f1b0208aa4ffc8408204db79d40d8994bc45d359f6980aa6bd944dc3000bc822fd11e7002b9dd43799b89ba1528093f19124164468ca0bf23163bda0003dfd57563737c6aa53fdbad95e7080ff10c75e8209080e20decd081be945610004f25329d0f7069b2ad02e2162dbd5cf53be68fd22255b6bfa2a1fd800905a00e1383fc11c7b68003fa1641fb552d650139605331d390fc179f4d1bc962cc8000d92fda0f3f47483f69f827e85107ed5ba4946d937b5f47670a3c91d93495000d44ff01068fbcb5fc0c7f0e28b9f204042bfa1c3fd415600d738e23e77d3ad0065b04a9dc7bd2110ecca97f8a1c0bfe1300f3fbfdc0bfda40fa222dfa1c41800b98aeef3653dc109c79d07698cda20fc94ca644c57f6086e805a1930545a73007cd3f65ad6278c6a03214071dfd0c22423cb8c1c6fbea04b137e808f075fd200a15dedfc260717eff8aef6fde80cbeaa06e8accb4ee6c9888ac9082d0d670a00a62e06aa6ccc4d4cec2ee6c72ec9aac6864a4b48ca0a4d6aad6e8b0cbfb14100f44450e8d7511f1e1fd202a434d81238a9e77f3a671700efce6100fa949e9600c0797cda190e323125c557f8003083ee53ccf31b7c2cb3ed1a1066b26bf4e200eb89ad1a52513fd230d6682ffa1c418b92040fca78da8d6ea1b175f7aadbf10044abbbdbf07f48c8634fe8790a838c94a5c5043951ce54fb07397be73a2583005400cb6e77fe821152022085017a161bd5f55a011ab9b4060b000885cdac8d00bf0f7570bd2b63ddd77ff8ac454fe13038bfbfc454fee8115185d8e13540e100c4c8d9d1199151e9d58d29d4c5d4c9e5d5e50cc94cd1551965e1055de5091500b8e514dd090d0ffa284548c2492f9775db20c586f2db2eb6efc528c43d147200219edfa86d60add4055a0011c5ca352ecdb4b5c6f2174d447c58d081277f8d003788fff010304c8577f80bf9ce6aaa45646ff4cc8747efd2390bea967196b700754b4888c4144e853928177f4108174879dc7afa6846e1db3fc80b65090a8c005c8aa80beac229981dd56d25e6b50907fa581b95bf8480e2feff2183fba486000727a41585959656859665532674a454e46417835546b7469565467347469700a344d417378516f4875626bfd8b0dcadb624d286bb2fce7316f18beb2382dc0008aa7208c9a981892bc6d0e62f70acce68c1aa90fb3058b84f7cfa05307473000449accf97f87129ee8529876fbda63e3e71fc45de1c00efe8590e46bc946c00abb3206b47faff010b9eb7f144b338a38bf09585ac7eaf100dd603d84068e700780fe040013f4104f1dac5d8ccc073901dba9bd98d5a7716b09c0f83f1e7e9003092ce205f74ac6f9c32a8f9d3bc1b4f428c2ebc38fe0055be37f444840bb400b2ca5c3e2154e2501dd8b1ab8b9daf80d6f6839e0d4d7e9410817fe1300f3f007fc840bfed10632302021cfd0e2143b8f8eba7e3447e46dc6ccc4cb8819617002249f5a03fc50102ff098079fdfe102fed110a1d802bfd0b20b9feb294c25e001eb6773f5a03ea4c7315212ccecc6da4953fab844ce3e404ec2a1018d797be000b1926502dc337e5bcfb90b1e776c83d8d651448c16cfc1ff9f29c5653335300861616334613037303866643035346163616438643065373736643738383530033134326131316630623462323732616630336534333133373737343866fe500f017fe0ec5e1018d16e2a0a360653edb6b79660742135d6dac5630b1265a6a00a8f7d93f8555e804e24cf144008002f8a115fd0b1fc846b8d299da55ca380100091ba15fa021051fb1a4a771bf3461647ff5fc7f210afe870fdd98f50afe93008def353f3bccb407d82c5f197b4a46dfd441168233fc1c0340d8430d2d806c0071c6e40f8e307416b7e6e1d0828feaa0fe420a44001f2af2534a9e9333c9160017f7a80e8a4927fd240fdbe3dfc1c02451309e7477527a1da446f41e7f004400aca30a7fb2d513edfa603fa2c10f16253e5622d6486523f73691684f879c8000412f8e39727f458245840c13d2e4afe940747c0821fe0b03ecda6253c3058100b24ef2a22430a600476de29307ea9cf143f4b843e9ff098085fbfc2150c07f0068042a1fe8290097fcfdff2012ffa324025f6ff588804bb76a8c0239443d1700d4d8a0e6d1939f92bf4785d611a68d2da0f46ca98fb8f8e37f0f90c229fc7c0001fff8e237dac5b0411643eef3be5222544622739944c1330db420e26d7f6d008aeb500f41b7948b210809e5643d991ad3743fc08880a206e49ff1e0e72020008baeedd7de66c750706ed1582b150f61b3c99097f80197d4d1d6de1f5c5f4b007d5963928cefbb9070a9ac33135307f56670cb5074774832469e8ed5baca610004aa1eb08d2ecb82108b382bcf61bff1f0912b07f020b905dfc060021ac18000927a4a6995b6f5de832befb600e932146b1b2a811631a9ff131b57fc2601d700f01bda4c407080c0b1ef7fc0800241819493ca0fff80908a09395b9a4e0cb2008236cfed4ed8634a5759bfc5d689bfca14b4ff0980f9fe3ac78048ff1c1db200821630437e8f074d5ccff3429b980fa7f940c60b03e1044ff4147d4e80f19600ca3c30f2fa921aa91e7908af9ae0d2eb4c0bff00533c9967285b93a89d86ba00bbdfa28dcbfc00de3b8c77193befd67857e838d2c8fe04c5ebe40670eff8140004305149d9493dcfe00935d79a0492e177ab5d91e5a5890da17cad5dff4a020049d7f098079fc3f3e8a1e47dc277a246c3ad0f55093fcc7a913bf0391c142a001b139676ca3cd5e7a8ecfe9e8a788fd2809274706e6e6a606862646470706100fc58d1daf71d91e124e2c527677ea38675e775842b2e026f0d603f328404b80032c1538e19b429e344d469e8e770442e634740331df0dfb299d48611e3640e00cd99af8097e900fefef8db6dfd061f681d62d28932feb6e0acfbd4f974dc0a00113358aaf71d32ef7fa4e1448ff84c03bfd1e0f5cdfe3e93e61cb09d4f470700c798f6691560d3c7c48b90e4e6b1443212bf6495d18a0d428d7e5a10c34dd3004dc9fade3de7918e0170188bf6b66316175e24897862e64f43e8f46502f90300a21bfd081bdcecffe0851ee719a200f70ede4a152a2da89f0df56eb9a74a9200fff7c3b659bb09c9ab11a32b1309a31b19a1c18b0b1311c9bb29b1b99b2b1100c9c9b1a1c9bbf556d47b8e6e44e99a564bac889b69b287502a60b3e4538f0000b0eb5ed3995357fa5b897bf84c11cff9f3bf403b5d2b9bbe961a6a8ba7212d00f505823ceaed3404a7e00ad3ae3d191b171cbe625547512ba5524dccaa57000050db6d4e26746b07821c1a9ae91576ed5577d7e2c7f9f12d4904c17f1f7cee00e6286068afcd93e79e6bc20b917450ef6f2bda63a2a082482143f8020dd39f0002ed18081c64dd7b1ebc6802e3abc0fc234a5fb03ba90fe00bb7178a1538f100e734ff8f807fc0fe3d087ff887f15c89efe008682a95303c831eb7d84a20b700c2543d6a5458df80c1f372d319cbca62e2f1bf87e05d4f4b58ff203b4d510f00ff07074a3b48661d7b0ddfb658e2f349f734460eecc98f23fcf81d2b23318b00299b11831b1189aff01a17a6072c2ca68c26ec4726e62c6ca6ccc62c6bbaec0091eeb5d6834618decde4f7baa24871acacf7043d3d283f10e1e179d6ce5fc90061d2ff098239fd3e1d2dcd052bb1b45611016f3850dcd2e94b48e26637dd6000a8adb4b92e9d4167e0df52ea3804067c8fbab36e00986a95f0e2a1bc1ebfc3002a53f39d360a5dced57a2877f1f874b32fe5b1ab469177752eccefd09c6736001444c7fabf232caebd39ae46c6bd376ac4411c0966778793070f1bcc4d62bf008e0c5c5a3ad06b9f0f2a09c6808db98237ffe7c0bc6c0fe3d087ffa0c3a5f800a02cfd091e55f051b2728e160867471d45cbcb9214c0452bf823f8d14d017f00c4fb957f098077fc83b957c81b4177e858f353ad8a94c151442694791681c9001f2a056708ce31f2de964bfdce19d23fc260717eff8ce91fdff19d23fac83300a44c7f82836b0455fc94908fcb56d1cc39a61bdb6fb06a89ee72f8c5b241fd004218dc9fc0e02b7e8b8c6e4fe0b01bbf64c6372187eff8c6e4fdff18dc9fbf00e31b93f7fc63727eff8c6e4fdff18dc9fb0231b9005a6062ff42c7ea2eee8400a0c6b594818a1b03a22f371107ac380f5e1d309fcca3310bf5fc16f40dc5a900b6afdf58307a79d546469430da475abf0005c8092548af29dffad9cbfc190800b3f849c1e33bb96116e32213118fbacecfe33c526a98e2f5f28d237000700d003f973188fe05049bf41467ff4f7f05990b0fc128e0de7f6ebad66b6897312c0082bf99198ac5975ec1fa84429bff81c056fd171af57fc160377ec98d7ab1ef00dff214dffbfe429bff7fc8537feff90a6ffdff214dffbfe429bff60485378100b4c0e27f0628655929103ccf238ae4a1e37211198521fc01d4e340ed0969d8007ff0aa8646d23ad5f81fccea190dc2fe1727c208e209c2b033d4a84029904e001a0916b0ff00efd247a84a1fb3c9403210890e2ed44a1fea18849dc6d569ba00461bc2b7f39691997a0727c6669b92b1fe18e0eefe13038bf66063e901f8a800333d4c7f8f82542f3f8ded123f7794d785b2e0fe2c50cacee76ed40cf5dee50085690c1994be8251409e7bb3f8f3f31fe7a50c8052e554b102383f98d4320200c204fd0a1fcea0afd9328d2fe863b4a4b478259795e76587c49cb607b69bff00e2e51f284ff823261ff8fbf46513fdfca55e01781bfe324a510c565b1a502000fd1e09b807ba9fe3eb52afe1490fc07d3fcad7143feea73c2ff1332fa7f09000501fe3ac249600dfe050af80d31ae50aa9596718f4fa0389c176d34efb44cb00bd366af6bf902d07fe03d2183ff42881617f01e501465aa902c8a97f83fa0200463f323c602c747cda8464983f8a3486fe1300f3fbff280fea2ca01004bf8200c2041ef6949ef768515d4cd240983f335d36253f63020d9c86fd1b176c7f20004b82ffc0c155a9bcca3586c71e5299ff0060ca8702a2f2a1c45bf8dcaf5b6e0027fbfe14333f7fc28667f9f15b521bf82675c598292419465cca79890029b900e26e724d5ce70d48e4c6e2a56fd622a3d9f08037fc0c1926e25ca43ff0057000ebf1bbae5a8c94396e7990ec893555de38acffa401707fe40e889bf41883450020cc4a17e6f2a6f06eb61ab24f8768226feeeae7771f027e8a8a1c3fe06c5e0000ff4c050e1ff968ff57f88b138055c7dff3e0e91ff9f1702c0007f8f7f050003fd1f14387adfa5843af7f47850e1ff0f9b43fe646ce7fd2c14487fa64285800ffd30734bfae42850ff5004d57fc2cff02874704ea612837f3b43d6d7d8bdc001842ca8ed30098e2197ed5b3fa6a2d568b3a2367803e0ebf8183fe01a3e39400e8af84514ae61f77b42f9677da638626f2c1133a94c0b4ab5cb0fe00bf8b5b00d77f76cbdf043131804fe5efca03f812ee0f860fd0621c57fc0745bcd1ebc500323191ce63015a4c2b178b66c93252471ff0aec3bfc0a81dff121421f0c06b00fc0c24e19f14a0cb3333e7a168cb273496c6a8e57dd73c503409fff0aecfe80045283844ec7fc4a0309c94fe82109bb82854494e671898660e25c570de4cbc00cc2753bfcf355221ffd1a0a2d1f0b457fa0a427d807188e5041ee87f1b997a007584cb909f3b056991614acb943f89bf914a31a552c83720ee2862d229b42400a99d6aaf2a7ff85a2cfe09016ed92ad23d91b554890ee1eedc72381eeb26990020b7f89bfed438d2ce1857d8851c3c97d18a894c5b90ba107aff9012263fd00062155fe44b29ac16f66ed1a980f790bf02bdf9bb057db3541577284b9064730094489371366964630a2aa839344e83af0e048161f9fc01cd5091e5c7201afd00c577f860912742f9c14ebe6e1bda19985160ae2cf35999a85bf960842fe06000217fc803b468e87895eff391a5a8e9df27a47f5c9af3da93213b8e2852710b00b55837bfe04799ee3bdda99c14cf0a905e5ba370a1ca7c6f771fe00cb1b0fb004e5eba89b4c39ef2fb837e0fa0747f8142187b0c94ed650c6c3e9bd16451fd000118033e011d37e79c3007681fe2a1f80ff06288c15407e888de6816942b4c00b70552e7ddc0a75bf0b9a356d9a1bbc32fe1fd9b1bcd02c4e8381f67a9a93d0025a159d066acfa5ba30c3f995ade27951ca92e21bf412168e98f155dd90e2200380754b4c2f07437907fa023107266df881fad5ae3840307a8bc13f48c25de00997e870d6dbf0e0c2f69345dcfc619fccb8f579299bbaa582f8fe24eab4d3f0042c6c993cfe808bd7c7eed8fb220806034f9c4042813512b1a858a546ffd1c00175d4c74024eba49bfa44299314bf42c70e477da4a456ccb4f3c1be2ff006a000a0222e38e74c65bb4fc85f59bfa505474bf84c03cfdff22d99fb442f671860006e7f43071e71fca436f501eae2c286e2121c9686f5f4d6abf0c9512ff130b00493154c4b4bcbc7a0127d2fa86b63d2b2c6a4a5a5ffc07f7205fe850d558fe000345cd162023d0d9ca73e014205eed8556f3da9352a40ff51033db877e850d0057e69819418db1ea0341657df866f0982f5abaaf44a2aa70094780de72223400532f7d61ca3d147574f44a85c4244fd4a2bf7e3bfc140415b53ca486e6845600d98940a758951ccef8c6011d0a1294c7eaf15e074623fe0a0415b48a50a3400018844ccab6387dd5d46c6dd481be661eb287fc541a100d5e9c4739fa123356006008bf4286b44db274a4f0bb683eaeae7d0026b3bc5993c572b60a8a9da7ea00f06a3b6048fe09020bf410241848094474cf3bc1c50b670431a74fafb33eee00afbdff131084791fc55624a08303dc29b93f24ffdee8423b3ea1fc08283a5f00f0580c7df692814f38ff191074325cff373e7f2b04a3ff655cf71fc50283ff00098079fdfe283ff510a0ebe21fa1235a8209b51e523bf80099abf506712e4400fe1ed7c5615284d987bc1a060fd36183f1aee6b0198005f1ce2bfa16353f37007e6515c5e1fa6794dd20e4d5a86569ab7b18fbe9dcf53f7103d3e82042bfe80070d5e76cbfc235571a7fdf87b413b175f3b27e9781d695fd8226badacd3630006ce9f407561e8a7306f380f464bc1d2d219e984886af61c2db2cab72bfa561006357f84c0e2fdff20f99fbd0163554d9cd9ddc908dccd2961d10d69551135600559555dd0dd8dc959399961353921599d2ddcddd11138c8e154cd07f6282c600abefb2bc18b34b34e329f2d879372c6fb70ca105e82f6fca7571a32f4325100051732e9388429d1475f34946792bc63071d7864c15a75d0f38d05f5711254100d4fcd7e920eca5fd0c2b867c07b2809d984c839318ac658318c59efca92f4800100c4adfa8e22fcbf84c05bfd3f252457bf553229834f36e0bd91a43d55662003790d2a0ed41b2b0e2132bb38dd2958ad2b10331607449e79d95aa4fb9eb84004a3e3896742dbd438ee5a47de538e4e1074dfe44f3b86608fd0e1a9bd0808900608648cab7abcc05b907075b31da717e285fa86359f7f4406b730dadaec2a500a701c53ac6fcbbf122416879babe3eff2180d08a1bfa1435e538426524047700dc6705d8302135b673055ecaca586487ff804ed9fd1f2440b8005f10229fa100c3500c0a149305ab4ea52c41f0c7b7568d001e4756a7f4706a0193f4e0346100957f001d2a1345e14b93efa9c7534b73bf282cca4be6828da9fc00e206b2a900306ff11826837fc1c09a7a34da7ac919e3994fb308bd08f47829fc67150b7e00a116a86f9020221fe0b067a4f8251f6aad7cbc2503cee4f9cdee148304a72000ff06767f854cc0b901c41a3e7cfe0c8d841affc9d72f319d6b1b07c2f0cb8a00a0d0f5008bf833714fe130173f874aa7bbacff3e711f7f0fac80effc0e44eb009b7b1b4b0b616b1b7b73a3930b1ba16ff0410c8e6665cc2dac2f4dedcc2eee007fe0857bfff04576d17983c1b9c1832329b991919199a1a9999331bb21b18b001b099b2189a1b9a9b9a331a1a309c1ab19a191a1a179a1a18991b187f0791600dfc4c298aac51bc87157561bed67555d419bc1148ec290d179c978b798b694005e9446ddbf99e57c30653488032f97fd4576bebe2925a681410fda696abb570047bd604ecdd9ff1188184bfc1c1d1a89989687d42dacee869735e86db8a6d9008a63acdfea18cb8e6626fe0e1033cbac9d58ff116c7516762610adb7947927007b9a73f51077fb17fe858c4ce306f946cd881643b1109ccaa7148d9f3f081e000f438c5e0fd270f293fa6e2400e88cff430661c4d4a506fcd79f1ecef64f94000254a277b55aaef095b82fe9409002fe1300f3f87ddccbff7b79f29655f98700de7edfaa8b21b0129679c7683dbcc5df3e5abf727cfa34eff5d55b4fe8484600c73533373535393733fd2f12004d9dd1516b9da65c00c877b2a614f2b6501900f27393072e37a41be25943111f83cbca4253e7c8a8106c28dca7d2b640c0f2006b085b47e61267c0e0f06f61d7321fa4459ccbe40688d7f8301a56494707c600d6f1a2812e9e3bfd3c9e9ec19cdea94b72bfe280697f84c03cfe1f7dcb004b00b9e1de4b00a6c1b1ba6001a5e2a8f70f95675c20d50a59312fec5b1e53e3fc00f94d03fc500d29b18989a9c1c9918189cff16834a5fcde89aff85d5dfec0130086f4d97e7d537995f04ac0084750e579664eb28c5b0392ffc0119c1f30290000c108a22e74bfbc869c20555df753198d44bd7c0523aec1dd5cfe91894a136f00e0e0f3eb7ecda9496689ae832f2c5635bcb6f2ac4dc1303f9783cf020239fd000e18bcebae528cdc26de48036df3115fc00b42949a713f2078fb7f144abffc002601e7f7fcabffb44167980688f3f82c42f0400942dd8905ec757756202d9a00b16b2bf53c96aa9bba6fe2810bff84c03cfe1f8e8ab05ee16fb93755b4148b0072d40df913b238222ed7b76592c086d5d6f76138a3fc657081fa4a4c33bf8900c5d5393331343830363231303536fe2c10bc6f212bd540123040a9b14cb8a500252199c1b0acc84facb761b38069f540a0fc54d44f8fcaaf33a81155508d6400d51672f74de8b1534610a91836dd53874469f907f48c9bd5237f058ffe22f3002803bbc4718d127d6468b8c0159c96485ba9cea2d7fa2813a1bf9287ff424c00fe0b3a1e926250277c59a0cb287670f8cbeeeda7545911bb7fdc0bf450766900405c80820c65fe8e8d099010f6ffd1908bfe225540b764bc85fc572f67f09800139fc3ae82a009ff9fbf4ebf87f9f7fe033aa133f838e3f5aaea1ac955dbd600ea797b49d3f78d0122134ab48fd442ade2a1fc166849e2c4a167c371760e5100f5a7d4575b7268ed05a9e4ae7337ea10a064fe057417f4306d5164141a08b2008591dd21bbc8acfd6e6e7b1a7642d9ff142ffbfc2601e7f7faffbfb481be1d0077f4386abedc86c4434e6d8d7c7bd994741ba0c4a6335b9c9bff412d639e130053eb0e77cdb51f3e1b34513cc84f1a76823e19bec56d67a5c49f83e340e7fc0056b58ff0981c5fdfeb58fef48d57d695a6443754d6850666454657836784670094b68425a364e527a7542346f4a48346b524353757a6255587942fe8a5ac6800ad15d26a27c73e2d31952ea7a66568cdfc4e1ca442456d7e40ff1bfe222ede0018623769ec2cac90fae91653ca4bea14744e3190baf5a04995084097fdf905003fc8c6a940c90d3fc1633df1a1ca32bcd4da95e15f2290b24f75267deeccb400821e217f0e08160c09fc8220582ff083aaa2227c9d5f3f887fc00528d28b74008de188a4adb853e317a95bf78c273e4195b0bdaaee1569b290a47e808fbe2800076f2e9d9411ec817fe2b6af7f84c0e2fe9d102c1483fbfc40bfd492d81e6200e8dae8aeaa94f2b4ce88cca264cec8a684caee70cef2b2ea6cac94aaacf0a200cc68aae4a4e0a2a294eee5ff2c453bfd5219d608460f060cc6ec6c272cccac00268686a64666e6872ca626a6cc8c262cac860c46c686e66c660686bfc069aa0031b1b3311bb11c1b9b9b18319b181c9c9c191ab098b11931ff1e0d5a12caec00da75fe7463b6fe4203fd858cc5958d94e4dcd8e18d90d0c0e188d4d8d4d99800cce0d9959588c8d8d4dd98ccd8c18d88c0c4d0d8c8c594d998d9998cd4ccd50090c0d99998e59990e0dcc0dbf9f00fffe203be41ac10159c471a56d7b523d90020db502e13e1d90e2bc83822d2a00e3d464c65b3c424005588859bdb0278400093b1ec916acc6bbf11c64597c3be4cbb7f2575e1f23f88dbd86dfe0e6dbd9c001a6ab03097576956935ce2fd372abd61640fe3f90d7cb807dfe0a6dbdeeba5002293a473238691ec56fe73f6cd021e87fb0d5046a53f84e43aff1261f3ff0900c9d3fa48369a623f4386d34f1385e371160807a903e88aa985704a7b3f07220047f0aa723fa90369a5860797f82d06b2b4b949b4390dc9a06b92b4ab65fe9f00e00aa72d48c1953b1062bf49c80981eca9b29b093710cbaf23bb0a816320e0003d49dff02374c09fa162a34fbed251afe0d80793ba0c9d7c50854071868d5c0011433e07f8a2630fe1300f3fbfe630fea298c2041bf82c204306f940c4369700e3e08ae9c3de84188ca93702681e73bf1fe5d6b53f41051eefe848aba6c9370094defc92a9b6fe00b608f3c36fc0a7c09bd3429024046e7ff4e451ee846001007c23fe858b39d013e9394b678ec5f02816548b2f33aa8c30ef2502c37907ff00d210c485fc07104f410ff05815b288b28fa55b43ca21777cce7fc01de56216002d8a46c8d2842e017edc93c61049152f8967a5c18fe1c6984151ffc10525df00c3786694feaf93c61fd0129b0e9c68bd69d55fb573ea12277b25854433bed400c4d3822a8d2d5ed6018bbf64783d4a9638a428fb7f6844d89c5229178c8bf200e1a35ef7e4c127e955c0ba1caffa46284e08bf838235a82806bad780ef60bf00352d03633487af7a5d60e8945ac7880e0607d0903a4c27d0a7c886f39d9b5000dcfd062e127fa103a00097f4305a01b14a6975bf30beb3629ea859e778dc2c009196dc16d1117ebc0e80058574e52436e50424d4e397051565450416e6f763001614857516634374b6139354e6939337572704563747932fe20113cb7f8384004fef79382c884bbd07c9471364d853a7a771a02ae5fe5f6d520bf82c084035000a2947e8f4bf2514ca03b4de22f88d07df8566bb4f12eff2862b37e9913de00040ff6b1bae7f919cb9ffd4405f61389fc6c68c010c89027ab3ff8db98ec9a2006f2691b72ebfde0e77ffc2403fff098481fa3e104d0c3f82c3f3864194bf370067f520e72031b1617b33daae14af290f6e48947136abb0fa3d88e4b4d4ee5800fc1dfb8506bb7de780fd081e4f01081fa1c2c127b6466e600f9ceecab441b4009755c18822a7dab20bf4b87baeff098085fbfe3d337f68c5824d120ff058410072ae3281bde14e60253914a642f0d2c31cb79f65fcced11feaae51f01fae0d00dac528afe1d1fc5a953f9afe36fe3023c47a1203f92c09fff9f7a7f7f0f942003fc2611e7fa133d2f850bf42c5eaaee104a7e8098c8d86ee7b992a7396ff010020f0f0a759e9caf4f353cc7e9386bc8fe1300eff4fc5e7646319713ed322b00024aa97e8099704a294c7b05c480629eb80010d005d16ab757576fe002cd5ca001c8dfa239be24fce9b4d57d10aee15319a8a04deff9e7d920045b13ec776ef00f81059544fe0e16560dfa685980b4dd3e10e96b9d1f1fd5060a7d8dc7f8b850095fe13010bfbfc595fda31f9e6a5fc1c79f1ee2c60550c7a3115e0ee044f0400965442925cf7d7f2f1e7c8ca5fa1c3044bcf3dab2c338076a4d2e84239590000dc5f37650ff4948a47be7f058779bbf32866c3d130ccb26c0e7768078c47fc0001e894cc1270332697f626bb404130305fc1c1e1cb7e4a38c5f8aac528d3e3008fd1b45d4117ce3460ff170787fc260217f7f8787fd464ac81c0c37f058d6b0027c129bcd885ccb9a914954f4c036d64428591672d7903fc918587f0980b9f00c3d85856ff63e16063fc6d858278c24467e3f464f2cd3303c9fa39a76e375c008b4120128ae64e62dbbee0be5b6357468048bd71a8e6241fae4f2dc7dcdff8000bac49f127ad728981e23ff8028b9a9cf98079efe229f799e0643f42c76a0a006e9ca74527f0066e0c9cbfc009a3e3abb8a41d454db9cf3b5e7f0026a7e57700fc2b2d619ebac60487f14e640130333fc1c420a317d6c7f78e0563a0cf4e9300ce59f88ae115d851ff171083fc260217f7f9083fd44420b30b7e850b59c03400c6b9421af91a2da5936cb54a984d3968855a8ff010b962e38fea21a01d26fe000a01a006b9c650de390a6efbf37182c840d665b18fd7be17a341cbf4708694007c83d4197e858b64987e0943bf72df6a1fbefc1f04307ebd449cb3ed19e620009fd422d97dfc0e02b7e8b939fafe0b01bbf64c9cfd06feff96cbefdff2d97d00fbfe5b2fbf7fcb65f7eff96cbefdff2d97dfb065b2f8b7f4285ccf81a9bcca003546422d01b3b97c5cf60e75e6bc05fdcd7d6528feff85976fdff0b2edfa8000662e0e7f82826402069d94451e0df2b5f8334bd756442ba6e8cd7e82d6b1e500fe2349ecfc37f4285b112bc4ca7ddebf5f75750545f51ed9d5335f2792d6c3000e4afe8f0d241021ffd0b16b41e44b28dcba106ae4ea207f54c4a9ad9044b200f3259360cdfc51267ff098079fdff267ff51499f0bfc14102413d6fca1f49e00305d4a8de55a87a13eb6e1714737d69f256fe8a1624c85e8d4a510fd4a35be00845fa162df913a6a53e1a0d1bcc4b5dd14f0296cfd795ca19765175a53f510002816147f0506716c652997d18e1a4377f124aec413af1f33904df43cc863290047d75df11de896567ae1fc0120b6bbf48e780172f397ea5197ec8037fe0a0e00ef2c7252b3be0ad326396741af00aa05d74687a916f22d73f5745d30fc80f1003eff0587f8c9f9283b3dedd3269970c6660dce4dfe02073ac0d5a234f354fd007c1811b727baa964ac511e7991011b0ad9f8c04d079f86b41d620fc1f9e1e0001a958bb27fb7e6b2593f65ac2dd549812f1649e61c54a66b6826792f6888270011920f9ea33f40a9fec00daa8775837fc7a336ef94ab7e7d2ad4b998f22299005fd1c5ebb996bc300887bff88ffb1168405538a5bfe030011a60c0584de520003b4bee78ca977aec8ff24fcb468aa785f1ca733fd5c2686002e872781f0c04005080a98dd75060d260f28f5e3e847c9f8e732094f3ee252d1f999bc4db4ddf00c81682817c200cfe870b69fe5f1d6e8ce0b40f33bd7dd64cd494ee339ef426007fd1d153b1fc20021774a27c2980029a7bd9aa304a945707f809e87ba10fdf00f8780421bfe0e0217151319cda46b773f6d09178d0fb3376f4c66dd8bf87400085601bfd0e1705d40da300ba6b1edbcbc3e11503237c2f07deb6081fa722e400d28ff80c0e81cfe0e029468e3071ee5239dc0eecfe015676ce5a8bff802826009e45fd1d2231604c43bfc1405302e1efca60ae0588fa1e8ced2df020a89a9b00c43da1fa2251fffe24dabf84c110ff4b4a3dd64e47c5c01c5e2add048e1f6e00248ac11aec63495ebf63fcf78429dcec47b9737faf98f5887eafb99855a37a00933674157f18d59f5b6b1658164552eca4926fcd38734b61d06c2dbafbb30600c0b238ed66c2b9cfe6d3b87efca0c93f802a80cea04edec239411035ff230400f8b10f7f0604cb8f291c0d1b91f91f585f59e0119fbd05c0100e479d0dfdf800132ff098221fc96132e40285da49710046b01df3c50077ceaff7f12f3bd2e5005158332e78650f94523dff2f84cb9bb12648929c0b1fd7e26e859da32f6067002db52d193ad9126493cb241fa0c0706368592fcc2a7cfcc62f19ddf050dbfe00041f9948ff011f98d8741eb0fd9e43ebaee07e918d87b05220dfd0a16fa60a00788928d7e2470095eb9ed6dec38161d06790cdf31f8bedfe2e357fe4fe3c98009050f6e1825e6d07f87a62459ff9d1b5e393cffaf2321a03f8afe5aff201be0047f3f4cc9fc3e0afff9935d2ff8b3f19ff9f6ba5ff0fe32dfe643a92fe2cf000b7fe7c7525fc3f74aff098979fe84f5d2020830fd0b179f2695f295781f390005e76d9b32b4eea578901b2d6bd0f304ffc5cfbf7f098085fdfefbf7f51c7f800043ffa0a2f3eff410e0b7827d574a047d7cb70b77f1a01562912307f36b42500a588df87e9404d80fe1300f3f7fc39707ed1072e0e731fd0a17e00067d4d28008020cec5325306911a7a39cd8e8dee4f9f12c749fd8747cfc30137f0401d2b003fc087c9dbe2736f508e4fc4699626e11c63bba46c33dddcff1bf2d61cea5900fc0683e017f0400c4b10603517b28888e4a146faa76a20e4eab542907921b700db4e8f1fa3a4ea020453f828042037f5194eac2007dbe6d3b17d601008b0af00e00e36b83248b53a693f470942506c234c4d72e500bc4f415d306301233ba200733c78a1b370b03b3248ec3637f9022aab03f4109da37f02018169fe02617a0032c82eed82ff015ad8257327f3b2f14b057c276a7387fe900cde9f859fd051007d6904ea61286f897c4dc8bd6fc86c6a239dab948b8b742dc9a1fa6a48dfca00e5693d8000be1185bf4245f884181bf884a178904435478f06ff55e7676e19006949f5fff80a3fb37bf851223fe07028bf811229f83afe05011e0c0a418252001bc03b2c83762ed5ab6eec99eec4bedd0391a2bbf869266f83918fe05037d8006ea5094610ae582ad40f7c74383255ec11ac9e26f6937f8699adf9011b26fe000601df80c6538ef186120ad6811f36a3930e24cef03056c48c5bf51c2ea4ff000980b7fc3dd5c54ff0fa05a5102e6a57c5d56b7213090b9c0de7973adc81ee00dd5fe020719e66e797b5c0878a1505e0056e7559a2031b903f680a65ecba420011c3f316721cd394013f0aaebae04d7fe1fe9e3e0e8abf81833ba3e3942332008ec5f7f5eaaf9a582e72558912fe00ef5662672317f46838017c8101167f020080781e848129f674e4b65a852ce64b4f92ff7297ba59d499ef5dfc5d42aff00098085fbfe296dffa7e855f8402dfe060f541e625155ad5445ee81b477ea3a900eba45a61ab73dfbbc7bf8844bb7afe0501060ad1da503257355a20d05c813600050e2a637041455770a3c6522d70415e6b0996df49399c19d5927dafbbc3cd000ff919a5002f8663efe0b17f531ae514a4714d22834367a822eca2238c719b00bedfd149bf508e5b5fc81f422ff0580d283d729641aa3e61a67de5564c17f3001f5a02751e88979edfa3a66ee293f508cddc107e8f99bb83044324fae3a94d0029f59475a26f48a7c5bdfd268e585925ceedf5d88fe00ffa056ba63f4ac5f500bff0981c5fa7c5b6b883fcf533a5fa7e5b73bf780b6d77e9496d8e56476e52005644314b38766f51546f3477786d44477058795659415a36364256566b32410070456169417a643651fd8a17d2eb2162c2938bc670fd69a7276852d0b08fc90026483fc01bcfe0d3837d2609a520400775b7f4249bdfd5c0b0c2eaf870786c0076556cd24f9fbe2a7bb68bbf8e596c528211fe9185d93214bfe0a2a580b80f00652c7a1b3529c8e1a3a057a6d736f89379093b008ebf91c877fe13016ff8780087790fe1f6294b3d0e9bb214cf4900cb2849192af37cd687bdf0365ecd193e00f02b12a114ee8596a39e0a60992661da2a3bc0412f87fca09d5a658877a47500a071ed2bb7ff02cb3f881d6084fd063a26df0830607134ffe3c8387946c7b800f499a3a0c310e4a1c9edb8406e76459095087aa1338a22150008002f86028f00d093a1090602430f29d967b328ee54b8c2e8d00ee68662f3ec9035e581fa4c0012307f84c03afe04ba391ff4106f4bfe828de9c055e829428fe0039b014343008379b7ce5d8b110be281d2c40513edbf4a0b06e270e33041d0a7e89898f7fe0007015998bf1d3ff84cf81fe0b01bbf84ee8eef5d24dd392ce112641bd64dea00b12e8e19fe0082405f015f335514b603ec1385c49ab878180e0f386ae866f000e3a69fc776c287016b75f89c23c97cca556a26a0718d5ff8fee8e23fdff13300effbfe267dff4744bebd47f0f003e61fc3c00fb97f0f007e63fc3c02ff67e800f099d7fafe1e007edff87801ffbfe1e00fedbf8780ffe7fe1e047f9bf4784d001b8eff0f00fffc3c0ff81377f0f017f67fc3c0df967f0f003f4dfc3c01fb3700f0f00bf41fc3c03ff27f0f023ea9fc3c06ffe8f89c7762fe1e00fec3f8781100f6afe1e04fff8784ff029efe1e05fd9ff87819f65fe1e06fcabf87801f68fe001e00fff87843f02fe1e10fc0bf47c4f0bedff0f017ed3fa0a2210821381b2200103bb487ea0a2dd25194773e2ad219fed3565b1796f6e83cb5567293bff450006778c2f6be5e6c007e828fb7629840738b7fc8407d2c763fd042b85232da3700528773fc003a6395b9e333975079380595b7b24febd15b04abfd202b852520006ad229b98f4cafe97f1063d9e9048803bab8f269f28841f6161039cc5786c000dec207ee2636921c09aacc30d79f74cbd3202246889cd5729ef667ead878ff00a463047473f42867e95a5a4a4d33d804b05a454f0b9a8c598c8913dff488b100117f2ed41df204c437080d3d514ffc06002577f0260f3bc1092c466851fa10000ee92acb1a8b11180edfc00c0a2fff7fe0f3fdff83cff203770c425fa16330007958025353585d2df7dca46e1aaba510768b8427c670d6cbfbff2dffeffcb700ff500e0950afe869d4b32a66943e4ad434d3d98aeed641b6b2626910af9cfd005e1d279fc1a0415e4a6ce52723b5a2f1195cfae9852409a669c8c60a557eaf0015548026219fe0e0daf5ee8b845fae77c49a5f90b536aa0dc3628510f07fbf00f64bfeffd92ff90036b1afe0a0daedf36502ff2167dd7b9270ef7975e786000059624e1b4124bf57c75f1ff050105fa08307d58953eb525142864e85c4da8100997bf8011b652e9126384fe21db3be168abf41864dbbd744a17f1a4783ee5c00d389c42096592b754cb02c0cca8ff99a71f8668fd81e80529ff80e2b214fd0005396b84df871290605a19f28604de997be777e8d1baf9e9a7b03fc010b808e005a4d5fe9492d3efe1300f3fbfe2b2fea28ac904f21018cd09de1032bd826a000a259e53b86a0cfbb1aedecd4558cd00e5ffb54faf9200ebf4586e2152c4c210067f031aa21dfa1431394270d2a53c3c62644eb0bb9abd5e35d29550d31cf9400ffa34ff9e8d51fe1f79a9052c225c9a38480298bcc0f5c47ba9b904f516b9700505a56b403cee98cc160509d5e535fe6a9087ceb148310670a02ba1991a8590049e6d1524cee97db90d92fca1a7fc892b0e8023fa1c73506a3f8022091ecbb00df784a447f0f184f06d90de18e7d222fd1e287dcd025fa1c72b72d2de0d60700c7b0c8aabe3ba3b81909e5a5768bbebf538e56e7f0980c5fbc672b704ff43400e52cd07be8ad932a76abef7429fb00ded10f1b190e477eaf9cadcfd0e396be000f64fa789e5cfc33e1c7fc0022c21a1ef1d1a2c32403d7eae9cadc039f83160062fe060ac84fdf0253a4da17ceee80c05bc0af460a2eb7586566236543fced008e44dffe7ec75ffd1f38a57fa7c7152ffd198ffd2da200dee0352ae0f405210059172166e33d1dcb64206c1107ff5ac85d04b95aad45668aff1777d31e781200f693f27884ff8c9cef96a28cc6ad7fc7134e3643b1b45fcb4fd1869c18c1ff000d7eb8b5303ad38b81fec0c9f2d3b0f7fafa2efb43569bc64ab3713db2d64e00052fff390905f0924203051954ff01800967fa0815ca61c5d31cff801c170b00ee1ee1b3d8dba23728dcda3b8bdafd27185e5fc2601dfe8f13dd9ff1f5a34800e7aff000d4d45260b86abfc0002b62082fae386c0acdbbcbc83314ccb18df100634029e68e56508831f1927d61dc4c7110ba80619f91854c429653a8583f27008373ed6b447622ea7f0210be81080c126559fc0600259ff023ee67aa3722f3001c365f29e5395fe0287a9b3afb0232b5d31fe477dcff84c05bfe1e7dcff480007305c0cbaa1be3309c35ec7c311ebea983c5f074751e05201cc19ae24b3f16008fa519bf45b1f7167afb4a5e6d0b89e923b77f000306aae2f73c81066699b000a47366c2feb1c039fa4661d3cc3f42ce425c3f04a14b48c71f4aa7dd869209002773132e958f6404f1c7ea11ba13fe07015bf45cc3a7ff0580ddfb26135504007f7fcdd09feff9ba13fdff37427fbfe6e84ff7fcdd09feff9ba13fd813742600024277fc103d5bdfe829abd141e522581460ca9042adfe01c8801274b3c26a00746ff4e8b592c47eaf9abd1e6937b1963664fd528eb6b4515b375c503050de005a1acf77610da732b9f0931280c42566cc0f18201ab31ba95f7cc4db840d97009e062858c32f01b7352e1d121c5ff23302d311fff050248032d3f299df705d001d8702952f7ad273535a4e64ce5c78899fc2b9dedc8212407f0026fb4335fa00bc50a1008532843f801184af261090dfa7c524db868688a04d24c10b8baa9600e88da67c8c4e75ce069d3f1b7026ba517429c0df6c4d67f2ed96676aab7703004221672704cc22a3d71885683eb52ebc3605a4e910fc8c172366647d9d57030087005804e036c1362b232dabf39e916986ece3d0885047d0c2984f3b74f30100105784e2ce32c728673ee301e8ca5e4fe244f12b94576c7dee9c9b50d7f589002555b964e1d48b2b5719e6bb279d21a84ca8822f4c3021ecc5803625da906e008672d80c479e432e13f56c9337211db8188860b7d5c782fd010f28d8c8a0fe00455334f5e23490249263e21621d97fe021f9919416605cdf46bed5ca6aae0500a454b2434a1a906b3e159067db658a65b79ff195027087f0e02b81184400100060094c001fe225df2c3c33c2efafcbafaa3beafeb6e3ffe0c58fff84c1fcfe003eb73cf0b251c59298145a565fa7e20029fb665989c11a18ca52519ee1aa7800fbf800d07ab9fce1b55f78852d5ca198b453c9a14e9f7d4d23642c8c02aad0006eb7f37482ef2f9c810c6b269dfbde97c397b1b93d1547dc74451fceb1e0680064c60dee1932c697a970852632417350a7683fae943c56dce34ad4311c4c6500b48f3bef5d8f2eacb608421b8daab0947516c228f2026897fa9a12d7bdce2700a55b75fe00ad7d239799a7d10a057551d1b88bf1dbb3de8ab08e6473f7f57f00e00367b3761218f97ab7b346de7ab30739d947a1e569c01125ed9dd9541b5800d567a406ad6df8dd4f4ba35a9c0d70bf800dca1a0ae506c1dc93e9ce6a113a004a8ee045261a226b03026575cfc17dd31b3c703c02952c4346734001006b84008e2f0bc404590c574a238f2f28d600a5bf22c18ca8fe3006fff81690804119004213986408cfd113cf0734b33235a00a22a220b92a12f8dacdfc7c0efff8f900682de06b4ad47230886d98a9d58af98dc669ce16f1e6319f619765def82878002a56924703e40e73f418e756864898ca4260a0ac8c6140c0e92624bac4b9d700cd2bb1efc67fbe9db2d84dd90c58cd0d8d8c0c8d4d19194e184c0e4cd88d4c008c59994c0e188c98d9652f6226d74bde33e28b3f80186ac8a21d662ea5f5a2006f3d379064bdd7bec8533b14e5ff4b712f7f098239ff3e77e8d09b0003484e006602dd89f23cf4400cfa8751bf1c4a2deca72654234872c46121405ec86416002e7c6d0ab9d8e991f58bf581d4a9ec0b1403bbc7a9b391be500ce8ff3e05e30020fb04dd68dd567b173152a69007eec77b6237eb737b488a93a2cddcb28e690094369ac5020f640c346da5862017ef9adcdfd7b23613661dea50eaf054c24e0099e471fe9f8d149fe3d087ff60466d1fc3014fe831d10cf5e7944906f5541600f4e6177d768de1735d44b68fe6d44bfd4109a4df207441dfa1c346abae7fe500248c455be12236166348b914cf7a73b347f9f04066630376661323366396460033134626264623333356130623264373438626130302f20fbda2d96fcf0e2500e24974f6e99cc5fd0c98f652d24505c1541028b82bc25fe4b101bf84c11cfe009f101bf8014d289230e9057b722ded4a9c6d9bdce27702a7f1429925f32044000578252013a6066c7cebf74979030fbbaa3a6c4c44b8508de3f098fb28f83b00daeceb15847830cfd3f1aaa18d288daacb7d3d242b616091c7b9820789d88600ded6cc499c78a24746ea9f17e25f2717a0eef6e0be41f98b9186edd991c3ee003f18639bdaa3c5fa025db6fce3a856ba7f4fc68d57f1e843ffb08346aa004b00f42868d5738cca616d490c4cf5eab656aea4919b600afc3dbc63e87fa933e70049451a0a00cfcc3f414c4f4fe858d189fe03d227f404b679982a93140669bc00f7e21bc843b1edbe2f852cff136913fc2601d7e8284155fe0703956bf41084008c66d91ee4de5c5cb99eeb90aa6cf16be19855f029fe9c04155779bc0f8392001fd0537fd4b913288d4e11ca9a818d7b948ff007c54e576ec45bcdbbfa344300cf7e0fbf418de420493e04a47d596dbb27e74c38aae5a8ce8815963ef1df0600a4a30c1713ec48c58bf8f430bba7496ea71b9fc4296440110c06cbd74cb3740007c6dff03007e09b86528e13186999dbff4dbe4e839963082ac974c85f79ff00c4ec527f098077fc3cc527f8fbdd08706ac3dece733e89f02bd426b5653f6000ef2b97c8f8be5a900ed760117352564ac1c4ff338e6f15bfcaa33ad97c208500f67db4cda0a71e10e9a3d64af632b3db0c27f42459b701ff80b00f653c43ca00d3e8babd9d180e26f7e4a83c6d2d9e91317f7fc59b77ec08b36ed7fdff166d00dfbfe2cdbbe40e88b3f8243a41fcdc569452488578b494ae860704bc753dfc00edcfeff0e93fbfc3a4feff0e93fa083a4fe03aa5ccff42ce0e4f7da4a5b6a1000d55edae2d6a2edacd33ead085bf34e2d71fe942035cfe1300f3f7fce42b7e00d016f26fd0b38695dae1291f2f5d34aca68e7a36134065964e475ca54db3a700fb8270d2be2a60886bff418631cea11ca48576446914040081e8a7bb8aff220099aaf40b86dca61ed314e28c20243064449d33671dd970b5f5376405c387f800106f67fc248b9203910056a7d9b765b4d750d909e6c9d77a0d0ac391e707fc000064f13ff8a06f0e169bf45ca2fb7f09881c030bd9fa0c71a10120c0a74ae1000180ce362117dad9f9bfc10e96ce217b4653654c449c9689067bc61e71cff0003aac9299770a54c4e9c07f401f6912bbc08c7ecdbe4f4230171887a2551fe1008e04e2f432cf2cf63ae6868245cde5bb0bb17756edbfd1a134677863b52c3600b45218557e90fb408c2327f1f2b643f8f2feffa9191f0bf5d8a3dd4ffc01580064fcb1d7f0d55aedf7b933a8ffc3352b889cceea2f92ff8e33029982633370003e0e453f80c102df82651a94b41f4504f013c5ed6888f4e58a57496b720a6e00aefe15be43fc101a4bfa182e7e810c4a3c1307dcd11ec218c3ade744e078b0007dfe7f898e3a04669007a249040ab729733e5c34602b6340e7eef86039fe0500016ff80d32779d75bec89186b2cb51473b7d122e82d0d6f47f1fd4018b85f0008079fa0c7142e3df651f6c2f82734f723e42c8d19d7c277a66b3f365773f480008e58817c73b2fe851c63804ddf994f8783441db08308b4c4e2a8725e0734d0083c1e3d0fdc40a23a8c49080bcb92e9fc0600240fe8217b17065a97425b7b4004dc948ef8db556d3d6155d60d59fd241e7ea51fc1c0241ef32793aaacfdf9a0013eb9fa382494a3eba07542ff11809100a5fc12048c1657aca409b370b95c700410d09682a8ff849e113bbcb7206feaf0a673036820fd0b369917261285b8b0031050fa3b541d1c18964270a607d13132f25fb046d3231e7d822b2962919ff0009bc9b6c33ccb8689d75bd2e2879a47422c68015c04a46180a1eae7a81a57000b9aa38df9127eeb0526a6435da8b255ed34bb4e556e1eabfc302aa7fc26071007ea599e95020768507198ec993773986a60f0ba31f7fa8f73fd3932cd5604000cc5e5e83fe56a681fd2c32cd42d10c4ecc801fe5855b03d8e0229871abc7bc00a8904022eceb39c3babc629ff3d22730fa07fbc158c416bcc41e9003f590cb00357e8819e32e291d311600c4701b1563f35fc0e481f767d0da5fd9b33a1bc700779e96a11a24e1d580d742ee10c8b85289c25f94b482e91dc051a76271c27c009a534186d6ddada9f7d83246317b960971ac532ef114d3403481579671e19b00fc0198dfe920b18c22fe0a04900b80c6527fd882fc9d56ff2fcb59342eeac300409a94151e5bf91ec56fe13016ff47ce97d7f0fe96db0b33ad552509f55f52007149ef65878971fc451787e6719ec01a79d2454932b181d2a49d708ec129ba00d8550275dba4f529e40652df3c546a5d6c5898a5e04381bfe44f3b8e125fd000c32cb8cb2835f67661c7deefbe735ce37e276366668436e761fc4eadd7f09800077fc7eadd147d6e357115d9f6826b0fc146a76d58d9b1dd59524b552fef9300bffaf1798e1b913c635a75b7260952a20781cf7b151d0f90787483fd367d78003860ee2b514bf1ff01f92e09040319fa1c2fff6f21d10dc2f2db56afd77a2d00021bb3eed3158a70ff8a0e73fe1300f3fbfce73fda225d160f5504047dfa160066653bcde5246ed9d443400960b0adf1ce511d1e3876a1d32b3f8548a33faa00252260fe0cbd10d15471981df39d33012d386483a5d0d26e734687fc052d6000731742caaffc0e02b33178511ff09f5b3fc160377f098cc7fe027a2952e76200fe00e97f4a5c7dfb36e0aed9d75af00fe358c3bb04e16204ea5c5e801e81af005038280ff3a4b5d6d1ba95acaa9fda2af862f6bc4393508345bb529ee70f0700f8fef44fe0b70ccdc33f8040d44e77813c3eadb4b6bd05d1f18fe0fc5efe0b00bd13f84c0ffff06753cff020265fc23f09859d7f0f003e5dfc3c00f837f0e80003e0f6bfc3c01f86ff0f00be17fc3c03f83ff0f013e13fc3c05f857f0f017f0073fc3c07f847f0f01ff71fc3c08fdd7f0f027f53fc3c00fddff0e807e15fc000de8cff0c00bf57fc3c03fd57f0e813e19b9fc3c05fd67f0f013ff7fc3c02fe00a7f0f007ff5fc3c14f81ff0f00bfb5fc3c01f80ff0f013f83fc3c04ffe7f0f0000be01fc3c06fff832e103f86007fc0fe1e047ff4188b90ff0c007fc3fc3c1003fd77f0f053f5bfc3c04fe2ff0f017fc1fc3c17fd87f0f063ef9fc3c00fd8f00f0f027fc5fc3c0afeeff0f00fee7fc3c00fbaff0f037fb7fc3c0efef7f0f0300ffbffc3c04fb6ff0f047fc7fc3c01fb6607c1d04fe8319c9a1ef694399482500cb607d6747c264fe6344a1bf78cb82204fd1a3235605f1000ffa1464c97ae400a52aaf97cb029fdc92e2a781642920ad5c2ca062d3bf89fdddff2f589b822a0034817e83085b0fd0c178f92c4700ea3e20a51e3349fa0235b4b6144c3704930035ff510c233f38c7e8598da43ea69479afe85433a86cf21322ace6075cc69c00ac827707fdc427bce0c8433fc1407505cc60ca26ebff0035a11cf7a7fc0023006fd96ad391be70739064bc4f310ff0b60620c09fc85818ff0fa4f8062bf975003ab16f7c377a9e1bb88ebb181ee61d5323c044486056dc7372ad2cfb78539800fc3615de9237ce2521df799c22bc1a4faaded71ca0ca236dae28549ebd462300f66dd423c6d7e450c01602f367ca482be0727903b2899cbd9d1ecc57dcda40001b5f7f46262eeaa2f5f217c820748e6df0689798c386fc4be816e3be527c7800903c27ecf4323d9f7f62f5d935a7f926bcb56e6919594f559e9e153d422d9a00eb2c5884eaf4b6703bb311bf1e80f796326670399518bfa855c4219cade995008c653c5803338f1e230361239f8d684d27c0e1ef1df376e47aec472c1b3665007feaae6a313112907f17d9d82271eb3b5a630d7b46087a2f23ed1e49357e44003fbec7ed55fc6b81880211184308c2418027f08fc3a363c37fc120000f7f06004f53fc260fe7f1fe0624df4cfb33d5b1ce3db3d93de9e89ca31bbc8c6c21b700d5c3fbf73fa022fd5090785898bfcd5159387dc606ebf3b01f396ff800726e00ba5a0228b959433c2b10b1e56d42532021c7a6aa548c1172bed0a73883c7d400937d3e3f3686440801f5d713ced1b31b0a30d157271a418e3fd013cb0305b7000f599e419c899b8a43fc0039665c782e49b52472493023700151d9311c155b00c42e1973c0fb4cc55dcb4e62ca99b88f804cf4686ac2e516a862ad6b40ecd3003bee35bc3a0d7c6cdf7199d3e91d9431a98fa733e4e0ca6d35887b8f5878780051694d5d63894a7be91f52d30cc9161e73d2c4eff80a25a85bf0ab2ac45e7700cda456da1908cef008d9bc33d39479ff8bbdff7ff198027048f3f8007f4620005972e52fe007884811ca7d60d0fb01b5a2fa46b12382f1f5cdf8f2fade4be300fdc240dfed7f8c01bffe0507f7080a710464310223f444d91891d0d8c6363600360d8d976dd08938837f1f03bffc4181895c3959a95707c9502c4237f0011c0078f14d2c699ac60924ca6fd4ab443b96c506b386e2e69487b9fc85fa426b4f00fe111e7c690846f66a71ccca481f2cd34471f34b1385a2e440d2dbab58f451007bab35d50332a8d90b5011edc01b6cc54166da4940ce837009783b1e25d71f0044f95ac1e1a62f62d30337885dec289d1a9e5473edf2a145e6da2668bde24300dc9a3b1d5ed0c68409cdb467dfe0216a2f9e8451c8380d788e6eb0183d1dd4003a5565af40b28a73b054594dc5a61a235b64805beeb40e386248e81124715500ecde596c24b73f7abb68a1198d8701e9cb4ae237340f5857990b1a5e40828200318f9be6a88015b09484a3bd6511c433f9d3f783b9fbc810ddf42d24aef1c80011c26958e49b85616d79c55a4ba2357c7040d3ef81d9ea423eee1d6fd0122800a2bdfc600dfff0287ba8823290420a0241185fc221dfc68982b98d0d8f0f0f0063635555557f1f077ffe3e971fa8fe1f077ff8199bcfd0c31892b3e07d5dc10047e4283b049c654ad08ca881424b6ffa488ab8ca7f42cc92203720cca218cd00d9f7f0042c319bdd2c2fb9ffc005a0a4712ae24ac9584b7f8a3638220775cf00a256101f6cffcc447adfc26031ff9b94b4c7759566f6ffc686fde3b604914d00f83fe402ad714fe1f024ff80d383a82efe0b05dac07251fe07634255f94f7d00631f9a4b82f5c5ffc1095c9ffc507ad3fc0ed0eff9f394dbf41509e5697e8f0009c9d57ff981cc37f8fad38fffc9e997fc261217fa13607e03f428c8e1416400f2ca60e5b5af10301852e389b7e42764ce6892eb840bfea90ac5e218e59c46005beccfe11020bb35a533e3e1bf39b901cc5b54a230006e5f8b88f37bdaffce00c2687fe44af6f4636fe0e149db8c81a6a9112e30e5b6ee5293498d9c79f42100857f8905272844fe0b15c7bdc6532423665feccae0741d55db3c195b9e8a940083751ff4546d5e00b88a8e65c864fe888dabc34467914cbc5ca1b77f8113f500ca57f5149b9f412ff584417ff03010bfa3e3b3c395b66a9362135630672fe400f4ae213875ba21ff79f6df8cf3d9b62c8a91e473047e226dc3409502b7ad7a004a0caf86886766c6b9fde300e21eb0d337e5d8bae66ff41094912afe860b9900ad7943287fe004633f0565371e6684cdadb116e3ba9c3224003f6090311921003d42ac69ca9ff00509f75d30126c9d4497c15b717d50e8744da740b9524e30003359bfa564a48bf84c0e2fdff3b033fbd2698d1b9d5d591bdbda5bd4da564d00d4da141d5615dc5358911bcc9d90d65a549d5dd1545615d05c5a8d5a921bde003f628949132014a0392fcfa262b1678aa5c594c8fbbf58f4fed76234d3e13500892ba67653f2f2612e6d13b5c57aab45b6c5555898aa82e772da3d441eae83003913564cfa8427e922335d57fe0e102cf3c01a5fb527783cc87eb8fb2760e80054e1e245effa0840b1ac588bc38c041ff01149779ebbc07d9eb27c15d1b1540025cf9368614806ea1b381d17f158817fc260717f7f8817fdd0205b131b4b430069c2425a8b7b19bbbac3b2c35343cb0b6ba35b930bc24229c29bc29aaa922b00c1bbd3d292ba3bc287f450817f6f4a94dd228cc1938655d0f0bfc00c9d12910093953e9dfa7218c87047562fe5a4f7169a4d31957f0032a3a72035817f997600658d81d297c18905e1bdcc2937477a3565381821fa4a570b71bf438d1a0d00001d33f9e62d941f3136180f1393fc19faa6bcbfe971a341fe13010bf7fcd05800fed1a164a23820171fd0c18fbf0d2939f24240624a31bb82c8eff37554d39e0051e2ddbffa746ce1a9c17c442f283fc050f53b75c7916fe470bc64a758ef1900dfc0191e69e289aebe2265cdf9154f7f9f969b1180516f8fcf5b91812035730065690f09e8857074291135d66901d0bda6609df7d6c4a0bb9617a8c77a150200cc96631841e3811e0f6b2d47711fb56fe4e667552c7f49038e502fe851618d00fe039c9049be3ae77a5089dc3a52476f0f6af94e0600980ff9ea724fd202c600ff1783caef404e4def78187026116ee6ec713bfe02fe73049e2737d31949d30088301f4a71abb5aa6e9dd7183b235d4bc1258f537a6f17871801eb3a41106500bd36952825fe2297fff4405baa6bc0128e18ec74d616bdd2531b67882070250066c87e9c234e4848dfe036c242bf42cb4a179504a59299395a5411a548f9520004529650bab002b65c07ea1a40d8440dfd0a2cb6d5fdd28a1dbdef6c66027400d069706a448a2e78f9fadd9d3fc297e0fe82893d4ff060692fc809389ff05800227576b2992c239544f9baae98d38157c1bbf2749d47b73abfa2832cf218910084e72a03f48cdc07010f7f963c7dff84c081fd1e196425ffa966e03bf450fb0088017c2fff05025304da8f29c618ea5c7de216b10b6304ef4fb016dc7e733c006bfa6e1fb01b0dcc7f819d46fe0c08f37c184d9d7a7f3a3e89e8ec29d0d0c90066e5da19f3f5146c470c7e870a7dd39f2ef44fbc9a5253c82f9416a170796100d4efe017a37f454aeecfe990d88efe130173f877a1b9cc8fd991b11c646cca00ca68c4c262cc6060626ecc686262c6686060c26e647262626ac668667072cb00fa083623d8cbcccd8dce0c4dbf4d853ee906ea8db199af24797e373d03e0eb00e7c1aa940d07ce57456431c3a22f941f5c1140337015732d79e804f990ecc80086e9459940e6479888f21e566fc9edc6579fb7e918dc9b1bfe0e12ad0b6e82004cf89fc4eef324e97bfc05dc5eda22dab98a3dfa866c78d1473f82c3392294001c590c2ad305e81febcae18ec95652dd47555cff0130bd7f09f3c1fc0f9b9f00f8303499187ff82c4ab897e944542806ae6b14c17be94463a4731cd2aa7e2c004c5fe244e968bf42cb7ba8281c8ca31a4ac32d508eb5cc406fbba11e85731300537e87c7e9416835fe1300f3f87c2bf04471b16fe00ea80343e1a915182c8a0075abae5626946b629f30e0d69dd751ef9d16877f4f8c949fe940d25c3933350030313739343330ff2c31dd20d09d3d6425b2cb8358410632b0c9abb67406530030c36d4fe50cd0b11e1ab04f6502512d6ffb954d998260c02008c576880ae40056615dd8120526ad72364524326f7f91827c60bf42c5f2b0591c8ca3a91c03001de0b4dd8a014b67bb9c9aab9f18d0a907f0b42040489fcc508100836f6e1b005320a074be789cf8199c294cd173c9568570ef1f9a1a96ef0390a0000fee9800e1c283055c6fc388d8b38a2d6a60317266507e2ad2a3b3886518c781db0cff0000794768d42fb8551bb3462969996125e70db41e01fa0276a1b8931bd8377b002c5d962f0a89de473bdaf523a3b58b7bff30657c2c1c3722d428e0968ce0a700866a31ff0743608eb0979acd79bd2150ebe2305f65576ef3cdceea47ccbc4000f7d9946df28045410c30e87994915f0cfd45abf88e04bd2b0b8512cfa1a01c002b0a75812266960a4ac41687efa7e2d718592d869fd0bc57a34da9af83e6a2005397cf39a42145598aa350dda04ad2ae176fed7769baad7da1086c7cbaf00d004cc65473d80135083b3f8da10240008c20304a0190ff113474ebcf3cf3ff01008004e269b8e369bdfe187d22fe1307f3f8fe10215bad117e78f848575fbc61003d29905e9383e8643a76d6bca6c67dcb80ff5b31cc002f840fd0c17de03ded00289307cfe437402b6a7192a76964f4b4e6cee43f7ffa3c6dd308ff42cb9d0200635ca7f0050e564f47c32a5a2abd6f8cd02da1d7908b612ac97fc8728f2313007e871740931be18c99bf5cb5f203b3f13ca9b938d3fb8446afd242c1ab53fc001602483170b4a7d4d506869c5e49aa1c1e2de41a1bb824f84c7f97fcfbc5510099fb899ffd7cc56dfc2608bffb53c9b07ffe7cc72c7cbdf496e6a5354c22bf000dd86d680e059a5bf825153438785a8156b852736a9861ce0c9e5e8c6d436600181fb15936ce4c2c5ee9e30352b5aa86295af503c2c19ffa46743909bf838800c71f8ed29caceb00e3de8c62ad412c6b018b6f5611fe44a1f4aff4385b06670076623eabe5aa70a7fc6d0b2a127c5ae358d131ff6277e8cc5dfc1c0a95a368007c8f0c011529e886fd9341911094a5873fd7ea21a3d50230fd0e192e394043007a35e0d3020e9ac8cb1ed5676e7ab367b81fc51a567f098079fdffa567ed1800c97130fd0e192e3be203c7d6cc9ce1028b2b51cfec90de29c5c96b9fc2864400fea48ba324031fe0b1f9e8f8e503e58f47a8496110e268c68d8b2c13337f800031e709027dfd1a1f8d3fa0885c78e3f82882b0abaea9401891c3aefcfcf843005984f5e21d7d932b84e1382fd9b39adef9fabe5c360cd84d4c8dcc588dff5d004b86c0039febe170d8fe3e03f3f41ca3269f7f071e0ae80183dbef735add4300995d5f89c8f2431b686e0dfc4a782a37e861773b01941c676fab3faa6c23dd000461fae98520ebc72010d4fe283c17f84c03cfe1f4717eeebcb0ca009d94f30074691190e4e4958fd75b5b5405630c19e522523057762c3f59c97001c1c1c900b98999a981818fe968e162a8c4b7b595fe00d101ddfc7f7334a2a636054079009ff80340d4f27f276674e86fbf20c9f0cd1276aaa79973471a570be5a2ac0c00933abc89cf6e55dd351a6c4ed259914e3beacfd2314bc0a1fc1663f878a4a500036eeb6da46d09a70d3ff808c2907c24f3cb47fc04ee470929c76aa00073e80003c90c4fd004b66fa90e39e69e6dfa9433a3547f82c0832b4b94e45da06df900e1d89692b35c0479745e65b1f2c4bcfd2608be796100ff0aa3bcbb138c9df300e5c2e7674620cc3b1fc06bcda97f0700c4ae6c13ded3c2d2acbe3d6f8dd8af00a3eaabb92ca9fa4e119580e58b80a845635a9dfe5094b212bb626f44f77f4100067532aff05a47e0bc12805bdcdd9fc01aff4bd159fc398cd86c2dd91d010e00e1287ed0a0b0801ff3748f1ab902b889d43e17e8f236593c1dfd5f41610ded007d607670c09abecfeb3c32f066941ec2f9ae51fe135df1d85dac2649ab048a008fb057b8c78aa410b644b1fed6e396f5787d40401959285f98e37998a7294600dfc4619aabff05866adc3729efcb03f41d6a237cd0f91c77677cc43122b5ba00e1288056570e8aef33c99c9ebacb6f618c66c0918a85fe24c450fd2a27802000ad78ebc5ac621fa0c1fe3967f83880e12a9b58ce87361a84554e712bedc865009e3da703cfe9b2039ebf98480e626533636163fef6203bf8f00fcfe077351600ff83853873915d4775c83619fbc2e45ae7d1b2ac8222dd28fe2614e266b417009af6457eb29fc1b6eecfa18b5cab9181e7f80dd3761fe0e166ef86c693d5f9004553fc313f803afcf80517b1cebfb84200fe26166f2a7064d0bf303b6a39d1009416bde14882e09b25fff80dd3762fe0e3f0e532eae53f803b99df802560ec007ff06d50750d467a3a9dfe434c898197f82c603b5a894e14c4510190158f7600aaf7fe1d50779bc26b4a594fd154c097fc42f018000037e820e89072fe0b1e00c9812e5207eb222c5a558dd046b13e5288cf2c9908f29277f4a1191d7f09800079fc3d4c8fd7eafa323a589bedd3b918b9d9127d2c2130e7563dda264432e300be022d80d99f2ec3527a585f3278925e3f8627a85fb79958fe00f480cd42900058c19512ac8d086bb0fb29cac72623f8891d5418184fe0b23e2b9c6534328100303066ba3f803d6f63e282598a2d9b802e84e593fd1d17f3804070365fc1c8002f59e6cd73cfe04c9c8fd0dbea778ceac652f9157e9497397fe1300f3fbfd0005efda32eb3a0703e7fc1c103156af487cd975e6f6df648268ac70ea5caf5d600bbff14040dfc2601e7f7fa4cbfd46103324100987f062341f9283cd6bd7bb200f5a6ec8961b1c235aab891cd871687fdf84c89cb23319b1191a9832b2b0b2f00ef818279fe3e03f3f8186b94282023ffe0e1aebb11e852ae32379bbd3e00710079793ae7c857568e7f8746ba040a82041dfe0b8e9397a65354b4e47af7f80400eaf08346fa5017076d5d190493f78fd831d973c6d86d1c9a9d3ae431518e97000937a755dd0c4b7a70ca47597fe9aa8c7b970bfc5798f7f0981c5fdff98f7e00f48e8ad567579665073684a73636335617a6377393246765777665454447840044e435a675634426e7869704e784258fe8acc783ce35ce0ddfbd896f158a4600e0b718bdd6b4820acd6dbddf4f3c159df9c8d3ce05813ac6e4e998f83a52d200b2f0fe3bb5e189efe5bab97ca6a3b76033f52b31ff48511ba7c831e1dc202d004cae04185ba8dca78f0f7279b0d5447d2a4c793e09b698adb399a417ebe0440007012b782e236083d8b103a4484064d33945ff013d0f0620a14dfa3a8aa8af00dd64b33c8256b9f098759f05c6d492e6885342629a4341c3808840d0d407940046a1a6f47a0f55fe310d92552049d2d0288e6fada1d2d18462e222897828b800ae155f39ab4997e906bd1768bf55993477dac153ea77f7631e6830eebcfd9300352c79c142b1a206535b038eaefe809131a17f80537258675fa619c3e66f6d0021bd5e3c758f6d4c4368e2ede3c4be8fa044f392c1a65ef5629353c523451d0022ca2ace7c69fd6e16175242152df8311ae277d8e2f048aee1910677c0328a00d29d65dbff678593a0b8674f20657986a2ae839a3726e0848a4683bfa6b20500669b8baf459b4e37270e526951ffe358c106520401198020900008bf8458a50070ccc0cccc7b634d37134d34ccff0c7a12ff0983f9fc7f18207ee844db8dc2003f91483069ccf63664135c4ad984650114c9a77d6285f36b2190d8ad00ac0e0049bed06a0d7095f7162cf5a17100a57d470469dc0eb58f64a5ce3815153b24006017864c64b34f4dcd35754f902a328ebfa633924ac85a2b2888dc00258535008ae8abc6bc53f659e27d84b41b3241dd3c84b6d14a80a9688deabd36c0a25200c0cd321642aa3024272251a3052fd7b035bf48f75eb7ab58136dc24c43184300887e6fbd300b2322b1455e51b0165d98bff002a4226e678a9145bd46cad32800ccc02212d7458e4f5034847e0e29e7102836f8008ce2310fd1dfc0073b0abd00fc8bab20053d0b3ff9b9d0c9e322952c07cc2ddaf488246200f1e719ac5cd000badf828afe80a6608b72f3f47a3a878cc40187df812489ea0297bfaf014e6b00f30f6b4f358f0e3efc0c2fe3006fff4187006288a62042318407f08fb0a6e60038e9a6e3986a19999866ee55999fc7c0effe9007439149f23b91e9e4c37ea900a780a56a829b70ea07e905fc47c367efa44228ed1d2d41798a596c93998e6d00699f5615f01afc89655632f6a2fee195469bfc0333316cc0d471de2ccc18f800641f0f59e4e46f51c484bbeb86ff9c6c40dacf89f7bbf52fb2dc62492631b2003fb5679283c04d5b8cceb053ecc256ab12cd663c4b44d87ae211713418b1f4002ab8b80c566bdfe005b6c6b9f2e40077bb4ba3454eb40d599c69f7ae89429b00c5222d8059e5718da9fb4dea9f081485df290d1f3f4045668b15e8b2b3721c00a710f0ab21f569b0a81d92b08e6dec984308bbfb4db68db441f9087f316261008c947967d104a4d6432ff0003dfd444e5329b7c5803a9bd3c1824e02c304c000a6dceb9c1b762133e251faebbfe02799e2d2b50743bb31b6f33cbb1b1e62ab00f3f5b353301e53ae809fe3006fff81801f6214c4190a308cff115afc66663a006e9a6999eee99ba5557e8704407fe320efff87fa09a2fe1f077c0be118b3f4002cc5e4587e809d3f689fc76d2c670842dd0f8b51edc393ea30c0fa6fbfd23200f74e8c91fa1662e3225fa533946d9e05cf1c31f0c8db7332c52a3b65b107dc00ff49cb164fe848d17afe032b7319ebbfcdee45822438783d928ff801902786002eeb3f776fe82e7bd3739b0436f7fe54576b2f32d97032865b92a2d06d464f00c350615e3641c5c8b43f8afdfbfe13038bfbffdfbfde842c2aaae4b468e89400caceaa84b0dad6f2b0e2aa84e8726a8c70da98b4ee8c828ab09aa89cf4c2ec00c2c8ca946aabfb1685854abdff80da35fe00f3b81c333ba25d969c9caab53d00d53d7405e297d548096c5631747c58b19bedbb2e44814ea7a4a658765fb62f004d8dc256b45c9b91356afb332421d3f88f9efa924fe0a102ff80ea6c3b0ba800f569677cfa7ca4320886dcec070a7d1219fea2a9b1d7f97ea6cfe13045ff9a00aa6c18fe9fa9b064476f32c0d4c98500055880fe9dd7b59e663277dbaaf87c00823a4653b581c3b94f373344eef80434d534205b3d09470828b9789a806038007fe42a04f6b2f201d06ff494fda8ff048d6e67c528f27bbe51b8f6618e05b1006400418a20646eb8037ffa866848d18c7f42cc750c4bf4a4692313a8275588007cd6b4bc6e88e8de0c58dbaa77f120f66dbfa163653427ae501f0825d9b926002b504076a41c60f2303c625d26c3f88ee1401681cfd0b19db3f5a928d9f5010092a3b349df04127a34c283eda7a989c297fa9c97a3ff84c062fde112765f20003c904ab79080aedd5dffc060027f80877b864b542519c7516062dd984c4e92005facfb405e9c109367bce537330771b0d46370583df4bb1cb6b069bba69ed300e02e40692c14d5ff8fbcb758fe1f0fb947f8c879b0c9d3c4ddf19c4a0f8e8f00f212d14f17f0ec54e77fc2357c86bc5abc67cee4a97b460e530c7f2900be01005bbb9bbf0cfdc892c9394c51fc8202fe0017c402b4202b4ad6bff018009c30005b38f28243d7409f4176e7e1db2dc5b3d7a58f5e65e8a63fe4ec3d2ff2f17200b7e841c87a15fd0e1a449eafe431324429bd40a70d3f423f563091a19b4c5f00c50d8e7f098079fdff6c17f515b050043fa14351b2d156526195bc94322040006cbdedca1b6b7c43eb2d99236ff57cc48c0110ff06051033288f63ba018c4500706bfc0053f36d4089ff2e4552389c8fe9497738fe1300f3fbfc288fda10e60058b44ffc0c0ff3d744a2a855353ae2a0aa252ef6516ef7a27cacc1eebcdff9009a71f85d33261f54b8b7e104aff81805b770094b1e506593c7b0dadb7538be00f91ee4f06b5b271d4ff1506840c9f0d87c9de17ff027909fa0a4a037f8202a0030208fa94c3fc2378070f2e98bfbdc07d745dbfd6a57398fe232537f4446860091e85f670c63d2f4cd3665c627f005404a77572b6ab5123fa3c2750f886bf4002cc43e30ad4a0caf20852734ae107a61e569d18e6cfcc6fa95a6febe1946fc000999fa1b9542c9a0e745743e96d2b10620773dab4056bfb7f620fd4ccad43c00cfdbf1a7c3e5dddb785466c0a6412f7354feac9d3cd5d15a7254f3f6df416600c0e5b58139f6ecc428bf9662e474caaf0d78816e8fdf2ce53bce89b60915b3009b09e336edd59639fc4bfd37f048451a6ab2801f281d2bcc683b3e657c18cf006f252c6f07ea435fa404a8dbb47ff4844feafe878d2386ef9968d4d0b3b68e000bed35200c57f075dd9a8b3fd1d2fa7a8c2dfa1432117f80cc6b7af0a7cc1400e8991a3dfc65c68bd8d13ab577d613fe2431ae8917f42c66da81fe809f31f0008fe005f3c3cbd3005306183a197a8d01beedc6516d43ff8a309bfe1300f3f8007c2fad5f2b2a5b5ed3c11ef2e635d0bbb136987308cad4af445ebd85a7ccd2004e85d98fd67223fc6a7066686a626670626ffc5b84dea605e0d87ddcc1734b002718caa3a7994cdd5af46d8521c07ced7366e76094f5430f408da21b48604500b4c84078f126b1451c1509c434d8ed4b2391f0e2fd11f307e919f5ea5efe0a0007b804fa4e51d4ce0686909c4850501f591ae793e4f850df7e6652f25f529e004be60747416149bcb51c4b90985e456ff81fc25fe0759610d8bf82404982520008941d85bc0007c8163444a85a5bbfc16e610d3727ceff150fc000b2e10ee80070ff82960d804a606a7f42c656377114a6cf0ef5f3f769ab9c931be860583b002470a45a237fe971303b57accda3b4680f57dc5bf8d8c2d111c09ea0fc46fd007e260763695f09fb826f0c651c50d008a4822e33ae23661b9d410ab0f7effb003820bc13e22b676e694afb6cb069af6c1e130830fea07fc0182a033fcdeac600da96c1f9ef83bc801c7f0252c191fc161d63aecca08f5f715f922192daaacf0087ac1b9169ab2ceee747e8e8f98d01212bfd0a1904a13742d28ef902c002e7006eedc95f4f2d3b2fc0271e7c7c403faf483613f87cc1a419c7c3274180eb4a0068b39835255afcf0f7f1a360ecde6b250f1f05c4bf97500cb5c250ddfcf4190025d539b07485efb0dd1be642b9665b40de14801970909c78efbfd24246506100fc1409201701eca72c15cc3ba70531f436d9857288132455b2668057ea39230028fe13016ff4fc62ef78501a86f5f3eff592877592acf1c6167629fd1122e400bf0c492d23943a5c0db029e6e6e8b265d3f4e9928cae0b97d8c7f09752755d002764b070e648c0b0c42bff9098167e0e82ff41861cf2748ca38ff002cdbde7007917f84a3c36874285f0880827db7c463fc34143017c238f7e858c95d3e9390042d4f1d5dd18ca8a5c31309bc0bf944371a44d8cdfd2220593f0c055fa1231008a357719e1c9caf33f404e12283530838352410e461e91f7ea01362c02f90300e838fd0e186bf232095b6dae43c8ae826a21fb20f7f60082fa54bfb0430d7e00a67a2607a29253b4e6883cd6ab3615b723ed706efa657a53827db9760ff803004a2beddfe2b6be3f84c0e2fdff186bffb9030d7d41ad5d85e54931bd6105bd00a565d0c941a9c911194da94d21591dbdd5d4e129d99131215d898dc911c9cd00d52ffa2a5b579d5e82397b0479d38f3f319c543c9a1c7c006f674f0353bc93000bec796546be06cab11bee61b48b238557d590e42b92a5733221de72b4638000b915061c0bffc66ff233b4bf423ff0707d758c5ea565b65011c87eabf4de9100bc0453128a8cdfd041f5f60c69ea18d94a373cc37a31605ba4403f0b96dc940050d121d9096b4fd994a6abff1587d7fc260717f7f87d7fd901f5aab2b2b12d002836acac3d39b5a83128bab4a22631bca1262ba7209a18b5aaa89c353428a800a1b52725a83d287ec5858b410aaec0c9f2c2facc934625d201d1d0aea86a7b009d868a4250be91ec2c73b26ec0ca8e603fc71d1d3b389bd036b443c5fd9b9a00dbe508b54cd25eb9ba9da0263f7fe20d2ba1ff4214baea0407e852975d01a300e39429b2b2a84ef6356a5a2cc8f5cc300b2fe1f8ba8bfd1c0848df08ce7fa100ca5e83cc3e9e64caf1b7cdd9bd7dcce2628f409e5007fc04c2f5fc47ff071c000df7f058094240f292ebe2f1fb14acdb317926a6800c98d23f49b1103fcf890010575b205a229265cf3d309f019ceae6d87497ea536df8d6fc3a2fb75562a7006c12ff5fa4406518565129c996932348f281e498bb6527dfbbbf45cdf434f600b99a058a93ca5ab39ef1f10d995edbb935cb6d2a444e245f3a154a84142a8000f3aacea20a543977fc4259d1fc18dab43423b9aca7f8c20d8a520cb510c3d000e73f3f5dc3213bd8379078d2d6fcca1c4953f8021d51f0a800080fe040102100ff8740402b1b5f09f894c8f185b7b9a2637b17ae365cc2e887049c634038c4000080f86050840c0671be83050ebd949b595559fd011563f2fc223467d7d2580004c4d3402f289fc2af871afcbb7653317e93141632d840904d54e8304b66b9004638ebd03e7c80ec3718daf6e3f2c3156387c7816fe40e867e414888e101e1006fec20c104aa65254ff54fe4a035c28fd5d5c026e2cb5e08082b96ff870b920004e4fe412e481183f87e68bc0bfee5964d13d627e32dc67799097ad87340a7005a77c296c03ba83c6aa544fa3fe2b2e4bf84c0e2fe9d9a2c1003fbf8b9206400f6e654b6579fe432ec8cd95c5c541e4e505cdc8c919413939bcdd19a95531100dc9955cd98dd185a5a955c0cdbd2ccd41c8e1d4e0d7fd282b11fe7e6c5bfd4001233ecc4666c62ca66c4646e72647260c86a70c2c86064606066ca6ac8c4c60068cc6ac2686a6ccc6cc8c662666c6e6e687260686a72cc6c6c62c8ca68cacc00c460c66ec5fb3a463d82f20060e102d58440ea7d7f4050381bef52ffc6380b006623ae9ef9d8d6131672ad1e18b0266dc08ff0028111e023c44e9a371282020065321c792e805ce47c51e56e487435bbdfa42a14ea0057f428ca8eb434ca660084235d5d3aa04e138ea1323ae58d6ddb67cd9bfeaf8ef5916fd0d53b1d17650008ea8e583a87603916101483a03a41fe02cb68bcfd5e27f0cbe7d080dd4360001fc08002414657ca39476326a147767674dbaf38ef610fac930d14b6ff19b9004e21d31dfc014b47f00315041fa08640c4fff8280616d2294f9457c07cb53d00192f6b891148241b0ae827cb746fe1572b443786551dbc3f4249ff422ff05000091696928a1bd4ce60ac41ef3e23da9f8e57cb795ef536aebfcbc0d8307e860029d6724f49410c2f74639844e8cf5ef73a9642827b1ed7e5d79fd2608fb3fc002601d7f02b4edfa1a2fa8d0d19c5d1c4babef7af23ceccddb9c758cbbb929b00f490462d0cfe868bf6fbd00996e294386b0461505b829a740c16841b880fd500d17edff20405fa162fdc007ce4250c9d006bf1533622622b84d88d7c83722200dc9220ff4a070beff098079fbfe5517bf68cc36f917f0505116ba729c6859b002f62b75b05841363c00626cb3269dda4d3fabea92be02101940bb8bf80c00400e982b6a794fbb2fe00b81439450ee5ba33ae8a3736f6369f4123217ff97856008801cfe0b020a0a5252f0dc75bad09f2507a5a363dbf0f6a839ecf0bff578a002fab30f7f048105fa086ba65437dc6b987f2b31569ec5d017550ce1ab2e441003bf5082f927c809086fe860c07856942c00787e075ef42dea24386cd21030e00a9dd52a74fe7a6d2abff87c87e5a22b0f275736c670cc7b7e1af6ed5781de300206aa7a4906972af6efa6c30530c579fab73b9827996b7e0258d6a0df0fe01007f481b1ec643b15b59dca5ac1e59eef9c7f49033737e8628dbbe223949180f006c5c6f6205f11842d72d2b10b436583818cfe476d2bf84c05bfe1e6d2bfc7d006c9e83a2904edcdcf28787b6bf7f319cb35364db40a9041401f9ea704396fd000f967066a469ad56da1a1c02530b5b47d23236b08ba21dbb9ebd50f22d081c00b8bac99bfa4491d97e28453f42d43b01d92ca6ae12d0aedd89b375319cb96900342472f2579eba67ebf1891dfd0c3138207eb6f299da3746ca78817f934ce70048af30fb210fc36efd9fcf8051fc812e0c7e829815e08a5cf942ffcb225f3700eab1d185d92afa7c89a11410851dffffc49b57f098221fe96947bb1cd9aaa2008ba057ecb3fc2a7734b8cbce4df9f76cfab5ee4349a1674bfa5bfb1fe5fc920084f90cc9085255ac31212de16f80e5a1d76489ac8fae75b750b3595449010500975d1d93334fd0c34bc58f876cbe0edd337c50ecb7de47940530ddf25850d40055bf4805e72fc301e7f0284ba0cb509298859b8f324a235880217de27dbab10015081915f91fc81921fc2027fe8327ebc8f7d94a5f290670328a7b7170400a00fb18b54de20c0bcfe21590be406715ff41cc20ed04a324077f78663c5723ee00d2430302909d9b92d346bff144b01fc2601e7f0facb5ce9ba92aa641557a9200720a6518f45d1eabea0cfa4a9e7f7c3e81a7952c4e7dfe3e4c1b28fd4727aa00a726e6870626a726471fa5c735608643364f11ce0eb84c60f35e8289d1a1b30091e91f46c63736af8ff01457806cd1a337f802695da8afd014dadcce5f45e9009880ced066203fe1f2750b783f80d4ed13d460fd95fa40977bc1412074ff810041e2073b4e94419c21ce3010f219d1a1b0c51c228c9c2aa69b16946946057000c93f9de5e2edbc3052bf10125f0ca22dff064808805c826258be877f08604400869d24c90640892138cb06d51b42ba37fab097f5ac57a1789a54003f8ae04800fe6f500829ad3c2ff8f6f7c01ff2c29797f098387fc969aaff8f96ee3fcfcb00771fe983fd5fe20087ff8931bcc4ff423261ffa00430b012e3567fd2ca567f00c261eb7f0d643f1d2053d301fc760b3ff11060e57fec811defd164fc84dffa00142bb380cf0e250e080706cc6cf5e9e8c7bad6bc640ecbe8d58db03f49c4a7004957a8e3303a679fe89893e9fe07015998bb68bff84d0f8fe0b01bbfc4cacf00baec0e4467ba0a72c5731393e2aaac338721469146b1139a17908deef198fc00e4c33a3b0d298fc565cbeb810777c4d8f501dde80f5fe02826af1d6e3ff02300ced789eaeba7e9f91183fd0b33e575970bb52ecbddc30f8cfd60c901263711007259afffa12253a40fa3f4c44a7487937f0e803e13dbfc3c00ffe8f092690f0028fe1e017fd7f87807ff4fe1e027ff478499487967f0e81be1a95fc3c08f95007f0f007e93fc3c0af95ff0f02bffa3c24c24352ff8781bf30fe1e077ca7f870081dffd1e126121a99fc3c10ffb7f0f047ff3fc3c12ffc7f0f053e5ffc3c14f00fbff0f05be5bfc3c17ffe8f097c90d48fe1e0cfcc7f87833ffd1e129521aa300fc3c03fa87f0f013e9bfc3c1dffe8f096e90d4efd1e12c93fa3c25624353ff0087845f33fe1e11fccbf4784b04ad7f0f003ffa3e2672567f87803f55fe1e00007d63f87803f5bfe1e017d8ff87807f54fe1e007d5bf87803f64fe1e017d97f0087807f5cfe1e027d7ff414b9e9477e8718805de6d4a96140a5e270481c0c1c00013e2e7c25258b7fdce4ad2ffc260717effa5697fdff4ad2ffac695a5ea6060067f838b19e83e3fa921029cce85e88b5bfbc203824e576571fe422c67f81c00056fe172c67f82c06efeff2c67fbfcb19feff2c67fbfcb19feff2c67fbfcb1900feff2c67f854b19f84044fd0e2eca35b58477fad991cafcb2b6df4a624473700bacd1ba9fa3a8c6d60a0673f42d3d1c0d494a6f896076bf2062390e5ad48e20070ca7eff28c6fbf7f93b0f4bf4c0e00a800bb87f01cbde53fa0a2d564180ce0039a0c05e18a52105eda84cf08c8c3e4ca49a6bd78e18a2c32bbf89e5effe130000eb03e1004ff4105a5c7e82228c06c392ff650e7724b753049fa009f28ce500ebe3a1bfd212050e7e65fc0c020bb804a4a0dc93c9c243ea665b80d8b61b7e003c9c5fb32467e8f88539f83a35fe060100d7ca51790f2e5350ee6036624fb500b1a359ce0e055613aa53fc04f31f094e0dbdfc002fbdb8810c1c52a810b1c50007144997e839709260fe0500ec10cf8a522f9329fd47c0312f01af2c5c43e500ed0fe90da753f500b818017c81d10bc202fd6f42ff02000906070fe12945a50096423d860e645923e21b16d6b04f0e01134bff5047d4fe1f590d0fa2027a9d0023bfcc813b807c221cbc18f910197ffcedfb3410b077ff184545d0e67ce5e7002beba9d0986479ea4e4021120cf794ffdf51487fbfbfd6bfc591517e042d0b004c28a530f13fe82478601fc2ffd094f51e6db34b80576bda2f9db893ccc9f2001a8f0390f5d5fa50b05d3f84c03cfdff50cddfb3ea19bbe1818ff4245d73b400278c353f1b7f00362f3c565c9541bd4bee9aaf5fbe17fc83a6980fe7e828ba00a5830644e29437fb22336b2861d841e79d9a5271a9f3c45d7b13fd48113c3f00c2602e7e8f089e1c9fdc7113c26ffa6c2278692000395328ef0e14cbc716850073d589050406e1002c692bbc75133efe1ec053c189ac9a4c05386211b95dbd003546647fc05d509847353f04bce23eaecf17a82ec6b17fa42a85f81208056700f81826384529469ce139860bb9162dc3356d48495cbf90299f5effd725430100fa1e543acb1168880285480a05e00b6e12f4b6ac7944c75ee3043a970aa62d00dc7424c2bf8b36d4fe13038bf7fd39bb7ef42a18061676b4c325934543863700158597533677454456655767a545958513566364b6e355764615137704e70600e336afe8afa6e9ba1af0e958c1394f87c02179c9ed5909c2fd7249b7ded51700fbdee1b05f8e00de549d016292420f3a5be7aa579672117ce3ea8e1808d33700e36fc5c0be12b6cb46ff489466b14fe850bfc209ba22942584ce73da3b4e6200fca237c3952d94a8b8d46bd0fd9b1f8485e82a8980a7162b12efca9e10a2c100893b96654ae95e348a2b05ebb13f909c6ac1992dd97151b90f8d56ec733aee00646d732e7669ec1ed12844ce6d29399413c51fa469d269b60713f4312f3472004a7707bd8d9034e8829b0e4810a589d6335151f90cff0eb52e51fb5e9d26ff0084c0e2fdff4ac7bfbfe958f7f97da97801aa9b9fd0439a4089080bb6cd51fc00060025b41817f002e438f29d5341d0eab549b4c39385c5d3c755eef7715dbf00c2cd4d43c1e209287f019141fcc6f03e77e80abbfe47aaf3ce4bd0c3f34351001799de84ef63ef6380a5a8525a791ae022f25c7c13495b19bd735f172ed91f0019b002007a2b5e3a698b3070661a4e5446965bff0c2d05ff0981c5fc7cf03f00f0654bf48d6c0f49f0f089cddb2b5b9dca589e005255a55fc701b782d43bb300169aff0f9bd14ffc6fc068102c502d83f907f163c0f7a7c694d476591495f20030ae80ecf52bd5d15e2cffe7aa6810457fd6b44e7bfc581c785e19184ea2c700f26071e62da760d18ca541d6ea50d0ef3c107d9f621adfa32452e8eb3ebcc40096e3f999ea7c6fe0a10300f285e500a278ac984117dbee45c302d62d5c25ab0007f9003f5085f55ff0380adfa2e2faaff82c06efd9317d5625fbfe2faaff7f00c5f55feff8beabfdff17d57fbfe2faaff7fc5f55febf8beabfd114d3842d28002ff5b81e33ef7f3fac1a6e41bbefc334530a6dfb389a708a99858935553c5f00668976dd8493e9e9dc6f48b53652e0f2f7f0f09f6a303a9fcedc0aa119339600b6295647a80d46526b8289ab95502707e6d2dfe2ae01402e1bbf48c65350d700e870ca6a26b826bfd72566e419ca7a5801f5ea62f5a31c93fd27194d5fc260001dfe8f236a4ff1f77f88e3e3328436aad8a8637389dfd13ea3950f5b7895f50073ffe0fdf8c842665edf6673b531cb9afc79ae17a2b13684379793a09cf1e500c484ab5666c1c5bc161ff00088c6463fa289aa9bb3ce5e1498255aef191216004d8262eef909aa29f3fa6c2087fd088a807f5af351445191d22d90f32ca77b0064c2237acf6d0a1e311add7beb6316af6afec9123a5168c288e36f93f180b300d7b89ea777137cc4afd0158c111c232ec5fa689af2dcd2b0e648fada7129f000deac8f1ce97e6bb91fe1bfa6c32d1313fe0018d5857dc1119184fc4e01d96e00d90107798345492f3a0fe3bd8c3f5ecb546d9cd92885fd902081c9d875504b006029f888fbee1283181f734ff0ff187c9f296ff4d135e5b81c5fd9ebc11f4d00aa38248337dd3c65435e5fe0ff3d0248d7fa405f0f75ce4e2da5553f4048310053e6d69d6f98bdfb88121528e074539a6ddd6faadc3cbdba142318aebc0f8800d5207723d012dddc342c4181a6cdcb63e9ef6f9235c341cee8dff198249a4900d8e730b22214a5c988f9d73502ebccae8ed2ffb369b3c15911c5296ab09bf800037fe7483f9ab21c75d971e5ea64d01648827dee963ae7729b6ec3dc26f30c0050e35277a7d6011adc343af2f838a7efe0022c7f404ba188779b7863c09cba002707f1202483dfc1c124d1009b94c3f426617b1caf73707abd7a5fc657ef7f004d86ddb5a6a96f341d711b1bdd2894bc7cdb194cb9da60274a52cac79641e200995fa8f07c051e1e600abefe0b1054af3024d3be1bae07ed8a8ac6a9c76e4a00932885d8e239fa4c7fab7f430c80fb283ae80e1fce20da64cb579295ec1b480010390fe9486b68fe1300f3fbfe07dfda3401661053fa16350c8d2be5100117007eda9152d6c3de656f8c4796e2550b1e57ff4b92a53ff098085fbfe9485ff6008c97f90418ff07041648d040d5d9544f96387d7a5e13758888f96234fbfc5c00105ff098085fdfe105fed19517d33fd0e4e866b8d25368a1a3069b9e092f2d005752e59be7963711fa8497cc3e41ea3f42ccb8804a545ca7e8086ba5f935cb001c3dc1bcdbc90e982b9ff078f5e739fd4250711fc0e02b7e8b9bca3fe0b01b00bf64d41c414feff9bca3fdff37947fbfe6f28ff7fcde51feff9bca3fdff3790047fb006f28fe39ce7f82c7aabbf294dd79c78588f7cfb21d2ed87bce2c3b38006bb74e79fdc52701abffa1ca04126c22791406e9a1407bef20fce237cef3d300f8030da674bfe26d2f98d62cbc5562912d24f151c0dd22dc51da32fb707f4100c9db07e84a728ff11c9428df5560fe00676e3f899cf5b7b7f4055568ae190600edc9cad57e9413b60fe1300f3f7fcd720fed1aeae030fd0d33b990f369bcfe007868b619479b131bd8da6f667b80873fe2a0d0809b2eba83ca0fd091778642002bfa146752808e126521116ad7f59f17f0fa6ec1a9f58a668fb9562bea7f4e0093953d7a84c1b022a919e02911d9e6c4b47768582e1a7813f80df5fc5580ae0040b2197077f9f969b16d67a42d3844f2b977e448cce944f84a947d65e3a3b600e754de9de21e1415d1252f0a71a5ab18b0a8efd0d5a79dc5631a148bd070210026ddfc64f5a3c5b056180ff8912f31dfd0e33c17fa289d5f7f89f371fe130000f3fbfd2f3fda3101ca57fa169de07d650bdd69cc3e63d2faa08c14e532437e00b9419e750cff57c915dfe85a6ed4b4fa945163d2109ac93b447828789b8df50037bc9fa3bf199463349ba5e1f71252ecd56e8f950d1a518b400b60fd3d1b7500c140c0184b73375fa0a46ef8a7f42d34754303ca2002aebde2ec2108b7d6520012f0956d55c8f2d6a57e8f14ec729fd0e5ec5e7bfc002b96dc953c136476fc00948e4bb9f480f92f746157e9b93f330cc6fd0434547fa149803e0b11a25362001d17cb405286644c046e7c84973f17a84c1c17fc9c5b81bc3cb31702c40ee6008a8b1170bad6ba9dd864affe3a08e4d59fff0449aa81237e87264e5fdff4ed00b9fbe8be46d23f82c2eb261094b42308096f86d9c03b13fd0126968d71c1a3004ba5f4745fa7a298cbf444c552d0db66aa4267aefce6314a2087fc194c4baa0007dc7ec12d72e9cf1349eb131912e55a97319026a858f64d2aca757872d08300c4a202c6194da82fe2bd6b7f84c0e2feffd6b7f7a0fd16aa19a735b2a53832009aa51c37a41b39273228b3a1b331b7a6a43a9b9bb839b3b931a2ac21319c2800a99c37337ec5af2a921453c380cf4ad58827f9fed5a153860d82ffe009e487001b96555cc855d15219c9b45b071bbba5e117490ba49dcab461a747752783b30002939d19aa8e9b60c31ba211813f88a43a68820215fe0b1030cf8a5279c82d009605a7e395fddb29e3d177224033f4058556d7fea1890634202fd0d45bf6fe00007a3e447abcd62cbbe50fee17e280fdccbdeffe2aaf0037c7111af963ff04000f7f20077e870a9a717e01731a4512b373abc2ee4a966d8ec1288d2b4fd1d100534e02d1fa16966a40beb525085e55426136e8a3e7d0c7c6239e63d22bf3f200c2bf538482cff0980c5fbc449031984ff4385e968656eb5912db188d0ef67c0027e7ab79685064ac2b7ea1866d00369fd0b4a99816e36129bd557948822586007a73816a42ff8fa900e9dac5cffe2a49aeff0744bdffa19273033ebfceceb600ed57639fa348040bfe9494d98cf4b4f510b78ab814688e906e4de33367b02b00ea01d6b587e0fd10616275e45c7ede81b0e585927e3b5f40ecb4e92a5a7df7006ae9364aa95213ade6f83180ffedfe7c4b5244ff15264928b6a8233899a299009bbc2730b4b33425ad2a19b8259929b3b81c3d22a22d3abb18a322a33cb31c00b5a421a23ca834fe9d85fc44c715475757644385238ff74260e7f0c01fec4c00cc8968cb2a2ea986a98e4f4eaf2d06472ecace08e9ae68a6ee6d49cb4f4eee00e6c8acaace8cac4e4e0e283fc414330c7e862337f3d94ecf7229a977a703ee00d72d0513ac9855bbc8e04cbfd4734f19fc2602dff0f4c39fe3e48f041c330f002f178ef7e364a91bc54d7fcd8143f18b0102fe48c89c38879864d6376b91f80008de5def3f5ac8c61b1151c662411d686834f674de1d4fa1740356b975d06f00e23a62da07bf838666a95e52aa28fa613ac430d2bb1cd9e25c2a0d8442fe4e00199bf84c062fee2199b9c83f438bc9c6c2be6948b74820dc030e14d7c4afb600190f27613ff6230608047fc1c47fbfcacdfa7153f852a59282bcd37e80ac8700500eda48646fd1e1654f5249fa1c31db8d8cbf800675a0b2e05721d0fa14b200e63255bdcd809ba4fdff18edc00000029fc2608bffb53c9b083fe7cc72de730038ec5c4227db9631ae42867d7e281a3655e3d18c11469b4ed1f4284c682da9008a796600bfc01a22d02a2677fc6ba20d1081da6f7d0e7200b8a72b2c07ff000068b7dafba267fa4827eb897f8382acca7d2c4a98c3fb1f3d885815f267f9ac00acdda7f0fea20ab1a3f97c2acfe13045ff7fc650dff05e0b38fdd43d8c953200070732d39f50579efee3eccb542448b5fdf3cf60b96e5f2a732d67ed63a3d500832637c2a21cf873f4e852a710df4266f3a914caf3c760df17edbfa4c6adcb00f830ced91fa4271327cf8136b566d4870ff017a11c40747b1e37ea1a7701430025fe0d3d2ac2d09d7faa575e2d776dfaac4ed60433ae265aa2520ae75c493a00f86d04eedbf800c5340e6c7c6065ab02fa188038663a77cf3ff04723c7c810001147e872640641b3d0b5b25c92b4b5f8b79f277efd0148420af916085fc50f000cff098079fdfef0cfed2200e22bfd0e1715caf9b4aaa7a0f0475508ec46d700005f26505e303c9fc517cfff098079fdfec3b7f5130ec8c5dfa1c35bb5557800fa8535da3fca58725cc7cf092ed2bcd3adabf48c55da4099fe8723fa8b83120061afd011e79dcfcff7b55afd17d8fd2236aa4205fc2a9d07ea49a7a421fe0b0002100a91de5389f0cc80c904fc4640ccc20fbc969dd24bafb2e3f8ea0a3acf00a6d0b9738d3e74ad5cb0de84c2ee0863e37ecb363207419666d8110ae6efe0000884343f8fe0a38439cf82a322fe00f6028cc78f9c4af2923e59985ff3443b0079acbcf2d6fa2435021498bddac7b9883ef0870d53ca9501fd41b182f0f4d200c9bcabe61c0079910dd54e17f88e0a3083cfd0c30207472800701cacef2e8d00b44ca6c722714725a6f3af0dd9fc5d7c2ff098085fdff7c2fed1af94242fd000c17486c0bb2965a75bed6bc7d3a4b94f41f5859e2374859d6b71fa50bd1fff0084c03cfe1e130957f57d7a3f9f0ac2cab92c1c90600cc3ecd654293a3fa8a600260f69e7e90faf42e094d1d5901c190ca3777cc24e63748c75687d62b38911009b7b22987a954d6bf8a63fdf204c7e918e1f149fd0e194aa5198bb4f319ee10095067a9e606207cdc9cb2d33d7fc4d3e662447e617505ca04faf0b1129940f00929b14ec578fe8221bbcfd0b1974010541b299e8ec6281582101b83a4fbc0d00b59f97f4023cc8bfa6c86ef1692b03f5050dde18e623fa7c2b51700a6fe104006d3109224eb84486fb721c5fa5192124be8ab37f002dbcfef30a357f49be51009a4a36c03060aae4f1401aeef0575f94b367bea91b7ac5fa0271fdff88fce50050fd0e1c8fd9b03c7b8453b50d215302c8182ef0379416accb3fcf5d4dff8f00b83b90642f59f5b1485c16a4bde10ee36a4b94b3454f53367642e8cb53999a00312b86af9bff047f4051133efdcea6f7e2d66132a4fe84e1f77a649c5a8ba200a73031c33a28754fe91a16065afe0b1e1ed3fc04c2f5a51d30382cb16d456f00b76b19bfc2537b52f4fc49fa488bcb5b7f438c3ca8274ad306169bf8441e8e008a848d1ef213ed4fa25fea2187956271fd0e1a5a17fd3b68d2bf9e80e06c71005674d54626c95e3f5a9fb36a810203f58069681cb218b31bb330febb0d2d0100efd7d1a5a1fc7a07e7f03b17752fdfc1647b42e34a37159e60cb23a3a9c53f007058f1d0d160f684a1c94a4f409ebb30ebdab65e69fb9f4ac01cd904492f7c0043819f37c06502e35c80b2435f2f7f098da2f08092dce6c2dcca9adeceebfe007ee59bfd3e472fbfe8075f5fe1f118c054968837dc67c179954f92dd55af970096478b2962efd343f7bd2f8006d7e75bbf4815921822b9790de24abdc4f6e700b79aa8a65e08b1ef7728f4ababf1ce802a34c51b2c460017c7140c3fe8619400ce329434f1edd4fd011d65b777da5c1f76ca5a631a2f2933adbfa4e43d13f8004c03bfd3f249fe7dcf157f02fe79c102fc1d795008560fe0a305432fb9b4c500a2d99f9b74e81604579e7d5082c1d07c8ffc00eebd45ce0e42da3cea8bde6b006710bc6e9903f988e04f443fe829910b9cfd0e3191ac991aafde4c5d8df08b003efbe4add0cbc8d25a185fc5c5c4ff098085fdffd87ff51761e7e03fa126300092096e9251ccc2be7f4028b0cc3dfd7e87843c8ca302c87dcff4751c37709600fe858b433dc209420ddfc042eadd1ecf90cb023a20251bb12858103fe270cc00bf84c03bfe1e0ccbf47c31558db182a553939c926511f699a0ef72cc83d813007a941ae0d5126869e3f9d6907a08aa0170cbdc8a49dbfb806ada0c7dcbcd220099c59062334ca79a9556544107eea7ff01a15a5ffa166352ac3f405482cde200fd6f001dd830ab26f8c05861d36cab66977007e920fb4101fd0b31aa01053d003299334f9a8e807a076547f37cb99748c392d4670b1fc6a5a7fb06f6807f2000969f6caad30f98cee476850ef23192dbbc73787fec7ce94391b93e24af100c002710f8f13b8ae7258b300a78efb461b24decdd32a047f0cbc551462fb267f800da18aedbfa4c668cff828231329410b4ad9a41a2a8e9509df43fa2888263d900e9c7b9fe2708c7f84c03bfe3f1591032de8ff9fcd36ce4ce859ac2227c55e40024551139bf8033752dfabe66c0694565fac340095430cac740b49b02757fb10020c460da8d62cb24d216136ed1aa4e931ace95c002f84748fe0b08c4fa4e51009738532b8581968e0e5b7ff80237227db7481288fc014fd2334cfff08cabfc001c13d87d011f19112f564b3b171547abab9f584700a68fe923278e08fd09480037f056d092952dacbd2d3bebb5c4dfc015f3fbeaf8d3c72b93182c50fe8a8a00489fe48c079007e1016334f6ff80c004e7fd053b5e029cdb2a4b4a7429a5f30018f85aa7a607219b0bdfa3a37a1bf4111f3233f2527f0180096505d8e5291500c2ce85118105b49fa30376ece1c6fc86327dd7fc5081cff098079fc3c2ba2900ff2fa0721d611e86b1b7cd3b51a24d542ec556874e96a53a0f9d528aefe74700214e8bca307dd92e8f645820fc34954bbc39646cdecfc07cafb29b815655c200e8e7716c3909fa4887d787a101597a1dff80c00484fe04b64646393077d48f00e7317a94aef7ec2a929c110b904ffa0ad915c7bd726099281c71333588aa1a00f3837172c68dcfe00dbfab99e4e4208bb76cb2e463bf4b052d3ff0901c5fdf00f6c8fef42d6b664686a6b4d78335879714a69325a78584553773573344472600d39357238635474594a52664e68656b527932fd8b0c67e7847f15d2b06661a003268d5464b8aec71ed11dcbe92679bd66fc8231736cad804b22d798f6e0be600438c85eb735a2e223551564ab6871f5a4ae5388bd957e20dfc4707880f241200d384202b14232ff018008e7067270e129b978b0d9568543a327959a2cb503c00bf7b36851affa302ee338e885a57f8f52e06dfd1e54c88d40dfafc2ee320ff005785dc67e89096b4addff32c3ac104be8d0eb6fd411771907fa169174d0d3b00f40428793185c4c78810794e493a01fd9c432e157e8ca45d36801fd0b16c2500f59129f13656016786b546ff2c1625c8cf8b0bbca8374bfc9d75e7f0980c5f00bcac769bf430c5ab2927743a0fad4d3e2afdac5cb196876baf0b3c0c7eae330012ffd045640ffa0e2e10eebf802e19871167c4ec71658f6d9aa2918bf08def00478ffe15f6c48dd58ccd2f6e57f41c5c218f7e870b84390fd011e81398813800d4cdd1501197e68a32ff7d2b0ee3fa4a941f093f42cc5f1788e4a63ff007df003384acd55504fafe34c48453e8b7e76ead805fa528842ff84803cfeff88bbf0068d959492fe87247852a5b149f2a1e5bb76bf8ac47c30092c31c08ec46fe240033f8a7f42d238e02ca79f0dd4c946d041fcce9e5919fcc8944ba6d04fe7f2e0099fdf203c455fa1c63ad005b02a328638bea2fea7ba30eebc61513e7f4237f005f127a12c323e674cfd582cc0e8db926b58bcf7802bd489d01c345ff15ffa200975a2be737edf8a8b1389680104e7325545628f8d3fd01207c01f3739a72d100b94e5d00c0cac18972a1590ce86a51fa71fbf343175c7f16f7f3a39be1545c009520c610e5082615af282645e85fa4659e44ebf82c5c6bc942ffe000d994a600cb81ba1e5a4ef5d8ce8d1655695e3b8bbf57994c6a00c7e8718d250ba4674000939168d80fd7d08c40a7f5cc02f7b3ecfe1efc0ff43d22fd1b1eb5af87728c00282ad1a417513b4eb3e8f08f47fe9ca4700acc002f8a01dfd0b48e012729dd001bb5b9aa78055c2b0ac103a5a249c77fb55eb5fa4eae56ff84c03bfd42572b007403dfc1a0511f8c79c8191424525277f9efb05af8dd452289217f138145fc002601dff200145f0744f080a6db80906079cdf280350b5b497007e06a2a1fc0003c1fe0d8a08907cfd69ffe8e0b65b81fd0c3147a604329837656990decdbbd00cd7279d153be0ad5dd720ac7fa36aaa683a99b0295a15f742f1f7dace29092004dfcd6fba72c20f0af08b77aefbc8d3184bf4912e81ff0581080f4241281d20028ba0eca8576f0a74e270765246a317bd5509feb274baf58981fe3c5d9c04100a3ff878bdd2afe3ddf0bfe84eb6b053636a4902c3986654ab4a604fb5306bf000a0ec7716a1b4132095fdc0ad9e1723ef3fc01c32bacbf05844bc8f86c39e8004574c76a3a3ee7633826479c61f3c6729cdbe7f1269ba1ffa1661f0beb5253006127eac9dae764dfec1d8bbc9f6ff0f4bccc9f53f93bb44fe13018bf78865c00f01010bfe858bef9efb49420920e9b02ba481a12fd0126d54a3e9bb972e0db00e9917fc515d0ff098079fdff5d0fed19c0281dfe0e186f5a5c45a3d6ddaff800009357e973ce3052245855377c9f5fd1c5658c5dbf2fb9fc01e2f02fcc9cb20064204a73fe62450606de03af7133490829dba2bbbaefe931dbeafe080a201000f16253c823240b6e4f01f84cdb0356a215a44ca24be05ff510e8a75493ff050005e5fc07b51df544221421f316ddc01b960218587ee060b01877f516d47fab00e99ef053f84c117fe6acfd87bfa7f3f699ce9dbd688bda6ef7e2c627dc6a950034555be8bbd3574ee8eaed8a36bc9badbb4b6232beee0a689328f86b1b2fd30099ce13977a989729b55197715bafa31c199dfe23a7dd07f82c59e2b4b94cb50087903c6cd46d708d13e1f8c630b1863e1fc5bfe26a7de1f3853c47ce7e574d007df8436c2bd67566b0885abf4108321a5fe860c6a1929481dfe6d86d30027900ea1ba077d2948790dee5e459fd2818d43fc2601e7f0f9d92a064ca8d76b1410000f34b9fcefbf9814d7ec8c80236c9ef7a41a460a2f26a76a9fc7c724fe94100d8a0303331393030343035fd2e18d4329e3a255e1cba1019cdf51eeeddd5c60076ab085f530beac448b5665edc379617cffe3db040445f092800bfa023984500b95c3a5771f213f802a8ccd675f960f70b472302a0bc6fe23a5cd9bf82c91300421f94cbf1873b82c265c380614a3ef15be39da7c935bafd233471884f1fa100a31a819f93cfe7711a5ba06fd4ee1d832d61bcfb07a05a519df49cf6705dce00e755e8bedd46dc24350702ec97fc1d3f8301fa087c64b2ff8302973f94bb7d00e756c9c57707db52333a0ee3065791ec8894fd2730002bd7e59992a2dc18b000eaa00f0c519f85723c67dfc06f61a842028dc4d1c20291057e415a5a4a5c8600d24dcf53f308f03b147e72a710a04bd32a347eaf0aff13f10fd09189df04f200df294ee0d9c4780d8fb70cdc49f97365bc2cafe6ef1bfa344f97703e1804ff0041461e582191c4a2c5039fa8edc44fc12c4e04a0100ad12cc418a747ea1a0300c56919fd0b3185d181729c6f489af47afe68cec72b49809412181cde10147f00e2a3e16ff083d5afffa0f8d7f84c127ff3b3df1810afdbb7e9f14749ff9f1f00deaf8dfe848c6a0826d47945793594f0a3cdbe26dfac1f1bc8b8f7a9cf5ff000124c6fe9aab27b2709c8f3bcfd060ac99fc10166ff01c604dc8d034d027f7200994ee6794ef2cdcf3a75e05d3ffc4772dafa47f068154d1f9785c97a2e656300e17e53dc6b2cda61b26aaabfc6a0550c88c84d4efe822ab039dfe0b02ac6a400a5004ea5853957bf8063b6c23c99b31e86387cf6e3e368fd5e11d488304053009fa1493cfd57c25034194f0981904ceabfa4c2e63e62eb28f8e0ab6e53842b0074ab56469eb0f2919e22818a437805ee7ed202118caa694b022bf4205ff92300c1890a1b7f87344affc4d5e0328a73cae4f89317f5df880a0ee6eaf335dabf0029d5d10097db36d31e3c04f0181fc0a0249bff1180939319366774c69e0e680045768eb93b4859293e1dfc00ad54402cd82759f7b90117f8217a9b884bf438005ffcc250ade9a5ed42b3f3c5e22a16659c1c4fe0dde5ff3e2e8f8c128a524f006d3b2f517f73bfb68d75385970c5df08af0ca1a89141cc8bf0123bfd7eba3f0047d5031208a0aaf1e53dae8a69677d662a8923e74e0c35f62b544a5a6101a20003dfe80a07ed251648b6570d80e1c6e2f83bde32396bcd1a55be3d8f7c43d800d2cfd065fe22c944fd3bf8241e4fe03aa6adb44b83334ce5153717c9df3921002a05573601377f876a9a4781a6fd0e6b41acef189ae9b8be7af4be50c80b4400cd660ac3819d7fc4221c7e820c08588fd1d18088f85ffa022abb33f87c426a00583d570c950e3e0ee5d2ae21eb737da67eeb002000be19883f421acf283fe800226203d3626723542a76a9cb229b5f20bcbbd3030ddf66fe41feabe0ea0210001e7e3213fc11c7795b67ba974a7a9aa8ead3bc70a5b231ac4fa625280cae7b00680e0ee21b32364a339536b834d8b83df50a338c09f19101f08071fc0801dc001812abb4a49d366e7e0cd13f4577aa8277cd44b1278f411ed7e910ad52be8200392b840737110b8301e544943347dfa681c092d7d1262a304de2a1c7473b34007094a0ad79d995ddeeb18a14eaef56a549a04e3aa1bd80b901841decbf18c0005a5bded9811b47e087803ca261358d1ee20c2cb21f9bef0d8c3daa22ebfd0d003250e449c061e079a6881b117af1937ebda6c8b1435fe182f8e7e5adad9d00006f6e9e4c0b9087ceb1ec1bfb0bf3fe0706c91fd5a55ef1fe407c429c84b68d0046c48844760c1a8d08c4a99c52f326d12ebcb392777a9ed1c02c81ff1f1a750020b013b3e7d5adc922d43b1ffc010b2510ed34f963ec6fb6cf0954a13e249400258f341defd6ff0035abb66660375fd5dbd658442e06acc62fad4f3cbad90100005b040f3eabfa42d112a042ff4245dcdc181bf12ca79b981f308af3a9757500bf3de3863a026e69b17177e8e2c2acfe1867cd8e0a50f29073f88cb6114fd000a1783eaf132936ef3fe87dbbf5227e353eaae4d9eddb9988a421fa386c06be001045ff828041520894e0d893e13a1b8c26b32a91056a6e7c1fdbfd010adb56001fa2a94db83062971a23f810cce4621fd0d1794b255926f01b8758a5542c1e004032c52f58776a7163fc2b0878792dc5dbb707e8405ec10262498406e9677800840f76e11e8304d530948ddddd9cc4f144f05b67164b09bcbc7a9548bd66fd00ff41a1ffbfe8343ff90243c18fd0d2fa98a20e0a0dfc00172ff00181f60a9800e88442c14bcfc1b951efeedfabe7fbd067f4385f85d1e2e57f0076be47cdb10046f7a789fa027056060bc3443a825dbf899297fe1300ebf41cc3357e8618400047c9f8e62847de29f6f034b3a49673c03f70a54aefeff0d2ffbfc34bfd4140008b945fa1c927bc694196d0375766f523e408363574869450b50093f899561200fb5b7266c0c8adab3544b8f0ebba692df044b68c0f841288406502eeafe04900da69b8a8ab5e7c22a6bcb1a2c34c115a201c76a28d3f85465916de49fb520a007efe069da61413f4285f203cf0ca6ecdc07510c6e374bf5b318dac00d45ce200197445fe8a9b4fa5f75e784fd4a6c5dea7fa1c2f9177cef78ec83c945a3d9200428c7d86f7c6c8474445bf5048eb57c300542031ffbc2c181c1064a5e2bafa002f943285f96e4933a5179bc2d229c5670ff20a671fa1ad0ef80f66b650ec7b00324ff80454573989f841c16491427720264598afd7d48af7fa2490eb9c382400baf46e7531416e51e494e15ee0b141301d3f8bb9befe13010bf7fd21d77ed300243aefe01e07bf7fda2237e8c34446e4fd634875caf331e4376fd983c1a36e00a2b216673d791f2d9eaabd72b91edcbdb2fbed4c1fc3fc888a7f1f007ffe38008df64589cda65c18497f9fcb8c085b7339155af8254fc86d39383330fbc9a5004ec2ca0315ed2ff1ac2731e0dc56023c0e540d0a5357f78b6d9bb6650cf0b5003f543aee1bee72443447646961218c8c72acf0335ce15b82ee9b4cfe007f56008c1d2dbeb8306dd27173486f51ead305428ba0ddda406ca28df1786ecf811000a0332d45016ee7452d546ff4818cea8e7e82a41e60ea4ef94d57a36a8267ab00e3588c2990c43ebb78455d4a9d5fd9b1bebdd609a5c7283b26e1f7f85546fd007442a6a3b8db902b99bc01bfb00d09fc00bc54d3f052390679fbf2a8b6f1d900fe0b4024e6440e5b3626d6dacba5d8a2747e7377e80a64f48afd2167b4436400ffc1208ee9d2cdb0666a65a7abc2a626542cc2d852403a7ebd8835afd206570046e057aa0dddb0d65e52f216c4dff4b42fa8ffa6b9d3b53b4fd398c53502e800ed942dd0cd9bdf4e001b5357d3b124287a373ffc007ca4015a84d287f00446002f79da733eb10e80dfa42694d933f81411c03860794498abec5f7d868a5ee700583906cf4332f2137aa6bfd1b34d96f90402b9fc0801ec16c644a393bf0ff0000454fd39d5f2f78b2c1e15dd2c071e734e1b1fe4e2dc0ff13589bff0fdeec0005f1402bfa148eb43517251d2473a1b7d4d68589ef299cc577622660144a0c700f89ea57fe1300eff5091d680144c0c9fe85a2e4b996094e3d8413613c8119e0074fe008f56f92889a5246d1b21b3f4751d68812258c6b0cfff2f667436dd29007263a201872242f2cfa652c3f07548878e32a270b3c9f12e9c38e193d7f26a00c15ea9af3dbf25468ede7fbd286654a8a27d42f4f66520f2560b853b924dfc001850b7f0981c5fe56d236dbfe0093c2cec5982a3e76aea73fc8dbad56232cf00117d3f8dc05f66083b1566098caefe59ca17f48c9f447f06dfa752f2781a2d00e12943d0370867b70e18832d456bfc3d6621b267ea22c40e9efd0e153f6b1b0020be3b1aa84c79874042d2d6893b243694f15fcbadab7c80941cc20302209900ff0180088306157875281939cdb5a128f6c83a221c7071e2f48f694a0757fe002ad8e00e9b223217da25ff2411eb7f860ed97f84c062fe383c8838f683a57e0073fc65dcc01be96e963647fa3e9b4f053f87c093fe0446a04ff42855940401009b4a1d97b520b36c01eb72b80023b4a780ce8460093cfffe24dabf84c110ff004b4a3df83e2fa7f6fc24eafa7f005307cfd62c0b393bfc0100e3fad54034a1004ab7896a49f5ac134157f2fdc2a85eb6fa66a5787b67bb96764617b4cc726800783ae0a40d01df7f8e5b37fc3ed5473a694698b1264ddfc01511233a2ba04d00bd69f1b33280ff00c05262a21dbc7e5482b0ab5bfa4439d5c2bf4185635940008ca288b175d0c11380ed670146e6752d261ce5ed1dd7f0d65c3ea2bfa0a58800794822512a86b943f80180f56e45334f73b766aca0076efba0a8cfe146072000203e1ec67f814071037f5194a3ea14a4be455e5ba22b0e6f647bbe6993f8ce004bfe1b64654d4aee855e3f37c94c7be9faebe630bd68a7bc06b1c654f984e60095a0513e99cff48453789d8f7f028169049129114b6492efbe118fe25db51100e5a07112abaca7abfafacb0658d8cd4ccd98ce4d18cc8e58594e18d998d98d004e4e0d0d588e4cd88d9999194cce0c18cd4c8d0e58cc58ce0e588e18d84c0e004d4c8cce18589918cdcdce0d4e7fc809d58c462706468666ec666ca6eca72600e70686cc67264726c6668706ac67266c2c8726864c2cc68c4ca706ccc626c70026cc2c26c6869fc073de1c9918b29b1c9b317c3d15ff0283e36c9d2877906e00851d5f8a2a3b6b296be85b8b57467854e5fab6cb067e1e8bff81426dca889400de55a00357bf44ecbef63887a8620327ec308e0694fe13f343f51891fe7e82000cb8afe030ac83d09025289d9649831a90e934efda2fdf6d47237e01e7b33f005051011bd24ff02869768ed28141af93d6ceea0d4f53ac4ad85904dac0875b00a8bfabc6b8ec77f42d9572274d4a2cb299469c314f8f73e7ac506801f21ca50025f1327f21beb047fc0c0314303ca0769f51cd14ad2ba921f87b425106f60900077a334ff0d98d87e49fa0a87b27892a516f2be4277322c671234a1f539b79006b6086f1a84ff48107287c812e19fe83323d501009411c395e1c14f4bf632f00b64ca3b0f7d14bf2ba361feff63c7fbfd8f1fd3d6507802367bfa0c2ad254c00d65074a7f80675f373e24f1a12ffe00c6eeb3588f5260395cc927f51d0973f00f0980b7fa7e351cea6be5ad365334d2a25e1ee05a3e2b558033b1e7e59385700f39fcb99a5a47d829d93fc043062541c8c1a27249e1134bff170968f65bdb1009db39ac23f46bc3e8aea4e05fa403432d690ff41cb50708ca2eb6a531abe3800e985575b51a9f42dbdcc2a6faa7fe9397849558798941b4c5fe124d76b542a00afe606780092fe032c9d93f8284bf0abafc9465e07b735442e5994ee8a4f4300c5daf041c445830fd9b5ed8b05fac015a10d98cccd9958ff5d82b4200b2feb00e85684fe3d03f3f814b277b6dfe060b04bb6251ff0aa45a2cb649b1c0e6e5800bd6aceb1573f802c337b4cfd5b29a05f0b4dbfa125b5366e218338946c2bbc0077197a3870bd4800ce38033ff899d46796a5634c8eb8daefb61bf1075f5764001946a104f02f9084a25fd0a2d7800a7fd728a12214c21aa4299ad35331ee7c003d6529bc3958a7fe28681afe076c2c201bfcbcd067fc5af40ff123597fe406008b66f70656e4f6365616eff34347003907eac8d0e75a275669d2fe1e0c89240047f8eaaefcbba106e00ff3e34ebff0f8787c9fb1eb2957f4fd5998ff969ae900ff9081c30564aefe2b8667bd4e92f4385b3324459dc290712f4eb4451ef53f00fd79665e05fe960641ff4d70437f110687fb82b1f47f54d621afff7087ec040012baea7bf8334710cd67d85b51caaf7f6a2e3d4c6f557d4cc8d5118fe4b978007fcbcd74ffa70afcd404b3f8574cf0aff66697731fe823245564fd0e6231ca0049d2f112c403463fa0211f0b03e009983464f382d873f73993e0ff0981c5fb00fe2cc97f7fc5992feb28cdbdc8fd0b166450fe32934a5121204718e19664d800219d480e0b6af889b23fa4ed5c6807646d9820e5a7f44dab8d7f0380accc5f008d4bfc272d37f0580ddfc260960d8c080e6fc3042c32ab91fc6ed34d0a7b95005694fcb97884fe72acba6d52f2550f1358243a8f52fe809ee2bbe5cb82804b00fef7d32fa5f935ab8aaff0163ea2c5b345556347e9f9ea5b15fd5c33a0c7ad007fa3c6729b6bf87801fc9fe1e007f2bf87803fd1fe1e017f37f87807fcefe100e027f2ff8780bfccfe1e037d6ff87801f60fe1e00fd87f87805f5efe1e01fd005ff87801fc0fe1e00ff07f87805ffd1e3378c78b5fc3c04fe37f0f017eb9fc003c06ffe8f19bc63c62fe1e047d77f87813f63fe1e057f1ff87817f5ffe1e06007ff478cd831e7e8f19a663c55fe1e007ff478cf231e2c7f0f00bffa3c6799800f2aff87809f59fe1e02fd5bf8780dffd1e33e8c79fa3c67018f3f478cf231e007e8f19c663caafe1e05fff478cf431e56ff0f037f8bfc3c0efdc7e9f1a286f00d1e3400c794ffc3c12fd77f0f04ff67fc3c14fd160017c40897e858a340de800b9437c17bdbb8034dc4e28c0c74f6e3f3452117e74cfd3968f6586a1fa48c2002c3f43d8cae1f4f4aa03f655f29ef185d90b22008d3db5056ed7ecdb1837cf00992f08a11eebdb81fc671cd82ce7c5ea6b98771b9c87ef339bee50225d6c0c0001c0770b75234c8018036325a643b6f9516531b6194817c1b68bd0848eef8400ff0178517e9997c4e1ef808426107b98a0bfb1bf0ef8f8ae218fe004f28f64003fa6c12412e5663e67fcd905f8e5659b30435730bb6c4a2aa766649cacad21009fa363206b4566758f7115bc4d84bd5911974eb548d87dcb88a89894fe00ad00358b8338b177f405c685178dff1882482d287eaba39e85ac543e0ecaa2bf5a005b7b147af9dda5fd360921186b26c05e19074b44457ebfe80b131caf9582e900567aafb467e24d7305437f3e6f1a7aa90a6cedab88e6d7f849915b4da7fe0000b1a91e2be05cf97f780007e64ef2d3a221306ff4c58dd30b4a007c63294653004717800419771bb54fe55e077c7f4e049351e501505700f790178d6656d0b70016adc888d65ce1c658003ac6a4385d6e27c895c3e7044472b80e47cb02ef030075208a1c7b832c1d2248ac1b4c682b7417cbbffa68c732f2800b4d9f6e65a6003695d7efda15d7006ebf405135ac8ff4d86dc85846502632ae3df91f8621d700a4b15f2287a406c73bf0d4e894eb07269925664ce3eb234d6df601fea3467000bca33c93cc6cfaef91e52f75663b518d9355104c237fc660920acc1900588700434a38a3b751fc2565300c999c547f4d89269ffa02db11f4dc7a25723c7cd500c67885dfbd6a2eaca27a5b254ce8ff803e463e4d4cfc8b2345db59b4530a2800b8c05972b0c00522c9cdeb5ce16b8ae84a49a616f8bce5b776fe34049212f7003c44870ca0fd425dc9e399a4b4bbf80302f069606fe9b16e03a701808d63b700b64c1b95cacb8043f50e37c0b8211b6d598b38d51f644b748b9a1f83b84668000b71a92752d8a1bf36d1ac0d43ee7cb538b50a4c97136f92372d3f8d0249ab00ae06c6e5f81f008378952c1395b2b29467cc22fe9b049031e6f78a0859235a00f24f3956e32d4f66fe491b8abfb50e0cbdce52e0949028f10d53f801b69296000126b909cdebb0805045cb6c431cfd79afc7f61d16a4ce6386c5a3dfe3412400c8ff801bbdfaf32f0246fa39334e6cd76dc65e87d03401fe9b0492819c0fc40058f8dc444ebdb0e4b0ef124c9cd8b05db16e6715d5c786fd7d3dccfc6c63cb00e0f59909846a6c103839beef7f81da58ea17cf81e187965b12429a0d9ff4d10090afdcbddbe0ee66ef331935e870cfa21403e67742c17ecd8b46e6622d697000a605f8cf50c871c74182cccbcf8a9e9d0dcfcc7235d8b725bd5e51b25ce1b300a4f702fabc54af0394aa6e3080d40dfb771ea6e2d1ba8b74c71db1f80fd341006b279e90092e6f5a4f3b02648d368330d9ee5b25bfcdfd361b72fe37bc034c00306f2482a2044ebf492389cdaba7bb5c7b833963afc6cefd41f47b3ae24306005147d61b65726c58654bfbc6c7e80900a0b39b8f3ef771c6fe007bc2d55b430009e3f8d0124242e8e1d5490d5aceea448b965289380997806ff0130bd7f4d000927e53d0b3af3835cfbc21c4e78c6405644bcbd46ccc3e2e3047da23a7a35d0092f4a79cbf2eb76dce383c47a0552d613fa021275d3520831374ef65908ce600e339fcd2b677f8d0124bbebfcbc8b3eb8c5acc6e85f491136de8fde344efe700a0dbbfc7c079c8397b93ddd9d037615a1a123a9079aa1a9d2f8daaee04fdfe0044f126281ab1cc0267132c7906d2140ef83809fbe7557639be040d9caa20a8009cfe9a835301be0cce1fc682498102733cb1150f3a9820dc78bbb24c18eb0c00f8fcff4d8dbac23b89d2d9eb3a41f5ca54f3a037d2054da5b98ed51b6b5f4900d84b0375e124bccb862c381cd7ca3ce393c3fc00466b2e9968a86b5ebcccfd0033dea0899eddf8155927aff1a024821adb7ce934f889f355329bb699e37ae70004636fffd364012aacef513935bbf5c371b26f4834375f76748e85346a513800929fb1c9fba5d1fd3628136a2015834c885ec1f344ff80aec15069a75b9fb200b33a0c97a5b101282813013f8910051dfe0e36ef5d7141efd5e0ffae0df6280057f8023cb58240695451e76fe9b249f081bd6f8ef2fb68b43822bd9cfc101400a7e3400329590ea16c2fe2425910c11f13fe74b541d563e15d94884d6f491b00ae008c2fe4fc9ea1299f9b86d4ba1fd0a2c6ff8c412422949e13885db54e5000b1cff8358864667f79be5910fe9c04931790964ad49ea935912a60d04bb4b3004da55c8a4df3eea0a14b71ec59db18e805be304fdd29c5d016bc7ac1a6c76000cf7ac36cffc560ea687b7960e47541887a0bf48c90cf0f7e870b52e212f453001ff010b51226bee3101a9dac8a6a4879fa73d7ea2239d420fd0b64ae2c7e32008365837260e8cf73cf0c3981aa57f10887f32c07dfa40c1ca4da53fc85ebe80085fa162e0302e6306527576e4fcfeb2f35ef71e1ac032f9fb2556fa3d3ff5f0009e390cfdeef5ce0fe6779eabd27c0300da553d90a0b09f12fb9ef2c33e8b6005abb8fb07d1f13dbc3ccf6e5fd92755e9e156df0f869b75075edf4cd152963007efbffd3d030d7d16332af3af7d34061663b42054a3b7443be5e7212b3d3320005b7f004f90cb71aa488dd81721b196c97a47fa02e1fd75927bb6ab5647042006c8608cf97d08cc3a25978d4c0b2f76e90e193333bd57d87c1832241ea4fe00095adb02568ac513e0fa71be4049746d4e1cf52fd4ec1d4201119deaefd5144004d756d23bde158379e39b445784c92c497e30980d3809c0eefbdd6c5cd07b200f97eecff27ea0efef594041d8339a828434545d17b92982dcac6b6cd482526005b7f4eb8684387f802863a31e7a2b49ec7911fd362beee1021000c0010a21900fe22666a1111111044447bafbebfb8511111fe0c5087f84c1fcfd3f278e445001eb6d09fd4788870e5ada35fc54d42c50c12af56d6f8b7d37b49ebd4541c0e00471aff0adc6264ea40b6755177c9999748fc1cdf2cc95b1ff6c8c5c746a04800884194d7e52252c7adebfc0083b62ce00c6e282f9b79fd13fa08609a21e86e0046ff1fe8093a091884249eca4d3371b6c5217acbca3394e820f80adaded2b1001f0f0a060a0fa2323027e3ec5058d774b27325aa9c0ccebd3ffc1bd397fe000043099eb511a177aba1fdd394691532314665c446e99bf8029d621cadc2bc1d004ba95470633c2fd0159b4b17ae309af3cdaa5165f49033fc0087935b9629dc0092541a5fbc7c597a53e28c5740b69218f3f9c5657c109e9c9250695db11ff00005429e72057db1b2ef13f53a917abbe59bf6f172b0621eae0ce607acb7c8b000372220d8827bcb34a48a0df9b196940ef7f72f5cb4729cf6b5c25fc600dfff0002803d98433080720401fa24a8fc2e8444445112eefef444444eeb84443f8f0081dffd21278e54a0caca6fef9f651d9ea9640f4b58a58bdf34138da2a3710500d14e4b909acb83b3eced0eac22e7fdd820d05ece34ad1bc6bf37302fa36484009a4cf57bb6cc8b42a783c7b43bfc51a2932ebdfd59742f6ec0e55b528f282400e0673523434b3e66e5cd587f34d6107fc0093a61d38c5b25bb0e4846194a3200ccb7b5a79203998c8d5e5fce86d964166f5403f4e6c950f8471b3a51323bf10005b7d5b6381e716155b82571ca0451f70855905001de11af81b435edfc100100e836e2798ac0c31f28f79d8dd85a0079a9e18b3e767bf72b36a660e44948d200ded861550bf0de5fce7a88caf5489190807b4f842414183a20615ce81192d800fdd8be0b6196cc3dda9fd2845235ccdf8e40cff5611dd12d674114096c379e00b0432d73935804114c950a19d763eaaeea7f18037ffc0bf458710823090c53000447e88b9a104ebac4444ed2aafe070003f8f83bfff1f4b8fc7ff0f83bf800005f0c06ffa1ccd133a43b946fa8e29c83298edc0e1b14cb80ba11aff49cab19008d9d4ff90109be8e76ed694739fd2183e8a9a4c17f0180c4f9fc1c03135bec0050f56634896d42a28e4ba7f80934c0f937ba6f23f8980628b6dbdbb88b3b3000270d40f9369a572e4a71b2e83c002f8463cfd0e49ee277c4a79de7f155affe0002f423df0be34f94364e9e10ff150684065e8ac727407f840349180abf42d200777175b4a7bdb34bb9ea2bfd0055b668fea0b3d8f5d7ce082ff13021c503cc0003ce23a0153137760b59849e0209e75a313fa0cae36ff42127ea5a2aca5b1a00d4e8a5afff005d2ef46d1c758c28e52925d9a9d267fabcec38d18fbf42c594004834eca445b7a476dcff85c7b41d5649cd032b447dbd2c6fe91a04fba023840005d7cd9dfe030012ae0b5172539ea15d5e51360c60bacb3c7418f652578d1a00e707f49d942a7f098077fa8410ff4102153f430be5f62ca7a579643d895b8100a43d74382c30a30e49299c6b67ec1382e216735f490b6b6b49e6175ec6cf1400aa0dbf2d25155e3b962d0fe34d419d70001cfd2b20701fc260717effb54d8f00de92f164e288a0a262a2ce6ad0eee296726ea2ecae66968cc4f4f2889c6ca60062d0b4e882a48462e4849cc2c49aedfb16eb040520364c49e6846291437f260005a43051fbe153bdfbabff13e2c9156eba366518882e315575ac402e2c268f0086bc0e544bcfa85407b918e606385cfbcd1ef04833bf491d80e2cfe870afbf004d90711783dff3e0c6587a68d346ed8c7b553a48fe82102c61eac0db4473b30001514ccc42fbb8f28404c73c4ea537013774ad5eaba2b4a66ff8ac40bfe1300038bfbfc40bfde94a22e826aa6e28c688484da9acce06690cab4a6d2aeccb0a008a0aee6b26ee2908cb0da6c9084e4626cc668c870abfd14205d3c30465454c008cac18ea4de777e95c8a1d8f55ae6d2cc96de8094578d23db202bfb93ac0d50089367d51dc83b5dad567d024c77c8c8639cf1fdfe9e80bc04600eaff1246760005fa1c5e629c165bac19032530a6278fd5b61cedfee904973f5ec4a85c57e900038c18c209b7c2d875edd14434224465619e0be14bb470bb1231a1a16720ce00d131f721ee372ce3d2494d38678ffd016dc3725658cd8f09528c8f06feb7210047dd3de364e99fc472c2a102fe87098def36e65a851e6f81de9880cc959d81006bf74816e39fd2871abdfc2601e7f0f64c31bfabe222905a9a00fa12be2ecd0048ebbfe6d3fc0449b1e333da499b662d52685d76a26932cb047a3688b4909e00b152d1bf8af851542f8ead39efdef14eb00239fc02b681e18e710c989fe91a00d0c50bfd0e2dfde7a9205ecbebfacc0fc3d99532c9f069d83c71b87fa484e2003037f82c04875d994c66774f9dce98d022cecd810c0c6da1f12f0f145fd1c2006415f08c29fc1c0459a69edad283bcfa20cd2b8e92f418c407af32711fe9190042660408fd0b4653009001b28ef363f2cba1a949cb8f4d48773b801a79d41600d3dfd045ab9b30acfbb3cf679387f24ec03c3b67a8a700e0a21b301acae464005bccc5988bfe9614a1afe13038bfbfc74bfee81d2d99590dc98d3965858585002dd915c5e58595852d1135dccdc50d515121e54545e53969e8e5a5c92d04d10069dbf62d589c9faedcb008b8bc4e8f9d26ddc77d350b6ab76ad0772532c87200f3e1b2430668d11b8364c219703635d0dd308ca5c5a82be5685a75f2d5cd8100d1f8340bee5c1ca47e91ab1391afd2346d47fa428d1b7f41460ff7e8615e010078716ccc55168edc70f06bcca3f630eea717bffd0123523fa4eedb97f84c0300cfdff6f7bffb44b4e800d8bf42c5900049d40ca5cba682443185ac1a685ccc00ba7785ed8d6de946bff8b041180c93f4891a82d57ebf23505a0ff6f0871ff00098281fa3a4a310bbf8706d80646ecedff345c40ff8b047700193f4c987f8ff001c9c4bfe6072fafe32027593f8ec17f38c8a3ff1c0ab89c3ecac47e9fa3d3f00fd0b2ff4c025c992972546332ad5514cb2c2917cceea597be6915b5e129361007795e49be19df35cb3d470b55a6eb6ee64bdffa925cf351ff42cbdda81cc9b00ca5a9da21e16ea66b689dc8a4801108190cc6b4dd97f8ab63802aa1efb94ff00c21b1f7f20251fc1602501771a4a518de2af4f087f000bde6b4bd70e2c372600bdb8a42bcb59fa5c4f94b01c7473d95feaabe02cf6b34fe30c76ec73a4e17f005fc9f292002df862726d2576f545704c0cf7e7b56bc36d9cf3c25fd976168700ab88f723d2402c66a77f464c994ec9b013b13f82e1b4be4bfe0abceb8bc97900a5fe1a4da7f82039d6a48ff4385a63d9585f80de4d0697f352632d5feb86d7005642d5defed107e2372ff5f315b7f09822ffbfe5f0dbf430f90b02234f7d63009e4fd0fad9584bb9bfd2ecfaf04733e9b609a90e5b1cc3ab1f65b697df5f1000464070cdd64f9cd022bd946f934c965d8c32879ac1fcdb1a1ba6fe918f5f10002a829fe0b0f61b136531be9ae6021ba545ce6c2d594a794ec6fbff39bb3f45004cdd2fe830ab6dfd423374a0a77c3fa3c8e10d97f664cdd2fe9204bb8ffec700a68ff098485fe84d81f472afe0e341f27982060b8461f8ab8daad0d63d0e2000d06e52b3bf4944e9596ff07234c66efbce46436c71b574279d7befe02481470000a01fa48ab710bff838048edb5fe0119923d81ce6e48fc7e7a394736387cd0069ff4915706b017fe870aba3dcd3b6f989e74f6074e29325a674bbbd79445f0038fe2680a08ed3f3e54527baadb9caf058f4b638f5a0757657f80df7c30fd000e31bf0e01fbfcc99fc00389d6fbca165f2e8ac25498254f73bafe9b8ccad0a009f3ffd0469a21fa165f0fc0dacee51f9ebbbfc0512d4e1b99d367498c99b2f00a7e51acd7a45fa50c954ff84c03cfdff64aa7fac4c954d18c7f83831d2f11a00aeb49a040f7f4cf59aa28c21e509506cbbcfd2512b326bfc1c83796596468e00bd85e7f00204d8ca89c09102c3a27aee884dffc50837ff098079fdfe837ff500120de0a506dfc16b6558d74a4ff1c981e42be9c4a36ba522d1a020eaf5e0cf00337eb913a59fe00303974121988791e6ec65dfe9522de4788f4beca46b42ba0009e84cf666850270d4c628401e3daeadbf8012d3dd581498cc57d6fd2c4a8e001fc260717eff93a59fee87859694509b959e1991d9da984c991e9c188cd613004cd2db9390509a5d921b505d1490550cd4dc5c905695d30d91bf7309d2cb0b0021a18b31a30989c18989a31319a9b19b11bb29c1b9a98b09c1bb1199bb232b0029a1a9ab29b9bb2189b18b098331c189b1a331c3319981c1c9b9a9a9a191b30037ecea53506c2129712c86345a43818856e33a2993916f08e45e019182640500982b366e98a759d37a011cc18e496e258abcd794d88820d2d7d013a2c6553b002adcf63c62eceafd24171f873fa1c8e80061a9e07a2d4056997010f879220f00c85edd11c197f4b85c7e7f098085fbfe2b5cbf6910d409d7e870c1063c48ff00010b9701e3424e51dd37aba7dc9335cb725b4efe9421a81fe1300f3f7fd46b0017ed1bca013bfd0e32bddf4fcc71f8ff76145e429313ec4f3ac387e408d53f00a485aad4f3f838bd502cdaaf8c0282dd15bc02f7a7c1ef76f5bc52411fd24200c602827bfa1acb6582f5ac0e30bac698478bff801bfe88136afe005592602a00e689e7fdf5b2c6c6c6ca70ca6ec268c2c66466cc68666cc2646666c2606872006ac662666466cc6068c46872cc64686860646e6e62cac6c4726cc6686664c80062c2ca64c46ffa40ce9bd0194dce1918d84c18594d0d0dcc0d0c0d194e4dd800cdcc598c4d5858d8990d4cd90d195998cd4e4d4c594dce188e4c0cd8984e1800d8cc58d88d991998d84dcd8c0e3f80d81e43fe0c607b8e51b342ecaf778c93001c458a70cf7eac29c04bb80c6a53f44dbc44fea52461f43fe0e0846f1dcb76006b4c7f801725709dfd0132b20415f56830b26512c27fa48ef43527f438c9ed0022fa1632ada51f42543f0224675e5ca4725f1c3f7ea198f28012864fe0b1c700bf405df404a2491f23baa74c1c3d19568d94c75cd21a048ae46fe971ac58520046ba9ec74b85037048929c7e07db6c75a504b3fd7f358b0573b7548a254f5900586097baa2fe0b284ea418efbd9f184c4138804bc2a7fd2682a106bec8560c0086bceccb0fdcaf3aaa3c2fc5d4161bb450d6c5a0a59a2ad371bfc09220b3fe0087179392d3a20b9f5b4aced7fd46a85ca3596c7c4c8b261fe82be67405bc4d009adcc4d5bf1dbbf8afac51244687a3169c23f3a86f5778eee81b6657ff8aeb008dfe13038bfbfeb8dfde95a24ce6e8ce68d2cadcb2d0a4ceb2e296a88aecb400666ca2e268d668dab26ccee0e66ec8628ce872b28894f4edfb16997cf4ca21007ba1dc848ec55fd19c426651726e6ca5995ccf535a3bfca995787292cc11cf00e9c16b484c435b1dc54bd8b8c5ea3f801cc5f177a764b1e19cc699fb0c4965007647fe23679689cff4312911b2ca293604b2f090efa0adb9dc675cc1691bd8001248927faab947c037fafe77ed013fa2d9dfff301fea86c1b07effa5223fe000c1cc7f84823cff4267a5b0fe86986ec2b4b945ba65990cf61a963059af3d6f00193d967e9343be0fe26e4b5b61f8108a5dbc90a23eea4f6164c89e00467cd100f000be112067bf4346ef6befc2d166653863f7c49237f004d7842ecb84b913007a9f52916d46ae863615f7b1cdbb71e88e56acf961bf965100214e8348c4f0001fe08e3db8281d1fd0e6158a30928c6ddaa02ecba7f35aaf2b2e0e2e90966a0019fa36233fc17a623007dc9f865acb9ecfd2b76609e1f5e5bbf8fc1b78afcb0062ed6fb189393f89377b20fd0e2ec7d045f66d92645a5b6d48c350dea8da3600aa11171fb06b53f38f8b529e6632c4e8a3b473bf3d19d7fc05423bc2398772004f7a68b92cb2ad68aee5c9fc563f0ff0981c5fdff9b7ff74d84668c2eca4ea009cc2c4e4ee949adcd4cc726aee8ea8c268eab4e4a8a2deac8aa2946eae68c200b470aeb08a63fb166d0e8fd34cea4e29cf9149c23599ac9112f81bf8bcc7e700a3cc83838a2c34b0b1559e94f7984e22a31c62929ec3639cf426b157428ac7008ad79f2ad2c9a18bc9dea22386ff49548cffe861732836e2c983c1edfd012c00be3e28349220253643942858b9ffa4ad3b4cd7f82c049e78e94e4de2634f7d00f47e0288f5baf54c50339d4e9f807fe286ecff84c03cfeffb08ff68d7fe25100c0c1ff0504a00a07bb29f4076ae2262576f9a03c53a15f490f79e588b469fa00505a1ebf84c03cfe1f47965b6b977000c94b8d1eb1fac16db282dbde86455c00c6536c515c119c8e9f1a0bf87ff8927fd47699106c6662666c7068666ffa5c00287604dfacbc2b792f6be1b6fb47aeb42b4cabfe9b3c341428c0393993733100caaf03cb352efe8cd297987a5cebd67d2e0e5decdd055282357e15efadf9590032d509713f88f4fa0cfd0b48aca11f5293b5dab45a9687be5681714866e662007b8d4465099fa48915944ff4285ff9ee154a5e8dfb2d8a2ce8382b90dd1a0200a2b2e349b1ca1dfe8eb5d2b4080fd0b165643ded2937448e901a84754fcdda004dec72e7be09bd942ae7fa3c642a18853f4397d0998fbdf268a53ea6755ce70005529b8b7b5c14c38627effaa210fdff54421fa808301c7bf4345c9eed8bd100aeb60fb0bfdde28e88031703de9003ba85feae2fef6f904021efe060b890fc006535e84c395395a5275f449bb19b00e3727c50d048bfa0bf227fe6523da0b60067e8cad47bca2153b9af4eb4d918f2bcb21825b52a48a202f7b0fe2b4e53f8004c0e2fefffc8bfba3f2265747564574a4852756a485453465a37776e59314c00465643354c634369364b5a4d6944687979665a6f333735fe8a2ecba7e4d2900027a13c2f109be8f369a3d7e0a3089491ba833e8d7302e4b9a78fb858113f380049da441eb8e74c23b8439765ffb6ed8eae13adad5a5e1def395564598ff48500efc02310fe870bcffa5b06a5ae703426581ea5369cf791cfbc833219bfd24200af5c4bfa1ac073593a72df8622b008d6da1dbd18707d920b8bf1043f578247008d00d7e868b6fea59a25e451f70fadbf935d92f3471e100f6e88eafd276e1f00bfc2601dfea1afea21afd0e5fd457cc9f2bc90c887f0d40f2d17653dc0a2cc008d8be1fa72bfea2aff41052377e86246d7614e9400ee938750de7c56942dce00de0b357d689a776bd4fd7c615f307d83b164739448369dc3ebf5fc95c2fe7e004291c1f769f0d1f78c5135ff3eaf9fb7e591a2a0c5c0bc861769bcab17acb2001e721576cfe7f807a910567df278d6bbf8bb540a4920d252b59337afa6fba000f676633dd0875f253ed4fdfd915e52bb7a8e71e6847fd231b29b4037fc1a170058b916807b964f0582b21e3d688bfbb72466577a1ff1385d7fc2601dfea18b00a8d1cfe0d02896349749aad07b0e944608f5c2367f8020f5686e5ff8d3fe2700028bf84c03bfe52028a497b89400b83574d9f498f4ee5835d2f864c803ff8900c145fe1300eff90c4311dfe0e10c708bb19aefcfdddcc480b1f626a6f6c56200ce886bff8e4431adfd12179b37a2beb515d00a4eb8ef00a2b8f60fed0ae14500c97fc4e125ff098077fc8629bfe87b037738e43c049c5e3aebff01068fd5b30039463f3f2cca25b57f1c8a6f5dfc0631e907f0686a2dc3d12a2e695351dfc0001bd706ab3776fb51efe36c3c97ff1386a3fc2601dff200c7bf204044d080a500e1b43fc093c89cf13f3aad0db91ba213aa3a6f05455e46f3f8077f174f23fc00260217effadef4fe9f9e440be404844ff428595c04dd114a354a7367acd9cd0052604fe4f9733c0d59d650f57c7ecd95c9c55b2cdae3dfc17abd06a708af0f00e009bf4cc5e934bfc044fe794be153de298319c3906f1bafaff3e52d1b9b39001c79f51435ebb99632771cd3ca3505d83f10c8bb70a2504a3fa48a6c4057f4002d22a1f01eca4c58685c46beb0ab4207eaa006aee57f000f2161f7690ffa8e00a6c43f84c05bfe3f0490b4e006f2cc47a0949c76b62958b76ad62482b7e36100769266fbf405bd7950e95ff56e22f1fdee4fff0050758dc5cf87f7d8d51fb0008389fc0023599e7d7d54bb31d4bc198ac0c780b7f11276e8435fa1a5efa18d0025a27ea67032bf7cc4cc0598365d845ce1422651c41066d2a860c34a3c361d00ada77009336ae872561c0fea89489bf41c75930dfe858b547f11c945c6f4d000669137f4724c8ea085e8511997d31ba93fe28a87ff84c03cfeffa87ffa8aa100f6636fd0b179f467c5282fe55b31fa021748aaaaa1fd0763ff37acdf613f2000d43f45972febe26456c297e94404293efe0b0f5e25fa503c2f4176cc5cb4ce00657b070a3c333db35956484ff88ea884542fe0a0bf3842652439b93477e2760069a2289aa0c13b70a9982cba71bf4854e9dfc1cfe828b3ec825ba494125c5e00c1d3b4ee9b839b42131d74da48af0fcc8afd1a15fe31bfa14c05e173f4398000bc7706b9f19e425420fdf08e7f001873122d1358a9d1be53fa6836599a10e200e77f5098039ee35b506e375377c0666139f18ef94bbd1d8249dd02759c20030073cda061073d80fc72b8df8e64b0f6c9794daddfd5b47261c3d497e35e05450074556113605d8c37e91300734670fd0e161f99684d38e2ad9383147d9106a700890001ef3da26b3fc49630c187c1107e8240b0dff0647f9b1387f8a0d1e25200ff40a0bc0d69fb44888ae1f6f68ccc7adc2f96c61c4a8ff405befc1d4b507e0082300c139fd0a816a604a96bfa2b02d4ff4718060bf30c20906e605c280f770020e05c151e44a00b6c99e7c921a7951527b574b9d6f60aa5696b4ca67cbd6f005d6b4b3c0f35ba9405d0882050d10613d405c20ff85abac9bffc315d7ee8e400c2dce6cccae5fe12aed0414c4c59ff0857701919187f83b073d18dff42d1d7003587e80b6c6438b0bfec0f34eb3b6151fe01ad747c82ff206715b2fbf8843200ef9025c1e8407270e008309fa6b94f0788c69d4ee2508c5011a74fe002b87e00f47b943f2d2c7fbfd90ffeff643ff4f89fbf8a42038c241d4182c5bbca0ad800b134a982cfdb75f3389008fc3995505b63807ea040eb9fd041b89ffa122c59002da9e53616c5de17a737cb5c4decd0c90d4a9ae010b9da7f57cb4a1087e86a00f61a23e66e9326c23f3daf37390b132ea040e0ce5d9afd6045e5429fa1c2ba0044848414b5d02f39dfaa9b3f53193a99a976c1c953fbfdcdcfeff7373f90760033fd0f60eecd732aa0ad8a1f061917d072153a438563967590bfa52a26eff8004803cfeff8ef7f68d92c47e8823396053609d883f4eb3db205d9f61a6e98a900895bda00feff8523fbfe148fd3e7d7a7fa090094940bbabf8120c58a84b205007941a0eb9b8482c5ab667eae9f900185fe828316b6258d228c43adc2651ef200dddd023ba86432ebe0e6ddfb00eeb04f12a1b3d08bf8af45afe13038bfbff4005afee8d1699115d1c969d949454db5ddb8c545c5bdc1c58db5c9cd654591910039e95cc5355d68e5d0cddda95d29b93913f62c2ff45c1d46e4092c34dd9b4c004c33cb344a023bb541c4deba14c3d9bfa850a220c96ebf0d2fe7ff00325273008745078eb26f4e3ff1583744c4a52c58bcaef954725f209830fffa44fab73f00820404e5944572f92b418d1358a1c80e4dcab009e01c2c5fb2fe8293281ba30040909f8ba2a05b648de4d5363289b986dc89c8d409e7c619d35ecb26f89ff800af85ffe13038bfbff85ffee9101129cd61bdc5cdd50510d1e90d21a5cd90cd0065dd8931b95535210d558549b9e9dd1939e1a94d11d8c9bd45e7f62d5a82f40030ff80b1b990b3803c88ccf709db9c494d06c737754b852a38bc7be679b51900f110ba62f57715145809ac3d2ad08781f5fc25d70516ecf6a7419ea16bcf500097f6ff486032bc289fe868ba60383f96a8ad6d8d54a19264eeb982f98f352b00db09fd634deb68c37fa145e298081a7652116293929db38ac70b17b2ebb9e30035fff801e15fa59c9fd24081c44249fc1602499dcca649b63821a723461d2c009849c6aa6fae904c92dfe9d9204cb408bd30fe018a6594296a920537710f5c0092267c87f3f3ef1bf8018708b16e2f24b0188a8e0ff3f2d36727ada9324e250089883ce52667e4ea8e95d61bfd96afe0b489b36f2e0859bcee014e19a5be470079a327db293b0f323d456254453332778b90c3e076a1d8d947a7e90886d4f8007b18840629b3e483056ac5fd156017bfa36e839c0252fde819d70f10cdbe9800e5dbf40523d38b2412bfe7635859a4a5d38b253962ccfe910a7ce0ffd0e5ff00de948981b56aec28f0285d39bced9044e98f07edfe02617afd42842edfa1e800decff45203747eaea383681fd0c601b7c6dd29059b530573ec5e1b0e8000b800ba4669fe027484b571fafe1be1af2b52afe99d50e8fcec30ad71a5947b48b60088fcfe73d0e78c1d22f5bbf0a33d77f499fdae7e84c00af252e942410b891500843adf72a77ced60daeb0a2f8ef577dfe1be3bc363f2279b65ce3f34a3529e0058737d1cf1723d8ecd003878c7b92a9b18d35c883f48cfd7b91ff0583e693900b289958244ab18bae71b22e7359c9d12ea9f4fddc29fb86f529ff4111cd29b00feaca39a5ff4063af2faa3292f6b75667ff0046ca6a526c65aa48e75d8c0d600d75e224716da3f4300056e31bfc3e00fffb231f7c1ac3d3ff89908e9bfc014007035fdb8f1a36b7f8c80f380e33cbc7f802905ff1c4d78037e11d67f2d9c5500096d4b8801fe3ec2adff5f64f9a4301f470aba1de5a1f8e856869369def4dc00717e8fab0bcfd1a438f1fc061d09c7f4d0742882f6cb09dad5e7c9f5925bd3000231cd81a898e59e1e70277d48bc3d72ba30535fc3e00fff330743ebfdfe1d000ff7f8743fc161d0af8fcdd9c5a564e94c0e7a7512ea187769fc0f94ff1e87004273fd341d0fda82e26375e194d4daf9c9be0d19a3cd232231e1fbfa8b253f00d5bf29f30c5367f0f803ffccc3a1fb7f7f8e87fdfe3a1ff058e87a1e02ccb8007f3dd8ea1ce55c59adb019c7d1408b1fc7a3a19d7f4d0e8773dff7c8b8e62500a995fc0041387f2214eb996ce3399e791e884c4a1fdfe80a3fce8ae78624fe001f007ff998ae5f7feff2b97fbfcae5fd0c40331c5f600419e73eb0a37663450043a16beaf1972c3fc7a5729dff4d15ca4b57ebc5430da954bcf7928337cc0400857768a16a6974029a2ae05c87bcac1007fc3e00fff331d0ff1fdfe1d0ff7f008743fc161d0d01d24f8dd4719d5e435aae5052ff07d2262bbf1ff9c8482d80009bf4198762cdabd7fe822654df6a76acd9c69f59b12a97a6064232f1bd6aa300c91fd263b863fc2601d7f01ce7855fc12031415b274a3c9b47ab406101d177001788b3d8489a61e25a2afe7eaf2537e40118406081590fe0300125ff414f5300f0710b34131d76a04b4ff005f47cd6a1664da44a68a6bfa3a1127d7ff42a08000ec136a3ca47cd9a75164078827bb0e5ac759a2ae96ce86250fe9a8e1d2224009ad80e5fd044d86889fa148fb780d077e50ee5a49f9e05955cad53a6cb5dfe00097ba1303f1e3f609361a7a68e17f0021f3b40ce9ed46840db672566de234300c619f49f852b55df630dfbbc4f469fc56e887f0981c5fbfe6a353f720d46a30021ca6a71c38ba36b9bb3520a3b32ba8b4bb36a89aa3ab1b2131b59a3c2ca4200b2c343298ba313ab29caab87ec59030c1ab72e7177c0e7bc0c2e441089f3300056e3582751a237d71448c5745bc84d9af31f09b0503ef9a53e7a189f897cc500dcf7b38125ed83a55a92399ca22800fa57fd21092f1f203c417fa0c3394831001650bce8db65337b50071791beb5efa7867fc050552bf6f8f09f81e64c7f0b00d6da06925ff1ca3bbab9dffc3dbb317feaf9e13f40f88f28d7ac7a14f3d9a6000bda22f0cc7e7e7f9d0f0418adcdb6b34deebaf5777c17212c44032a0dd3d0003089d70bc721ee4e145d134d4a02b77b1091f519c672fd2181366b82ffa126004be9b64238e5eff4050897a8405f13513eb5cbc1b8cd37cf7ffe24dabf84c10010ff4b4a3dbd29973a87a20cc245295c7f008d58bd3cd587df787a5abe2cb20042623355d613a5bbfebe63d6152035f7b2c46e42c1baa80dfbc25aecc741f40066b1f8cf4c4e22d3238df388282cdfcde17556f2513f01f1b50551e6690ebb00adf3e646a4a8a4391c6f538e53aafd204ef988091fa1264a61199e76d6ecd200d4b09df4f7f803873503157255ecc981ffd2232531fa02fb72e5bf818043eb0038940ebdb02abe96a8df3a0d24dc8bcaec03a70ec533fe28b7a3f84c03cfef00fb7a3f681fcd57c500f42030265467f0180093505a8b9284af35ef2d51704f00483b4f7086952912a7c64a761fa4e1122bf84c03bfd430891455fc1a05113200106efb5472de86a1730c80b744b053bae6f1f7e943b917fe1200eff90c0a2100dfd0d6206944c1df123ac4afab1d7f0d157c7ab53664e49dc5fc4e0a2ff09800077fc8405140227f050145d9c529bc7e186b49ca53ee6206219bbf38e312cb0061d15ffc4f1427e89c1a6eff221ef101b424fe87310b7b93ffd0115a8cd20500afc6ecb0a70b1d8dee8c2c0fd8a1fb9c2ebcff84c0e2fdff2dc33fbfe5b86700f58df15ab4c0c67f0706d8304deeca93431fafd392c44351e850f9e970da3f00fb9cf8adbf84c0e2fdff7c56dfbfef8adbf59118ac95fe85183aa02e03d9440016e75e97216401ee96f931a79f50a25eacdcd3ffd475c383fc2602dff0f1e9003fe3ed67741c495e45a4769c599507a3e6f70a917f749cb414a97042c2acb50010c032d8e895a2050994e124d3ac0e3323e4be3139c82eb36119f9f93058500046ff09ca60775c3ff224ac3f3997f050246067d4d28eb03bdf69d97bc120da00f3f5957241f2e9f5d92bffd854bd7c1d04fe82984d202bf209458755e50163008e04a4255aff4d2c742f7898c1cfd1b30cf5fa08bf437f41cc2c88de426946007cbccfccee3d125bdb51a6f64e30e6a7e90985913912fd0847519b2375752d00095f3647d221f476d4c91b596975f79fa343f0bbe40970a7f4246adffe8a2f005e3fefff96bfbffe5afe3d39ad80abf81029afe060b84ad2e505b979576dc5003bd668b7f44cc2782d868cad18f3bf899a684e2ecad9aab120c7ecf7af6ea90075165d1b1827e3c0fd044971dfa0e62046d591eb6588d7abb909c99a359c68001e5358407ca7f504c408fc331a7f040bd5bf060741b929cbb266dc0c23ca77001c46dd1e1002fcf01c9c546bfc8781ae0a87f05025a0f4241296b264cf111100401d82f0483ac6e59a2309b63c4b9fa2ad286ee213f9085293bfd096d8b6d2005cc4d2e8c2ecc2e8c2e5fc062993b1897ff0280185e6c6c607066c4706460c002c462cc64cc6c68c668c4c4c2c265fa0e374d063f4246c64043b3b36c6fda500e81bf4dfd84741acdc127215107e8d34841fd050b9c3fa0a605c992532a2760081fddda09200e71f750592af72c7ba62413f9cb816db7515722b3342ea85820079536ace6bc63bfa54a2d4f408b234d78a25aa09d6f412a6fb566fd34ca73600f17fdb0706587efe2b6c17f84c0e2fefff06ff7a21179a92a9b3c20a69b25b00babba34b7bc251a3819a734b2a821bb18a61aa321383abaa0b5bbabad29b09009b32535387f45364adc228e3cb588cc91a224d8f157e97fa6c80fa939911500020ca2b7350d134cbeecb694c2ed0cf3a5026046975b2282e1fc01b56fd56ea00c28fb08c8f570f7e809b73c7c3f353afd22852ec4bfc0c220d719ca4fbdc45009f53503e4daf5a80422f0143d0dea3ea57f8b028940413f604d2567fa20308003f83270cfe130403f47424cc9dfe8498919789a31225fc0ce6c7872c498f4200f0efe00e0e725d1dbf5047962fc83d17e830dab1033be294abc3ae4e233a250019abbf229807d14671eca839fd1d7e62ffa1432d5018dc6d9820e897c306ff0074527b04b5f002babd65c2cb49b3871063f81c056662fc760fe1349b7f82c0006efe1346345634ea23f212a70c44228e12b7a8f88b501f32985d720be1c8b20004a51ca27771281d5cd480ce0b9d48cf83ab7bf404ea185830b7646aba59f100c4b8940a8f9b2a21c1fe9fab5b0fe0b171b3fe7b7ca44c8a8bf0914c1178000012e5190a80d43f424bd357e99a27c8035bfe1e007f4ff87803f5afe1e007d6007f87801f52fe1e007f47f87803fcefe1e017f3ff87407f02c5fe1e007ec3f8007801f2ffe1e007d1ff87803f55fe1e017e9ff87807f54fe1e027e7ff8780bf004ffe1e037ea7f8780ff27fe1e007d07f87803fbffe1e017e8bf87807f38fe100e027d23f8780bf2cfe1e037ee3f8780ffb2fe1e047d13f87813f3ffe1e057f00f87831f02c2fe1e067ebbf8781bfbcfe1e077eb3f8781ff35fe1e087cc3f8700823fa3fe1e097cdff87827fabfe1e0a7ca3f8782bfa5fe1e0b7cb7f8782ff200efe1e0c7e9bf87833fa0fe1e147c07f87837ffcfe1e0e7e0bf8783bf4bfe1e000f7c980be4098997f43070fcf54a515d63119749712a7834fcf60eda2595c4005f9f62fefe9387e38303736666636fdf54169ffc7a07e7e8428535fe0f0997008103e9d81065b30634a5dca442dfa57cd5228e6bf7f4722f9a331b9b181a9c007f3b04ca05fcfa132ff1e81f9fc0ec2334fe8725030a74e6973107928595b000c9366161be0414bc53a51fdc482cd3fc032cd48fe84998d6256de536c0bdef00d5c7988ad2c55c351988933ee7fe28966bf84c03cfeff966bf680cc6b3e40c00a7e830e74a115d94351d5e6a0ef13fe13b8c99e5e295f573e08ef80b9443b6006c8a6f5d337b3890f46908e7f6dfdb5e65fafd471df947d03a5fa7ac34481000207610179aeaabf80c004b6fd0416baac2c91eeadd9634c7cda7f96e91a030009e26402b6ffb050e2e373beac6ba16fa7372c12c883bd9577b8c5b00b448960022553818eb445574b3ed3f8af0cafe13038bfbfd5c4fde88155ccae0a48cc200d686f2b4a68ce8ea986ea6ea7270b0c8b0ece48270dca6d0dceaa4daa4de9c00a4969c8490e6a08dfd158755ebc06d1bfda041c3b9154cbc828a28479806110056e95c50fe8c6db305f47d179863d5895d7fb0b990890959722a99780032a900a8d37c30191158885866c5241528dfe933bf61e66399fe0300129e0c04b05e005231603e8cc907a142c5f47d8ca30c48de4e4312b252d8b1052afe0f0041f600e13e37872218c7016a35eff52ce5078cfe8530dc60493e094582548f94372c00a54894012e41f34972370368b84fd4833b93fc2602e7e8f227abcafdc744f500671fa6c89eaf491c1e058bb31d2e19a156a4dee0f16b50824ab747b688a09c006fe44dbe72936c1404a6884ff405540e30e1fc8d812a7432b16ad78acd5fd00057e3f5f445d946c4341d7e921f7232efd0b7d2c25bfe02617afae7d7194a83001663ecf1090094260da3912dedf4fda2246fb0dfac088643f848117ff6a793006137fcf98e584fa39783f0c6072f8c5644977d7b33ef505c74d884aeda789b00e3871e82a87b3dd72278a70cd614eebc748573782b280d088639830b70a0ab00dd742e186d34031bf48cc57e17fe8725567dc980d7e20ca648fe36ac56bc0100691e965d4115ffd272817bfc2601dfe8f3c1a1fd1f272d637737b95f3bc827007c3e738fecf50222055276dda62fb5f41fa031157fb436b8c895a0196090b500da1cf2b86aa5964f79dbbbd07eda5eb340ff8d0d4cde5a910cefc1da0b000b00e204dff439f97819a7f01cd960392013d61e2af2ec6a58229a90f37e8e306b00ee5565a6f7669b06e1dd7a8ad6d631db7750771d4a87b454033c26e0b8487f00d252973c81fc1430d0abaeaca4ef945347a8f9d27675da1293ea9587b0f9ab00aeaff7ea63ec666ca666268cbfbea52e7bf8f40fcfd0877d3485fa16c591fc0047252a7e328c9d8d60043b8f1fd53fc057f8641236416d83dfa50ad03bf84c0003cfdff64ddffb4718e3bf43df8f0cc292a5686cd2cac5caaf63f26ae8d9b500972b3167e920a7ee53fd0e18f69e9f87b31e861c8c445190d7792527347c0b001c1fa4e49c0b9579996163e1a8842aa11c46ba946d214d101ef3f415ab88fe0086b1895301e8c0e9d911a2f028368ea0a8a6d58a1ee38fd445fd968c3ffa1a0032075bcab3cb2fe76c4f80bba9c95dedc6a9f68244737fc541a101571b5c3d00d41fa12c5e3c77f434bb4bcecb57a18f8b9f36b537f97ddfb64859a39d4020007eafac82ea248fd0c606e00d283e5cbdebd45e3075fe02fff56767dbe4a59b00ee22a773fd283e2e3fc2601e7f0fd395b86a195396f2c469bc4ed5d375f6c1005bc889db0da89161f387f7dee49822a6cffe7cf2b8fd2473292606a66666a600a6c6e6e6a6a646c69fa5ad403b3dc29a88285311172ff0049dd447903feaa8006607cc4d63bb8644a791ee4f05f5b9f9940ae2f9b2068fcb5f1208e466194100e329bd4fdba127067240f23f573507f48e0ca0d100fe8539b75fe03b3c0a2a00b2334f46e25d7b323119831656b22e6136bf804c1cff7b3b6619319b9ab2b200b218b218189a1a1c991b9c32199819981b31991c9c9b1cb11a983dda24343d00b549583aed131eac9872a831115a3daeada543c2fbd45d4d90b9fbffa5b89700bf84c11cff9f3bf424050caf69d20ca34ccb580954554bf402693d0c76241100360a72628d88ada92b8ae9ecb595f0246134ae7193aec65a9982a3de2f258a004cc44c30044a95ff000c95cea1fa7e9f7a007cac94ec667a645c7b64a85831005a1ed71b1f66bd3f404ee4be1ece86d9f98fbc1233c1a271de0e0675725baf00f000d6f858cd4c63a7399dc52c094e6d122a66f7a3e6c5c9bfa7ed3ccbf8f40021ffd844f3c3fa208f1a2e6637c30e5f287788932e2f5a2b2f86e4ca9ba13f004e579dea0ff02242c15fa1c8e70ad2f1967189f465d1b6b767f312f7b93e9100fa434bf5218928ff0980b9fa3cc4946bff71d892899ff1b242cd9c36c8538100c32a8e92e5db99c6e90e72c25bb61167afdd4adbc3604414c0d846c527f3b4006d2064e9ec6b7ae657439212ffc008d96845cbe9b7fe25c4d550839d9c4a7f00919da5fa7f82c20503c45d9421def699eaa744a05e9724edad5bba7594fabc00eeff163d4f8636aaa17f0014f55bfe84391f020669a9fd1e5da10c9ff30398006fe06041bfdac6eb9fe6430a2ff8c7a98ff991fdabf8b19adfe32017ff9b01001fff1f18c17f098707fa86b168c082bf4391062d93d87b05e17170a37d83b500d8deec8fb217353967f143ebbfc2601e7f7fbebbfb46f95cff82c204024e9100943fa7205314e0b286b3626987dbbf8541a14467d3fd1f3f76bfa185edba92001a53dfb1fc890a061753cf47c9af43f3810e4a75adb3f4e9fd6c50feaf967800c19e2c6e43d75ef34b2613e3bd91c10a8a75c3cd155c45f7064179e20aa7c2008f11cf9147c8d48e41d5a32960b49723357689aed0c0baf59d93e1645aa4d400a3890ff232d76138a7e8624519a894a32babdccf43c9945f1b236e16d145c5003bd0a3f8fd1548a33fc0b46a7e9124519009003fe2b1363f84c081fd1e62070066ffac491467f435212419f14a4338a2f690c4b47acad724ff80a0844add1e008c3bbc0eff50cbf57b30f7e8717cbb6d18e91f27b1e82efc80ab59bcedcf1400e5b50fe8fd4447a9041fa1c2b0c6779cebc2eeff9ea94cea04f8550b9f5ea500be2853f4946666107e870a88a114830cc7328581e4f27a9fd013f8b794cdb5001ac3a76bfd0512770405795d6a5d1db497bb0dc2d53d40861f2deb9f0d35d20022e33541c9851ef10ff15c49dfc260717f7fc49dfbd29435cd1099cd904d1a004d539c9a5d585c5a591a8dde9550cc53129994d954ddce4ccd1c1b55135ad0009a5d52153f62d873f323cce2794be80edab6e887a039571772909858825a040069f5a54867be00ce2b3a0731528a5a5756c8c148d423ff41d0aa10be891a50003d0cad8240f8faa04b37e91baffe6623fe0e14986aac554860b4a16bf2ec78009423109991bb15cc07f514a1d57e8797a4ed5473ed362ac0b7858022bdc72f00f015a61c0049cb60ffeff977a1fd046d40ffc2408bfeff8c586fe0b502ec7d00cbf8defc7c7f80021ec5d0502e17b140465764ca707e0b91e7dc5a7edcc6bb00c18f1fd0f8f61ae62e7fb30a3e874708fa4fda4da9348c8d6306917619f1e5004f04cefe24259c93f439274082a285bd44637137149cb8ad1c986310590b4700477f0a92ce640b5eece1fa4893a07cd3bf8ace40fe130207f8789671ffe6120059fe4049c9ff82cbfb6104944ba0a8fd0192571fc00b68e91d5af0ed43d37b00f9eee31cff002dbd79fc7e54944aeff960449ff848081fe1e04a867f98812a000208fe0c04a8d2be52af9101b5ce5921107df3c9add0eaa49a97f8004f3913001fd2f5a99ffc240217eff967c0fda22cf808453fa1a2b3dd36a7746edecc1000eda31287cce62febb74edbb283fc555e0068ad5a15a9fe0c93530229fe0e4500f30da80d889d3b6944225c2e915709015da0715ff4a5d1faff098079fdfe8b00e7ed1b0e1a2afd0e61c35bd72061463c30b9b858a7176ff88a85107e29879f00abcbfb6ff834083fa6a9413976936850d6e20767d68786fbae10eb8c6a6edf00d142de5b01708827af3bfc28d5ebc20263ab7b234b1b5989b9c7f12592855f00c1ca4524e03715182cf5d8106650fe809cd230776261ae836fd2915655fc260001e7f7fa915fd44a457095fe871700a7d5e369ffd0182d120da1539feb925800eea5072da6d233fc4f4f3ff098077fc3d4f3fe8fbc8fc1cc2a9b363bdc4fe0000337258d0f157f40544a99d04a109396a8bfbd1b2c495a0c84fcc7f0019e6e000b42a903230e23a41032bc85f34e807036d482f5f6b04406c0384fadc687d10001e97fc088e016ff072380031b44d8323668b95f011d4159a2c26ef7e2dc7700fb06cdbc70cbcda5a12048524967c08f694e0e4365a20b16ddadb098821ae400274abe74bf8ad1c0fe13038bfbff40ffde992bece8eaa8a0ac98f06a6e948400a6cef48470eca4cea088f286d0e8e2a06a6cc4649a8c98e0ccee68d4ca66a700fb16fd6f474df28c1d236a1954064744615f5f58a2e84397cfde42b8e86ad300cf60df6436dc3f40534bb8fc30871f4b144d7b9cec133867234fe80bc1b57600a5c2b6b6d69f8c5dd0fccbfe236048a3f430689e30694a2368d20bb9a2329700a33271c6f0e745e8d5d22c474a514c54b6ba7a13e1906e1ae126b33116423000947043811064c71c7f019d57b2ea903ffab65da1d982127f4e85a005af310700a7f96ab41fb8759a906615c99c8aaa2f3e3540a1ac6fdb12e7f80c61b31fd000e615ea163719bc07702ebed465771dd08afc09f4902371fc4e30dff098077f00c3c081ff0fa57437b71d89129f23fc015bd26eef353ea412069390c164b8d600db6c00017da9111164a2eb70e23d1729dae9390f3335ba231967d37c357297005142bd9372c1de20e3fa4507360017c50fe86183589b9594153db59e43070f00a07ae4cc17ea440058762c2301942f6f07cdcf3588944bf4c42ac74ff24bf5006e759080b864c4de93a5ff386459fe8907152fe1301eff80c7a335fe0e061d002a88d05b6ec646e7b1b78e9cc0cebef35635e27bf89c187fe1300eff87828b00ff1f03200dab16bf008d5168e04a1761b82c4dad649a9ea2c2d668e180e8b800c2f685aed10f3558869d59d306af2d7f002947525ae09686ae68a0c51e62ee00df96a74e0158620efd33fc07fadfe860cf65dc1394b7262e5d1e12686c29be0036b6eab0150baf0be094fd7862c94cca4a666f2a8f2c6f2b4b4a88acef0de8006ece66ceae8626eb46af270666ae0a6868c66889c96aac46694949dfa423a9006cf3f438c9f349327ab3a7862c0703af934d3f96423114a7ee167ea3b3b73f00e13016ff4fc2cd8cde7e7a264531f4dd45118bd8fc2c2702ea8c3ee39f2794003cbd2976d972f64511862071e6460630fce0d83dd530b08f3dbe3ef73751f600415b65c1884716f3c8a0dfe9898546af94365b867b617784f1aaea0b3a2a3a00f27c2f5fda06fe2e47eff84c042feff47effa891fbe144fd0e79cd2a14a4bc00f330392af84f2b239627a41950cdf2733fc4e3437f098077fc3c3c57e8fa9100201b14776aeb53431dd5060fee0bad8b11dbb6cdbfc65d63b182e46459812a00da63d4277882bfba590a0071339f8bf159eab6cf162e813a2733b14478fd010082a0457fe02b44502fe03a9b52bf438c2727e8a0649efe25c547e52ce63d7500a84e0ea64f71d4eccdf8d4679ddc2bf410cde5aa7e8719bcbfae1f3018283f004e7db29159535b3bc2ba201fa93ff1524d700e35fa931ffa327f1c2b33f7fc00cde5db46cdd9d8b52b12d502224db0b7f1ea058fbe4e635f1147d9ae2b615900b56a74240aee00749702b62f0fa0fe80c1e4df79753127f2071a156eccfd9600a45816437130b1cfd5633796a4c2aa72889a72c866e09ad0e0a2e672a488a200b46e66a486c2b2dea86890968670eab462a4689aeae2de8ffa76158282999400dc9b524e5b10de557f764cde5f17e85a52a701826b94d7d71ed4880feffe0000c2e86da3251cfb62770fa76e8d2a528c3051aa05a4c7d84d37619dae77a39d00d25a553602e40691d49e2d73f4ed6321810d777e8f8eacba0acff016f29b6600d8861f271d6b2bfa7772d3bbf68b58d742f35151534595bd527d604ff9f1d7005c0ff8fa10dfd3f8a8bc82cffa02196bc0658c9f318241c3dd0519c2e4c792003314c0bd00daf0ea7db75b7e3c86c155ecb942790ef0c93a0c4ae9c209bc4c000c1c1d842ba7f31f5d2834b7497d5bff48d36462d7f0760463b992907cd3910073352afc787df043bf6f6a74e33fc6f8118316767f021d5ffa1693d541c54a00a5368e76b2dd271aa4dabe72ca9ef6052fef239493bfc55b1c04e52175da4c00d0ffe4823d6ff0c5ddb7f0980c5fc71804938a388a43ff0d57b64dc4d6ca2300fe409af014fe1f024ff80f8336cfd0e312a6eca39712ebb4fb63543d2f0b53002052b753c8fbe3fa84c43a7e307f42cc4a9012d414a366c43db19a7ccdfb76009c96724d1657824bc308cfe8a27c2080b8840d94b4fe0c0eed975869e2449500da2be631005e8f01e7b7d4e16bfc301cabfc2602dfe9c8cfc0d7d6a072c91c00fe039b54260637f839515cd68f5035ec08e245476cb78d5b348fe00eb4a0b0005099ffa09515af6988d6b97816acc1e96907e7d68563b0b3f909a359222852004468482bd69afd2c903bdfc260717f7fcdadfdd336b36a0a3a5bba5a52c21100b1a1929a2329c2aa120aca42236b5b4a6281cb131232536b928a1a2ab3a33b00922fec5b4c07fd01577a41739dd7b80c37463f8d352ff9092bd3b7fc7bb11000fb2d6c1155e36d78020db8d957de6af2a902c5e3e3b162e61c4addbec971d200285c07272ba389a8b80b1fe46647623818efe0b3201cde651a26a986ff80390067caf6e1bd37d21ef83e8688c954d92b94f9326b9aa3c9beef6557a508cffe0000fbcb9466adbfd58202e40791f85767bbf8af62afe130173fd6c884dfa2a500f1f3f836af03736353631313939353939373138313630fe2ee5ce286471df4002e7f4055b6c470f2e36c279baa0d48ca6916821640489b28ae9cbdb74821170015144880dfa6664b0bf0ffa43298b31b4ff001345a8de5f605b5661b350968006ad61fa7ee2498a2e309e5675dce53e0f8aed79284e057b48fa7b93fb111a400e99ebd0b70ba86d9c630d3e75e42fbfc0585ca6b8569a8bd8f6467a732b931002e3c7aad4721f64a70cfe5fa4812d328ff82cea6335794d2da8ea85c5b32ed00fd015d1abf5fa0256e454b4475de0e3e3e521d5085ac9edee6e369d10b16d400e1fb553cdc6923f529a22d81c0ed7f063d71512908d7945de3f2404368125c0039a198b8015c56a4affa5319823f84803cfeffcd0ff68c64f1a2410080fe87001975e552ee94df92fb77d2ffd0121fff3ea279072dd1465eb3fa5122f7bf8400c03cfe1ed029f3f57cc3924e602e62763850ec4602f7a1eb5f3c98f6c1150e00b4a059c9b2c9c5ed43fd138e9074682e297bfe80c4af435fe00fc46ecd063e0044509e42d2498b24a472ff38de5b2ff6bb497f88c5fa24820107fe0c17ee5600524c2a1365bae64cc93634339f2343f8021f591d825e474fe4817eff84c05c00fe5e17ee1bf8985fb383134363839323636ff2e653320e7fafde2842a8a71c00ca068621ac38d43b416831324d4a61c7c3dc0ff80877b9e175386a0de74b2e00f1048b3b164010df6a6ac75360f41a8026ce732b34457bf40547628f8aff1f00ffde75c52be0a23ecb662a3494b5bb3cbe8f38ed40840af978ffeba384a5cf004ee6b4d166a8913713617f7cd829a20ca3287ab7bab676eff83b861b12758900f263563dfa486cb4806f7f83b3b9aff561524fcb2a976aa060594b6c3f0f9200d800e5fd4228906803b080b6c85a7060a18ad288f6110b193537b7d04231d600951b104844b923483fa44aa7691c8bf438c64b99b50397da5c98ed4233dc830057e5fe8126574b38e26fd246662e055453fa16f4995430651d41b3c8c971ba0003543774cdbefd0cca5d6a711dbf853d9d8801ade0dbe1d280fd4351c1231a008937bfc3decf317f4bfb3dfc0e0837f25ddd1fd7febf7f098489fe84d81f46002dfd0e1a68f82799db3955c0dec4da5901a8787f0173c320923fa4838db8eb00f838048788a45c0c7345b0724344411f65ec1cc0742a68afe24012137f43920035cc7775fe397b86a4f8cbc304f168ae720c30cd002fe92a46b90ffd0b62b2007fa0529526b6cf9bbb15225f6fd55326ea90ffaca77c496b6ff538db2fff090080c5fbc6b69b06bf428c8a1b50f4a1ccc1ddc559d20a59b9be8bf6f266e9da00975bc447eafb63a9fd0a4914f05963929db027ac577d167841eda9a2105c37006a6d3c3f13dfabb2e557e2007ff828105caf594fcd0abe62639d36392342ba00cd95cb7c54e9cf58ffe5f02088bf8341055fa0c140e2bf5e3c09876ee9a484008b975828d38afd5f098a65207080af62603fc06002064183a972ca668ff51700176dd074ee71dda0991b8fb8fd8ac3387e8aa963503d28d82dba3ff0132b4700f9888f5bf84c063fe3795440f46925579ea03eff46445176099abcd95ff8fb00f9e45003c51d35a61bf0b369d85245e7a31288a912798bf441e928af8724410031594a7c73772a9f6c814a1e9fc5405ea919f549a5ad54fe8a3d2514780fe0005f5eff4318baa11f625f45cc9372f8fba0781004c03127bd6bffbfea236781001bfd0d7a0dd37f658d2d3164fe20598c3859f95154c6f09d015fabc2442e000077f42d8bebfe8b2220efd267c11dfa6e89b33f4312351127a4a4009e48c6f600ce4a8aecff2ca9a842da23e2f6dfc7f133ed7fc2601d607c820112fe848d3200298e7deecde34609ae6aba60838a76d538c847d87fe825d559947b929dfe6a00e8fb8dcd1257bf1262e84dbb482aa0c774b939734b90bf80609705fd2c969500ffc240717f7ffc59fbd2a4c4114e0cd19116111a908d55961ddad49cd5de5b005494921a58d85d160d1e131c1c105b55141c99d1531d1b54ffa2ac6b09166e00e7d3d401b115be1eed8e6b7e4d299cfbcde5ef76a9c872e7686fe847f35dad007c0ccdf13eb53e0d9f8712d56091159aaf9aa03a45854415abac10aa3d50fd00219654689fa16c7309b9f250ab4a6bd9c87ee937126eeba10458276870eb0000e7f48144ef7e822b9a6fd0749299fa50923c3f47d74b9fe82a490e02f8802d00fd0d31788ee14580a6d6c89aa4ffa02b475bc841f9b4ee8dee06f3f57dda3a001cff070b1b15cf0e5e6ef03e215b2e5b370cd46ddf41a6d4a3fc4c2c6ff09800075fc090c60c7e87249631dc48fa3da40d314594ca9b6564bdd9ccb10d572f00d7c7bba79b162de98a3b226608a346c75dc9991a7b06035707d0361b2e247600c784df0b8bfb7e8dd0b4cc7bec8bdb7cf91106153b2134d8efeb3a7d30eff90076409610b8280f333abedc8ec76fce3370c88f5afdf82a1d4857d70500b9fb00ecca12e15f55134b2d7e71ff88fe84fd1049693454bf9d160dbf095f0363c400be22c788fd2f978b5fcf80f2dda17aec49954fc587be0c090c52cbe7a706e900d4fae36d6a6a185ce647c86c39ff5f83cb995d58a9064b13ce49ced426b4170043de2fb7b05e7a47959f87cad12e7f1db04c8112191917200e85b74d7bedd700f38d4172f7a68fb3c0fcd1eaee5c5db1a2f56837fc660f2b08923222b7ca8100663a27a91ab0635524b2ee8387f3e03ca4ababdc8f816778469dd70a128742006e637eadaad78a71c3fb6ce6b1f57eb2243fd7e0f2ff80a40f39de46df7f8000265f3df6f373a61b58d4e69dd133a864d3bab5d78c30f3f8dd58d461cf2b0b006aff01149762b21ef3fd15f29503ce884a1a2944ca7f004d21a6ef1c2912da0017d3fc680f2f44971a26eeea98b6c916ccf665976c9b8195b8d7f3e03cb40600a1faffc000722389dbe035dc95a9cb2ae5eea2b9478abb7561a3c6b3322497005d277f5f879740ccb3f6f7749ece750537030433dd4618cb948e89cbb1198e00972b6af8bc15287d542d6903264398e8d93ee407158db15d77c78be3ef65ef00eab0542d39363137fc482d88dff070f2f12c47416de941e200ab493992581a0093c215c75abfcf81e5ae9f7a2f13d541e3c4054832361a1aa51f80c349beb5007011d366358109e8cb14ff5f83cbe20aa2a04b1163276428a899cd8c8f4f5800330d0ba4fcf3bb0022ea0fc6d8531ab09ad06f3f0f802720d4b9754a638bc600fb4ce7757bbcf44f6a8dfa024e707a2aa499c6ff8cc1e58722d529927c5d8900f1c276146e2afa310093b2f0fd7d3018c76cb00cad7a4511c53d470282f128004e441ab8935fc015a00c4eab0bc122e73515aaff5f87960e9810adf5dd0b9d00096fb9e9e1ab68ef57ec93f41ed6a180938d3721b16afbca1dc84f6619525d00f38d795c95c57cf9b804a04d1837234f70b39488073094ebfa470bc57f441e00ea1fe94b2557fd237bc936dfa26c94509da462d6bb97737c51fd8ac033b979000ad81e9687f47993207f078085a98294202fdf7ce66b4e198e250abd0330b300f7fa028cb4ff870042661cfd0f4a794facb52c9026b192e13eaa7cbd3f2b5200b65b201fa40df8056de3f8888e91dfe0e32d4002b372e614687d83cbbdb185003009b42c741884ff5f66b4948b6684c1b743797cc39a72c4e49209a39460dd0026f22bca4b4701dd44f5b5bff5f866ef292213577e4b4e3d59be3cb0fc629c006fe043acfa2fbc9f8ee5b4b390653235e5920a7e2f0ff0f4bfa02b8f6899a800557e2ca5042f30306d11f04b24da2a950d54f92c6ff495fb717f0605a9080000442db3e8053ca4f34c479e42b7227bfc002b4666bfe8f3288f1ffe0e0debf400a5effc7f1186f565fa09280d07ff43994263eafefb858e9dcc78c887197b300062658d53c5dfefe96ae7fe130443fd2d28f67e8297709a6ba7c2c4ff5fe939003465ea1fbebf8d2eaaa0f767097b5e957a23febee59b41eaf7dca8c7ee5ba200051c8390de36978297ca4c0e0b6ef664c24f8dc8e27721396dafe4d260ebfd000136810d3b4ba7322105153c861cc9e3bfc03ecd3837f259fbe7fa4910fe9000c96964037fd0431de1fa091034d8fa2d7cfd212e276e2cbb8712c2590ffd29000bc5bf8861f7f9012112fd0e1b9c715c49d05fc021cf56a1f350c5e57a33960064951dd3957ecdaf9f930db6657e979777fb510dcec3f6cc2def6e4fd0148300d99e8159466b0f699b9a5b903e9dbe8e425bb2d6371f26cfc92ca36cfe267f00fa0315b2aebecbfdb85393685e0d05bf4909d9b80fe858db790829e994ddc800d53fd9040ac2aaa9e2ac8a271064a2bb4d69fd367b154c3e5fa846f3b439fb0063f800a5e30d0372e1aaf4b38d5acb9c3a6b12e43797cf02a9684260a5f0010087d15832f307fc66d16a1d1194e83801b9d39052a5c806005d4821427b4e9100572aefd233682241fa14962b15e2651c8d796926bc3f800eb5d9efbb2066af00bdbaf93d8600cafd1d66b3002d069fa1c66eacadd1f0607e057e643825962100bde49ecaa18ef667f93a090fe13018bfb8a090463afd0e1b77acd0abf74bda00df47eb93e8bae7152b8dad7a6f18dfa4836ef7f82804882afee94344962060005947e2f69d40887fe00dcc73cb651dddca0d3f48d4e6333207e870dcb7508300af741bb0b0ed8109fb5c4fbecf7cc2f94542fd436d602034483fa1865a8a0a00538179045caa043bf8069f1f9348874b516f2ac1e6b74fd284ba89fc2601e700e904051c335fd2c0c7d80f1059ae75b664fe004760d08d16f08905504a3199002cc550259c45bff598cb511c199a189a9a9c9c98987e9706bd20043500b4a50000f1963db7ffe003ad2dbc9c733622da86f75a19dd1d9ef7f4071e1a2b4dee005c8855ca7b3353ac60f6c058e0574441d877c3f212a1857738968a3666a00600ff494f02f7e86198abc67b1066c7066f1bb93f958e4344e509dbce9303fe260079487b244bb13eb2eff29c6fe49b07271da6c965774bf80ccfd50fe0b0c095002d653866349626559cd1d485cea56e80e213aeb24377bf878a2855fe0e029400c602a91f6196ab0ef65398406d620d7e3802d57bf8980a5462bd024e5b70bd00779cd3c93fe004029927e679209ffc3000be205a3f82c0623104940e83538000f46f95beade295a3a21ee6a0b91069cf949dd4a2a1db6bc1168de7d758208a00bb109d9a386afe4cc08213f438712d20bbaa554c430bf883ecfb8b9845f25e0098a4de2c7e949cd81fe1200f3f7fdcceefed1399dd828196fd0e34bed919430008456ade9035be84cb9e3f46acd186a0b05fa36637900ea7ec613c131095f000674fc4747006ae8f46a918d04180921b2c1b2a6fd3ec63f4921eadcfff058c0051e5412964df4cca800fc37f9182ea68eb9c0fe6301289dffa8911ef82ff41004cb4ffe82190db011ef69477f40edef57bcd3fec5a07b6002087b91cd28de100fd1b1f209f0f5fa0cc93e1a607f455cd657f2d4fe1f0c04ffa0c668b7ca8250033f5e24695d0f84ec267ed69826731e9a18c10887f900121f89a28fe05037600364e51d3847521d2c96f0391363fd34c45a094f7ba8ca3f4a0bf437f09007700fc7e9ef7c4d14ff0401376cba08299ec2c21722dec6338ee44f8b65b2ffebf00c4e04dff098077fc7ea3d7c812e15fe8f25f50fdff13f33fbfe27e67f4f4b900ca51fe83327d801ae6c9409d2204135e691cfc097c537315099fe00710ca5200fe537f454e319fe8310e88fd1938c660000f080cac8e6dedceecac467fbbe70018cf1fec296d8cb3c5854359020e1d34fa1a87f802f1d361a2f74be0068e0300c69d81d32fd206ab5a3ac57988880460bf3d3006617367b35d4c35b3b375f60026dc6cd4d96aef3acb6ff203f85bfa3cca5fbf89f96dfd32652f1fdffcb6fe00c0a24e63a34fe060e8cd7ca506963b761e5c968bbef13062e7f4a58fe8bc1200383f4691594817c81011bfe85a65daf11c949f925d9084c23b49a111e47531000a77f5ef901f55fe282e37f84c03cfeff2e37fa88b8d4742fd0e4cfbf7bc1200c92dcc5076875062473eaf7e9e062f57693fa4699f7f8e08044bf818a2be49005fdd6951a921fa0ec9ac5020c6d5a27f4752eeb1dc48988435d3d48377c814009e094e86717dd82bec40166e901a8e16e7e8325e188afe1d0105605e5c71c000260e49be59fefaed9ec8370a06e7021c28cd003e756002000be2120c1352ce00113cf6ba57f80c004a3830153c294af8ae6955d07776ab690e565ba6fbc79b008de3a5dff272038c8877e80acbb2156b5a8203d24fcd152376f6c09640fd19009c6382790061ba9500181f0b243fa0897a7e0b4bd25229a4531beea794f0fe001faf2f0a5b6f8ed3659d2ff8ceb0500025d5c139000fe036b746a101cdc44000ff80c0040afd0469ca79b54d6c9df80dafcd3a864f92bf4d19d83be4291fdf00e573ff7f95cffa80dc2480ff438cf39a71cb324c9a3671a1b2a3cff000b82a00f6b7e5bc5110a35fa68679cc28b6b94351d96ff48e7b9799fe8699ded95ab700ef1f082fd010807eee1285d416299c4e68302347fa2ce69f09b862b93f4284001767e8731bbd58d4089eed2d5ba24e5f63f77fb47004a44867b1fd5f9c717f00a1e968c19f00f84827abc630bfc560e7992930551299c8f3f4912d180c7e8600b1d0c851a70724240615c354208e2454294391f45abbdfe5edd90098bf42d200d1801ab004a6aec0bce9c45714329c449ea7a36f9ba71305cccff7f8903fdf00e240fea00e8f225fd091d1e5c719753df3654baa97d02fe220a46bdd29239e0083fd05b4ae5937c5161bd1beba58e62341a5baa02988322c3bb1dbb090698f007a337c21738ff15ed2bfc260717f7fed2bfbd33e3e16940d4e1c588dd55ada00165c4cdace5d0e105113195dd88c8e1e110c959dd8d356509c930c5892105200de3f62c84dc450fbcb67a504dbb3a087b89d657c0908b8d25536f47ca2db2f0096ffa46e584b984da513e9f38ea1d017d5a96200af54cf56894668a6337bae00def8e06552b272f7e90ceb454005fd0a1c8cbfc06c13dff1dbc3ef59e73d7600f71990779ac9888c1db8ae7e8f1112c19fe0b010a932e533f7c3ff0f61d73d00802bc8b5f2917a0119ec72bf47e15778d7e870e4ebda4f85919467e22c65af00dd3007ebf3d82379bbcefd2264122f60d080c5053b50603282729b284136d8002307181818da22f913af91ba8649b15fa76c6c4bfc79380061f0b9040623fa000b3af1414448e532c35c527996d46247ab2fabb965dd6b081f5fece522a4340082199b7bb02048d113d9efd6c60d81d299ffc753d5c1bde8f4295f08001fa2002c7b195a5167590ab3d688cdbe37342182c8cfd5838afc1337f9ea4ccb8fd20004f0e6668489a65404b538a24b6d88acb4ab1947755d98ae1676d476d4404600dea492abe01aa4e87bc168792d7b8a271b310bc76f4f7c3813b781c7a869cd00e9cb3ffa4b221083bf4312f2697ca7b88caf7ebf629c4f576510e7ca76ed34000d52e1efea3b9cc1fe13016ff87a5f1b7fd202c009ee601fb6f738148ad93a0046606a577b83a97eb48958bf001c0f3380a0bda540c47610adeb8e584eb56c0032391c22a07e43e1aad4c3d30e44371f55fc017514ecb41f3ff115b39002df00a1ac76e7f452740bfeaeb1e3ca1fd0b9ca48080f3b29d8560adfdbc2ae4603000dfc017b42717fbb771d06b652efebf3e7ee401afe0a092806a2f65034dc4a00b210ee59add463a21fc44a933f49db9b2bf8744d7a124fe0b010807325136b000ca31e09ab534401a30c2cf06cb846a2c10a6507b5d72c5d7999ca1d1471e30063e175214d5d272da02e1910a13f43504c37f098077fe186cdb127a2783e1500a8d161e3a74ed45e9798ac2e7fe1ddb7007cd4bf41a72ca7f808080ff7fe7200ca7e8c4e594eafd639cb297f970aa602dcb3672797942ab32e1be7975185d6004839731677fe0238c41f364dfd0125909fe408a49fe3d00fffc711bed3a6950058c2a3d3f6732d1e8158f5e831dbee17eb14f9ce03b157c8c29050bfa0333000dd94e18357f40518f57f00663c5e52933f5dcebd55239352a241bb232e0b84002c9f0e25d7fc0199b040da62a8fdd2237a1e0f4955be24cbb7e150bd8c23f300aef47d49b3869154593714f1fcc53c8e27683475712800bfcae14ed0eb63b100f51e4583adbb43f9f9820865e7e904e5948011fd097c9f9057003281c147ee00a75bd8ed0e2feb298e5f05390383293c7faba11113f410f396fe848d5d4fe0003b1a4e4193a8fbc2a329e88afedb730c5dc1c3b244c7bf9eac69fd1f5519a80027be2dbd4fdc8f9481b8808e5974478fe66dda9c6239d3da0c065bd1d771e8008c66538be7d59c86889a45ae8c9a0ea6b3e5ed3502d46f2a36df4d448176db007fc01cef867e91c309743fd0a1ad6b5fdd284abe939c357be5174d3c7f404f00db7a6a48d395c7fc28adcfe82d0e2bfe06a5af05f7f429f34303d0904a78d300408fd0b27bf1760dd3f064c6cdfd43443853fec20bc8d3537fd0c1791a72720067fc0d76d4d057e829a185d467945bf821596fe9a99e003cd98f746e71a04700f9648afe2789f3f84c03bfe40878010085bf4266ff08751c10ddc15182f501005a1018978de147d2ebae4fec1ad5b157b440ddfe006b99f202a28a265121fa00106f185132a1d6d47443722f1e0b3593cbf8b1016fe13038bfbfd016fde89b00fc2a67266686ca0e288c6ee88ae98c2a0c6b0ceb494dea6a6ee84b2c48e82b002d6c87084aae2a6a89aee62a2abfb1649608807d4eec5af554f34143bd84920029d3691c2fcede218d602748800055edd1802858aa1fa845709563734c9c2200459b9d043d3c39b8aff801e16abc14e4e42f772b939fd206e84ff08265fa0c00fa9099b62539f3b36e038193dc63a124d7e1c024f18eae9216bfc55b1c0072000fdf834d1fe0ad8fc02f9036825fd0e197ed43f8cb605cbb7868d3bbfc0031007760a435c6b5b1476637ee70cbf6fe13038bf7fc65fb7eff8cbf6fd6495d5a00b1fa1698cb8017250425b96ded61001fa4c14cbf4044a849eb7bf0d344ad1700e938bf01070f1b66083b2afd1317e03fc0e02b3317e432ff09c635fc16037700f09825693925ec53d66e3f2c33cfbb37e4e3eef134e16275368df1cde8dc3900ad76391cc9bc8dde6f15b1e0e2967b392795116c1b13c4670ee603ea12fecc0083efee04d29fa9696053f5445f808126ff0f003e8bfc3c00fdcff0f007e81f00c3c00fddff0f007e85fc3c02fdb7f0f00fe7bfc3c00f9e7f0f003e77fc3c0000f9d7f0f003f67fc3c01fc4ff0f00bf07fc3c03ffdff0f013ff5fc3c05fc0ff000f01bffe0cb840fe1803fc63f87801fd7fe1e00ff5bf87805fd2fe1e01ff6700f87809ffd1e1830204b1fa3c2f2078bf87801f6afe1e007dbff87803f69fe100e007f9ff87803f67fe1e007dbbf87803fdffe1e077c8ff8781ff9bfe1e087e0057f8780bf0cfe1e097c73f87827f94fe1e0a7c6ff8782bf8efe1e0b7c53f8700801f1afe1e00fc57f8780ff07fe1e007c1bf87809f8dfe1e00fc17f8780df800bfe1e03fe3303e1e823f418d3c8d3ca23c9b83086e0f936cef83c4c63bac9900c2213ce61feadbbe6ef87a0ffe0601ee0a53780f06afc881bd3b4481ad6e82003a1f337338cb3ff96f3d2f901dcfd074afc4c2b528a4e983687d10ee60fe40003c74eda4c73a1c7b942dfaf81369348229fcdf8f15cdd5728487639fc131c100c0ac8b94b46bb6ea13942366e9ae2f7f6fc23f9375d5f0cf1648a90b4ce5320049d0877eff85dfae381c6f2d12af7160ec203372d3915962ee7770a531e21b00fbc48669df230dbfdce7aa2f9d3b4df0c5e3ec0267f9012d47e0f893f8141d00d0927c094c5c0a4462bb59cd1dc2ab13af8ec4a5b1a5ed59694de28f2aa263003ca3fd805346e3ba12c6c1ffd0186d28091004634a75a552f91501f07e4ffa0012966f805a0ca65011c0e712d98e68fc4df67ba473bc04bf4812cdf2cfe82800d43182753094d852ec611cbdc15615701c1420e44db0cf180517fd35399c06000cef39c01fc0b631ff0205760a0981fbacc47b7f415cd947e83ccf4a251565009c48369592d0a47d32135aa87782051ba4fd2e40549fc260217eff9f71afda0006b6a47e1dfa106aeceda5bc817d3531416999119b99b825c5ec91a5117f48004d5d98291107e831abb31ba694ac9d72eecd8e8b46e2d94abd756fc2a993570046c7fd82516e6a6a505f80b33469b9123163644af942a8d937de182e577b2f004719331033df9fa594466bf84c0e2fdff516e7fbd1320555cc5398d29bd65b00ce519d1419de5992d6968c9c559c90940e4cd5110e50915a4e119055d6965d00cc4e52cc553f730a88c98b098b23331b1191b1c323332331ab219b21833331009b31c331b9b9ab09a193198199bb2b0b31bb23330b219b1b09999b11b31991008191c1c9cb09931b11a1830feceba46a49a74ea102103a643d483d3540b0e2009a83e2bd888462f314466ab24a7ffe003f0763dc00a179b45758c2bf6948fc005069c2173ad7b57eaa908abb8a1bd8057afaee245ff88175ddc81eafd0635c00f3d62d29fc00f9022903a99b369af2ee17bb6a96e2c52930f6931fe943943a00fe1200eff47a3d757f0fb840387b1450e72b2d88f33b2a1ec3bc1214141a2700fe02a508bdf5cdd62b2522a6d45611641f2b4089ad3b70e15af78529bdfe00007f776de66d926a0e0aaa7dbb6c4287edc74eb7a7f80d48c36fd0a17ec6050f00c1295aef0f75a71252591eaa14233f7d2f4e40e64433fa853d7fbf81c056fd001798675fc160377ec9b893f04fdff677d5fbfecefabf7fd9df57effb3beafd00ff677d5fbfecefabf60a7aff417e85cb820037422949741b8f36994132c7f300b3a40c9b9931d5709e59f94e1175c146064b49682049d6f17833220b45bfa700080b90244ffa3051f7f8797133fd44e6160fa1fc7b3ce217e8e2d794012df600fe19f2d049fa6e624c0ac7fd6ce77f3a221ce3fc5603fff098481fa3ea337b00f42d27ad00d45cca26074a1966d023baa47b985ab95f395a3c2135f97f13ce002bfc2601dfea11c8190168fe0b02900beb5253e10d9caf67798eb57a175055004880cd582682a48ff53cfe09ff0900c5fbc414f7e846ff83020f95943bb2b7007f849675642719e4f153c22a87003f8669fe27083ff84c03bfd4295d01fc1c00051dcca4c6177c8a9051ff3a73323296162c1c9c2ddca3a7f138147fc2601d00ff218567444dfc140a4050392ca09fbecf6d5ca0c8b4e3f8dc0ba8cedb012a00c455e7e942b172fe1300f3f87ff4929489577ca0490dbbcc5920a96ad4268b0098727d3a78758d10d47321ed33e2dcefe3e4833f4a57107189b9a1c1b9a9c100afe97495809307c6acd384e1c43e3b36a39c039487a31f988f04f34ff6b1a8001a1044af91c66f7265193c8ae69f590e0bd79fe4edc4e49cd5ee5a90a30e2b00aecbe541665433fd2370fdffa1631fc808748e524c23a2b57688446ab5c93d00cf8a929545905137dbf5750de67e823c22bfd0c325e5fa283102ff50d89f7200a7e8724075fd1418857fb868a1139db3f8380e942ae01344692f9297448f9b00803647efd01997ece1da9ffd88074af9afe854b3488caf94fc0697ad131400005159da91634be44e756ea7915fff334e3f0c5eadbc2dd0007e82a9bc4fd0c90066cdad1789e72d180beadc0d2304ab94fd29950834ebfac04bbc897f429ee600e81a9bcca2f55e5d41777d4b425524da4a32b305f6ee5a5237eff8f097fdff001e12ffa80d5f5cbbf435efe2f344f4f9dbc4c4849120ec907f00eb9611bf5c008e2785fabed7874f7f42cc7f8047d4a7133647c1d47d62c765bf763ac4204000d50c6d063fe92204ca6247fe0e0cc512dca452853f1f61a7cfaec6034eab4800c124924ffbfc331feff0cc7f8fc331a029fd0d324ac2f89d6865bb904fa8f500560703aff6b1f5cb1d2e1fa5051b07f84803bfd433aca8c403fa1d1a7d644d00a876a674d32ea6697294f51d5207e713f5fdbfff126d5fc260887fa5a51ec700e663edc5a64f1b94ad34310c62192be295019eb234eda444f1ed19b26a652d007fd7cc7acb481b023c740dbf0cb04482a50ef427e76c0d7218868769de0418009f343a40798b254c0861be0561f6e0e3ec9980c30148ce139f5f3f44cf464900bfa026f34593414be3f48e1b49027e87169128dae1bd963de7579aaa0ad4e600215d982750212effd23735488e19fa142c573f40551104a572a71ed9677ab400d492ebc1fd193d18108f7c1e07e8acb3ed06a94d74f43000fd0a4918c1dfa100d1a90999ba074262ad11840717b0b43f5ab21922681ff5215d937f0980b7fc003dd8adb7f10762b729c94ce7fcc51965ced9730e43bcb8753ba8782aa3dec800d5a49aae800a93c8df88e5d1c187d0cf76c480c5c55855d4f0485c6e95aa6b008f243375fa47b0b0ffa46c1b083bf4384d1af88fdb91c58ff447efe5018cc900022133e704c89cfe9cc4d7483c002f83f11fd0d8dd71f454e53fa17683d66500cdbd6a3999104dba64b233fa3a7b16d804ff8380a4191b61d9d901cbe18ea40068080ad740fb82875e57fe390290c3f411a8a80a7e8623c5cb194147195bfe00389282e4d4df938f01517180585fc36fd5b6a2a1fe4059ab2316276977436c006e6aa0db3c8087c7708026d7b459a7b532dec4a327ac21a3f81aaecaa8d19c00a01dce12aa8361bdc7c2d755698e9e3575bf22a754d26bac95e416061d919000f553b0d2e94266b815928703ed56d4dc93d93ff4fe01d952324daeb92c47200071a225b0ddcc61e49939f5e8ea070fd739c5c005012f3d990668361fb9348700910f302350c23819fe593997825cd198250e677b330e1c051b049e363bb4900037d6dc0ee337d529850a582d7a1f073aa53211ba1a2dd7be1aa340ac28f2cf0030074f673906f2ec04adede4339aefdc4b2038d61c9b3909fd66fbcc4ad30900f59c22eeab8af42cb0f8951f1956f1098341bbae6b292053ed9bae43c9c26d005f156bf4d4d0518825094600082600fe892d9769cdd2671b71e717924671e7001b71bfe0ceedff84c1fcfd3f5ba2c103c7a8b5f80e4a60f7a52f95c0e8a9fe009c5c6290ebcb446dcdee76ed76d32a25da9b0b822d4a2fe1c931aa073dfdaa00f9ecf383a6ba289a3e9e51f608e399b9a0860cf6c47b6ed637517482f398140004d463630428f3f2f5b951cd060a411d8ba3044709c7c19c1c2c2980fbe00a002a8f7702d5cdb3606e66b21cdce7e86ab5e0a5aaf9526d7d397c3f6a87ca63000e7bcf06ee0bf94631d533900d41be7fc00c41b561c88c2802faceb2b61794001eb14dc042b6255f58ab5bd9abaac7abfd5fdd429b2bfc82968705869a2a2b00f9c7328ea040c59cc99fc19497299a9704b815389c80a6958e6c7ac7ce9ec0006258f5f2ec61dcb45f8822738df1b3dd903661381333fd835780d39d4009e70048e83a6978c6cdbfcf9110f2211dcc49f4c755ee5daef1c7749c7f18037ffe000a117b88120cc40906210cfe113176d34db71e71c937abf448cf61ff1903bf00fe3e5a0b5a11a3a8321f082a579e4ba811e06e13c7b4b9cae02ce598b10d0b00a0c536560d3efe041a485bf43863946d77e0ebaf161516f50181b4361099bf0051564448fe9d4c201b0c6afdef7e703279f8343a149e9dcb84a9545f5127b9005a3917ee8e975411d67ff3f437720a9610f4cf1e40bbdb90ebccf986bff80b00f9cc3103135c4fd9355bf40584c0442a01aeb76f22f37e809a2e064dccbc220048d7730a2e77f3acf25cb619182cde61857e146d990deb61bfd318efcc7b28009fa5970ede8d1e68b9a65a7b96d1b7a9cf041a57fc8e3dbff0980b7fc3c0b20059fe905387e0d7836cd3e8f25b20351a343b40dd5284b217b55ba51a990285006f9939e15921af3b962334eba2ba81248f2f34766ca88d6f72d97a175924b50032014337d8ffcfd27374ebfc1846e5d8861837d011579b609f99cf8243aca200ebf69daff238249fc2602dff1f824940d9b15cbe3d36295e1cee155d9b156100b98e8621e969df17b19d38016669ca94d10684ea95def3f7f1d865158d223c0028b670724d918ecb67dbcfee3bf8aed8e5fa60c2a40f162535461a55cf9fdb00a1be444c04a16a8d501dadd352ff50d237b9f8dff0691c540dfdbe649c391a00e25488d8b1b3be23721cee23dfa3c1bf03f4398520caca0607f398bec2b55400bf6630e6b36cfcca8f278531ff143259fc2601e7f0fa4c16b5626e0a2e02590021f161b9cd4be38964969497fa6c881ce3ed0f744a3ecbe0dfcccc961c9b9a00981998181b9c9a1c7f16b25994949b9963890baa50769534b621e379bea25c003be205a508e46a239b25f76caaeb6097d393944a51cdb218dee12f64cd9424002ecea3aed7e4492a0db9941fe765fa471a85bf4323d8c9f534a3ef6fab73f200b43e4d118e98c55aa77c124312bd0fee2b03b024fd0e18cb765ccb0e37fd5200d17599ec79375ae2cb5935a4223fa88f6d548bf82c15307a12094e82fdfa5b00c6d1adb951fdb9ff2dc478f8f0ea105fd5b421170ffa7c8422ff479379d1df00f8f3485434c3fefceb2f6d46a1e27a7a1d7335f450b3d12b96aeb151baebcb00dd575827f387cdd405456cc46e875825108c6ba69a65ef2e9a77713a7e95870076f78f4a923e132683193205fc462e4ff07851c288640c60526227fe5b0fe3000ed27e0a21f7e3e13fa881cb888497f4398b7b8f431fe36954c7ee4ce2d14800249a4d9250acf0607ebd26d14fd2071185e5fa02bfb19685c05132366217db0014beb892f2aafb4b94b1865a22bb7f25bb08eb4b11cfddcb09b1fcd66a15d7001be0d0356fe1edc99ccce224fed434bfc05e716787c693ffa461f09c9ff43900826d7688e39df56fd52fedb42461a3db23757448fc517e8f2c2932afe0e48b00edcd4743805d54bb144a52d34a05c766baad42567f49568ec157f060e71a72008fa5aaadd6e33f70de34e70b22110a470e10d07fc53032ff098079fc3ecccb001c72ead472c936ce7b6bdd21da779bf3bf19ed42dfa8a057d81b58ddb3786f00f0fba8823fc8f0329a181b9c1b989c1a9b1b7e96b117a2603fa97d891e4b890019060161397af8d516aa4ff015c2067f45bb48e2b4f8068caf0204096d5cd40086e82f62e3922d5f7b57186fd57a392f09cf6929401ad4116e0a70e7e9289a000bfd0c8f84b3d35f79ef85e2c6d3aa0676e863e2677ea4731fa02acefff891009d62dfd0e5eae2b9ac824f0a7fac905ac7ca0ee60f24f5a1968961fb3735200099bf5823bf59b32309c1a99b17eba8f95c020cfd7d8efd7fc7a07e7f039d0500d5fa168fcac1491fa51c5f2fef1add9dd6d3e5a88038b08eaaa693b8877fc5000208d100429d069189e0001720349fa44f3b96c3fdf42107fe2272f9fe1faa0003fcc46e51fe1a5caefe130523f465b321ff028295fc39c1a05bd6cfe9f865000c2ffd0e60e237cc464282ee465ebbddd2cf33fe8c14f8f29c87bfabcc1c47009ccbf439e30bf610b5a92239a6cec454958540f50409f90c702f7f62475fc20065fa1c8d7be668f2a3448eb4aff8d4568ed725662031f1a9b23f89f683fe130000eff4f85fe40e4dc32b2a1f689da6699e6c5438cf1e9a9e8a2d09a9b6089800d454cd739fcc0db0b54129d93893ce3200fbb94ed25ec9b7a131545d0a814000fdfc345212428e7d5c7f01924067fa1c95b08e6bdd476fdcf796e445e2f71900f603f0a5ab4f0dbf4742f6bf099ff07024d7f80907e0706e320e5c36bfc0170018c48d4b402f75527e94488d2fe1300eff87b7aafd1f28470389de9eb046e40059b6c06562a8606f5ef29200e05b7d8a8e99539975cf508899d32211902d0800f795c0fa93ff7483d5d64f53a08899939b6a2af19d684ab417147fa08b059800d3f839c34b80e477af243c0a8e641dba852b1da3c5e77e0d4fd24327e46bfc001cd100557bcef7d501f2a80869654248fdcc677909119fe9c2603d59ebfd100031ef40a2f1329def8721dd8b8cb1bbc743afd5c992233aae29719fd05f304900b3500f7f0060a563c1f07a8777e13d7127d25033f67cc9e78da428364d8e6a0041f6d7fc57f307f0981c5fdfff307ef4cbd75466770763536354d3648676d300165795138736d41396357755762554b6775347334594d536770756656767af00dcd593a8c8c270ca6c626aca726c60cccc62c8c2c872606a6ac8706ecc6a6200646ac86872ccc2c6c662c86e6268cc726272c468c66472686ccc646a7268ca00c4ca6c6bfd3df300c66bdb6bfe159e437039ce936eae7ecf7582d04571a56800c778835f4f5a8e004886f5f7931d61e6793159ffb93fc8cb718f17490839f500fa06306ad18517158fe918ab9ee737fe0e2333a34703eb4f9d185f75f7c410007033ebb817369967fb16d6638fe0e03a401ddffb8fe8972a6241251c58313400a3cda30da2ff716401393ff0581d4058d5529a35384117225b146c1b1e7577000e3060c744b2acffa2a360acd175bf66393ee393ecef6ff876a03030d40fe200bac9bf84c081fd1e7e5f457fac4c9f639ce7f838214c5c2702f6ed75031cc7005efea0ca206eb43d6b61dfec56094f3f839596a094ea65f3dc69b9e53ae6ba002c52d1324de742e0fe43565813f431edd28272ebca16610352c1d67575d2da00990f4ed42f3151b944307ec153dfe98a8e04499f76b10427df3ed5b37301820064140b4fe00c5ae737dfc0100a95eb48c201ff8ac97dfe13038bf7fe87fa7e00f450ff451556a537854323670377475587937514263593370747362414c6570085569377774784d43795142714655634efd8a149927b90846833a029a0ec2b00f1bab9e787305d17195c607fbce8757f1eda0c396e32ba0c24f0ea9d00752c002705bbe5229de5d2ca9d57860aa63fc503a3f1a7d8a9c7fa49172a10bf438600aa0a498a560888808a97a09f90d4645873bc8b0e0637ec197bf89d1dd1211900f85081d22d1334f3e8953353e591d66a9220454a43abaadf25fd2c54113fc20060717f7f8817fbd21c8fdade1a104d5d0c9d4d919b5a1a9e5acd12de11190d005d93995a9b5ada4cd59a8d9dd5d6149ad695d658968cffa2840be754c64e4400d777145a8644b194443715365304b0cc2e86149ec7c859ab60d5252f347933008850e7b7710890b824dd1ff93a5a2906ed13bf92bc5c7b130f679cfd2371c7001ce93fc1c5bfe60186b044787e80c8c914f7a89ebd4bb08fb8afcb790fdc570064a89dfa1c949e622f655a17d010947f10a7ed7cc7819bd028e9dd3f49d3d20033411e51d861ca870aaf6449996b9836645b97e820d2f64efe0e3332837fec0006423825ce2476e3761a48d778b59710c3fb1568359fe0e5a0ff404f065aba0029a8a3beedd5347468c34f1d9dc9708767e9404d07fe1200eff879683fd1f600745038bc05a1571d5766ae86e939db8a22eb60d8061deb1cbd34309b1c597800ef025a0ef9117455703e49df7d78dd134e5aadfa02c0fec39bbc8f3a342989003ac7c88faeb120bf411f83db0fe87314a3c9c468e153f548314dd0e4b5c88d003ce0a3e6b317fd28adb0ffc2601e7eff938d6fda491890d3fc1c102a032a5d00488946058b1a4a0ab7ad67068913a4debff14040bfc2601e7f7f840bfb466e0029da5b3f439379d3c6b4459a4a196503b02132a6aa66d8ebc09a635feb0a6f003a14dffdff1a6ddc5ce83319274be0e5daa5814d461d0f14904e6d44586fe900479fa028deb95ba58b32ec0dab1719c56aeb77bbd12d7888985f145735238100b7ad9e03ca0a261ef699a787f55d379d31baad28a3a3bb36bca1aa1ca73a3500b22ba2341b1c1a25bba8ad38bcb2bd2ca1213a9c373a2419262a3438fe9da70053e0a4f644f48317768777639fdd84de740404edfc1c2b93139d879eaea8d8001a6f64e40fe018b0fc9ef57cd7f140ae5fc2601e7f7f8ef1fb443ed5999e3f0083b07bb2baa4d90bae60817629d34fb4e984712784e7ccfe43c1ee0a0603f40032519bf9ca79af203e08b6170b3291a08ca930b52abb26a68bca77ac26a541007f000a7c70368eedcc0c13f9fe02d0973158fcd2fd4b9ab6d33fc1c0770943003d125f5b102ee03479d01a9527a296eccdcd7f21e2d4cf03d1fa1c68c845d300bb0293cf543650ebfe9b87a8a1b6812782c77f510d190f1407e85c97d311e30094c1daa72eb73b036def6e1287967695e40d197a58fd7c163bab66aaa20ad6009c2c3db8971bba20d62fd54f9c400c68dbac70fb18b2f308a4ffb802bfdedb004c5e3942baecc66c619b543f330c4317e2b07e7a0046cbc285a812d36b602d0049534840029ecb8e1b97744f520e364e2af229f358db09b7499fde2f52bf8e00a3f491cb0d17fe873e36f28c8e2d1ccd89ea420ac2057f642fcd456b3c8fd40030b45ffc0e02b7e8bd1d6afe0b01bbf7fc2d17feffb961afdff72c35fbfee50086bf7fdcb0d7effb961afdff72c35fa2ee586a88bff430cea4c94a092c63ad0017ea88474e6ef54c715ea3b29a8bc6c97f147649fc2601e7e9005451f9c2c40069d92312b7de4cbcdf5243c9bbe03fe5e7dd1e7280fe00ccc443ef41dfe20f00fcf9fb35fc51d92191c1a9c9c98999a19187f16f64871f203d822776a844240033bea9a0e0f9ca22a10fd6217fa029e40c27886acdf34606a088c69c95462d00cb91d6eb576ec1b59a9c8d805ec064e4ccbf3b9b8dcfef983307f4ccd09f8800a0d0c46cced37d83a5392bb176e25f2da8527e92d900f5bfd0b62a35e54128008ba8f6b92fb2720919cbd4170ea69329e4796833fa86292ba182ff4286631300d6fca70ec34267870f154d5c1fbded1d75f9578814abf7e8ad8ec6011c0daa00a8fd482e2ebf204447dfa14976b409613e52e2dfa49fb4272fb168392d181500ee6d232d20fc8ff5ea544e1b91fec7d5ce0fe130483f5eeae707c37b7ec18800f96b15a7a096f33ddc3015f623640ca46215bcb9533de3d72f91b309be518f0025e722efb04c2ac4965ef0cd8bd949a7a72815e7000580fb7600d7f109965f002033b0303fa09280c20c14528e518f28150eca4de976aa1652fd65ac1dbcbc007b9eb3f4a5a5347f090079fc3e759bd0e16e40a2d92ac3ab1843a89614e4be0074db8b2c459ce60170e3946717e80b1bd704fd3e2459ffc4fc769b9b1c991b009a1998191a7f1771da3d1ac1e6dd9179982e3d36fc21ee80b72f8deb5d89e200b5a04fb1ea5d02a85d261572f303ec6e926682505b9b2c19ab49cfa68d2ba2003742d1dc776c2907cdd989fa44bd3500ff4352c2a3e315b2d7252f5fa66107006695c03329b741693ae7eb05898416fd0b34487e72128b6b68592f3639a404005e9074b63910a3341378713fa50f4dcbf84c03cfdff88ca7fb471eb69886bf00438d202fb524f321407af67e363bea0f02ae8d9b11c25c5feff948cdfdff290019bfa8060af09ff424682fd2c7ced309385e47027b8db7d6f494bd8b8b0516007f414f12e5043a0cf4f5cbcc7a84f6314e439527e44b44d62d7cf7698b4ccc00f809e9d6cffa59220fbf8480e2feffae57f7a4f152b8bb33b299b932b931ab00a528b8bc1bb420b43118a2a6b2a3a7359a26b82a2cbc2bac28b721a32cb1bb0099a57f45572b8aec76566eced2036198ea2dd1d9a1c7d34c811cd8b1cdf87c00fdef705d522dd28371fe0216d66e8cca256980aac05576238107233c49352b004fdc1085a666e3b9a8e9fd22b060635fa1c96bfa255eec512d51427559a06a00b4a1583b4eabf80073086c5fd1e7d195fa1e6895bf4a5f4c9fe91853e5b4fe0013018bf4a5f4d9ff1180c56bfa246834ff4a58ca0fe889a0d3fe1300eff50a008a5efe880c435c10a6e808e911cbc361d18f3f77352e964ce1c5bfd201886b001353fa4348ffff43ccffb7e94b1800fe230747f41093cd0eff07019752a8dd00d3d167ee014c71a550b806ac71d2ba030dfc4006583b4ff188197fa52fac1700f88c29db7fd13186fdc4377b121caac10e8583255a65c72ea17e42f52ffa3d00259b7f4292c23412dd24a561f53eace917aaa74e43dd633dd24fe80b4c727c005950fd1d92cdbfa08a3fe3f430ce3a44bf162af19de0df25731f0f8120139c006608e8a9fea3c3785fe13016ff4fc28bebba41af45041b6475547eab05e08200f98864c08452e49f16dad798eefc7ea16adbb1920eb0baae98762caab406f500e3847a4b57c4d7f001d6f14d98c1d48a8f16b2325fa4b49543f83c1248231100066610e1e8c27fb51f604772796f9a0b4fd01a0619fc8c0927f0980b7fc7e0009256b6d3b34aaaee2bf02bb15339b097c8bfb536170e00d5d26ca15610f6d8007e80b15303f87b590582b5235b638e22ddc36c4b791603b4bb0ab5fe5874db002a4da822fde1cfd269975dfc180927c21ca4573433dd75cbb22823ff2252050099fe9347f238249fc2602dfe8f98439fd20779f2570188b2c0280e349f3663004a075de20bda9216c3b02facef32311f716adf9c7571be1da5dbcb793207ad009293d46a67b0d9db60d1e4d8a2771edcedf5579e41fa4e14f1ff83024938bb00fe0045100b7baa35f85250170298140d69473e393bf91c249fe13016ff8fc1002469ce2f69ca6685913b355543c731f6d84fb71b4454bb74f6276b3b17c7f300c6583fa60c5c7ff367026f08dc3920b469880a6f506ea386b2596ad2fc0830004857fd25a302649fa1c2f50fc6659cdfbc16e6c79368ff137c3f30db7f81410023f8a10cdfe1300f3fbfd0cdfda75158bfa1897c8f7b71177eddf1d427c6f20092d5704f82ac3aaf57f4a616bfff098079fdff3abff525da059fc1c102f7ef002bd6b591e960782207f4ec232d232362bf187f145da1fc2601e7f7fd2bbfb4008af1ad47f439f62f674d81fb7ae543d9fc70618e9ab87cce729226317e972800ad9fe13010bf7fd3fa7fed1d11130dfd0a6421a02062728c1bad9085c94a0400c0740c21c6740f345f6d0733dfe4ec3d2ff2f16859cfe80bb27340fe03e21c00b7f439f56e3bbec78b516fbf8250936a0cc95de7ecc1a812b47ee1961d4398000fd087d2e1defd34d82c292784bcabd43ef3f3ea87c020ffa7fc3472dfc1d0002fe84be772f422cbcda5d948cc627e7d5a33d90f181b940526fd1a0ac6005f0010c27fa149657649065003e4241219fd448b8c75a59c1c4ae3d7a7a73a3bf5008e2e3e2d10fe833e5f63a929466e7c764d41f45f8e69420afe63e4d487bcb1005adfe384a7c3e7ff83005b95ff017717c9f212e9e193b1f12c9a9f4eac40b80040ba7f1c80b73df0b445fc1205b8755005ad1bb26aa43b5838749b9c4e5a8b00c4e0c7f1c80b747fa085eb5bf82419cd7de94cb7fbd8c73d25eeb95781223e00d6492fe0129734bcd7ffc9c3f63fa5896dfff4188405607c80fe7e838c1b9e00fb494487f3b1828e4b1a549b8d3a8917723029f494496fe28db87f84c03cfe00ffc5bbf6806009f0977e84b256765141d0a600cd4613c39f60560bd04885d100ce844fdc27461ef7fa0c97b960a23f4058673ed513dcc4884be77f4440ff3300247c0b56d9e4d4a4a594fbb08d294c75407063d87a1c78026c80f90baff22e003c00127fa152b57867f43a562cabf746831a35067bcc160f633711b1fd5fae0033a4fe9b4ac59630640fd41958b26af3880a136c8da768697d3be5f257c7d100af41c8974ab2db9721b6e07363895e2fb0fbd7fa02d4fc694260b2adaf384b00aa92ad5f89818d2829b387adf39a237727ae7f48ed1248f7e8725ce233dd15009bccc2841ba7f8ad1b8cb8fd0171236ac2f6eebfa4aa1a68d3f82c14d2a0d9004139e4be3c08eb1f6df9486d26883fe0046b3a4b2c29a13f8d814d64dbfe420005347f0dd7bb3aa1dee2f4ba525e6370724f8da68883a7a8221ff803987e2f00d017d624167f783454afd97bd002b8e2ad02aaa1b291c18ed1fa02a16cb8ad001bf5cbc427e6cbcc76fb903fc80d975f0b3fa08f9b0ec20b4c1a51a01a1a9200c7ac404cf051a87095109f9ea90bf40acd517f99271fdcc4dc583adc003f410007b40fe84be71f02069d94b795b4f0e9e8d250fc527e4c646c40fb3016a4d700fd227a8d48047fa0ac78b40c434251e0fccdb7694284d9f732f4b908939180009bac08a3f880042fd043f621fa122f5c0093a46500e1c623f258ddca07ab3a00197eb4ee60016725343f474fd882f92fe86b182578c3a8975fc4c3f865beb600fab8211672f53e098afe3304b8818b16535fc003f414fdb97e86ca857ec30800ae23e0f47bd4ac6570d8d99855bb5d4546ffe23a6e503f82c04802595a949300ceac68aeb20267d3f66493f1861fb403c3ef13fd1e80abdfc1e021392ef32700046eabece9105968e4efc1a5f516fcf3fe8f3d21221fd0c62f8c709329c0de005385060edc598b64381c7b419294d99ecd63fa754b5beee9a6bca84a7860e600067632ff801341e4457bac481c0d85762f0a5e9ff53f1804063e38ff3f2d360008caa37c69739a973cdacf1181db8603e8c0fae0a68d1886610769d41a721f00398bb86cba7d8b85d9105ade583dcddd12dbbba51bdb4b2aa387b77a11b9090073f7fe99caa4bd2565d5a49c5c28afb2ebdb7124cbec48303177efd25a3782002ffa1cc619dc25ccb5036dc26232279f68ecf9c8c89cf36e6d3f8a2672fe130000f3fbfd5a4fda38d98c31fc1c1db6b0eec6c389740195bc05145741a1bd260047cc3ea7e8f335f353fd05b5eb01df6e35f060601edfa2b6bd63f48cf7041200ff0280900cb494d9fa08c70a2ed311ec619a42345d7aff80014abd6da8076f00e2691137fd266c805fc2601d7f01c9f64dfa1268ecef8b6fa890358f251f02002e68d5432596aa7774e67fa0a4fb5ee659b5afd16da049942fd81dd96ed56b0015bc183f8af19e83195d00206b5d86fe2b93eff84c0e2feff93eff7a4d3dc200c262125b8aa2622b93736bca8a5221ca9a9a63aa42b3918b9191c3c25272820089b242c2335231a31a29c39ff4549f7fa02af91e2c1d42e913dc0c78f880d20018d56e0bf3587c373b0aac150e9822ba213f55d4b86116543da0ef5c4a76a8007e3b88587c991a036648769469f1831eef131a47f8864fb60fd0b637a40243000f2900e6719d802dbdc57f5d5d55659db8bcce7f3be1fa4e3e70ff84803afd00051c043fa12690597226515f08c503ea852ea33f12e5f6f5401a61a1e0de7f00f47665eeb3087e874a1d521150a6525ff0121a348c3d7eaa21a609968b7d9100758fea1dc35c6618fe0e01a1fd8ad4354fdff2a3c9e9b4e3babbf36e15d1100043f512e0c50e7e85ca23e533094e575184bc803e454419665a168670dd0a4f00484c1fd1f863f841fa1c9775c0e4761df91c9755cb38c074725144f935eadb00dabf8b9846fe13010bf7fce148fed22d4b2fe0f082d6abe32b4cc3d2e616a10084c59463f262deebf4bf4be13187f098085fdfe105fed1d28d6fd0b4c3ddfc000668a32b73b574ae5fce885b9765b2c55bc0dc8bae3727f121a28c445fc16200bb2b004a6770e98b39da2851761d99d90920e84043ae9aff7fe303fdff8c0f00ea0892b1fd0f183d18775d2352d03db47a167f53e633594b41dbce0f5fa4e30007a3f84c03bff0c33c2f673da3fb953736a033fb74fcd2c1992a4b8d1fe8f000c1e855fd06b4efbfe022872fdffb4efbfa3169df7b7f589319b5c06d163c060077646b2009d3447097c439b847e7769a92bd64d1bc91b85b804f9fe8fb1e8d000afe3e00fffc711bedc835ac95d531974e8fc7e2a181ea17eed03a8a73358a00bcdfe800d8976c90d40ce83d9ac9f4d607b25f170720b2e31d41701214895700b416bbf4c7154e66c2357039fa0237683c995f4ef01bf36a8453d836942ce200c6326a208ddbff405a153a3913c21eedc5584cf863d0b7daeeb99fac2489bf00e80a4d819da774a7a08e3bb86ae6a5ecd15dad9d5e1cfd2334d4e79fb3466f0007f47e5441fe9f4a8a3fd4735493f3fbcc67d8e991161dffc6561d435e34d0003b7fa3892ef8d405e59bfd696cde07de380537fc3202f8d7ae54fabd87eb0900aa49117ad458118ceda12c319e135f2cd8a92417e5fd3d354927bfd341d0fe008fa6876fd3e4d12dfc8e1d0fd7f720742d80e06ecc421fe32382f11501330b002c8fe1bb860883c2e74fffd688a570e3bb957fc32f4788a95e2ecd88a07f2f00874247f24f622f6f9aa3ebc9e2937f2c146ca2dbc5b7fa7302cd133f424cad0047a0b3e0faba638a4a65d6e6686413c1e95d1e2857e90b2841025d81ecfe0500010c2af9c251ff304aeca9e473e63d68c49643ea1604c2a85ff804dabfd9aa009cfd15fabe1e7ecd0c4c0c0dcccccdbf7d1571eff1f01f9fc0b17081b4157e00871902f0e26e91aaa3c898c2f7e3d530c024d9cba27751cfdce3205ffc26070017eff9902ffdff3205ffac55807d18e3f82c36a3a7afd15b67c3fa446f190100ea16e10180eb95bf80c004648304365f94d186506377ee5843bb7d55ac51b70059501d8d20e6fd2764f60665238cc0ee8b5fa26bf3bbf81c056662f0196fe10038107f82c06efe1305d3903f763c78fe0e9368339970fed6550eddee05b0c9000afdf5742111228b7e0c8933e9b93627eb6e2ab74131a40f3ed30cb05c210400bf6e6ad28701be2f4da8e843f4fc2ae2047eae2fdee079efe1d007c1863f8700803f9ffe1e00fc87f87807fa0fd1e63a2ce3fa3cc64dbf4798e6b057e8f31a00b60afd1e639ec15e7fc3c00ff97f0f003fe3fc3c0bfca7f0f003f45fc3c01f00d27f0f00bf47fc3c03fd2ff0f013f4ffc3c06ffe8f31c7607a6fe1e03fe5bf0087811f98fe1e04fe2ff87801f9bfe1e00fe6bf87805f8cfe1e01fe03f8780100f8dfe1e00fe2bf87805f86fe1e01fe47f87809f8ffe1e02fe1ff8780df93fe001e03fe0ff87811fc6fe1d117c179bf87815f89fe1e05fe07f87819fccfe1e0006fe0bf8781df84fe1e02ff9ff87821fc9fe1e08fe17f87825fc8fe1e09fe2300f87829fc7fe1e0aff37f8782dfcbc002f9050482c85afd0632477fc06c57820088dcca59afcd56003b33656682905b46aceb411316dbed4a39e73020b01adc006b80cfb1ccbbc60a667ae4e3d0c05c8262258f1dd3ff25ce13fc3f4048e5b000106d9b9d1f0e7e6d4a44ab8499fe87bceff0ca86ec4ed532db93dfe3206e0600353a722a16000ff3c59978413ff8f3302988a3fcf41545ff007082ff80713e00beecbfae20994bb72801fcf4263efb5bb7459453034968399321d9c4e8d6ce00c88269e009413f310deb16ab79f82daa22ff80b00f6a50a23bba492a989e1e00d10a916fbf4fcb4999f4ed5fd4f4ba43e9edf0c79c1a5afde642bd22fdc5720013ea77012a68cd7646ba45ad16743c0ce11927e80bb6c6836a9917730084860088bfddc9b6ecdc6166d14852a8fd3f25f7fc5258d2c9c18dbedb90665b0af60010a8d9ac3d252c925f61c73bf9c79c8cea222459310495eae34e573618d2ad00c187e40e9898d7cb6196929c3e103d8428497f7fc7e03fae029248d48a2eb8005f760271209684e26f551cd5f14ceafceee3b93e6cda73478ccbc98225583a00f65047686575641ef25d5c4867c7ac265d893e6fdedd01d104fea0130bfa45007f0718671953de4ba6e836dbd7888b45f1272d1bf5b7e9278800d2e4d563af00227dd18e151d3331f6e6a74f5b6afceb057caaaafab42b8f7be148316207df00d248fddc5ffa1c674b3431428b3de850ab0e7677d5bb2b2bb88bda9c48ff5100e3f777f0980b7fc3d76eff8f8acbd05a25692689e2b29550cac4f673f680e7003e24bf4062ece8b6dc90426663aaf7a25bba6bf160fbc457a48462345e7ccb00556b7cb8d46e6bdc2434e3822c7e487958b820f7e90a746d60fd061936bfa00081979875cd7fb289e4c67d203a1f21a608b0dc8b4633f5098d69310bff030000c4b7fa2d08e77f5356f127f0980c5fbbe41ccff412776a7e8499a2cfe03a48004072a509e4bc9df891a2a73077be2da7f290d7fdbf89a921fe1300ebf80f2200f28fd0b336a8166d284290f07a2ecb7b077e3280a72775d5d98148710bfe36007932f83b2afd084ed3e2eba80fe7b148c1f8573af7809b077490b7c9eb7fa200b388aff81655280f83a2efd096477fb5d9215d45363a298279a8190e3ffc0100a61ac2773efc9fe8db23bf5a3dfd1e4e85dfc4a08c4ab8a5ac34791caf8ef60062c5db54a8dd0b8c1cc6017c43267f04822ffc07e9c0848ae57e04232192bf00d05ea6d998cf7f1c2efd57f317a71f2027885fa0c617198aae52dc5936c48a00b08fed575242229b25111e0147fc04dcadfa516fbebf84c03cfe3b253ff50d005d20375ba7f59f388790c507b08361a46ec878a267f60dc34628055a94ed6300eef9279f8288fa0afcaacc053d5a1baa5c2278651cbf7176d16871a6a863bc00c2ff808080eb3f482cec5031e22fe8318eb5bb0a94aa4df07472a1490d9756006f7b0313fe0083e2a278ec402ff5f1c0d88874f68416ddd497e1963b27ac81009fa1dbe7869bbb70abcfa2875f0ee76f293c0189a6246b2f2ac1e5985752ea00e2f61ae917a9a2a5a12226fc59e2f62121e86580726d5bd1218b984a5e9f8700d5dc622d28226d7f006ff45a4e971ff7f4dcbac4523f7a484c9a8c3cb371b600ee69b97829c0edd4abb78c9af7de394db9ae44ab4274b33e50bc0e494a7d6d0057f1d3c9a7535a21893de03e9d49a69016d6088a9b76189a103fa4233a389000d3cc28faa25702179ef7071f05db6dd4ef150f4caeb0420be7ac3fa572f5cf00c05c18c54b838c9e7f8107991119e96dda93c3052fbdeaeaf8c72e174fbcbd0024465d1341d3d7590edb41aea2bef5b09a731bb2086ed1334ae640b7fa6ce0006c628c41190011843f84980c71c333fe03000334d37134d34ccffc3194cdfc00260fe7e9f8a49a1e929ee9b515a56973b4d6cea04bbcaa09dc631086e40fda0041b6bac9ae8e505b294e0a66615ef0d095a073c0c7c2151f4ba5610df53f5400f32c1c03a81b62860d09102b36835604898e3d18dc30bc107a377189360396001ce12f38e0ee7d367d62300f45e7b3836029db9b81cb10adae895fc32cdde100f6a92454cdbb096e15a5ab2f074f3bcb004ea14112a71eaf6482a6df05b46e0008e168c01718d2709c2f15740ba93ccfb756b36943b2ea39d63e691a5431140019e1a6622cae9e2ea1fe008fdfc0dc142d2a33e053d14ba4df75eee967a9b4006be5593b98791b0ad5dbbcf3d895fe52b070cf29a04458b8d703f802424b5700e709376e53e450f4f634388ba6ed58800dc3d59aa237a265cc225371b35d0a008895c7053eab858dcdd38160506594ae3f12deb10f5fe3006fffc141dd71c8002298611886209fa2222844dcdd34dc7337330c3ddc8cccc74d37f8f81dffd20007036209875bb9a3dbd58fea82c17c0bd06f2dd407d9d5023d9ce0e8a3331800c7d05b9c5637b36a9ba2eb3f45aceb72eeec71946b04c3d629ca80b42eebb70031d834bc2631970df3add5b540cca6f3363648678a14ed602bd2ac3e8982960009066271c9a82f5fc147cedfde30f874d1e83b213fe999b42608b580b06e7e00b4ff83e3090b102cc39e1a80bb1d38a124a1509622220c2c284b8b7799ce5400eb9745e8ad48f1fa022da31f6571f88323aa7bb3075ae3ff404bb397392be000baee8b7cabde7eb8c7b773cf0a380fcaa17eefde97e80d1a78e9f5601ad9f800025dd8bea46a4e763ef202b2cd5db574bf003d6dd3c0cd5e2b4938aa97e5060043201bbfc16fc49ec3e44778f6a5bc5a79982c8b715be7cf1cbd1d7193a3e30044ad54a0f3af17b39db5a4aa903943a2ad0a1afe3006fff8168738e5194c21000c4108862fd1213ba81555fc140007f1f077ffe3e971f82fe1f077ff41828c0067e8625c5ba0fe00e139a509ca6fbb34017358c3cab951509553f267f5e58400f67e9032b1f41850cb6e9a1e0e80f3e7e310e1f20f7b08024b84bd183e888f000c11a9496310ef65143b7a24f8ec4cb156e1cada83144f40993a1ca5fa0d3b00b8f90f95acb56b4cb1bfd25556fffa1262466ebc6515cf8b9b435f9836572a00e33da66f194f7d0035393f472ae5d5e9ffc7b5162ef2151f77f00fe10481b0002cf72b1410b8ef52d51236b0a9c64ec07fa468b9a08ff42e4bb21f49ca0b6e005ecbace9d0e6f1f4103bf0266bb7427a22b77e92a2799fd0b7b53a0a25fa0200d3c78a4025ceae31a2afa88e83bb3bff07d57e6d94393f4909abfff0780907002a49d1866283ff004694215862a4afc077ea759fc6802460a3853163af302300e4e2a9d56e49a0bbe5bf5b96ff1a012289b6caef0a9f07c13392115844a8fa00cd8b82cec1fc6806d77c011718908aecf33546a9db6a7ebc15127b6f7ff120002464dfc1c0b60b4b520830b090133b3b403cb6b6b00c32c63e197f1202d85100fc1c02451198e970577940679638b54191f30a87e796ba67f1a009086acdbb00c99356adc19eb2a3e78a8bb588faba285fc480ff14ff0701b45989aa29d5cd0059e5c27cfee61e5fdcbc01c6656bfc6802448dcae573f48997c42dbd28116c00207b638ac06137f11fcd40f5059fa175d079f56e50aab0d37e11eebee10fe20058aadca7b4cf41081dd3f47258e2ff053bdc803e38cc103711fa26c13a3f8100c056662fa8c4fe13f8c3f82c06efe137d8e1453f404b474c70ed1dca43d05c000bcb0d40559bf74c994488cba4af7a9436364b83f308e42fad0e0b44a60ec600a6e22316b72baedf3c2424dceee6de185deee58d4777f1fbbddfe167f3dcc700d8b270f4ff3adad231220fe00b4ac641d88da616b9bf49471387f028265fc2005141097f0f003e2ffc3a01f8d1c7f0f00be5bfc3c01f987f0f003e65fc3c0100ffb7f0f00be69fc3c07f82ff0f003e51fc3c01f95ff0e81be2f9dfc3c07f9c00ff0e807e302dfc3c09f9eff0f007e3ffc3c07f817f0f003e03fc3c04ff27f000f007e07fc3c06ff2ff0f01ffd5fc3c0afe87f0f02fff9fc3c0cfe9ff0f037f00a3fc3c0cf927f0f037ffc3c11f8c7f0f047e31fc3c19f8c7f0f05fe31f1fc300c14ff8ff0f04fff5fc3c16ff87f0f057e15fc3c18fff0f017e2ff3fc3c02ff00f0f817e1ffc3c04f887f0f017f61fc3a1ef8cd27f0f067e67fc3c27fa07f0f00027ffc3c2df8cd57f0f013f5dfc3c2bfa1ff0f01bf59fa091e408b7f4398a000d8fcae8e678163daa0d7d8fff000d0f7c716c4fbcff820bfa517d83bf84c0300cfdff382bbfb4620434c7f4392d6a43243cdb737c71e20316daad727c3c2d6003c320467ea225ad4fd0f620d9fa2929d73f511d934287f0705ae52f4102fae004ff58eedf2ca11b22ecfd39644d7fa035943ff89c2d7fe1300f3fbfc2d7fda003709ca4dfa155ef16d2d252f8ed94cfd051f0badac27dfaa7f3b781a780326007f57a160504817e85a4c1e0c0a24fd1660803fe24b13880b908c4fd6f5070b00fa26c1227f52e9b5bff0981f9fa3ec130bf8733215f4f12ff1d5f49ae2a7f9005bf66bf5caa6edff9f3e0080903fcf8e24901fb5f5045d69a32c5130a1772500f3b3fc04931bc7cb5c956eb2fb7ffa6ebe8aff84c263fd32a75affa414dc5f00f858357fdc3a6e2ffa615286ff87c15ffd3faa47ffb7f4e06ff87c563ff2b10006c7f130a07fb9f4feeffffc43f7fc40091ff150f0ffa894e06d081bf438aa00bfc4d4374a6c4c66e1a789a34ab2e1a4e0406b7235ff1444c7fc2601e7f0f600fa0a9fcbf131b16d5649e4e8997c7702cd8d254a5d6735f2779d4b2643dee9001bb64d27eef24e31d628436cbb01655a7d8c138d65ccb687ca3bd70c6769de00e092a1989efa0b5e7e92140b608fd0b76da223eb28f83d42f4d2dc5812ea2200a2974a57468d4fdeac03faf84fb40573f7353f801e2fa56a6a0ab6f790590100448f56f56bbbd78b70ed2c533017669c4559fdbf2723c8d00c6dd883a5be77001697846615160a709eb74a8fe3cf664a2c0e2e7225bfc00bdc2106da942a97009bbe805c3f6e8d0c8994f6680b8e7341d0ecdbebb421fc8fd96951ff91256100d0c3bf434be5ffe8a2cdfc7498683a4ce27a24bf07747af8bea65150208fda008806695a8d5e3bfd0541a66024ffa16c16380a34e650aa9de61eb3578f4ed300724f07d3c8dab5961a2e4ff454c01e7f02e381fa44600f00ea98bf8ad11dfe00130207f47a4d859f7eb0d87f8f88017fe0a05c3ae1a5224551400dba11d09c008fcdd5859812bd3f01c676ff560880e07a17e823b2b92218fd0e17eccca04200ead118ad8b447cf647072ffbbdf78d0b9effab6b3fca33f4f967f94a7f0f400080cdfbbeb3fc9cb64d52e0fcc19df5229b9c88f3279e0ebf123874f0c3926d0018d5ab145ca02049066ed83a9a0a6536af5cc472d1372debdabd729ccf8dd800a41750e97c1b5076ff48e562e8ffe87093c513b8bc4961387ad6749023b34f002f6a1fa3ede7a2fd4493a961041fa1e60d38c78c1b27c31afdf9fbdd7a4714005e5b1cd4eb97f4be2c0f7f090085fbfebac3ff68af7ee7e8898ed242fe005300ea74a40af2599398e0040e455686e9e295381ff60af4ed3423fe51369e9d3000446737668dec38945b2f86aaf7cfba360de6e5f90876915c7e95b6a78fe1300038bf7fedde87ef4a030231597977653368627037556a47316338375a6f476a00345842666a436554624b566b5a38396169336d676234fd8a2a14b41c5fa02a00b5a43a55d47aadf1463577007cee10bc42663c24958f43f8056d65dddd83c10042f8b50f9224f8f38787727827dfab21a96b8744d6fdcded281fe01c3ef600008b32dabf4ccc7693a7f005437f2b56a241dee67968a8b6cdee8ab89a61a29f00a8632ec603f428c612415b414a7de6791b2ebc1a0c78520ca7a073292278e100a4897eaed3689f86025fd0e5f49759b838b40c6582f99843af1a7d97ebafe900ea33fa4e4dc04f5f4cde8af403de6a3db067e1c2448d6a272a47ff811d7c2500fd0e7b32fdf719cd9065b21e9c0a47f826761d4988f717b9bfa912c89bf84c0005cfd1e9644d5dfb8f2c898cbf4dda7daf57b640603057e80c45ac0c3950eb00cfa43670b883f1f1c52fdde93c9b7eaa49e70d17c4f2f5dc1bb959b78accb000c53d350b349ff875a349dc270ae386c4bfc650fd231afc7ce4bfa1c2da903c0042b5792203b51493a243ec80875c6e7cfcbe77f7145b525112fe873ca81ff00011497659c95eec407017dacd58524297de2362a99fe94399e5fe1300f3f87d007a7cae69b8c0e7ce001e448e885c5ad241ed5f7c961dbf71fe9dd773b4a49a00867fd1f7d73817fa912af90d4d8c8e0dce0dcdcc7f4b5ba327afbcd566785400657bf37edc93f20bc87b663c2498a8ea53016cbc88a2994b54da7af306384c00cbfdc859bfa602de7a8eaa177013dce6b28690d97948a989798588e7e92c070036fd0c5efe22ffa0333f142776d8ab21995dc107f4064205f565d6f6e45dfe0093981cafe1300eff4fcc0e5164f90795440b72c9b9f1465a906f10b160910500c9cb444eafc4f7f8085b582e3c9ed53123c4d65f54ed8c24fe861df7438f8a0015ea019de89a6ee2586289b2aad9237bf80ee4a28fd0e475a891f814e45d36003c7762e0e423cbbd3d273b4c6ffa38b7f988360bc67882b31f73d78d8b978600f3588b7a5e506e113c873de8e1327703a5bb7f491bf0095fe873e3c3573c0a00e854369078ea7d297d92a929c2becfba42fd7a673c1fa40374000e032294f800198299d2147e4a8c6efa20bfda62c6e9158b27d7406b69b737d2e9bc3fcc2c003cd74b32fdf88d711717ac63f406eead24962fb85372faa628f4a03eda44ff00119de469fa1cc62fac54216ee470c55238d13e865d29f01f7558b296bf9122009939fe0e01a3353284f15c9d75971d949cdaab8e6fafadb6665bf91229962300afd0e78128a5348d2bb901c44f2d63bad2e559a558e036b9bdfb3767e9623f0058028931a1a98989b3132fefa2a8dffe3e03f3f41ed6ed9dff07157b00b50400a660c4e8eb58171ed9a361caf98b87f95ffc4fe5ca4ea75fa4ac3d69158ced006a8f732e5c3121ab5fe87a4b6602897e94de03fe001e4790f2c5d5f209c65a0074a3acfe8af4a648a7f49ec35b7e860a6328e9e584b0d6f997a52971a4c579008312e05eb1c54fd44b28f883fa1f543c3e9d8fd7828f27d3df42697dfc5cee000d040edb7f90d33f0368fd0b7a38a055b1528a3342ca0217b170db4f3ba57900822a772aa83bf67fb9c14a97f84c0e2fdff0a54bfbfe14a97f5882952a07e80063d53077bc943fa8de6067c020518c89bb03b96fc5caa61243c0fd1dc5c5ac000a9fc1c2961cc981ff0018b8159b10daea748d04d3da4b0e8fee650bfc4c7f005363d131d4da041cd9e619123c3c789b767d62a93ff0219f4b1fc1c67d17de00e327529c0697f09369f9f00ce0e6ad393d12ff1419f5fc2601e7f0fc9442c50043302faffe1b9e49fe6fc7014930ac57211651bb36abeb39408fc70e47fabf00a3f5cc8ff510dab71b9c9b9c199a9c9b1c9c1b199b7e968a11ba9608ab619600b57d4c37857d7c728d2869c831aaf4912274f2d90717ac8c2d29170bc09c83003cdf4fbe7d809f1a4312d2ffa4da4e7617840a46da23bd470d2fe00f3107c600ff4c9e8ae597e24bcd221c2d11c0a5ffc4e94313904dd2d1b7f1323e7b448d007491c998fa5f0891731cdfa02a172483668b8c57000be0f18ff439ee199d06004fa854faa11b997dadd17e13b454513ec48c7f0a0029fa0d88b5d93f88c03f00fefb28f4cd98c194c0dff4106a31987ef89cebdfe3d03f3f4222b2cb57f0700054b1f1f1107ad48a653b194b18496b839514fd6f7fb387448df7f585ef6cb30019189c1c187efab0c08fe3d03f3f81cca36efe0e1ddac5d69ca5ed117cff880027d035bbc1a1d8fe9952cbf8997618dcbc97d63cf6af3b3e3bc37a706ce77f00d013247b73d3fc068f3b87e874abdbbd96475b02450a2ab70cfb3cee3ff24200e969a516fd6098d60ebfa18fb9f722513ef08a21bb364d3045812c00aeba5c00b139f84717f8a07fafe1300f3f87ec9d59e6416a0ea15afa573c610d96484d00c07c77b9f39bfadf013f83ef7a8ef7215ffd6648cc06e60606c686472606c6003fc5ca7a8b66017ca0819395de5f13c088f3e3f4ad0dd0e0886fc8b7a5ba9600e85c4442caa49ce55dd7fe5700cd7538db053f3fff8085cb375518051e0c2700002db65ac03eef7f48cd7ff8101c0c47e873d434fd14619d3fc4fb84fe97b000ceafeffdc27f61cc015557e86182b7028c6394333a718e587f22d77c8261950092326b5f530ef2e6fe142ea3f422f219ff08975ffc26021ff0fe0a4ff9a89900df441a20cff1cdb70c91dc8974adc8b61eb556e3e5828b7e3d91127fc3f91b0012ff230768686666646464686e626dfa5d444b585cf80313c622e10f6d17a3002e3808c88c8ff838137ecd9e2206561cdebe25750a8651978d9b8d4b733da300101526478e8af0d4221f039400b3edbf800d7b2f2e3c5d90fe222ebf0a06ab00f438c5aefe943b1fffd12316bbfa3eec7e3f84c05bfd42316ba0593037ffc10073fe2504ca3f556fff001cffd064297de312c9ef8984790833202a19fe28f1005486fd0533781720509d9b769fa3a9ea48278557f8ff628fd3e5e312c5febe0062b6fe1304dbfda9e4d8adff3e6396d8b1826d593e08d0db967ec54bde075600825f7e91a61317d930e4708b436743d718cd30310ded96360aa3084b2519f5008bda57bcdfa1b17bb1e452228a5085ebecfe223d078a0717f839c3d206439200e364aae110206922c4a9613f52cb3cbd1fd28621f9fc2401dff0f387bfc3e900990e74302ac65eded2aa4681ba59c22f44fdef5f96875ec4e4fe44258209bb00120b74b3cda769e961b784fad3d4e42849f753c238abc6c369b5e53425e6520062e466467f029057b9fc1c415fe8a55edffe27fcd7f4caaf6cff7ffe6bfd08004159424c202ea85cf7f01800951060e501f299a9d0097e64d76975f6547c0000dd242d251de9c7bfe2ad8e01e07c928981dedfd315a1fbfc260317f1c7138300b548fbfbffc3541c0ec22798fa427f90091eff87c093fd062be09532b81fa000cb1d53ca8251a166a127058fa87b093f68c36261cd7821ed388bf510dce50f007e8725228dbc041242d846d5c1bd40326e65ae38c144f3e0ffd24b7d344f08000af96fabfc060026fff02472da01f6e2e2a5300cd9beb85a37dfa02138fcf00092d48183f70c4b19fd937e828b2ae08319094facfa8784f5d3f86b097db5c800ad13a6020fe005c180487f4dc48176b7ea13157b223625bb60af444ce562bb007954a7b862780d6e2d90efc5fe000255151dc394065023152d0a17851db1db00c22ef4506d9e03370abb6e28b256dcbe62d6427ee0a0dbda37f48e1bd90dfe008749933d8499349d483017ebaf935eecd392db3f88ed78afe2837dbf84c03c00feff172bf68de3870ffe86d5027f022ecc9190c6ccf32882d74005f24d30530088493fd5c52e97fa166001f965220899dd0f846d8472ac1d097cb4346766b3008bd7ffa0af616d53b08fe7bf6a8e4de947e97caa26e95eb5566b504d9cbd49008cb3e6ad600cbafe2bbd87f84c0e2feffbd87fba2f614e69696768754c534a0057795446746233414d5156703958717765434378626677664a4175356e7a6600554b35fd8b9c6ca6d6ffe0242281303122d001571b3e7c63fee0140c073c41005498df32cc46a2d0113134d06e304729c9f88a1cf3233502bca9d78fd01b69003543f7b1fc01f4dd410e5b1b00127467e900f549f85a29fd097921bfa50ba4000ffc7939262dbe659fee34fc05f10059fa1b5590368e0b6cf7e661138084010047cc9aecfdb0f428cb7f57cc2e8977f068acc3e3d0c90b96e87edcffe02287002fa28a16c4083135a34fd5fc9b2ccffa1ac322cf1be908b1e1f8223d432d1b00aa268dd911ceaa2aff5bd8645c9eca21ffb582d1edcb2d6c3c13715de06087008657e8f0b18cfd0faa719fa52c333bf48c82b95f7e89a5446fd2979561fc46000315de07e890b29543006abae1b9ce6ab459beb63f72ef7ec17b7ffd1e125100a803bfc1c0211270bda1bd3b44f5ee3ad1d42c62efc4c3b8cbbdff0e808502001ffa1cc2fc82dff17628c5a5fa5fe32e7ab1a26bf2fce25b133f472dbcaea900e0e5af9d90fab25467b359dc5c6f5983b0ed08434938b50620a3be48e7e922005656fd0a491b705a8b9285ee85c2ab627a2553941a5f76fcd6415b14aae57f00a4e94dabf84c03bfd4321950048bfa1cc240ff451bbe07f13b23ffa64ddc6b00fbfcb28fe832ca305e7f42e4a1bad414a4ec21c46d2389f22c8e807a152f3900e7c57bb100f7f13aee0a4054f2ef62153235837da3c13eace64ab1c0dfc19f00037f0980b7fc84bb800a24100fe85a4fba01604b94a4f4bbc5cc40ec4b82cd0075edd756a55d52e15f43fd28c4bdbfc2601e7f0f537219fac15a551fb57b8700cc2d60edfe1febe16068dd5ec9636043fcaba307edbb083b22a499c72e02300018aa3385088184045bbe39a8fd7cb96d2e4033d4428afdb5fc4224e17f48d000495177e8749232aec14e20d15acbd466dbe4b16be31bbcd3c3bb65fdc592460046ffa162a30c861e5317a80c55deba59183b6a40abca79826b30b617f49d7a00e3ff098075fc07c05e2410205ff0500ca0c2b0bfa5954a0e13f68aa941ff8f00b9a6c029f6ad4f2319df051cdd720471fa0ebc9a3bbb81c0004101768d68bf00d2cd637fc3f2eafe89ce03bfd4b991ddfa6712b73f56aa9cf7f0980ddaaa7300a06c08714cccc22918c6753e12cbc90508bfa4754c0dfc43f41581b0c3944a003a24babd28017e80bb8e1cba6a88df2de37f630ec3e5dfd6047637f202762300fc0a040c1244a2c3dee58f3e7b14cfa4d0efd4a9293681843d6c17ebeda9450035346166663534636336393462383735653832303038656330356163643830006537646134356263353533393161353931663265346531663939336461343300fd215c82472606260cc7064607070c266c2ca62cc6a70666e646aca72c26a600ec8cacc666e6c6ac27268c4c8ccc26e70c46668c2667268c8c6c263fa094f000298cc8dcc7e0ebf41c559fcc084a782dd10a47102a388c4ee7a4b37038bfb3005eb2b6fe8d5d134f8e12cfd1e79a9bfb8229f97f406e9057e82968a058830d00bba094e7798097e7171b2922bd953180ac8c3bd3421b3b940aff0143d4af57001e0bbc54722fae18f2450d2e509b85c05c62ff80a903ff829955494697d2ff00091a750967e5d3d324648137f21d77f13b7f80903dafc4a3e27f801fca040400549dc8d52cfd158960db1fc0d400818000008a1763d3069599c943e3ccb4d800f9dfd8ec0d793ffe8a44b0d86fe03e55c07f81803577a1542eebd006a99e8200068bf3e60741be73ccadff1318c17e82c4b72fe0700d65bf43183819c7e91b00070305780a9d214f27c94d09f7e869699b8a9b6b5fae88062cf5246d0c800c00fd0460e07031ffa1ec1244112b630344693bf4058370a963d29d6573689eed000c7e93a539421fd234a728501c6f75f5dd70d1a4bcb06b744ae33970220649000e0bbec966ecdd29fc06049301d7e8525394fe033d73f4a529ca7f119df38500fa085f55c7e1047868c03f810004fd0465dea5c678c3a520764ac322d15931002ea18fb32ea903ffa6e5f55eaff909979de676d74968ca9bb806315f14fe62009e6738a3cc74ae1c405b70bcea3eee937f01d741506f7b302a7e21a75e9e8b009b31a6080734dd87327f9a38497b9f2fe0068d79f4ff48a9dacef41291b42000702ecec41845fdb7f8a3190a53be5716db2ed9bb7bf801a86f66ee8ca5a05f003c2faeb9c80b902a479fbd3ff1970ee8bd040c13ec4b4ffaea321bfc35a4a900fc261dd807fae3fd6c0683f4fad1a77faf8428bf87d72c10fe4b1db3fcc9fc00cc81febefd3af8412ffd057924e078f3b280ec188d3807fd56727b1a2fda9800b29d694954901fe2a0d08693051b282fd0656491fa08f869ff42731645b27400a6b9f1b26cc596bfa9887eed6caeeca9f7e80bb44f3e0ffe5f56d123f4373100644a9cea761afc858978e465e0249403f0e24304fbfeaea6e4601c411fd0510057c203a6c9294a044ae8672baaf14d3e43d645f86a108f74def72918959ae900fa031e96617cede4450cbe99e1ea85101be2e20153c606e3de1c002e40613d0014bb537f8ddc46fe07011bf862f6a4d9547b9b92fabfe2be0aff84c0c435330034333532fd5842b31fc3e1f78a7e9f2936314fe13034ff83df6b7afd05929500bfa0b99767c47252e43459045fb6f865dced56d31b7327751d21184ff4a2520034ff098079fbff45d2bf68a8ba5430a4203cfc63cc205b7a960413cf0ca09600c909e0bd057e4456c366eeea6e940f52283487eb1e6695f901212afd062df9007a1fa035f413f412c5627e8a48f4dfd469fda3fc2602dfe8f8aec0fe1fc45c009f0bf29804e74a1b4b745f3b1b8f63b58bf8001ff0833ea0c1fa8ab3e0f1a900a40a61a1575bcfe00b05064d86afc9cc93f1bafe3b7ac3b75935777d7f3e020037f69aaf818dc8bf49061ee08fe850b11afe030ece625c3ba619aca539cc9f00624be3420b542f07d9f3f8a03b3fe1300f3fbfc3b3fda3a35fc29fc161020f007b4a36d9ff004c32a03a1e6fc36202af5fd241fc01312e3598f6bdf7e8e968000980fd0b61d036d05287d839c5b0c995d7ef946814dce99b93a9993d02ffab00ef1770d3f42cb8ab2635ca4372a628d5316b2acc832f605782ff0083113037002a7ffa87285540988a2101a7493b7f80c004f4fd04255bac95f26a1daec8b700b4c26b917c2c79f941a31268bfbfe87a9ff7fd0f53fea0d7e7ffd0b1639a0200c9f928348f6cc835908f092368e044f7a8b59a6573ef33faf817838dae686a003ef79d00c98c60e2e6163bff4057db800166ce0625908900e45b1391f5c92700edf9972d959372e9a9baa278bcac8a0b45aca60c9f065a032f085058b5ee830094a1cc0ad96fab762d2cbfd901214db1cb59fe0146fcf3575b1b599ee059b800560e17dcb648f783f48e4b677e87666338799f88d98eae9ee53b2f30fa43040077f4c4dcc83fd5eaf5788cc1fa1d583426dff961a4b1d72d4f40fc33343aa1007c7902dcfb7f4898c1a208afe84b0de27f630dfab835ca16bfdda7a5f9ea7800b5776f6ca0fe153c40970cffe2a1ee7ff41511fe7e8625b8b288c41a51155700cfd018043da9f0589e1837389130fa3bfd0549340ad222d3e5bb3509272d7600045247dcbdbfcbac3cf66e4555fbedbf7871e017e961a92efe13038bfbfe92006fee8a49955c9e5152d359145e11d64cd69212d54c5458d45551d519d8d61e001b9bdb55d512d9dc591b9b521a94d51d1bbf62c802c435249ca746174d42de0028552a63febe5b47f00df5ec2aafaef0b68fb0b2482528ea8ac655a4b348240035eb28df5acabe407d38e3a73ce24617d82b28e20c44ffc01838b67e90962800124fe09111e470f6f4259e3d733ca3655288127263a64d90bf456172e438a8002c9a76dd0a5ff03888e4dfc1222390851d41ad3103dc41563cbf9ab1513fcb00be99107f415add3249ea898be338e7badac6fec52e110af4491e47ebe184c7009b673265572d113dfc56223ff0981c5fdff6b77ef485cd06944475567347260024771503565344662783841746e354e7a70447037737550784a6f326f61625002436953fd8b6def9c3516ae8039cb41c4f23814d3e3564aed515d26c326d0f0064df6c65315b70cd20c8b48590252d530747f4993f62362887a2c76bdf554300aa129dca87f15e79b2a7fa425db81813ff4385c0d2763ee4322f3ff80b0f9b007aebf803d4c518a36594fed9ff2fd2717035fc2601d7e82a5a3bfd042ece8c004edfa2b5f49bf55cbb3a014c087c6d97fe82e623804eb1694322f35cef407000da8fe00d74204d810c575544ccec63627f89fb86fe1300eff87bb86ff1f6aa0030dc23de8928118a8092194e3384cb1172e5ccbdd7bb3def7b0bd3505fa74700b96d08ac5283a4c52bd1a552e65c550cc5e2a6973c6f5780b52f0e42da445c0075cf3757c3d01c20310b7e7417e0cca432a64c7a5897e80b92b6361e74d1a5003c27f4d0c445e6ff3b1c317e90b0eadfd10cc4a7418a42854ea0129d4e4b0300de0bcc390ac3c15d79fc3b65cd08dfe85c9678615294b8a10e6d8abcee1fca002a80c302675fcc03511b2dfe16b1d993f58a1976007e89d5bb99aade45ab0d000e6f59a93f3a1e27fa75533b84320fd34cb48a3085b25f5bd29b01ecceba23006238d702ab7720d9fa89158c7f43d2d9cbb45527b523281b281c95c7571b7200eeafba99aff6351264bfa165d8f8bb0a5120258a14573008f4fe4a4e80022900e3f196fb98b3f8984bbff017ffb0a3a441fdfa6139e54f8fa3a6a36f4a06f6006e07c59410361fe82e58cc064b3c94da44a1ed127691decb80d8a6072e8b790057fa6ab69463c24babd1e18c5f17fe007bd2e73ba97db8815d21de3602e1e700f42e36f18e30d6f0463080ff1745ba020001d69643ac99f07cad0c1e2e728a00502fc981f43a733bfa2b1b7a10bfc14e3c003c9f2080403fa0e5c28422531200b281f551a543556e32fd9c003a35afba30e9bbfa0b746ae241fe4c29f9401300e5d0c83b4bff146e9a3523abeb68e54c91804fb10362841fe2b275ff84c0e200feffdd1bf7a32841b3292d2b30a431a5bc282cbc1c2319a5ab992b2a19ab3900382a392320b3aaa133a438b221b8a337b123b4237ec5d7382d964725f0019e006ed81937c1c86fd0187629921e26c2e1b5f48dc5999bee9f998204a423fe0200172e7133cd5c12e20b55255c6b11b6a0d5c14bf2ad77d2c94fe11ae2223bf100fe21387c63f426ad9470b8a816c3caae3f5c160bc86727bb0a1dd6acdffe910055b28040219fe09111e22dc80829f5bb913078acf39259d71012e3f3ff60cf00ce1c96ddfa14fc0d8fc996b7e80a800d75a819107c66c9d482af358c1b721100aeefb6eef6fe2cee3bf8480e2feffee3bfba04475654556b503262513455690065444a5579636e475457676f527048684e4736327547726d4d79376d754d6e0047fd8b3772dcbe2cd18867e19da169a84d23236e87cea0c66152fe92c60a9b00401361eb0a34ebadc394bfa038b0c6efd1fc9223ccfe7aeb7ba0eb3ab8f6c300b41cefd3b20b603ea403f4818e3601011efe8324cfc51e4942590f2a23555d00e01d1b3fb7e100763a268917858fd2f2c9edfc240217effb5c11fda1c688340047ffc0c304d4e64a7a95534bfe7f009e0c27413885246415fc02fdcabd70ec0067ea161a3afe07015bf45ea9aaff0580ddfb27868e8c7f7fdcb58feffb96b100fdff72d63fbfee5ac7f7fdcb58feffb96b1fd7e72d63f0b70375fc0c6f9631001ca2242cdb0aa8e9dd3d33d34a9c237cdb584a48e4e7f132f89343886c72460080fe047880e321c2fb11dd083635405f1400dfa1ac926c489f2b485531975a00f6bca3495ed78b948252208bf49d4a847f098077fa82a46d804de0805fff410059105092401ca794d8c65bc350228bc64774898f07e8089e49567bdd2bfe1600da67f4059988ff8529a812acac75703fc24fdfb735f848961894e071d0002d00604b9134d44e16733ebd7f6e697cb15b5fc289ddc37f82212d487fc11331e00020003fe02ea84858cb23950f6981bd3d1bb11cc36da83de9cfbff131b9400c000557f0580707735fa277116bf44edf0900c2ff843053393d771b2ad2c8f8490034e9ce8b3f803d2ce32dc070f72dfe1550b7f82f6d202f9076b8202c48406000423d4fe0300138a0c0d285652e2e2c1c9d4571ff199d795849c298d64426c5009b7f8509e68703297345d9a000b90724fd097c0a1c636cc0ddd2e7ac557c01006c054953bd7b61574706ee28c61eabdfc1002b973de9ff09d553fc16037ff000993cea0018c681ebc1c4266dcc6191da69dd15a1eabac8269792149440a9620085a51fa038212895c741720c5da23b3f2ca043f3f4053d77e36783dba8a44a0087ac6c741f2b963a7e7f1f13ce81fe16c971e0edc0b61d21472516de6356d900ca0e9fdaeee47b0030fe07279c0bbbf84c0fffe0585fff814132ff12160d40007f0f003f09fc3c01fcf7f0f00bf39fc3c03fd17f0e813e4d37fc3a00f9250700f0e803e4afbfc3c01fd47f0f00bf3bfc3c00fcbff0f00fe9ffc3c00fa77f0f0001fe73fc3c01fb57f0f013eeffc3c00fd0ff0f00ff35fc3c04fcc7f0f017f2005fc3c13fadff0f023f4dfc3c08f9e7f0f02bffc3e0cfa67f0f013f05fc3c0500fc1ff0f02fef3fc3c07fbfff0f03ff33fc3c09fc3ff0f047f27fc3c0bfb9ff000f033f65fc3c14fcb7f0f057f23fc3c0ffdc7f0f033f4bfc3c16fc5ff0f05f00f99fc3c18fff0f037e4b79fc3c1afcfff0f05bffc3e19fff0f88ff87fc3c1e00fff0f043e4b6dfa08883440ff4205778f6ff82147b945e172e7b17784cef3900ca30860b26de17566d3a3fdf4ed96c4c466727272c26864706468646ac271f00a0b4b9c58984ccc0c9898d9184b62b8f16381abe6e2ec84d1cc774f14a2c1600e719a9a5d6135be7545425fb7e87fd2dc4bdfc2608e7fcf9dfa264a66ba563003225d3bee8d257544e0d1def098e2de6086b2b6dcf85fe753005e05c8d7ecb000d61e80f6007900158488d146ece1972b780675dbe3e69a659e8f57bf4fc5b000e971603aed2f180e492fce013991b9864e95ab870795d76c87f007b30754600a049f3ac46ec05a38acde2e1c75d1d1f3b05acd49e128005fa032db3c21c6f009ffe6d55c21f2ed17f4fe4d59ff1e843ffb0d5c0102bf8383a51551438765500db3a15cc52f3177a933698348e08efe7c0e959598dd90e4c588c194dce198d0019594c98598c0d4e0c8cd84dce1958998d990da84ad820b246bd9bbbe4f84c00ec0eb5f848879c543a6155bf40488a5da792c415d627d7f25874bfc2608e7f004f874ab03552e18fb1bcb5bab0d5564d97076e2540826c1c571e0d5315b32d00e42a250449893bcc30416602828ea09fb5eb3016f8fe83bb41b40f3b04b2dc00ee73b2731ffa7e891de2a1c2abd026e66e1fd270b4256a6972a282e91b3456007a182a4cdf8f28e42befc744ec56ffc04ecf01afad1c3cf1c4a5baadd82b5e0035026d825fa02cd25ae9e3547a3f2fb7f4fd123bff1e843ffd081d283d40df00e85a57d087e09422948b260d5576a9cf3cb521e16a2c4526886469fd42cda9007fc0e02b7e8b91d1cfe0b01bbf64c8e8e07feffcb337fdff9666ffbff2ccdf00f7fe599bfeffcb337fdff9666ffb072ccdcc3f4392fbe1a2fbff977f57befc008f470ad4749ecd518964a7c7ea3d413efe13016ff4fc213631051f0a4af15300fa7e36a476dc53688dd3dd8b38f21a091373c74f5fd1b592f3a473e12fd1f00060f2bf80dfad343957757f809e8a409ac900477391e3d7c6f6663a7f48e31000103d4c0dc7f0711a23407b8370f47fc00c04a4af6eda3eac9c954d6283a93100ff2111a3fc0e02b7f0b91a3fc160377f4991a243fdfe468ff7f91a3fdfe46800ff7f91a3fdfe468ff7f91a3fcfe468fc30017e848c9fc6195334a819474d8d00b8e1840f036e8714c422a69fd4154a9ffa08ac21bf424644c055992ca6514b00254ce871c3abe2f541918bdf9fda66e06cdfebd3c902bdfd208381c25849f200092e3d0a1f68e85891b335c376a8fca58ee22f9d974bc29e95985388a8ba3200a9d1cbb7ffe0278b23445f135e391b5a5017c476d6a607c0bc843bcb9e7abf00d2167fe28037fa0c99f18e9e651e9e46f6b9c1708a579b16cd6355a15543aa00a056bf85779dfd05171a7fc09bcefe8258e1efd074c84b05922fd72e84774b002b86ee9a8bad03c02e75c3d3fa827253cebf81806101d4c09405820a0cdd5a001c14ef84891e2441c736c3aa40a6fd1b4d0d4f449fa10cfa91bd1d766745ba00eadf149a3eecb734952008841647f5719f523016fe83193d9d0e994600a5aa000ac564cc4edeb003d5551edbea31652d9fe410465ebf415f74c415a82ca1b200c08c6287e80b0a40672b3489aa80544f124a5484cdfd27708f9fa6893cede800d3f81407beb86943adc5626158362a93c931dfd01c771bb63813b36246e9fc00b1e4c80c3507c82017e833ef5004f0b7944594d54541bff7a2af5e2ead253400d1a18b79491afd835ab5b11314e7347d3dbc397e2679a4a50b86726fbfe02f0015c4161f37d673a5206fbe381fd2c53a9bfc240717f7fe6bdfbd01bbb55d8d000508d0c9cdc591618589394920d55cdce18551bd0d1dcd34ddd1bd99c0cd1d005dc1952d34c9c19d214bf62f44152bd70b09aa3f7a3503617a8e819ed1b3c400a655976cb50caf98179d4b9fc85cc0859903fa9f224039f2839e267f004f5200236f0cbc544c56063b5d6b50f3b991f9530c59fa426e17e18dff434677e5ab00d4e9c1995b08b72fe80aebaadf7189892e3d7faeacfd64d753f05033bfa163004278feb7f455faa47e9c66f8104b0fd21cdf03c22ffa0cd01c7bad250682f2005cc5bb3affc053795119f4009f3fe02173dcb6feffdc24e0e7f2053871fa0c00fba82418e535eb65e21dbf8068a21b8c90655da5bcd91e64e4b5baff18728f00be8864eb7f9d3d3c8c43fb06b73f8ef4e901b628d8fd5ccf7e5fa42367d3f400b16bebff0982b9fc7fa94ff9d9f38d9821a9f3fcfcb4d91aa30f021003fe020017bda5ee203c0056375ab5e6b306b11862f128820ac9c2da790c544e3196fa00e403f278c18c5e0f1c1bd5cf31b6ae63a08870d447a7ada6d5130afd209f0e008c075fa12fc6852b69ad32fd850c0fca6f22e36f18137690065563f505344300812f4100cffe83260debe709445f707e26a18547192820dcf01a05ad2712da00db4fd9bc733d1dfac03ac7cd594d8dcc998e7f7d4758fff1e81f9fa0cd9ab4001e1017c0388ff81000483011dff0130bd61755eec3a5e5560ad0aa40169833001da28e3831cff1397b5fe6c3dce036c2efd0a95c86055b152932dca5f575ab000a791415c8ae8b28d67e5f9ae46dfc2bc9b7e835c620fd647dab437eef5b22007f27d615ea8b3ac3359dd95d1af5fa017d1df539e58652c7e74a3b4144425000ebd798774712acd2fd98f85b656e26b517f97ca11ddcc49ae4d32130dfe18300aa5fe13038bf66b25e1903305edfe8fb0ba8affe37edec15275f7f79f843f5007c4c7e84fecc64bc31ba123ea6b10fd677dab40f5b0321080bb83c9ffc06000022ec1817370ca6dd6296ed7245636cb64338d08ce9ee674f22200ff0eb66ad001fc46d9aff0380adfc2ed9aff0580ddfd27203917f7fc80ffdff203ff7fc8000ffdff203ff7fc80ffdff203ff3f480ffc0c3d800a0837e84d6faa82824894d00380ae63cf3b32c705cb15438b3fd222682d8ac7ff7d6cb19c9c98b3329bb130019a1a991c999a1a329a321c32181a9b9ab0b21830981c9b1c1bb299b19c1c100b9cb11a189c30b09a989a321ab31c9a1bb29c1a9b333233337f2f80bffa229008488b82a53efc0c80b43073df651381c8f83f2688daf561a73f689c25048ff00af98adbf84c117ff6a793611ffcf98e5a462681cec9ca052943511dd04495e00503f3f404d39d59a5f740cc797204f5b02070d203e538cd33f0e5dd9a9664a00230ef9383a667662735cbd3615a66a39668d2002ffe91c908afd0b967360b2004dd28ebfa0211fb7c734a3bb37a4401141e7ae3ccb9050e5ebf4e4c4910de0007e82d0832fd0c65531aee8db99a1b0d4b8075e520fbe601e20adfc01a722aa0037ea232a9841fe0e01a081cd318679fbb0058a20f4adf4e5c8e4925c85bff900500683681e7ae8e21afdf21a21f10db059216c5820a5bfd436b59015fa0d2b0063a8f8ff45656c77e8d924f945fd0aaea25055fdd292fe45f57d8c22468e5a0074f8016d6aa2f051617fa2addc521809184e72a3fc201a487eb1fc14023b2100f4a27c05369544cf46d9532bb56726e81097e600fb7fe8f1d1272cfd0bae6c00361fa038d7b35ef4dbb80cb0965eb6faf7da3e33e1b3b499ca4ff48c8e0f300019fe87573aa474e29ac23538b51cc9f01b4f94946fe0067b14c0b776bf49870050768dc1f9a4bcd2ed53fb7fc33d639e15fa97ac48fe0017c50147e869919800a9be3f869ee11f05a665a0166f1ac941bd10c641fd27086a3fc2601dfea16400c44e737fd0b7972bbbf328139eebd81040b434c0e9af00797e717c8b6ebfe900fb88f0b450e03f43462385167d0065cad52ef899c6e9c0f34611dc9af3398400a2f404d42d50c154c90f6e88520b1ba2dd9f1b1424400dc44abe813000dfe8002c4d8cfd0b43ac40df4bb2844691e3976410c82bc6c8b85924f73c376891bc003fa2a847f011b8e6f3420bf4045d5f7f9888f5bf84c063fe3723f011b5433d004d67f86797e0467a62a72eefd203479e29fc3e049e0017c83417e86193f5cc00bd940104fbb39fd0d03aa0066dac66686d5afb237020fe166c381913fcec6b0030aff443fa0316c2b9a4ff4782ee0357f1034ddfc7cd07217e900b5e5ba9210014273b197e14d095be40ebd6c039cddef545371a53130fc15ef005c6f74f1800a8c5d639942e0952a1064ba748679fd015b211356c13153e9640a818895e36005bfeba64e70200fd5a5e70c09aa493b47fbff516abfc3559b9fc2218e7faf0008cc3f4f17aa344baec507fb58dd73f67d2ca0ff0f827ffe6430a2fe2c9277f0067d2dc0ff8f8c60bf94c2fffd047308411fa1cf4e1c60721a5ae65cf3aa0b900268dd4769d7b562ba72f3f539e9c3ff0980c5fbc6e6109a7f42d91b98151ce004a4259967f000e49f2de5c9de3c0802be301ccdff6e5408329fa26f72e61ca0046b6a3037f412f19b5705c8f2ff1eb4aa5bfe38042e90288189be6b672a39f00d01328e259ae609aff3aaa0b6e5ffc010b950de8a52a2dd46049844fb441a10047f9eaccbff5347e6e7f098287fe32a934fe05051bf47ecb1affafaaca58d8009c9a5919ff4e2e98987b53ab6b832b91732bc31b430b733b2fe8a07b62fd0b001a0856da329a58b8ed256d64f91aec13c95cca5d3598d2db063fc2b3ac017100d9fa6d7f24ceb07e1ffa1b82457db56ae581785a078675882706286be11e3f00800a26cd15fd1d70d71ce21fa1c5e70849820877c2e5392e3b2bc25e2ade1f0065deef386ff714d3948afe86ca070252ee64fdd9c775f2bec5c19cda61502500314b904fd3471f152d0b41c882adfc060c68fff06831b18f24d7ce678a5b4e0086eaf7fdecb78b8ed2f067ffa3e80b2087f83863190492a953cd8956b08551000e8e3da5f05279a2746fe4e18c7f84c062fee318c4208ff4398690e8781bd4002e8883b06dadeb727f80b3d0c36bee7ab17bbf4b9e30f7f098085fbfeeea5300f689dd4a7e86d5b3d3ea694a8e837200c6b09c8e7a73c6577f69b6979eac0e004fdc5a9d2e044ffa1d216ee82da34248bbbbfc12efc38830bb94b37e51fe3f003f4a36f4fff098079fbfeaa7bbf692feb0157e874a6b1a23c0f592b17433210045cd2cf7f9c591556aa02b3fd48afe81fc2602e7f0e84476fe9fb895fd00c000ccc3f4dd3f82a1125f94a891e63cc522f756f39449cab3a5f2b2a207fca3780056026b8ab21f681e96c6a85ebfa9b3ee327f00eca4bebb367619e47d464df20024a0b186d44463c7c1cdfa4669ad4abf438c94b61a54174d9f75870563bf9d007a6e81ece7f005c195a9d35fa4973204aff4398808d167c32bb956e8a72523001d7402fb9a657b1484f47e92e53ec2efe0e1e4ff452afee7f168f27fc26021007f7f8f27fb474bcdd88dbf43a4dff7e8a57ee2fe9abf3e3ff982fcf3664656003343333fef5bf3ff8f40fcfe081c24dbf4391d60ad2f813a15b678e5f1f1cf003d9099fc0001b13586ff14121ffc2601e7f7f921ffb462c9a884dff438d2ba0074b774d2f85bb7fa52184e1a7f0036d7e87f7be9db12ddfa8f62df3f84c05b00fd3f3dfbe56e0db29d00dc1e22b058370c0a08232b9dc50f748f8b16bd97d4006d2639e8bae6842c22448a417f6a1a45a7024a4c4b20de40e66cd177a6926b004538dbb840ba9fa462823ff43cc5f6d6276564f1a2e29557519e01d88a849800489af1ebfee298cd73afe0e4c511c0170fd3d4ae14167c434eda4f1826350b006cbf8073fafec403a4f3f83c0e9944968d0b3b7f1c4396d9e75ca1ae58076800b5bfec5074cf7f8394e80aeb59024d08abb8a1d24934a88a4673cb731efd01008a287fd87137c01ffe858e56f92944a1b5a403137b6a0f8471caab2e84e9d3001bc18d3fe27da8bfcbc1ac84f773ae9fc073962c7e879a53f5d4da6533b385006bbb275f593f7b9390cb9aaabfd444e184b3fc1c03470133f266b99560b9c000759d9a41f39497e80e0f7e2957fe4401a16bf8380d15e4f812beed13aee4e1003d2bbbc2a7e5f7a5dfe0001abc7f950068f383c61fb284e167c39874e562e900b1ee2da13c2efe4404e96ff8380d14c19ce7e6d60043578dee2f2636bb892200add2fadfd45348a9fc18034dd1c4a72bb2f1194e91d398ff57c907f8086f660064ec76a7ca9e53b7ab1c5aadd4db2c66b4669e5150006468a070ae02e392e100469bfc3091e1fc2601dfeaf2ad34416b6b1373ceea36b9ae97156a88c3116900b7b058df32d9e9e9787c7134cabb96915243ff010b972b4570b5369566e790006d824b69e735549fd7a21b2fb5a7177b820de8fe91c76965bfd0e2f483087e00fb91ec7faf6f3058ac7e7cbb59e44b3767e9fc88198af7f0703edaa5a6368f0082ef77e5042d091a53198465d80c3d9fc881cd327f0704be052f8fed1cd81f002e499ceec8b09a56932d05647bfc86201b0337e873da95b6d55052b8ef658400239573b9a81c94c7d2708ae1fe26a53da8d0761fe1a2947fc511c7d1eab63e00969b67fc04176bfa0828516ebf8390e10aac011058e332bab220c42ffae216004894e04dbffe2443840e0763f83958022278c9683f83fbec67643ba4f7fd5000c4c9c12adfe2831c3f84c03cfeff31c3fa8d580048203fd0bac34230d40128003c7ddcb6965023f48f306e78201b1962def72af728e0e764dea4e64353d40800c0cbb8a482e7854990ddfc06ac11ba91ba2feae4f3d0fd21d78800dfc6d381005fbe44a0cceaff8d3b9803778e838d033f481490d7f8f247089c6bf47cfd3300ff0f003e3ffc7b67293797e8f64fa846fd04ca6fe57fa172a8305b8d8252e2006dc17ea91790b03f419d28d083c049b1c65f36509b3a8b54628db900484a79005fdd01b9c5ac2354ce02e29000000253f8f91c4ff2c2242ff0fd1d1fa278ed004b000be18a08b3f82da7544aa209432d143c79cab48683bbe6bbdf140e6762004c40bfe012df7f8500e5a400004022fd234e39c420dfa14308b826e85a517200298a87d58d7f5f8c35c639cd0b3f33abbddd4ff66c2866d87393f04aaa81e50066bb28db24fabad4137159006c2eb056cfa1086c9f4cd46106c665570f0d85003c05556f169ac68cb70fd94bf06ca9750c4c6b4f159cff00573c6ca9fa4967001949bf83012422946f00ccf4fbf427603fb5d02018aa19554285802cfe7a040092e7f4820f32044463479d86f6a82961cc27c0db084fd59a7e724f3068a48a00d484afede71627259fc11782cb84d43313a3db811e0e2428d6c7ff0059759d003b403e71bcd06c867b7dfa49c026ce3f82824904e5e994ce62d83634596af400dc6a370df2783cc1fae59cfd8332ac4a9554d7561f6069a802552b88bcb69800be9877ad7729a0fd5df0b4f6399144261fa571602ff84c0e2fdffd52c7fbd0002f8c161e58da59da1e9b949c11561a98d958db9651d159965591dd948cdc530095cd1e8d5a948cde1a5c95598c538c7f6291f1c28363e08d4c0c02358780140031ce892886703832f63b8133f0f55f3468be01c638aaaaf230c45214c3343b00320619809e29d8dbfaa9787a2cfa996722bb235d17d7f91991d988a61016e100f92bf80c00456fe046a15250b96b618d38ef46a737326f501332792e7ba73f00a6da858dfd61094aacc6c68646661fbec12957f8f00fcfe077e2507f42864d00f7f019cbdfa28326fbf48dadf4097e853df5dd45c9446b7b2c369d8d56382c00a751bcbd6df76a140508efe27dfe3f84c03bfd433af9803fa169404420a8360053a9c333b4ad72876504ef723902edd78d4e36711ff4db02cf35f97ea1157f006d1b121528b1ef88173602093a07a3d99fd01adf29af8449ee56b643ac7e7d0020f36d083e9280f608b296f7d47562ce0a118ccbebcd13d6994ea4d09ede5b007c9e33a82a03fa6493877508ab711096d7d141347bd527c7ce8a14e651b97f00490ab35a2fe8756d73b3d679ef8cf28fdf6d92eb47c271e726f69285fd1ecf005388c49080b4dbccbfc06002367f0275b1fa2930d3ff4924e429bc202cc1dc006ff0200090606885b28cd3182d50ef51dbfafa4104bc67273e9ee007f9ffd000449ba19e8a692c36b6079d63ba80fbe4ea6cef92e3c84b6306be0ba89a926800920043ff15926ffc260717f7f926ffd3c49b87a232ba7e826b29bfd36dc15100fa146b09129618d58dd590cc9a11939dd0928c5455dd15d6155d98db93110c0059d550995cd293555cd69d1acc8dda167fa2893771b4f7782c5805e3e4179d004cbff095586a830e85c74c85cb0ad56048a6b38bef1e7a10f24925062c1d4c00ded0e1214fd008f02803901fe85f91984e7b4bcb0bfd2341c180f53034708000b260d4dfc0600259fe826de88fd018e719c2659b1c76b1e06872886d3e39130015a09771fa85b7a23f81c056fd18ae393fc140377eff8686afdff09a69fbfe00134d3f7fc269a7eff84d34fdff09a69fbfe134d3f45c389e1440c64202c7510027ff018008bb060cd141fa61774cae390d1f246abfd44e5fffa7377447f84c000c1fe1150c2c2702a37a0b90b4e4c50f0a3f492ee7880b4847e850d8b80105002694d83953601068bb2e2075bbb424e8454458d53236947e63a5f1a8f0b4d000934b2f2327daed3f6bb2ee75ff0844bd009208c3767f860738bf84c043ff38000187fe922ec2121fe18445c0d842b0dc444e71bf47b74f62c7f0feb2dfa7f7003a5bf80dfda2dfe0b05acad2e50329dab60ce06aa6ed7f32b096b4c7a1534a001b77bf899fda15ce078270c2d8d7ac53f3fe0064aca3cad3e94d914f43f80c00f402ffe0b073ab9c6506946bae82d5599ee2f2ce104495a8da011eddf0ff48004de567e848dacadc3294d511f091d215811ad1187daec9fb01bbacba1980fd00274fb39fc2601dfe8f66f42a0fd20bae9c220225fe02ec2f3cb349ad0723b800d78314cab888e29f6ab55bf423f94f44c596111b82479c8e5296f8e5098427003c50f92be388c44aec506f34d72774b222aa2efd05cf89ec5fc1417b0281fc004a23cc0651198473fd1c2c7e80a8bb73a5f3b08e0240876fd2893083fc260100e7f0fe7e23371df3d759e2ac59bb81e434f8b0c9b9260450886afbe8d36ba9005b3682921fa3e16eb8abf5211d7e189a989b9b9b999c197e9698d7a95c4cf600e61f4a1ea44a23af005e52ce9b93b20c36d3ac96485404228fa2786ba295fa003be164129c52548a99d4d478358905aedab02a44d65174a4430cb5e52fbfd20036ce5952e3fc1424e01462e4a0d9a97722d5fda86db43b1f07a852ea35abe6002c6fe978e75dfe13010ff87f59e91e660268f056726e78ab886a3ae886c97100f83c382fc113643d3e99620d17afbfe1e66e867f9141ac353538363330303800383239ff2d31dca0e31cf1c0e40dbcddc711ba123e0549f584d708452d779c0037ace6ef90b9b38cf2b14329c9d8190efd8a3a580028b7a16a13efa2ce6fbb00cc7714c5544a3264d87e91c375c07238194fe0a192818bb925288b72e3c28a00120a2449021bcd6ba76ca8001a58bf4588e5d837eb83a041fd3f8b46dcbc330077e738ed519301691e5d913a1bd0ef7ebfe187c82fe1303f3fc713fe4ee8ff00e2e84b52d40be06ec17cb5efe175fecb5ebd40c6412784f87f6788e5dfeb65006a0bfda3cabeffc3e121fef6e55f7ff1110537f0f8707fe5420d8fe270c8ff00eb04257fa4517b6bfffc43f7fc40091ff178b4ffa7b94bdfe20a08048bf82400d7182ca36941df7f562f33bdeb744fe00310a4f661d643f11d40ac0a3f49f300ecc7e898fca8ff232a94654100947f051bee0e93fc03356b9249b00c7cde9e00013c624599b0b43be8d6df3e6fe9f8ee4505ecfafd7e1dc8ae3febe62b6fe100304dbf7fc7722ff05ef937527e59ecc5e9b348d275a7ab75c83a3e8431620c00f82b45cf1467b5d2e034a6a1a26f93675d3566ce515f4a526fb308801d85590003531047aeac426ca1ca4d803fc4661320844202b5ba837f0180082905d8e50028ab9bfa0305ab887cceedb04afa1379076e071e2cc9127f4a539d6ff09007009faff02c31744f37433578dbba66d93e1158d987490a7d25b43ed341e5d224003c67931929c5d31ba5cafad6d0fc18bb90a677125f0cfaadfd12274443ef3d00dd1f9c7ccf17f48e5bb380e4894202ab0ac87f0200090602bc8729effe024100e139c735c2508108c8d42efe00437a21b668d1e0d3f450659d4381ef80522700a9df7e9f0cb3900fe06011bf8667a1eb65ef6f92c1fe2bff33f84c0c33834300533fd5a5c1a5fac032ce7f84c0d3fd0fa58882ffa1b2bebd04a762d59e248a0038fb9a557d311d60d09410b7bff57f98680dfe86befc5186262d4fa6a7c3dd00ac081c90fb48b2bfc792be9fd60644b437fa1ccfcdfce68904f306666295e200255d273b42b011a511e1ff7fd71fffeffae3fffd4063bdc43fa129ae460485005f0697a538f207072c71547585e626915157fa0a4204b179dda406dd775b9900d9f291d0420eedebf1834d8d8e2961bc0b90b92fe01e79fb7f8ae420fe1303008bfbfed58fde90f9369c68f4ca8272e29aeeaef0e896ccd284e66662f288a6009cca706ac488d68c86e872e8c49cea62a486a88a6ffd156ac1d602d547f0030024829e0d662ac2b11be43b70e6126c96d50f634f9168af698a88665d0985cc00319a143e911c239f116abb64bc0db4b9c3ca27252b803791f20b71736b7fa400718d149bf42dfdda9c1eca7e80a2cc52f412ccf3f7988bb7f4b9d475873d1c0010449fd3ad581b7f08a58c45261effc46fda2cc0fcea5438e661dbc192a5380020ed54f0f19d7893fe7eec92412d919bb379eb483e1930be7c1cb815e0a86000ae922c2c2bd0b4d577b9d0911fcc68cce527eb00f7b70623233a2676f5d77300276758b079e6bf5072631970b39ffd24c8e36c483fc1c3c7cd9b48bb352c84007089b954758e33815f0cb71574ff7f8f1ffdfe3c7fea08cce719fd0e4c1ba8003f2844b55e764e6c87d5a05b7e0217ac746f7e3faf84abd853af17323699440051262e69b9d3b19fa2ff4606ac0ce1e3cd02e02975d89db5e7f6fd320ade97005d293f51badcb97623f28f405c2d1a8a12541fccb6dfebf0863254284e4e2a0028696342953d3b13efd29546dbb66267aaeab11d537076a231f3eaae5d91e800ff913cee17c73f4372160a4f72f8939019081ae0e74e16457c6264e638481700e9b642c10214201ec0fd067d94cb1052c0d297f3188853368d79d5c50e60ad00c1727e0cad0f181fa4174b101300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file