diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..542d4c6 --- /dev/null +++ b/go.mod @@ -0,0 +1,12 @@ +module github.com/katzenpost/sphincsplus + +go 1.20 + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/katzenpost/hpqc v0.0.0-20240114190904-bc8bcfcca4ee // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/stretchr/objx v0.5.0 // indirect + github.com/stretchr/testify v1.8.4 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..26f54eb --- /dev/null +++ b/go.sum @@ -0,0 +1,19 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/katzenpost/hpqc v0.0.0-20240114190904-bc8bcfcca4ee h1:MiBBJNXAJkgv7asTOzrL0lbsL+UIFaFlm13boWz4Fxs= +github.com/katzenpost/hpqc v0.0.0-20240114190904-bc8bcfcca4ee/go.mod h1:i2+fQVPYzpv+WoZcN0KQqjQLEc/AgzRYwAFjYC/LiHg= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/ref/address.c b/ref/address.c index fe6eace..b136af8 100644 --- a/ref/address.c +++ b/ref/address.c @@ -52,12 +52,7 @@ void copy_subtree_addr(uint32_t out[8], const uint32_t in[8]) */ void set_keypair_addr(uint32_t addr[8], uint32_t keypair) { -#if SPX_FULL_HEIGHT/SPX_D > 8 - /* We have > 256 OTS at the bottom of the Merkle tree; to specify */ - /* which one, we'd need to express it in two bytes */ - ((unsigned char *)addr)[SPX_OFFSET_KP_ADDR2] = (unsigned char)(keypair >> 8); -#endif - ((unsigned char *)addr)[SPX_OFFSET_KP_ADDR1] = (unsigned char)keypair; + u32_to_bytes(&((unsigned char *)addr)[SPX_OFFSET_KP_ADDR], keypair); } /* @@ -67,10 +62,7 @@ void set_keypair_addr(uint32_t addr[8], uint32_t keypair) void copy_keypair_addr(uint32_t out[8], const uint32_t in[8]) { memcpy( out, in, SPX_OFFSET_TREE+8 ); -#if SPX_FULL_HEIGHT/SPX_D > 8 - ((unsigned char *)out)[SPX_OFFSET_KP_ADDR2] = ((unsigned char *)in)[SPX_OFFSET_KP_ADDR2]; -#endif - ((unsigned char *)out)[SPX_OFFSET_KP_ADDR1] = ((unsigned char *)in)[SPX_OFFSET_KP_ADDR1]; + memcpy( (unsigned char *)out + SPX_OFFSET_KP_ADDR, (unsigned char *)in + SPX_OFFSET_KP_ADDR, 4); } /* diff --git a/ref/binding.go b/ref/binding.go new file mode 100644 index 0000000..b02f1da --- /dev/null +++ b/ref/binding.go @@ -0,0 +1,141 @@ +package sphincsplus + +//#cgo linux LDFLAGS: "-L./ -L/usr/lib/x86_64-linux-gnu/ -lcrypto" +//#include "api.h" +import "C" +import ( + "fmt" + "unsafe" + + "github.com/katzenpost/hpqc/util" + + "github.com/katzenpost/sphincsplus/ref/params" +) + +var ( + _ = params.A + + // PublicKeySize is the size in bytes of the public key. + PublicKeySize int = C.CRYPTO_PUBLICKEYBYTES + + // PrivateKeySize is the size in bytes of the private key. + PrivateKeySize int = C.CRYPTO_SECRETKEYBYTES + + // SignatureSize is the size in bytes of the signature. + SignatureSize int = C.CRYPTO_BYTES + + // ErrPublicKeySize indicates the raw data is not the correct size for a public key. + ErrPublicKeySize error = fmt.Errorf("%s: raw public key data size is wrong", Name()) + + // ErrPrivateKeySize indicates the raw data is not the correct size for a private key. + ErrPrivateKeySize error = fmt.Errorf("%s: raw private key data size is wrong", Name()) +) + +// Name returns the string naming of the current +// Sphincs+ that this binding is being used with. +func Name() string { + return "Sphincs+shake-256f" +} + +// NewKeypair generates a new Sphincs+ keypair. +func NewKeypair() (*PrivateKey, *PublicKey) { + privKey := &PrivateKey{ + privateKey: make([]byte, C.CRYPTO_SECRETKEYBYTES), + } + pubKey := &PublicKey{ + publicKey: make([]byte, C.CRYPTO_PUBLICKEYBYTES), + } + C.crypto_sign_keypair((*C.uchar)(unsafe.Pointer(&pubKey.publicKey[0])), + (*C.uchar)(unsafe.Pointer(&privKey.privateKey[0]))) + return privKey, pubKey +} + +// PublicKey is a public Sphincs+ key. +type PublicKey struct { + publicKey []byte +} + +// Reset overwrites the key with zeros. +func (p *PublicKey) Reset() { + util.ExplicitBzero(p.publicKey) +} + +// Verify checks whether the given signature is valid. +func (p *PublicKey) Verify(signature, message []byte) bool { + ret := C.crypto_sign_verify((*C.uchar)(unsafe.Pointer(&signature[0])), + C.size_t(len(signature)), + (*C.uchar)(unsafe.Pointer(&message[0])), + C.size_t(len(message)), + (*C.uchar)(unsafe.Pointer(&p.publicKey[0]))) + if ret == 0 { + return true + } + return false +} + +// Bytes returns the PublicKey as a byte slice. +func (p *PublicKey) Bytes() []byte { + return p.publicKey +} + +// FromBytes loads a PublicKey from the given byte slice. +func (p *PublicKey) FromBytes(data []byte) error { + if len(data) != PublicKeySize { + return ErrPublicKeySize + } + + p.publicKey = data + return nil +} + +// Verify checks whether the given signature is valid. +/* +func (p *PublicKey) Verify(signature, message []byte) bool { + ret := C.crypto_sign_verify((*C.uchar)(unsafe.Pointer(&signature[0])), + C.ulong(len(signature)), + (*C.uchar)(unsafe.Pointer(&message[0])), + C.ulong(len(message)), + (*C.uchar)(unsafe.Pointer(&p.publicKey[0]))) + if ret == 0 { + return true + } + return false +} +*/ + +// PrivateKey is a private Sphincs+ key. +type PrivateKey struct { + privateKey []byte +} + +// Reset overwrites the key with zeros. +func (p *PrivateKey) Reset() { + util.ExplicitBzero(p.privateKey) +} + +// Sign signs the given message and returns the signature. +func (p *PrivateKey) Sign(message []byte) []byte { + signature := make([]byte, C.CRYPTO_BYTES) + sigLen := C.size_t(C.CRYPTO_BYTES) + C.crypto_sign_signature((*C.uchar)(unsafe.Pointer(&signature[0])), + &sigLen, + (*C.uchar)(unsafe.Pointer(&message[0])), + (C.size_t)(len(message)), + (*C.uchar)(unsafe.Pointer(&p.privateKey[0]))) + return signature +} + +// Bytes returns the PrivateKey as a byte slice. +func (p *PrivateKey) Bytes() []byte { + return p.privateKey +} + +// FromBytes loads a PrivateKey from the given byte slice. +func (p *PrivateKey) FromBytes(data []byte) error { + if len(data) != PrivateKeySize { + return ErrPrivateKeySize + } + + p.privateKey = data + return nil +} diff --git a/ref/binding_test.go b/ref/binding_test.go new file mode 100644 index 0000000..220d77f --- /dev/null +++ b/ref/binding_test.go @@ -0,0 +1,65 @@ +package sphincsplus + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestSignVerify(t *testing.T) { + t.Parallel() + privKey1, pubKey1 := NewKeypair() + message := []byte("i am a message") + sig1 := privKey1.Sign(message) + require.True(t, pubKey1.Verify(sig1, message)) + + privKey2, pubKey2 := NewKeypair() + require.False(t, pubKey2.Verify(sig1, message)) + + sig2 := privKey2.Sign(message) + require.True(t, pubKey2.Verify(sig2, message)) + require.False(t, pubKey1.Verify(sig2, message)) + + // non-determinism + sig3 := privKey1.Sign(message) + require.NotEqual(t, sig1, sig3) +} + +func TestSerialization(t *testing.T) { + t.Parallel() + privKey1, pubKey1 := NewKeypair() + message := []byte("i am a message") + sig := privKey1.Sign(message) + require.True(t, pubKey1.Verify(sig, message)) + + pubKeyBytes1 := pubKey1.Bytes() + pubKey2 := &PublicKey{} + err := pubKey2.FromBytes(pubKeyBytes1) + require.NoError(t, err) + require.True(t, pubKey2.Verify(sig, message)) + require.False(t, pubKey2.Verify(sig, message[:len(message)-3])) + + privKeyBytes2 := privKey1.Bytes() + privKey2 := &PrivateKey{} + err = privKey2.FromBytes(privKeyBytes2) + require.NoError(t, err) + sig2 := privKey2.Sign(message) + require.True(t, pubKey1.Verify(sig2, message)) + require.True(t, pubKey2.Verify(sig2, message)) +} + +func TestSizes(t *testing.T) { + t.Parallel() + privKey, pubKey := NewKeypair() + message := []byte("i am a message") + sig := privKey.Sign(message) + require.True(t, pubKey.Verify(sig, message)) + + require.Equal(t, PrivateKeySize, len(privKey.Bytes())) + require.Equal(t, PublicKeySize, len(pubKey.Bytes())) + require.Equal(t, SignatureSize, len(sig)) + + t.Logf("PrivateKeySize %d", PrivateKeySize) + t.Logf("PublicKeySize %d", PublicKeySize) + t.Logf("SignatureSize %d", SignatureSize) +} diff --git a/ref/explicitBzero.go b/ref/explicitBzero.go new file mode 100644 index 0000000..a43c0d0 --- /dev/null +++ b/ref/explicitBzero.go @@ -0,0 +1,17 @@ +// SPDX-FileCopyrightText: (C) 2017 Yawning Angel. +// SPDX-License-Identifier: AGPL-3.0-only + +package sphincsplus + +import "runtime" + +// ExplicitBzero explicitly clears out the buffer b, by filling it with 0x00 +// bytes. +// +//go:noinline +func ExplicitBzero(b []byte) { + for i := range b { + b[i] = 0 + } + runtime.KeepAlive(b) +} diff --git a/ref/haraka_offsets.h b/ref/haraka_offsets.h index 7273ce1..6afa5f8 100644 --- a/ref/haraka_offsets.h +++ b/ref/haraka_offsets.h @@ -9,8 +9,7 @@ #define SPX_OFFSET_LAYER 3 /* The byte used to specify the Merkle tree layer */ #define SPX_OFFSET_TREE 8 /* The start of the 8 byte field used to specify the tree */ #define SPX_OFFSET_TYPE 19 /* The byte used to specify the hash type (reason) */ -#define SPX_OFFSET_KP_ADDR2 22 /* The high byte used to specify the key pair (which one-time signature) */ -#define SPX_OFFSET_KP_ADDR1 23 /* The low byte used to specify the key pair */ +#define SPX_OFFSET_KP_ADDR 20 /* The start of the 4 byte field used to specify the key pair address */ #define SPX_OFFSET_CHAIN_ADDR 27 /* The byte used to specify the chain address (which Winternitz chain) */ #define SPX_OFFSET_HASH_ADDR 31 /* The byte used to specify the hash address (where in the Winternitz chain) */ #define SPX_OFFSET_TREE_HGT 27 /* The byte used to specify the height of this node in the FORS or Merkle tree */ diff --git a/ref/hash_haraka.c b/ref/hash_haraka.c index 8ae2de0..0c73525 100644 --- a/ref/hash_haraka.c +++ b/ref/hash_haraka.c @@ -83,8 +83,12 @@ void hash_message(unsigned char *digest, uint64_t *tree, uint32_t *leaf_idx, #error For given height and depth, 64 bits cannot represent all subtrees #endif - *tree = bytes_to_ull(bufp, SPX_TREE_BYTES); - *tree &= (~(uint64_t)0) >> (64 - SPX_TREE_BITS); + if (SPX_D == 1) { + *tree = 0; + } else { + *tree = bytes_to_ull(bufp, SPX_TREE_BYTES); + *tree &= (~(uint64_t)0) >> (64 - SPX_TREE_BITS); + } bufp += SPX_TREE_BYTES; *leaf_idx = (uint32_t)bytes_to_ull(bufp, SPX_LEAF_BYTES); diff --git a/ref/hash_sha2.c b/ref/hash_sha2.c index 730bcc9..67098e6 100644 --- a/ref/hash_sha2.c +++ b/ref/hash_sha2.c @@ -182,8 +182,12 @@ void hash_message(unsigned char *digest, uint64_t *tree, uint32_t *leaf_idx, #error For given height and depth, 64 bits cannot represent all subtrees #endif - *tree = bytes_to_ull(bufp, SPX_TREE_BYTES); - *tree &= (~(uint64_t)0) >> (64 - SPX_TREE_BITS); + if (SPX_D == 1) { + *tree = 0; + } else { + *tree = bytes_to_ull(bufp, SPX_TREE_BYTES); + *tree &= (~(uint64_t)0) >> (64 - SPX_TREE_BITS); + } bufp += SPX_TREE_BYTES; *leaf_idx = (uint32_t)bytes_to_ull(bufp, SPX_LEAF_BYTES); diff --git a/ref/hash_shake.c b/ref/hash_shake.c index afb18d5..f0372bf 100644 --- a/ref/hash_shake.c +++ b/ref/hash_shake.c @@ -84,8 +84,12 @@ void hash_message(unsigned char *digest, uint64_t *tree, uint32_t *leaf_idx, #error For given height and depth, 64 bits cannot represent all subtrees #endif - *tree = bytes_to_ull(bufp, SPX_TREE_BYTES); - *tree &= (~(uint64_t)0) >> (64 - SPX_TREE_BITS); + if (SPX_D == 1) { + *tree = 0; + } else { + *tree = bytes_to_ull(bufp, SPX_TREE_BYTES); + *tree &= (~(uint64_t)0) >> (64 - SPX_TREE_BITS); + } bufp += SPX_TREE_BYTES; *leaf_idx = (uint32_t)bytes_to_ull(bufp, SPX_LEAF_BYTES); diff --git a/ref/params.h b/ref/params.h index 1d7f9c9..02e9be9 100644 --- a/ref/params.h +++ b/ref/params.h @@ -1,5 +1,7 @@ #define str(s) #s #define xstr(s) str(s) +#define PARAMS sphincs-shake-256f + #include xstr(params/params-PARAMS.h) diff --git a/ref/params/params.go b/ref/params/params.go new file mode 100644 index 0000000..1c70079 --- /dev/null +++ b/ref/params/params.go @@ -0,0 +1,3 @@ +package params + +const A = 1 diff --git a/ref/sha2_offsets.h b/ref/sha2_offsets.h index 5811ea9..49f7e85 100644 --- a/ref/sha2_offsets.h +++ b/ref/sha2_offsets.h @@ -9,8 +9,7 @@ #define SPX_OFFSET_LAYER 0 /* The byte used to specify the Merkle tree layer */ #define SPX_OFFSET_TREE 1 /* The start of the 8 byte field used to specify the tree */ #define SPX_OFFSET_TYPE 9 /* The byte used to specify the hash type (reason) */ -#define SPX_OFFSET_KP_ADDR2 12 /* The high byte used to specify the key pair (which one-time signature) */ -#define SPX_OFFSET_KP_ADDR1 13 /* The low byte used to specify the key pair */ +#define SPX_OFFSET_KP_ADDR 10 /* The start of the 4 byte field used to specify the key pair address */ #define SPX_OFFSET_CHAIN_ADDR 17 /* The byte used to specify the chain address (which Winternitz chain) */ #define SPX_OFFSET_HASH_ADDR 21 /* The byte used to specify the hash address (where in the Winternitz chain) */ #define SPX_OFFSET_TREE_HGT 17 /* The byte used to specify the height of this node in the FORS or Merkle tree */ diff --git a/ref/shake_offsets.h b/ref/shake_offsets.h index 176360f..0407bdf 100644 --- a/ref/shake_offsets.h +++ b/ref/shake_offsets.h @@ -9,8 +9,7 @@ #define SPX_OFFSET_LAYER 3 /* The byte used to specify the Merkle tree layer */ #define SPX_OFFSET_TREE 8 /* The start of the 8 byte field used to specify the tree */ #define SPX_OFFSET_TYPE 19 /* The byte used to specify the hash type (reason) */ -#define SPX_OFFSET_KP_ADDR2 22 /* The high byte used to specify the key pair (which one-time signature) */ -#define SPX_OFFSET_KP_ADDR1 23 /* The low byte used to specify the key pair */ +#define SPX_OFFSET_KP_ADDR 20 /* The start of the 4 byte field used to specify the key pair address */ #define SPX_OFFSET_CHAIN_ADDR 27 /* The byte used to specify the chain address (which Winternitz chain) */ #define SPX_OFFSET_HASH_ADDR 31 /* The byte used to specify the hash address (where in the Winternitz chain) */ #define SPX_OFFSET_TREE_HGT 27 /* The byte used to specify the height of this node in the FORS or Merkle tree */ diff --git a/ref/vector_test.go b/ref/vector_test.go new file mode 100644 index 0000000..246b471 --- /dev/null +++ b/ref/vector_test.go @@ -0,0 +1,39 @@ +package sphincsplus + +import ( + "encoding/hex" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestSignVerifyVector(t *testing.T) { + /* + privKey1, pubKey1 := NewKeypair() + message := []byte("i am a message") + sig1 := privKey1.Sign(message) + require.True(t, pubKey1.Verify(sig1, message)) + + t.Logf("priv key %x", privKey1.Bytes()) + t.Logf("pub key %x", pubKey1.Bytes()) + t.Logf("sig %x", sig1) + */ + + privKey := new(PrivateKey) + privKeyBytes, err := hex.DecodeString("b1009776416e420428df58b80f27fb48d044c785a85d9a72bb89eceec802a48bde57f4f34732524c52a4fb8cbcb93076ad0d329bfb9e13d0a84310dd1aa7bb7429ae8dc5cfe2205a3dfbb992e0e11d3ff637e24b9c1958fc1bed10988a09668c8f02a7fd005e6cb984d1261baf846c0d980be80ed0b9c03eb26292c46c0e525c") + require.NoError(t, err) + err = privKey.FromBytes(privKeyBytes) + require.NoError(t, err) + + pubKey := new(PublicKey) + pubKeyBytes, err := hex.DecodeString("29ae8dc5cfe2205a3dfbb992e0e11d3ff637e24b9c1958fc1bed10988a09668c8f02a7fd005e6cb984d1261baf846c0d980be80ed0b9c03eb26292c46c0e525c") + require.NoError(t, err) + err = pubKey.FromBytes(pubKeyBytes) + + signature, err := hex.DecodeString("cd0ba71782bfc2d7548d53672a3668d9ad4ba074e05f904e2fcb7777246fc95eec19eda3b370617659abd2cacf4bfc25a52b3cd319ab9c2ad60fff13060c1c982784c1e4257e0ccbaefef26440b3ed182e5c30955554dc2c7c6f7c6c26a7c5b3f7698b9df549c8cff699a886b81f25730e1cefcb0c77e9040c409941ba1b67a6eef5a2c21a63f74a78952c3168556e295b8d10f05ea0d2309c112a0a782e4386ce058c9ca100796596c7505382c7918659ea4a89a138f60d8b096b91eb769843f4458dcacf2167e169ab883a08004accc02eafe31c96a577431942a96d75ccb4f2cdc41b088c1695988f68677756ec16b45b1391b7d33fc9313597576b6b888653021ecf9bd428bc38b0cd7008f842cc056a4ac39156e608518ce669f2abc9d664727fa94a997796404033916596e5d6c0a978037b2c359609f68abb723cb3a06f6c40cdc8d02d46fceadd745cb93a0ae8e3c4cc010b9b38d6a420ac992a1a8a630fb613a6a02e23b6b099c40a4336c5d6f4e3a17dc430d5563e865508fc25673222f094dcd9ae2672f91b0f5efaf71e3d590e4d6245e3ef90d45a2ae1c42e6ae303349b6563c665c08d0e7d15e2ddf47fda97207934f9973ca400c9a1a74e1aed4b56d2bb8abb1bec72b176e456ca33a389782c811cf73ad0e9dd1cca79ef935bbc32c0c838156299022a0115f11cc0073fea7b64391788ccd90b37378d1d845c9819a9c8e2394e7156b875fd8fb86f029022a18d305d2aabdefc50689992b684f9a89ea38a3e09fd23b5757ed3d5e91f0f159192122968b0858fe8f0ded90c289edef99e577a41fef1d8c501b05f4fa831c512451d109fa2161b2c5175a35cdee9270c60a4222a1493f2f2cd59b86172171df408982e818df38bdb48ee38a2be6504c8db3ef5cb7242bce40af0ef6b2c98cf336ec085c1f2e12e9ec27a496e429de4a427a6503f83c2a35d7dff121f28ea0432a4eb0360a1449908a9807b2aae028908f3956ebdfde6fba3b45bf971f61291578d8fc586b38671bd327fff27520e92c2589ee8af86eedf507af6a82f8f0d1c6548e590d84301ac34bc22ce1eae03cb5a3f3547abb360bce48960fa2978454d0d9df164434dd1368a15519b3aa555a0b31a75a3692551458e7c4e8de1273ab88ccbfcda361220ca16403e783b623838aee73cbc994511f53339b98a6f8fe065ee19408e99846e3924c632e922f2ec014ccd30ffe171b622245102191208c49a257dc5efc4b498c513cfb558c71c41d91fc38542ab5df323031ddecfc88e7ee7c809f607448544ec15c2b000d8775c40788261b53678ed786bb4c5f03be69670e698f9c3dac1f60d5304835dc497ec1062331025bc314cc472fec050ea1b1e96d6e2d9c5eda2165b86f01510bb1e61b4b832082986f58358c720e7dadb09aaa9079ad112ee78f281155f7ea13d442cdda51bf8b264424b0764874e810dd68ea748fff23f263c93afe27f1ca74844300332c5d525588738129a5ed68706a3f5046cd23d978e940521ada3e4110d55b94fb79f85b777e33650b7a24d7e5ee4a7d231571ce098b94a14eb2a973ac694e616044fabc962215ff69365086ab4b206d136660f4bb3ead0132dce5345d51cbf031adde1537b696d15145193d3bb11af793440fbe3a698c9198609a7f7c860140a91fc78d83d2fd2513d63d3ab094e70566527d47979022b72ec25f0d57db9fb6228dc15998f66c906a6c0e4e9ea534f51645464e85235e682642249be2de32e6071b01a65f4556da56e376c51dd58fd38516ec38ea5bc7ae1c72459d5dd7ffa562b94d6c0ff94d6182c3cc83f3571149f7016af1fb97cb02e77ec41386f5164d1933ab962daef363d71a1f1e7d14f70b75e91f99622b256aa976a34737c6b3f7e988854e22681a801cb39e141a7f94e805ef2963ae61043c2f52904ec48f53c96c1d5eb70f99e2e047d544a898f43c6d4776e0116045477db572caa62618bcaff4c30f4b7d43ed7332d747d0fbccc21b113c7a930eace625b6df6b0eba2d221ad57e93a2872b2005a40c6e0a93efb08897da22dfc5b3e79de776ede6ed3f69454151107c3ce1655962608e760ac59e9e04b5bad5316e98019471da8be1f593f3720a824cbc4eaddaf325bf61f4a0b30d0d3ca0bf843954a35c95ee971535c9c56a38fca49442a4f43901abc027b7b9dee8379f97a0fa22f25873e10b308b77b0b9719144e6d9bad30f89f66ba62d482099fa77f1c7319b07ab6bf6ea8f16cd06834749cceaa08ee8234c62e2150e7cf9f112a6e32d0ffd9c1852cfde088bb6a748ded07065f0b06cb82423927479795172bf0bff4ff0c160271b5e261125823db52ef93040f95b86569bdfe3fe82ed6b4a3b62970ddc37b8cd23118a9faa48709af611a73e53780df48d12d2f739d2f4c0c1da0057dd7fd3be89c9a9ee30dc5303e318af4169f525226598837baddd5ff3064dad8fd46e028606036f127e1076066f0f44945529eabaa04fd07f6a7cef5f81b23427f3d3a8b46b99907f35abfc65b1149c8df8653c765f8c526f4e69941cc15aab0611c429b12d4bd19e70e769fc560dabb8b73fa0c92bc153555f151d5bc504b18fe4be53773c014767f132e08c664f501f1fc7e1cce79e24bb475a1924d91ca72b8c98c12b4d6ba806518600aaecab6b83ee682f58e26d957c22961658809cc689de6232f4f2be3a9e90a897814c159abdb1e50f2c1aecd42872f47fb5b8049055dc10c943d158a4f149d46cc8a35bf60593a2487aacf11157d8c65566ded6a5807371b1289be93eee2a48c9fcf099ef2ded578076a174555fe9689fc6b538fe37e01f8c48fd213a2c82b0763c622461265e31b92f591e57ad45630189a03eb27d38b6cc2be3156ba21a5e0bc6c9f9c0f659a2c5c31ea389858a90afa88fd8a646d42015e5315f3055159c300b5d198c48ea8695159dca746144a4301f92890ab1e778d021f7bbd296c7a43f758294747230a3c94862d49f462c5eb52738f86acf4bd6d95d83f68c1da57a80137119633e3b53a7e95578b2e05b210b323735507b9474a746077a315a0af7f2fc49ee1547b33a6bbe5c4756bb57494e83cfde43a32b9b948470930d7e732fa04e1a0e73ce5fe49c7b77927e0ccf6bf1b5839c3cff8780a21ddf8394fa2888d8b097e61cacaf216dcce4bf914dbc848b6edc3f7e69d0350d22d85edbd820f7df8e9871bf8dbb11d48f28b204b1145b11ff8ca9d51fed93594d05d2cf905dd1d3c8c9dcecc881438b30cd35be656a80ccbcb9313aeab8e97196e29a17f052b3293e28e3ea7637054d4675eb749de6c04da90a0bcb9ad0099d15618cf8b515681e532919fdd3ac22690744ccbec7daf6eb9e4ef4abacaa95b83be406f18db4f734e8010abf641e82e60c40bb95d932b4e8fd6c50634830c41c5362909c2960181ff5a191b954b9562fb586f2a978e9077fd04b7bf56f4250ae78820c2b479d4f07af8b971cc2dd3f004b6270d7a8347757cdb5e391023dc49dd5bac1749d99294c43c71d11debcd17ecdf15e5626c49dfe143a9bbc3e6402cd4ffe565be1c6b812ae9bc27c0dc5d6a55b4da8671640119e9b73454a735e96bb22eddb81bfd6dcfdfa3de28b4834781e6cf2d139563e257d15f5913b71d2482f3b3c779f3e5f56dbd0f21104fa22c5cc8a43045abd5791723adbb3db599c3641258e22246a94a02454d75f0211dd5c66350dd8f45fd387e0fcb7efb56e4d24e6805fa945031e392f375d723a6cad092a59a734adca629f4250c643c5f00ee556686bcefcf202e3bdfdadbdfa3f4cb1b9c418c54e2c41137b12d3511a60d356b16a096f956780d8158ebcb8ed74e5a8f3127cd0287029723a152f84aa7a1a57b5e670e236623c40be7d0c64e34cd10f99e11286bb34a1e41f3afdf7d5fabc2b82ff2f3c0b88f36a40ec797620c7f45b0c9dcbeea20bf6d995414fd38d689ab6f47b4d9c2689efa590abf418c7312430d95c7cf13c464320c39f5ff9d9057fb5473052095ffe88d49896c4420134e3e3c350193718b09600ba7b927fe37230190fcfdc3097a4eaad0f003b2af752930f2050228769b0ac261684fabb683cec639703fbbc3a9c85d06ae2950ac66d9426953bce1698b122989d0db60a15e62fcb31fd27680129af7c6e3ea7d649ca1708b18e76ec63f6858b28edbb68ea72e76214aa18aaad80dec797a90d34488fdf17e2bfe09b3a12e6496e0d1b59cb640c099817b48c186e27ebdf1c56f42fb8d15bdeb3b4d79b7f97be2f28ba4e26ef43df89fc5797c53ec360c4428feba0825bdee761b5a54cdae96f173f669b54b74a8b0a0f1b2005b42bf2037d64781cd532f2f40ec147e5b600a7467081e5c7ff7a89cdae0a4337a9a53333d75ea0f4e83decc996a0146802f415cb651155ed1f502d591828b752c3824861ff1355a025f4cbe222e5fe4122283b6504bcd2d522e972b9aeb83f660990fe06ae3e86db9b309b350f44546d5edcb8eac79e937d1d5d51f8d4ba4b1a8fe951ec99b0864d79298731670c82ade94ad97a614ea74f0f1b515285e8b6f841eeb0826c83c08557880543241f484aa620434caedecf6356c9bb006f5898e788848eb5648805a515032bdf65ffb77c3db074b9d169c1b9448082462583dc5901269c05f3650230483b6749eba37cee79c779f18cbd26917e24505ea785bef2f0013c7b679028e22c37853df60a4a53644fcaf82991332b447d1019b709fe765039c4ac636b99e38e7bbfb10be9b41c6b7123732138edb8bd0b02e00ef8dfde28efe50d4d336850a696384bfc5ef0d60503c9c6cf786b774bfbd7e2d8fb63196759a7707d3d22d5f742cc9ffd67e50c40490345176fc747f1254a5a8c7aa17dfa98c4151e85eb45873f814630a5b4d832ac86683484065b88022436c5cbe6aa392d9842ecf30fc0e6cf38b5fb2feed61cabfb8fea88c8a703961370efee42489c1b3b607a7db415aa54922609fe339daefa9322e0028c310de1bf8ed0042a384522b6cba462036349d63f0e5562e3e9c7c520b65596abc6fb5afaf39f8de70add5014e136b394abbb0a6ede43dcb0d153b928029c350209bb61dece4db9cac00b021e22ad04867256e237566662af5e90c310419b9db0691bd2d16e8f0a2d33d80daec3be2d6e446c35ede95369558baf6c291e40b74be79487af7a7a72b0cd3edd0fe504f2e0a14b42ed839cc54306b7e9a78543bc5e4a40931f9de9558b7ed0360d0bce36092c31e56bf1007f344ed30aabafefbc77aba9a758b4bcee72ee0227c9160bde7df1c57c24c65b7c3fd25a7242cf56e67ea398347898cf3f88753bc413b58e560beb03e797692fe88777d4a13f0412e76c86bb553c37bcf3d047bc697a7f975d0c7f801e0a26a24379ed759ee9a8d478f7a9ae0bc2626b50394a6c66f21eba0c66fdeda2938486de0d311c46a7e4bd08cca5a220a5033e14b98c44aaef7c6a16acee05e89718ee1fa0fc6b083f389c65e2d0dba1833ef56237dd8723a938cd937757a6de3b3e1bf2b5eeda44342d923eba5708ba8ee5399c2d757d32756aa5d61526ad1ec0585a163c91262fd58b72f7906a4a3e1e6fcdee4b3fdf6023bb63724a4700b0f53867c047ba15ee230d135e29e39bc9a007887d8f72b48718ec30bf6ae959deae307807dae5c2ef7159e684242a35f14558feffa7a76a319594895adbe574ccdf23cd93f3027bbf973453a62b32bf5f27ad360a5e5352c46f7ba5b374bef5caa628f0b2b32f5515426ec66d290d8a6c3022da72b09c78b33d7ed5119a8db841f51c6ad03efcde41251492220536644222dc0b040903d84667019fbdaff0baf3c111954fca37e5023b2b4ad942ed165274c1a1e28d04c59ea6202529e00a940e5f0c7fc6853170bd59e311bc31c25e7f9206a773068e53627234385b94ef58a4f80484f15f60fa0e925e4892f66dacf2e1ac5dd62c8193cbad8ec02efe1bdfb9edccc9f236cf6ac3e2665587cd84dc66a9bae4eef5dbdd845088e7db90e1e85197d7e9f6a945f3a31993ecb947b5f956df3289cfd9deca9926f12308cfb14f4be170ad0d57ea22b5d41102e34223f8daceb892abfee4027eb476a296631a401d980aa00b4d2c6a9b5df2626244863ad3d915cf45a8fae085c12dcfeb249b41dddefafbe3cb1ea0d97b5d8367c5d6c4ae29c2d2c3c22d9302b14d979eb93b63d6be9668497c0426bb53adde37296055567e76dad07bafef9edfaa8da74a67350c8abab95236c5fc0c5b53e5200c73b3bfd9437969c95fb5af986a19692b7f1e0dc120c28deefc2f7576cce733628bb8640aad2688ea3d42272624492c9c59c1ad0f1414649659ea44e687798318058e5d176b98672cd8ed0df5223af41214796d08a64cf64fc8a1f6a7d0cf945418783aab73f8c1de980b07915f94a20450274c1c559595b3053ec287aee7e40a3e3231597fc3c06d7b422043d420f8c0d536d7d77167ed8028d0e3078985ca4bb3588d03504eb8d07edaf1088ebb1e618657ffcc6107993fdf961654223667c448b243b73a7982f1271f3a0f39568c5080afb553d62b37128acaf96edb751bf81ecc8f00a91ed30a66201e8194a747e6f08b75c3ffa8475cf40af91768e505d5fb9b39265415580924a5e9a558b0bfe2bc13d31f77be9ac965c2b8075e7be3a5380aef5fa1f507b17b242b64d7a411930f44b61868b5cdea01af9a38073601c8af9a4c8aea875115ad192280f284fa0bfd4e5d60989f6ec229d6ff7f2e30c2967fca93d9bc61f53f32ed70a00f14c705788df80323ca2be40602120da0655a465939d06a145acfa56c9d9c32ddd5e4132ac5aa9b9029b58d08fd8479e446d303e3c31971fd521b13def6936b14fa5d69c2e6cb4ca33e3683b2b0a80ab50cf37017d4d4ebddf2914fd64ca18a8a4549e21f2bfe7cf214b0f3e16a563b2e94718d0320562cd11b811796cf7860759efdb7daecce04267b9fa8f43b1bcbcc2a8d39804ed8053a8e4c38eebe9388d5e2bd53042ba6d16c9505dd1174ae72cfe50b9dbb2a708dc1ebe920715c4f8868c409dcdb4908f09b3ede8423fd2e6a309fd13a78f5d65784640e239fa80a6a2e2cf04390c89b8d61b7857737b64e55df428d7aa0926dfc191784d18dd01b83e13bb0c9483df67cb954e716c8d779be2a6d13df88dcc2aaf57b5292801d5a729f04e2df31e8891f6e997a4a8062978f18c9471531469c12a322241cf1efa158e9d5f4d0810faec6756942f6b02fe615246c4209ece5e9e55fe417407543e137fb441520b8178288bc84d2b7bcf29cfa55ea3dd5e7c82c8fbac14d729a272245e78b00b7994f050bcd96c05d91e15e964741846e4e8cc51cd3e7bfffec668d6627da593b44c4e811e1a3bcd3275728deb4a5266ea0b841c0404e3a75f33aa20d5bec6efa96a417f7e1bc1e8c962f69f9d47eeb66a838e47516ad09407347c09be69fdf885b6564778b42f72a6916cb47992063499b0afd810c67c3290a229ba240e98986ae23a7d9e1906732e7f4fa5dfbb3615b3f8435d4eec6d3872f46b78f3b477da353de232f5250180760ee66a9483c35d66e6aaaeef56093e0d8c750b90ae2d8208dd50eea600a8e7b16d46d6f9dd2859c8b7b1ad24dbc2942aa885d051d5a0640d35a1eb6ae86f7d7049e73d42038b0cbdc43ce06c60513cffe7db118bb082ae3a211de1b2a7dde7debabeb1e5fdca3e8c46d7159bdd1fe92d26ff7e00eb5d674e74609e85cb3aa53e902c8731212381d633d3615e88591baf43d9a3e0093b7ad30bd0c16655cec6f2f45e45ce6a4c3262cbcab34d49aebdf02663113534ab4d516b766622981e059279c0a1490ebc3e4240769080aeaf352efc4f30d9adea45989016ccbc53001f3ed7962478e0f9c1b32468cf31ffde347fb30c80fa172da71d38c464b795ae3a5d6af9d0cd2dbc2e7c7da2b280066638f02b6b60bbf0cb82e20fbb0122f47391f1dd5c471acb014a29d344bd0ce6e143e09778126fa47ca7c28f0f237bc2ffcd97411ab7528e980d4fda851b0852f8e1e8d098e84e7dd5d22ab972a188e39562ad1a0052e922c1eef0b2f36aa426db0c7c7ee6b63313294873716142e19f5f075a35a3028148400aea24f564cfe72b1db61e27f3c6914c7c6df717bb8ab0ea6b7730b2f545cbca04f114d9df9d69ad692b7d21e25fa7a067c6ea73565583b3074bc1b903ecf4cfb76cbdaa45c30d41283e82711b4a680bb02d9ddd010aed3cac39bf5401c193f32ff7eb813e9995ab69173b5ca38ac7c966ac1236366fe576e34fd63d26bd3a5e5aae516212ed82b7325c21e6b545a195d22702afc7a5adb1493885b4d3acc92a65d3d0a142e909b578c7856779a182026a86ed763eab4dff46eaae4f0e633ee9d726635221037247e8faf7d402717d1a600ad7ecada6d2b6abe54fcd460727a61c6d28d04fb57a2d32a6651ddac0c94d3c184e310936758152c1cb2566e323e1ffeccd775a199a5437e7380c8540df00d848ca17f695091d70b5e20465e6edaa2e2351e6c167123b0bec3ae3c7f38e68d92a8e74c70f971c3407c04b3c45957826f16b50510164a9f66c45d884347c012352b8e72719bf6e622d2ae219d132c62d435ee392d871b7a519b6be10a66a545d6de36b009cb232388579fe72adef956b2c85828f00e4044a6b346bf6aef63817c55b7e70ba7fdfe551e6f9f6ea1b358e16328b400ba694e2898c4b7974597ed198bd6a6ace731b87aca39ef26f506a8e463ee19190ad6e042bfb9ce8e735fa379b6d1c47880a16093f4acff87fd6af8815ea20b6e31f351d318a6f7f46c5cfc26ec24916df93806007267d80418a2b59972f55ed69207ac8fd5fa1a6c31855580e0d747e68f44993d882f76d6fa6804a2ed7ab0f99c985e95edd231caa7f971e9ab94cb3ccb83496a9b91a479db18780d098aa8edf5452c16a84a811e9549f5383f12453f4411746a89a4302b177886e66a3271b8ed8121885dce83bdbb0e9eabf70366f7cb105f29c80469401fbad182e01c749d9789c2d920399c016a7e2ae0b480d48779c944fcab9c629ccebb912639da05b80a640ae880dcf1865b54b7e8d46bca08cf6800eae120dce0b77c760c4f50b32ca46b36c74785387d1d476a4c64f0a235c3c74cca058b9f3012821d89209cc1cda545a7d9ce36cb06102342b36112089bcac70010d35141512feaa179eba3b1dd80349e2cb5376ca0870b1217a51c437a97432e57e1e7be8e018e804aeee519bb9a8c5d8d077da4139b3f37f1ec84b321e0894b1252bd52994c14a6936bc4397dc655bae967c865d42cdb93fd3d44ea2485e1df274e046f42d12190a6b69f3e2721baeb0e074c95ce5bfa47bfd0ea18de3e690cf5ca578a9cd8eb332b56d2d86a83366a2d65a316e47f78fd225e2367d2f9e21ea5a51cbf9e4acc89d09b31c89e918f98ee9f86aa02a11be2cfe037bce81e4afb9a3de39b592185c672a871b3d6a18069c489fa1f54cf5c36d7ba4ec892d500dc180cf70fb24a6673d0bd3e1a4278a6b96e0bbe86f3f109a59e6b773cca9943d473b98c8caabfe9d52359c8ccc30c46602a629fff8fae206ddf9e951912ebfaeaf13e1163a767e4069d1794135491068df01473db4162324a9967a020d4806b11adfca358d442bbedc2c5c16f503fc9c652e26f1c1c9b768c8803f9d6476c340347cc8bb7b86b273b2aaaed2e45256f3f5b8d157b6eca11e43347ccc6d7039a3832b3d623224f94ce323a214a5e0c92c16213d78d85f3f899c63d0404843c223dffe159b8b4305881957ee68073f029f4e657deafe3de40a469f84a16aefd3e11d9dd42019204877daa2ea52c4292fc71e7a4159e706503114f25df38b9b79afc8e6e7d35d7c83c7409e3b4db4ca4f20be4158b238bef04200eeef43f0e06552f8eff7e35a9667d02e4ccf62e70f3accdcda0307f74787ab2e0863af8a16fcf394e1002d746e66105b6078885b6aea3bd26aa53d67d7c7d218fbff61ef5975299e30c62c5000106d40bcfed147bf0838f6b8792a3d943eb4c400d7ad82aec2b5eecb2c37d8344687b73d68caa729a2217cbcf2b4df56bf1bcf6ce14e8ec896aff7ff8f8cdcffcc318b3587a22f87a0b072f160c6609b964ba8d705b0dfa6ab22f36c4fc72736189d54c9a9e9f6cafd484076cb8189f2fd90d61cc7a294764ebb360613f5c4f2b3c042afd0d5a32bb5465451e9a05162f223bfabcc15e80c68b61aa9f3c9273b13cad7cc415f3a27558eef06ed5ac8f39630aa5a5027518e033647a5d652a3a1fff60808ddc424dc98199d7a233aa01873d92bd96d3eedb341a8767db27289d84b618a06f73758fcd6618338cb533d43573c4deb0df05730f64905bbc3d3d4e45f757f24ba8ba7e781f235eedbc6d78a401a1c15d893cd983501e892fb167ce82fba6a820b64cc5088bcab468fbbb49b803000308b0be95bd5f361b1a7d15a60b71c4a3a1af1aaf516223f9e7b3ee7cdf2e8417a3b00dd28c19e6a57bf2ff716871ba42fda889d41aa5f8b95df21dd27239f521ae564647800badfbc10053f2132f976574200e931924c797611cafd20b714e2e754fa4bd8259e0fb68ddea69dd8deea56d15647f84bd2894080a5bccadd7d745072d5cf95d84d5bbfa6726a259d1e051de06912a5922d3f16af447cbcbf40b7cfffc24d404105a938ded1be45ae5dbcf54cfbaf85159b01230cb442223dace53b150bd0ca7d2fdcbc41d77ee61f4b267dee8e84d9273ea24ff1a967067fa4812984c7bf1ea71c0027c237a99f1febbc336ad17f1f7dda3cfb6132ac1e3ac18dfa0198eac8a818c6fb6fbda574ee0816848237178af8b6dab5e2e8cddf6a53aa51f9fec87234a458fc07577f4516ee3469a2a3e0b416083333f0c712c10922b4508e56428e00945e6c5a7148d2c16c2506b06305998061024f986d0e8b73a8daa4d3696e254deb37bdbceb777b3d807a808b34d87fc9aac6197bc6bbdfa9a5b59749f765a79231ff16ec7bdd2450ce1c6a1b282765539a250e24754a01015f50af7b7774cd4cbdf40e6148d2e7c66fdd6ac018ec8bb1e36492c4252a8e3e8ad1a243b5ffbd9be14bc4675b4924ab518175a9a9f6210c67703a37b5894f0a76cf57b5e5ef71933fcb9753442379843c8f12095083ed94a1303e02b9bef201ddfbf6059edb6e8941cb3767b18c4fff3addd9712e5bdc51562950b8b8b82aa62f08fa33684d68ac0f7945e8c8498decac25102b721374e4b9e99362504e119609d5684602aa61910d741d80694e55b394f983deb8f76d2b9d0e36bf569dbfa28a4790574517cb98e6c5f96efa5e9237e86f5f02d63326e1130b7ac8050a4fb4237978028175fb5d582deb4c67cb6586d57953b9f9dca4575329ff11681fe0365354e6ac646a6892ce3aa8b36b02780723628c4a341ff1746d2655f151db5d57165627b2f6ec33b6d3a2eb081c8688161bdac9e33ce88d305eb78b01bf4e1b5667445627959194eda095aa681e44b1120d320ae003325f93a4e680cd5dcc8ec4fcd27f373bfe46c97f7c2401d6b8ab2f94d1d990c2c19b69299ef7f9d255079e999272885ff7d8d42d6f2e7585eddcfafaecc07b1b31afd1a16d8cd982f4ee1685799c6bb438f8acb27808c820a0e21f2d97e3fb00a7c67945436da5e8307cd7be8daae7554dcd944a0b7cf5ab554295259edf8eb5c7980b052156332d3817f7ffb7d959dabc181b0c23704cee8ac2930782d677e2e9a0c0f2415620010e23ab979a1071d5394ab6bf7ddff348e1db4d98f672ba9fdac92b819cc25bfc00183e0a696c0b58c975cc816021805423e35971374faa0fc722cf2e146c1f227f7d109860bfd1f49e1f9bccb2be1472778862baacab6bfbb373446dffd85f049103f3ce86694803055e4a483b013c8bea90d68e7cd8e3b49ff1afc9948cb93a8d226e6482c26092ff41b2f9c388269abc5b42bec7badc78cba5c2fcb3a7d7998682f7ccdd40c634a100acd9dca9781d58b07833cdd01c6e566eee9f63ffe182d061c61795fe97b8e79ec9880e16f35305e0f7345ead27f3fdcb6ee1483a6e30f9da69b279fdec3edff5aaf0bef67e4261561f52e22f784cbbcb301744825451992ac3759f28b64ffcec5f76332a635d94236368b2fbc23755e5ca25a744f084b66466a6be74789e17c09a80eccf81483df83b168d6b1717b3d311f1af540f9abd11c2cd007d4d8dc307ecb2e605996a2bbc84e322e29dc21f080c8c1ae1f2bdb7de1e1bf459b1d5c5b8f5c303f7ca98a480db566d91cd47e8dc97e3cd929175d1fdaf9e7bc09a4cd8a4c94b2d157d578bb46d12a85693cfe29b3c73a784c4d51b2ec6a85a58a22d982256f33df1b2ed72c585abb70462313f878f26977e91c4defe471d121f68f5611fa462c88a05ad52cd216507f2866add893793cd1f1e4c56d1bfe0a1eb49635316e9081a2a4dd74066f4d924a94b0a766aa646d705e5d7932db24789c36c411796c13d8827d9e34c9275cf7d5cd633cebf74103ea333586f0911d952a329395e89aff5acf4f43716db4a7f7441b04dd333b52bc59215735b17b690961cc07d6c383ba13cc59b4e5281539c181b795fb1cdee10216f408cdeec52f9d0f2d88bd6efb42bb4856e38fd36e699f6eb154073268f6af9222b59948b3c6c22c9b99f06512fa9548facd635779bddf3f7d57d2b7ec9c1e05b9f25b4379e272ff25697ba27eb52bb0d4482030a28f692672d3b2bd314bd2bfdcdd688f1ba8aae5563a271bf038e29c2af60d55474137eddeeafa34ef2d85971b7208e4c792772393c3e9065c8999e824181a6fbae9bfea4dc6bdcfdf012b5908d2871b4d73e27af4f7af8e90cc6a6063b8d239af90c7106108f58b0b7b011731ca1ba53c239f3ee2b91790f661627d478e1785875188a6ae5f3a20a241868ab04eef9cf51a74e6e791df04d0d67ed6e9b1feb7d0990e9e05da89da0f26b53d3898a34e98bb116203209dce8b35e1836641832a997a54493dd9cd524263121bd0519d7662460773673cf64f4d453e2941eafee2359066b25ace5bc63ec733bf53e5199cd045e53bfdd42b7e835c7a3c16d73276f90ce03f30aaf8ab5b9723d1792106fd6761327d91095057e02d73f99c0bec327bd3aaee4526be4d3335b33e4434e2c2f903aac7e2519e08599c4cbad8c1cf0f0be4f16a49e43c6ec9728befdfe020edf65f90dc50ecdba898370f91cbe5467105a194f62087008f76ffee0a595d491b45c4a8009ab09336c56d1a089d43d7187c0e862c4838d923dab863011cb796a3e35a777e4a55db12f4a1f50544ca934be1dcb484cb2f1381f1b21cc6a3ac81483a239f6f5dc3670fdb6aa1a5d1a0eea7ca8ed56bb9996f2d47cb92808ceb265c3a30081caf228c2b323b929e196a2bb20dfa329c2f3de2919ae7e7ccf721fc2300b18bb102581b65158039baeb403a67b7e213d823514badba1d80887503ae0addf8d04b66f807b926a701711a36b68740ca2345eb0d993e2375ffae4df936dcb5b224d7ef9ed1848be067af533c5292357ea6aeb03854551642188b8ac1c10eac12696909e0acb9139c56ee31e20aaf72d0101b45c18475a616f7e86b4558cb485286a0ba30486a68a148852c4d7fe9695cf5063627e9124d55f08c52be68e41b5bf9474f6ebe81ef3cdcb9709ea1273c443e945f2b251e0121b92fc08977b57f8aed011fb7e23e04fd9da4984fe7daca88d1acae4e6be200aa8fb4b12a78e86b8228101a08daf2c0303616642acf045cbd6cde826b836137bc36e8da1cf05aa4f37a8158cd3928734b3211b53157c32ddfdd3303ab8dc4ffe7f436e3aaeb178f1467901cb336172462fa0c9c1f70d47c2b4dfa452ac4ac394de5cf68877b1e16c3e1f24171f8739b2605cd380a604c23164e96480cd5ba5f1b62730a1fb81217ade9f5e76cb23bb997e40240852de033a56d9c42c7449e3be61bedbd7eedb3d507fd0b23cd7dc3ed4eaf2f14592c6ee2a864c7803546d3b4667752cf2f775cac583d4ef752ea96e5575b6ec657e75ac1cbd7b9c9640536a2313e9f925dcd8843babbbb8e2738729bb33d2c5a5f5ae574da80e2f346e98fb7c6066847cfacf89b398498eef500066e7c20b61351989a1775597337ab3743025f0d8d19ae1a05114d0afae049073000360d5b9b5ebbe527d893a6dff29f12de59c051c2ab65946daa629ef15ff090272d4b60c16fa9cb798f2b1a066afea51c1037067ea1a4de0ad1affd0bffb743fceae9970f90251e24984012e181d83d4f25efbd4879f50d1b7d61be6f471cacaba35e652a40d36b25f51e968ecb9b74e27242ed46730da2b081416b9267494579f06e9065146a926203c56ebfb832e913a797792f0905f8a5f7e368d71ebcf16f240cfcc33d2fd614e51866cd6c8ac9043a7c085fb1f526ec965e80418689a30a6f8719fd71174e50187a332a752178f5b74e682120048aa47bf87b4f4e71b51252b4f557b6fb22b8a9e9e992829303db6c13b348910520ae9a66ba9c8042cba69c29da71af9348c6badfd079134db3cc3132837ec4462ee4cd59334a2d0a1260898535a463de1916418106999abb4eae509496b5a1f466ce305d6be2f7cf8f513ca4986d36e35b8628b3d19e34aecddda6ebe7d1dbdcec05f722254ce9e9fe8210c634bc8fa82958a40df435e62e11efad7a0c1dc9932dc306149bb01fea625888a734dfee36a80353b594811a093385fd01b3fdedbad7ee60c6b8027c239d4c081ba11d40d227ee3c35f71826d5ff80bb2c4798770797003076a4fcaf1da3119f5ee6e6087ae7fa17caf738d87594c4f7eb7f9d3dd27002c6dbe155a64f5358f219775730083c14b5c5eec6f6c72883ee5de092e72fc00940ed5ae38b6c4ba97350f460830d3a14dda24b83376655573cbc6854661ea260953ec5db6537761433c2a81a9b263130a2812e37425dfaf37603ffef3d4e27a35f7a149cf266da5d4b1cb01f6ab44d92c1dc9d1e25ec81db31b9f823a5a0d0f682c14fcd69bb713f19f6c893b2a024d808165251ff09b86d3f3a44fa41efb62a9c041b179897063cab76dd8fd4b87ba0ebc6477d57b1f73851a059abb541fb6899510721b52a19c7f0bed98f7bbf7da9114d41fb4c62e70bc0f5d3b4ef011d929b22e46f71bd8bd5224874447a41c8f35d732452b93f46b301c0be4ebad0372805c01d7bf667b69b9652616e0888d9824edf5ae22b3cbfc26e63bff74f2f0c818b3f05f3005afce44eb088df41a72f8c991024d1fb29f4c9870b2bc3e901204666db9cb70986f3567bd4b5452515f53b82e348eb53caafc1ba6e0bc25783a9fbc16a1a2cf06031a07515bff405c6bc6f81eec07358dfa490b795ab40e72493f6ecac815483fd170eaaae9db7b4cd2eb1c0c2f928802502f93e7e6e5ddff724c496a02e0df14793fb854eec746f1668b85a71b5e744bbad122a048b7c9291528b8825a724e36bba8ca2b5f251ce242971efff49944ff3452df1cfb8322303b9ad2c1773a68a18eacc134d03ff8b0a2b03dd7b58d688778214a82fbdd639d8d122f4a0fc1f360281cda6d78ec4c809dc444d3c300dffe02f9080a682fb6fb8e99a8e51605b3c4a1be2fa91a2cc5d7c14d51fdaa2aed8236ef9309a347561ccada74e2e42546e1fe1189fc9fa71985bd5a62b5e3e435c31d50009c20dd9bc8f87a8cf89fa950909bafcba64eb21b8c31b4aae57b6672cebfa3ff06f7ad644af370f644d162d0b89c93a378689c150695a2755f1ce62005428463ac54fb7710aeaff28200f582193d6f0460a057b526c1dbf5d667c8519998cff8812b6cc85dd661b57e1c2a518bc8b5695535180dc124e549459b601303324b9852938174475a9a0bd2a7092abcf55605b3f7c5dee4e90957b9b829db73357298f415fecda7431945a24f04fc62996751df8ba1e3949482cd83e80cc19645b231d8d790da2503b432ab378edc52887ea81c53b3e4e93b049b0f1b3411e0a7b20c907f2f969c0db865de75accc71a5f02094be9e362634d8db856f64fb44ab1689611c20718a0a6d9a7caa0ea70833b1aef912809a0889ad9464682ebd7b2f4f681716aad8387af98bba3028132401a5f0402301f60d1a5872d2f4dffbba93dd3097f253cc7f670ffaa0a1e8c930617f5e700af5bf01932b9166496f02dbe8df8051aae2cc9b7fadc92a4f84c3aa45ba70dcf7408aaf59b17cd5c53fd41032cb5dcadf0c50cdbb146c52197fda57acb3ee767e1b99266467b662d514f1b85f561f175d829cb1c2f8c4db3c33d5aa21fd6b338f399755e4f7124764ff798797a05794d55fab73fb7b3448bb2ed1c6878c4d78ba1e962705abaea24de5cc04e6f703b53d8fc7429e62e85527f56c06f3a103a77de544d210d46d849b1f0173e28ac163db993727541d03c1524171743e85ef1260029f98bd37570ccb9b7141e61ac7427a6e3870b33207516f9f205bd4f7259843576417d5970367643be8f3d49a0faef2d31541f07c52d2ff72393fcc000f036be4c4f2d751fab670abd63d33dd971ccb347ca02bb9fe23ecfa305c5070cf4eaa64576a9693216f46cbb2dd88a608d85050295722f2f4eb39755c4afb675c26c5bde8d50b3b8e8958ab6eed7409b1c6fb3d7177b7546f0151f01d465d99f22994078aa021a2090f56e18b4f7899063fd1c634954fa9660064bbc98116dfa81acb4cf086cbefdc487eb34ec4e09b1e182480ce27c3d59b8b968f2666b3cc62d01205ba13a1294e3f941939c68f6492569380313af902a04c1bc114d076c779eff941b21dbf3beb8f3cfb9306461ef69ffe69f192d9f8dc51ce2a536ee16d76b6200575d1ea6e426b5910adb7d05e2cf28516d4bd8d512f7459c12ac1f6df59a038ca2a21e6aa4f5b48432193d580b417bb90b962327cccbe61443199d14143a2dafc8c6a5b529c78bb4573a1fc1bd67017b594ce25618e075790c0b23551bcff30e29e2394b15181ed18091a24b35786465d630c0b10acf49b8c8293e01142b745c3b5701f5ec9a57ee9e1ff66fcb1f67ceae5becdafc31896aa13266450493e16a698b66962ee735bcd4ce5ab022b916ff98de64b397da41db313399617e5e3637d633e766261d91cf14b6b97b7641f5192624c4abc2aa2001b96fe6d0b5090aa5d4772892306cb806a6f819ec58607dc6eb8405e914796b8b55f08f6e846edc3a21cf4fc5f42baee988679667773e1d64c560483f0c55c667c86828512e04e244548eb782791ad299edab9265a8f17b37547ba3d4fda1a6cc39b53c6c94641b46909e0009f9c77cbafe2b78eaf978a0837fb53bcfd23fb7f5d0783a81a8e05ed074978bfb9ab3d4614e5a693b172fc5f1e80f474f69e54536ff11a06e985466ab6d4184b8c529a793ab2991d11b7c0027978bb0470b7b5d87ba1e5ae31499bb9b975c6ac16ab97329f81c07592f9117e14fdaba35609576f0aea1111286b5046d93cd1a3d4aae33e520b48162210798179fcb1e6744097edc56154ab4c8fa763b10760f67694d674b314f630df1cd4c7c43f688a262c3456d3a10766993310d2a6dae8b5d923f474f0856afa4b0b1374f59914f9a2ae488ebbbbaeee9119583ddcc4116e7afc9f7ea04ff08a413cea594daf7e0cdcbe2c1cda258ce000939ec6f88daf8a14aeef970e421d025e544189d3e0f803d72b5e7a7f731bd5a0c9eda3412b97623031f4caac775cf9360535eef323800b6db74dea663a6287a734eb96d205733e243eb413322eb20bf517198fb1eb1c3a7d1b7cb169e2d488e2d6d745e0df32684db0216976ed5c4cddfcfa002d8e1cdfc83961ebf87a0e7bf2396d90dda400cb5443d63d92e08ca4074149e394c4264f197c022056d7c00d704f74556d2c866c2e6b43819d7ed5275b0c7f7422e925132aed89ad30411a979ed903549a420ad7947c8aafee83d14325f3fbe52561303aba93d62c1c11aef9f7c279651856a24238a594ec8f987468d4c6649da99a556e4af63327a1b3b26463865e4047539f2d291c351a6be4737bc239d05308e2f4c55fb7913acd7ea8bb789a5c74aca58bbddb82ad450e4a0f51a39bf06bef60db6003a0714f6190793322eb4e8ac3a17ccb1444996ff87ef60676d851bcf47e8bcbd6c0aefb775a9b668669af0ef7dc9990cf59dcec8309648360f57007d1540dfd9bbad15fc6b95e2cfc86aa37761bfdb4caee2cd0400c33b48b3c2e9e300c676c8a8e176f2e8f10106c3fbc8a8e8423e80720083a99c87f4ff7db419781d3be83a8e7d559c689f001cbe155fe31164620db4e9ff9498c0c2fcce48be5433cf6bd1dc3e07bc577e65b2ea6b94fa0ee5456234afbaea867cbe2109b067d339c6601896433dcbbc77280b7b5454e20f9872bf57169cf992478cc297c585a057fcde1c8e8c82c30d4d88b3140197d098d6c010bb8e764c53d93c5be03c69b95336da8460f1492802c3fbe117d538195cbcd47760b35bca3ec9ee406099541f7c8c84b5d3165db323200f97741ccb91e2353ffdef4e36b28e2d53f4f5c1801e705f8627f7e274654759e7ea3f9090b664bda2d58ee3a052edb964ef9853c715a9b1173f5abae6af3414c72def4618a8e01c587050ceb0e311ef329018c43662ed351c08671361c3b8863eb4131c099af70c17a8abf94ac0b6c29e0c0b796201805096b6b146775f4729f433dbfd82c54e9011f6b444935128d955c64cd5df1b61830a41d46b706a381ef3760078f147d46fedb158ea3f92794985d6c1bdcf16087f6dcf8e26e969e22ef8e7e9dbae372c55a3260b8ee851e081ecf9ea571dc9dcbfccbf71e84ae946e092aa4ba63f3d87426d3a16021d74653c9609fc9d89b80e02046d98bac143c8404725d94904a1e0b0507c1f5fbc38072c0a08fb78bf78f788d5c096a555447bb3e5ad804a4ddb0c5715dbc09c4f9007d9c86eb8b619293683776fd3a4422c59a78f9a331a47715a8f10f24d0906ccaa2ba90a2ca6c3a1c2b9a56e890c03b7d6fcd4554f88efc8214d8fae68ba44d141022e519e2c887eaf7ab327a112adb0ae0e383fb72e77032e40690c15119a5e30627048cc2d06a80b33d18f7ebb67c8e0bde3029a92af0e6ad65c7302bafc88361ace802210cd11da45b830cbfe9558edc57589b44a175ac72e53b1c74e0780023a974de8b1ffa419dab3fa54534e9e9be9620eb9b8bea00f305f5d37bff11db9100041094a761038b481aeee26fd701f3d839ec5ee730d5035b23cfc2f6c1c5efa451a4e4e72bc15d371e6c79061c500a8cbbe38b51ad4c532a9039030d58bcb6b0a16a11e0cc12d54ddcc2351cd26945d46300e01ef0b0afc5f5d5bdc526f5e4a5a383eeb2c0f0d40a86f14c13713f0b206259628d7b447f86f1e75d4791ecda3091beb10a0fb5b29316751c3098547a10e8a402c3b2cb410e263993413de63248cc834475a507d5941d8b5e09c8765706c6ed2bd189fda968da4f065469f6daff2fee6d81d3f6f8e3d4d7896cdf21d6a28c381d8d49da95973d2473826df7dda45475f4c6fdc172d45e5daf803eaa2744c8ed5023c8322776dbc525c67da6e1aab2d6a3327cbec8bd7e9e47b3cd38179b87391420f7898b3e878b1353ccf124bd489ab3550bc9ba3831dc3debfafda365dd0529b3b09108746dfb21dd5dbb7e23a31a672f209df1e7789aeb341307136ad7aae72c16e82e607c3d93153e41e283f2c7eed6e186089023d64a69ea7b6353dcae7425451a9a4dcb7ebec5a60fa7b4e39b8805c792db5fd4939bfb5dda8ada9311efd611c2e29a18dd73b70099df0d17799e6f338d3a0c4da6e8418dd6402517df743510237777f04ab5b993c1db1536aadf292f3fe27433da9e40c20ac508a124b64bf247fd0f658ee2fbca4886419055df095ea16846d90e141c917bef7df29d553325a180023b3ec08fa3a3f1eb2555858958dea942b121c152b9f69646e727211c7439f44fbfd7a896b0b86d2d36cca0aef1334810a09785f82e4297357c9ecb036119e311c811358e4b464675a7ebad01a6dd2369aa3e107fd70b77979732899be75560864a2fd9b6d941d8ee23ab39454749cc2b624df9d2e67d8cc996c313f4339519001b110e3efb30d2aae7fba08315150e89fe7fa0e5aee33f6ff6ddb30aba8da149a8b53b4a6901a187963f47a340f4a0cf990704f5ddaa9a2088f7c0dcba0138ac1950c8c573b3d0f9203785acb7cef83f3c5a44890ed90fcdbe952e09bdf7fe74393d7de682172ad7c3960906f79bdcff97e1cff0e5fdb40680eda2ce6b483153c66b28d992ed98c04a41d0b0f374be209e77da0344286b84e12ee755c3303c24d5b285f590d5caa81c19ebea5637bf4ddd91f00ac87057798c64b35cceed7ecd24c0e68048990c1facebb550bb669d2e296e931026aff3f1dc6dd59f06f2355dfba9fec644ae5b3f120c1acde25278a6dac90b80c9ed77ece0e81ebd1c87c3ec8a4dfde0d8cd354f99798c7bd920ca582d0542dd4bbe1ad8a4fd5c16c69acc8ba3161feb57a95f8167bafd060d3ab3e8d273a191699a0ced373055a49c875f4dc952783593b0df331d58b006687e0b7c0d9c2ee916e2023ac16fc2899b4d90cdd1140cfca54d0fdd3adec459133d626cf1a25acc87e12695aeb5a45ad340a546e68e3d24b787479111726beb313a527fe07d6f53d534c190c0f265fd00da7ff4e55fd90c3a659609a20a08f1287624c6cd070b62dbf1542467dea7145d66dd089f4653c7987b9129a1aa7c33c1a32edfce7f8dbbcfac70a0d02703d32b8a2a8765bd928b65a0f538ac683d0bc0ea279e8061ad297da63bea06ffd34ede8c0b79705bf61c718d4aa5b77f556fd539a9f72a4e7a7c895713411d59e7fdf1757ba7ef32772163421360d16e8415294f0d7bfbfbb1e4196e2fc60eda189160f44854c9d6eff8f37472e6e13f85d07eb7172a30017b75e27cb92b4e6ee8257a05fef3187628d947e46d399409aa9867832dbe800ba69c762061ef38a991a59fdd3ad27553da67f1fe50c54f2f3bede80dae74a4fa67632079110a2eab44a7c96d481c8d3db61162e0a976b761ab08bc21db2f637afdc5a2ce07c327e639af11a554914e19e58e36dc21871b2e08a822939963c6b3f0685b69bbd61e07d879e38da10dbf11284bff9831d4513b2485621d2378df15fdc9bf26ac8c14fed44b1174675b24ef751109e5c4171589c05e639338c20cce50903bbcf0ee109ca66f0725dadac76e9880c11896675bf8d671a472bb78404c118e297050504867a6a5c14c6a99250a88456e4e0030727655545222efc5fbee48ee8fe2864bea68ac6f731b0ad360c8489350de7456c92a4a06ca4475eb24af371baf42df47c9382c5c13593455f421c6f714b7a470c53b4bee84ab1d9c25af38778195ec7f1342a0440da5c7629123e4e4bc26a55e22dae63b758ee8eb9423f9a743f5793813d2cb629a616f3e58d366681a963871ed1d079ecfef373a61e85c620a83dac234a5577b789011e0db389f55ea916441da1ded6fa6c100f2fac4f2ec232c020e42bf6ef3aa38f8d7c216559b7493cbf04b46de605610d6716abaea0fcbd1f4c2ee74a4ac65c787cdaaa7f637bda9de3424d85ac5c1f6a6b2ba77ae082bf2963cb486012b33ee833418e7ec72bff9b62209eb2c68d7d1e3dcaba08c23c950355ca5ae750880f52721ac35003b2108446abeba9127cf08959030ea75b46c637bb1a1f20cc44b0e1c6f18d636e6c394d334ef1c10e654e6e287106f2babc1377d7c01dab2b681d55ddd16f9d8fd58e320a6adbd4f7b38065f5f768fc775f6a9a22d2bd9fb464ca4235efaa766972f9828f732b505d37e860e23a658355116dd3429411a9a084a02bfa116e30e379ab1a2e6d81041e4eb0878c485ef8cca5ba72a59e03c2dc5c58df1058e389fa845a09aa2d502de573b68fe37b969b4fa826c4ef9c227f70a5589a1d9215e56c73a8b966ea545f38335eb02ac4bc5416928689886ff8ccaa3bedb9102d2900c218eec339fa52fd5860745fc138421338379f7a3631528c94f232b6dd99f9b80bd5a270281578435466a6f2272677c58b79a26006d1862176350ec647dc631a89f6f5343d50b5cff39114a0546f61708bba7b6af59bc2b5e1818a0fcf0c9f9a3de85ed14adb9d2fbe31763399c0e9b96c2cf426fcddec7d37a59d4f3f823e9d0cb6aad9f89c3258310446a56b9ec2e170c2322378fb490d2e3960d1a3a2fca72146f30e3df3f133e871298a18156fc2f06b04537212bf246af1c549eee1e59bcf20ca3449ea7a496a96d728b52a58e06f2a2ea54ed30507ee330a85e23810172ebbb9070788fd9435bff2fd6bac98a29872e80c0777b273ac2c091a8f04d2c216feae18707f4843b1c3c49d377ffeb3230ad2cbbb4f1d4e94682ed3c0b830ad0063b70c8ca1468526c711735cbcdf887003a7feda1120c0aeace05bf8d0dd7a7a7afc1f87dcad8956ba66bd91a3279a1f7a5af7334baea8848b637886dca0b6853522d1b03e19ff636431bb0a99551128a51628581216ecb35f3670c449e0818f23acd80e98f8bde35bb2933be8943d0c1eb4aad8a8565a2f56cd550dbcd0ddc2944cf0908f22ff1e0b42e4d912b07ffb4b2a8372a8de779871d0fb9bef5a76d2e49e0b51c415550239fc84797b0fc2ffc63e94532b14272de47a6e48e6d27037930fd27e5fa7a866821ed0979040a198c80b84e73311b3211d640a06757e674579d0a5a791ca0de496d80248a57e568f57439467fca5a6b56d96a3bcb546e1a401e6c04cd24050acbccd7a4113103d43c7b9e8908732114fae35aeff25623527219e3b28295fe6f584ead44c94cf94f665896ecc0ce3fa72e28acc41de7a310f1e961e317293ecd0668220856da5cf156d59b708e1af45fc0f391a6e4417e361e44d31408bc81c73dd6931afa1c52e93c13610647de94c2ed020d41afa98ade772794c0d7ec0648ad96e355b1035f8c93371595ef471c9b40d3dea4fb1dab75d7daa742bff57fbc7503f449e637334fe6c908b2dc0f6093c32fb8cc97a561f87c2c5ff241c98c27ee5637b2d802868aaa0eb159bc42f8d4564446030b22288152c102a9ef396c6e0de0a010a151f6cbaf9bf6fc6810fc5c294e13fd713813bd6a28add28e5774abdcc75a4e562ea661b660d5948a70542199c45ca1b04f36b645d9ed7bd738590f683b4deb1b6912e18a7a04319fa37f50c316e23ee9fe8d7f66e05696ee8a52f7a07a62dde719cb179cceb273b338ae141820b19bdd76735dd1ebfc6a12c27ee36c2055eeee116cfb2a3fd019a715297e81a2a1fa58c7e83c0d600b1483510540a23ab5549c7b19702b8c1575a6af7a45f4d68eb107b178c04e5bb800038143b3d5eb85e783663cc56b888c2647e39ac534052f8ff6c0d6aad16f5dc1f8b07421c14eace7544140d11e880b2aec0acf7554b25751450b67e3ea0b11d2cdbd8384226619eef2bc9bb1a05e51904a5491f016855f5afd3efb8daaa909b9986fe22c759f2585c528a3785391f2a82fc0de7fae8ad950138c2511e171c9b60c71005eafef16ba9f1f4cf951e00144507a2ce109d37066cfe981c89982f20603e3b5735272d0638b2b9f5c1c2133fea54fa5b9393cd75ae34206f3b85091f44dfbc074500514c9ece67cb9e95afd60ea342d422ec125d3c6b6c7b7195368be651c220a08b9c29709ff9d03e3c92c61cef2403091c96abd181d4a066e63a7690a4f9ba8eb829519ba94f2459fc87db18ea85c026614c168a34b4171c0287c1e89eebfdc7647b83b75e4b90c79fc4342cd345d55c99d446e668cf18467b2cfb132491e62db3eac78a37d8d8ef25c3df7a928022b4a998c2ee688067117285e66f5d04392bce2ea157f43c265b717d5be51b1641905c139f22c00f7f976c01c3c080f56911615c41f77abc8cba72e1e123c4785bee975f4799e958f56dca5c164c4dc0be8a410ed4f4622a6a7e4a3ea01a5d73ceac9451de0c0320a1e656a1dac59449ab88fd0418fe1b444f75e647b08783ed0eb89ccc4701b0e4fe1866984b3a7ba2a8f884a8ad968b0eb4b3929a869902cd46c59104fb3d1ce66f3dce738129be59b73d33465e1a6d4eba1b22dedf1f263d2349a5269801b8c4bfb730cebca2e502e1aad03aaf9b8889eb9910e0feeea77de4dcb28f60d56c10a69c4a50bc7ba5c0fa98bde4d4ee2ede0c71e0b51f1423859da0d84d05b41d323c8d5288873d7683b49fe1a77f4ebb927c276119e4a62084aa291f6e6cf34946f85b02e5a8fc7beb835611e10e61e244703734c233390a19cf5fe0dbd197642496a0008cdd5e4cf7212d917e064bd6a8063ac9fa2fd588bfc5823789652782bd108662379f72ec02edb57058bb080a764c58c47b0bb3cd3ecc9bccb0aa4b3ede95f3354e63eb29601132cbe28f069aae9c49ce5ef90c3e4248eb94a2d0a801da163b68bfe8b3d6cd174d9e56e81da451fbcfe8907efac469b451f2f1a0a3e01be2375ed023d5a1679314e7ca6fb7c05d20deda7bc1cb476ddbbf8269cf732c656a176dd4aeed6fa48e3503e3df3607918ac760892356d13d62cfa34899d6e6bd4ea51c22468476f14061b8bd2c027d9efb41075d3da91dc58f6fe6beb4d28da95e53e02b6a166de29f48f15600d46e7debe314cf846cbf7475ab918ac2400dcc3df256567183f62decb917854d6b9dc0a93c11cfe5054e972a67143d8d996cffe118081d7b7e6f86e146128bcbe9a6e4a87acf2a9076123c817a720ba49ac3df1b5d76cbba90cda0b209206c837f61b30d32d371b8fdcd2233173efe2a125309d80abbadcc6a19a9c8f61a8928b8d8cbec4cc91481372a297241b6cc08ba6cd827cbad38bfa8fa26fc971cc1e0cad50817f1c8193c35760d42fb178a56cddc0d2aed1467c5cb8b1191acb277dd7c924fbfd0fd6c64e505a5aa1e0b40d73e32e17499a8e997b0b45b0277a797c4565279b8ba2ce88b0fef0a31c35537978f6258c8849af0c3e4dba1a9648fb73dc7168820a446db36275e705d08a5a98ec7cbc9590ff0413d2bbc4470f0d43a4c78b3eca18b185ab72d923b65652d3cece538f77e2c7033b29099f9520d35830ceadc7cc5fa745c7e0c2e0d1f9cfb6dd0c3f75d2d71e478cc243acedc2e6fe75175593af204f3da46cd60f6d9d333efc0d72a3b86ae8a6fbfcfe3c6cab8a1b1c166e76923816e290cf7207468e5e917f7b7fc8995b0807beff3916baf09cbd505c9b9933f286a0568e83ab6ec5f342326d1f5a8f1cf3942924c559d443f2390d1833977d2e43303678f49e3cfd74904216c9dea4c3025da50aa56decdecc44159e9ca96e5470aa6e06b06b0f251b28d713794edd1fca464cdcda8fdb7465c5ee1794438a76668c8fe394a03cafb8ff77bf8ab03969562e32ee622b4dc2f650357e1dcecc804314c3f9e9c89192c896e0d01132edf27ece66ffb0bfb79d11dc97fe95bb677f3f1cfed83d1f830a5c2eb242a587982a7d30b6a366bcb11bb8449d45ad4f5f7bbeca133137462a156cb212420d238fa98827610ae30ea0e60681eb41ddcc27709e2692c04fbb62c3001826b4f58ada39c1540a38b3bfe2125ecf4fa31ab06603ddd4315f4f2f79fe164be77eb853e37218da0a20f6a24fba677d90647c9376f407cb82b203877ad62d34706a36e03df72b6d5e0ba23223578279714e24815df2730919ecb587f88a5c843a685603c0aea1ec013ab15fc08bd1d3eca41a17b3b888d49ac502c49a0153eec2457b51516b00fd82a6f6bf39ae92421132f3beec53abbda73e0efa7aadc3d6a614d74bafd43c31835e4452d78e69175cf4a3d9b25fcfdd1b828f8883b58fb3fb2c610d2a3a614ee5d073016c7da2c62498ed390d4a5f4268b7d4614be1d3626e456d47069a483e1c330a4467a4dc72b29d5b5b5e4013fbb5f31d785bd035cf8ed53231c97c89af96644da12145778d228813ad088e9d3204b13ab8f743fe02eddd80b8d1cc0c28963f4906ec6355263145b9f071d51a3d393f58869258510f60c9ac58fdd26706ebed288bc250d878d58326e9b03da7f7dd937935bde6adad0ac7e85dd02a00447951a0946c25051287fa54c3db4d0559f630ec8a062c317a1981e6ad20df65cde0afd9e79ab2610edf44ccf0a72e01ca96eb6a0ba459811559c176d0e84f6a82cd6b250756d3adb295be4502a5978076f75e8407b27417a5f8ca005eaf6cc44b2396d988b24ab0216b38109781912abfb7fb9ae686a6efa02f9d15ff679844e687e28e1a560c5c3a82666e619d29816213d56b22016d1cd47d0b821ef385895fe598bbf1faeb5e19bc8c3c843434c2fdf766548462f4cd8be5a5ec267b3bde1faadf59a558b44233200e48c9501c7e05f84235ebea69ef70d4ea7d21126b14ecbe86d21c5aa904dca3dc7b16840311affcf79eb0fb70d3a4b72e7eb47ee531566b7bcd341d686b1dc6edd1d17113d63408af523c77e3e05005d489bc401532064e70a253651f1275f4897e70fbc4d36d944220afac69fdc2196f7efe37f68dd6dbe21981bf6c394d320c5d875adbbfbc1d48fdf453daaed929d4cce8a379a4cafb179a2cdf32099cb336aecd941455ab2d197b09773f4b49ffd521d76e5cd710f65742969200ba9b1fc46ea8bcf51474e1954be295bffe5b0da6e71ada472a821a98134d2744ff26d83a95c89a5d4aed365983ffc7108575dd5bd114cf4a59aac1a563e63c75a04ae8aa5ef1c60696e61d2ee649fac18f69c91ed3ae2f34fd68985be03362388f80609e0745cdf8d61e92350f7ccc0fe94b7f7443928c3654033f05b11fc0bf97abd8569b6bd028c694e49954ae44171739253f7bbf3304422d7c4a2e3268f82dd22c145440e160f753df074fc47c632a0a7583d37190aa687231c2d36c6fea667f783810f94f3bd78486756593edf212cb358f2cd350a6f99e60ef6917eed55ec6ff7389500fe882e5c503d1dc82465fef13b5984e34f9635a16735d5db4378bc6e58311ed908b05b4e6c57e81fcbdb5524233c6d35656ea31fa2624d0cedce2a78fc8e22f079154f4174045eb070f2f708159d3b97fa18168467525e972e6fe8507cba4aa799880836a66e5f90dafda24bc318f7a54a483c676f6a530ee4874e9770f45416fdc74848933b0e1a5a842c2ae1d46ff7f72e006ce628978b6bf80c262c15d8c9c0d79be691d0f49470fed6cc6c04ce5053dfd05cdfc4145e1965b6b037931c0b7a6df59450d6c8d80f346c71ca485f9f834ccb12307c30aebbca39fcc5c0b37ee5cc995aedc00af2a1971028e3c0225d97941fab1f11e92e1f2f0d67746918d67765ff4084eddfea8014d1bf9c4d36cb4daed1f674dd3698cc451d6b9c251e17b7fa31fc376d0051da863ba51e4681d1045852f83a59cea0d1a44d3708dff552a9cd18fca11364b4242b4725cf26ffbad904bb496961b37c25b76f7d3029666d0f17f7ca34654de742e3aab59dc7d69d1fa5e28744cb4a7e00d7629573df35011fb16b7770f7636c90cc420268aec2406619f03b155adcd9213eaccaa307c9149b19d444f0daa4ec9d9bc42c6b6c6bcf5aa3be33b0d69bc0b15a7fb09a2eb60c564a440a20c9280c431803ee7a9ac967b168e8ad4ad6ecce4c335bb82ae0b21a1ea1ef620a514550b380b7d4f6551f2fb0b837b0123cacea310675fb6f09c35f73ce5ab5b269f067af6ccaa86596e7ea13077c587adb11e7e9c2e1100f03528851835adb3ca35982b0ed8877d305c42f4c1ec9f19ca6ecce8baa1fe924e7ca990fe0e9b472588e70244a6e6594815631078e06970e7cd04d6029db57e2014f0b26e0ee71da5fdbcf5fddaceb95ef52f94c972bc7ecba53f7a4210499ea345a593950de0c9145d23570013c94bd112aeafbadb926f0b8d77cab840658663c01fd620b88a5e6671513071474b033c679c6b27405c9b394535175630bc776d45648ba336c675e52204b368e5121edaff0117998665651b61dd93a3c0a0031399fce9326e211c58a29e70855edf8dcb982164a47bbd834db8e6e5b0342129c6a9c8b6da18d66438b57929d047dd5fa20db6453115d108a06da24006126cab47ee301a36cd3b1f9f2e5ba3ad287bbf22a908b3eaa2e8cd0a7e8dd6f4b0d9d981e373379b77e0e08574d49ec44bbff209bb00bfd9a297b2b1749133d5c1e988a8e97e5e185edda4f0d843b73f10e95a26b33351b7f58c3ca60f3153e30d0bd553eecb37d47a5e67b59e7b5bafbd1ac17faecfae141618320aa7d6f377e93fb2fed103a7f6c65206252be139ccbdcdf5d3b11b59279fee2bdf4e1dd5322e724246e874cfbda8baf46f5dc1df45bf727519551d1ad20b009ec739238940a10ff82e6ea4a0f2e0009de59f4f13d8e9c4d64cf8d1bb64ece7005f98866360228792ac80a94a47a17986fe856ba32e1f5d47f6f6d44096b6fc71f72f377d3b2a1bd0e9a897687ffb77ce3e41c45e3f874dd56f8007e5904fc78ac23b675c310ae7bd93f80d6525dfe827626bbf4680f88a8e895cfa3fe71bbcfab7a20d7520411fe0b49d6b4ff43d83304b350fb3082bdd55347ccdf58d504e5964dc4d29c4afa453c3861c1021ad88e70f1acc7ff45a5108ff5e21bef9175fa1e0c224b09c9364133f65f807681b6143e4429795ebda7c1b5e87d72f37dc885e3b5b2bddbe6cb8f01c6cbdb8fc538204043c02e9da7cbd65a0bcb953b0e716b7a128c07df5f11e0619cacb38a9e2e7f94d89d85875183ea721a251d003e6c47bf7f187cb5a739d4883ce4743e7b752e444ad88d490b34a4e5d82213fafff5d26a90a20f53bfe2cd24961133b6b4ae3f1bc9db242b1482b24371cb04b305f435c3476ee191eb1601422cd79ff923dde26d767ab9ea75e526f536be297678a9693e7acbc2985cec96df9e0cbda83eb5d9f007bc780b1dcef1528b36913e613ebae5c394b8605bcf3a944324b1c82d74f693a7473d4654149096ab1b184557c31d801b748cc8e83a1c6fdbf52e0ce5d4ecefdd6e121a9d1a82fe2ef0a58a48a1f16cf3dc978253e6f4a43ba79455dfffa3bcb6b12a1c41f51ae647ff4776d54f6e959dc6b32ab33a9ffcf9e0416b1657f2593ffdc01635ae653f1fe16c20bae7984bbec84b111f4940b88c3b40836b3dac4adba1a5bb8c1968803d0e883cace8427e222871f95c00d84fef3439f2cd51c8217c09f08f2ff3ba3373a13395efb0a3b5366f49d7bde84cb8556d47c9ca97183be1fc6c26f4cad9ce33c03e44a3a863a7b06f314ada989972fcad2edc7c65305d2988e38164d7b83311635bf168f86d30519a2e4e4c23216935635734a6bab422619261df1406e039a376dd8003014756fa746561ced6358cbfa9dfdd39f939f06c5a4b0aeafc24f0b820a7f72b759e690438ac214432360e2ddf1744ded0cd430972fdc35088748a82e6d73bdb3725d737092830213ce23cab210a71e11eb8541aa46d71d28a87260e0f356516cd389aa7c7c6ce546a18d224fcb1af92d122e5397ca46c4100ea4473b7f26bf0a849ea2df32bed82aad3c5523b1d3d731c2f8d54b90916f9f445f59efe26af73646efa69145164b141a540ad55118dc94b17fb4165c1ece54ad7ed1ec3d18f42edc87d7699cdfdf44227d29973cc5e4f81ffeba9e414ee41cc9eecac7327c6af3086549a942a9fe20c3a1e5bf04898a2838215a138ddc14b2aa3a8cd86ba4da3b7bd2b5cc698db91df563117469acf802f3c0e9d8f229c70778b0b33e827429491d7b117639c07ab2a0cf9b3340f7394d6c6fe5d66fbd48aaa3b2e82399535f4faaa092a1e0829d99be2d1d25c96b07a327967ece417616a6495e2215c5c1a8013832fadf3fb52dfdf298012932b3819ac354eef01552b769bd6edd6b385f78f1ce95540c6b4be1bf5920678d3f865aa7b84d9d6abb4795b9d657be4e308bc5a1f506fa14b64ee757124c59a7d2693d22639ee98b03c594de5387e50222c01a70915f8fc1767dc253554b7a8b06be0533fe7420bb53431db5250082cf5f8aa71b03f6e6547e33f0e9c1f10345fc989438027fcdf96d55c0d68191819aae353005a5a4f9479666c7c9d7a4c4817f5633737a75bb1d9db629116f9bde558f8a7b4c7e9d95b61631a9d41e044da341683bfc58a8f9f7d464153bffdee34122be0ac916128058dc50086f96e287ac6d4401fbb9e8a0de0fe858b88320519ce544468d30f36e934e9bc83bcb1f34ebfd109d59fecc3e609f7f2c72a5a932b9dda829b56996e3a6f08dc720add003a6f720d2e9bb06274f0a10ff702502934e024a009aca513b0daf8d46e5c205da85dd10654a561c6d6313cf9e4843ce0c30d1ad5f68f52bd4ae47fc6c4915417bce470044efb7e61ba6569aff8c2b4dbdde81dc93df5e952a0e4b7268ccd8935bcee386ec64057091c8122e00ddd88461848025549c20af520d42494e118fd94cea62fd439b83b8053a7c3f986128f41ecf83d08efbee197d3975f6710037d5f008e0f8acd566b585699e38a86e82f82b03f6c2b8d236683b8e889409da417ff69913ed4dde1b1682d34fe964bca80add5f9eeab066a4f05f9d239e4037f20572b733b901d1b23bd7b51dea58bae05f4f2fcced84bb66062c0dcf4f4ab275fd3c925d2701067227b3a2b045cd8d8f392894172784cdd7db343d74685d75eb1826c94410f3b9a5070a4e0d142b2cb5bcbc87bb3740b3f9e6df4db57471fb903dc3912c3a4ad5853634d7ea2edf7d72e3b5a6251a881d91b1690e02344a7f669217512311006a74c1aecb16d47832bb2322614056f89d181b4235a7887129cd95cdb0961605a7a22d32d703661cbe58abe2557e5f17c145ab909a160a56065540b30e08ae8a48d9f146cc3f56632bfc2b0d94a1f7dfecf268a5f4505083df2c344eb460a66a0757d47df036a41825669dc50923c8ba4bb60824516df33ac148ccbba8729deaf757da714a682bc2fde519639ee5a7dc91bd90524e153f049b72ee61f8095aa32ee59dc051d7748ffac6b9348aae4e2e48d93237130c0dfc572637f92eb06cc346df50536ef6cf7401e92d2548ffeab89af177a52343aff72ec4acadb7508ca5bb4797f85ce9ad349706d69dee038a3c1c764557a36548e5697bd66e9a0b345a7be9c8c06732a31957528fb37f41f933a8b0a149ce6b646e2e83e7ef1b589e73608e1a980ca381d8798569ead41d45c3f1413e7130a43c9928ea52c790b101ed025f24988326e855e73e3d68c0136cc2ab470ae6565a2e348350b8da7cab58f7da880b3518f20a9b7d884723d36b966445d162a4a4f601a912a4260c59f3dcbbec3b69c29232072a18089f7b60bd70c3a6bf79f07fa58019e994b02f3fb434cb2b94f3df99e952a3c1ede88e8002e487b3889f757f8ea96c16b7a0bd1699667b3bf8e67a0d212aa1cd0528cabdcce186c3d3b1ff79a33076a0346b0d55b862c4e5de94ec19feb56749868a46e2d8004bd04d7e8e023fc74e94ab2d3f6fa9b7d7268d26f9c78f963de4061b49b19282d5cef6c41a97b33cb23f5c2c417702797e0bf16c4f3ad0d284c8ca1bc823caaa9c1d4d6af1d147845f747dbea3e8f496962b3ac8c19bf4c45a4eebd10edc9cca3ab0b2e556ea518f16b3347c894a2cf134e4c0f1ccbfc292c77fbccc5df5b4bc07f07bdde550ad9890cc05cdf0efe22141ce3bd4ca049a86a53f1d354ed0e6587c840109c6c4ab480a0a5651eea49f8644634fc2a7d1fcff869c9830b1b55331846da2facec7cb06d66864468c2a3038af17f30fa478e8350c53b6cacc53d70f50dc4b38c5715962edb769ae7dc696a7513cb72fa42f4789d4a523507907adaa97110cafffbab81ef59567b5f6f1dc2fb5fe5fcf1ce6af073d967590c30ed2b3bc1dca5d070c0011d9fb481de78e017c38c37785f4d1dd718e0ad723a9161fcc9416033710fc081ef795b7e9bc6a5d4f6b7f192605d42fdc1f17065b58ff9d2652f0f7feaf964dae45da1149475694082e00c453aecbd3322563a56ed1542707146e34b7e746d82d76673dfcf953bde535233b065c807d66c53b4466fdc7a97e6eb0f3f05f15c9146e8c21fb0ba3d52da3715c82413a703f1bbacfabb2478738999d6baef71d033e40ce824d8e478c7fc71cc1e5ca63886e2410fe773dcb66f882a21b86e9dcd66d3debf6b719d92600dba051b015a35d425f6c69a9a97716fa98ddd20100b52d00be8c5337a448bc22eac722dcd4030b5da0fdbc03d213953e9a3bf8fb881c082801fd10373412b4d59c0dbb942b8fed9bec064cd78def21317cfdb9fc6049798f9a2cd45192b93f7fc26c2b05f3b3a0e49e0eba9aafaaf13c1a0063f3bca5ca901bc7bb6fb691c6253c1ec481202e1d5c86f762e16394ba959d09a3d8057d4deffeebe1dd783de736030faf85a87652d3dac9ca07b2c524ef13909c8e2e740d7352217d52503e57f6ad145ffb7f5402b08564156be405df6aebc3ff5dab7636270ceea3ff465ca922493f704d7698b422769a1eb36e02d31fe28d6da51ba12ac96d74ac0b7dba6a9a15bef4dc8f906d3063dc5822c3f8b78b5f065e3149c009da886658ce03e7136409ca9754c8c01fc8cdd4216abfc6ecbf69b7d5fe638443e9ee2551e37830dd6abf34cb7bcd0176cb19a379039f957db8283f99353b601a1973f427a272c5b79f1fd66167e68b344922020714efa8d63920d77c26d8a893ef6d938068cf1dbc6f5d025564762447b3a34807cd2db8413adfd000c723c08f631740cdd012d3577490e33b962556c75ae5a1a7f4b6660ba8de369262d4c099f83a021b0f7efd6fffb277670d7d38effda5a0b2a78f12d8fc5ff55502bfe8b5b4eda7c8f051c2bbc538a7d147ece3e88f135df8dc14b7780b4b45fca43a097ab9907dfcf410fd17cc284e425f98ad8459800c01a0fc6a00f3f06550085e0eca56a96d51fdd29241e83e7d162ff2f12c261c35798582f796baa86234c4b4a3e5d6da421aec734f222e7da38abf2c5cda9bf14b90c9bd6f79fdd4afb2b77a8e0281aa3d8bbe7f5ab91b6ff2bfabb0043b0b35e9cf182e6c2be5e716ab6d63e3cfa368d408a1c57e595de87b55456bbb4eba3a738c247448558ff57307ce3354d7fd2248ad268822e8e1b5fe35ca93993ca229a97a82ad0804d335571a96db8e76c32ab87faa549fc5fdb7b1e90316bfa23c1efb4fb87a38a4434ad49c2d5178adf9e77c1c002c8a9824847115c392c2cd30794d731f594f34f204bd4288de101395717711e9b88150186d520c1b4935feeea5b104887711e1f03066fb75f7fd080ea2b6ca29c7644a36c03d2e0621cb85d6be0fc95031f1c3678cd3e21c772643a5f6a31471aa9baa9f49352fc231552283984dad1ca94cef0da4650b85134348f9b807f0c8912494cce8a77c81e0c38fac1f4dc97cef6daa53c4b969c57ef4dcb692a7656564851dca7bf285349faac759dadec9b6e8da1a6198e277ef4dd945f00227a894b2083d06d36b6f80df4660a24b914792f848089f0f1c2acdbac9a6682293213a90fd2d812a9b6f52a7bbf392efb4c76b387ca96f22c48682ec1479757f9b67051d31801ff09b1fff2dfd92156e42707faf1b07ff838f848161314c1e55478b6dcf131577bd4029756df60f16310bfa2cf94110e1ad45afa72859657eb24451c0f783dbf4109b8c7ec98c7eaac7deeb951de4f1ea3480b35adef7af8b7b1bb1833891df03b52c6411c798393afd7a88e5d737c8245c21578312bcd9ea604387ae5158e708d1b0e83f55265975f902c5d5da5c7a45a63d3983558619d8a622080ebd159948e63e7d0a9b5b9b10fae8cceea000c77305681def3e2bfd82fce9fd9aaec2a35f8e1f643dd636318f9caeb2489114f4dfd30aa87fef9a099f903b974ef68af8519a406264b8550be972211b2ebc96643f87063ba7419ff3fd2b1ec73e37c47f7a1d3d60e71346f0f08e02448c559354cc9806d287794e5fa530386ab576f82b465c897341506203a9cd96f3424f9b0d683b54d8fa8e4ef05fe5e7472768f1c708598606818219db2928b1232f32d4be907421d9c8a43f14467c5eade4a9bb5b179a7bdac95bdfa02c885daf4223e060008d412ee1fc15cf84394aea852aa3fc439bb8d8808d3e2a3ecde77a5bf97e61c0ef9c38c7c874e52c8bbd9c6707d915dbf2b23961b40a8418b6f4ca1ddbfee9a9cee77d9945a4fb61d05e44f2dd1fe9243de5c099ebbf99a4720c3dd6218a2dcab2260009c4740c2485fd6f29784f8c8cc84a2d1e4cfd26fd0589b797c0e4fbdf89b5a32cc830113e8e83ffee7650b5b5bf368f61b359e8d39d63651f81ed53d1b7efabc6e221d0a1e60822d26d32e7c9326c72df98d501fa90d49b3b1210f1d2a969aae592a61b06829877712add3616b3a195ecbf4b8a382dd0be72dc9297e76ab7b53f70cc814b340c55abd213309e513672e05b1f8364bcaa1c434d2bc1dbad54ee7b1e2a0d2a93fae79dd740f96d9cde4e15c19bc2c73a45388f40d202dbcdc4e68cc807fabd10041d67ac611c8d3420ee277be25ed3fd96ae2aa4834b2ca01dfe4280962b1e88b7aadd6d69ee2241d88d8b73263e0f1513a860f9898571f3da0e5e04727b8e37fa072ab75e681c7e02ab351a5986901b03d399e3c0476b796a16523109cccb990015f956baf2d2a919744ff7f6bb20a7fad86abe83ed79814d626501b49ef0b775fec9fff740adfdc85a451fcfa272913b1c09deed113f9d2e8f0fb936ab464f0d7313657f0e00fa3f7a0b6edb0cbcc7141678547a2df579945cd47b77ee64b54b5ffbf04bc21f9b41763daa5c2e4efb480b982207855e54037487bf0e6329eed78e6ac9fa6a0ed0e92044db96005b0049c75d2e0f247e3f395b0e16b86886bb1271051af758a5e56d9beeede2c90ddc8d97e1340ba3d3275b0e106c7fe2500865edd267d7df157d74aa69aaf3690bbe52ec236368a9b23a1403870a989786f9e4c311de67094c5365b4d8c7dd5386eb08fb6cd4d821dcc7d65434b5b0ad1289a9a81b0a510e460c35566f8cc5a27820144a49edc36eeed1e1bd80cb46a7882d166a0671ac0d5c647558b31fea657a53edc6ed06b981501a2e001d6058f3ef356f3586a75e234d32ff61cbee6a6b71ef346262638fe3e1ee68073171f02a1865f44771d927ca5dcf8494d853501d10c48d932bf916fa3fa86cf5d2296f37a3089f318dd83673b0cb0425f5c679cbfa84ddf0629bdebe2bd10be162aa99c14ccf83759ddc882d37146e7f5fee22599ab660fab824d39eda3ef06f197f7d549fae9a40952dbc31b052d43379ebe32cc3cecb3d9e868e0b6b9cc2d01faa31cb1b1eb25e7e218ce3c92f31265261bb2a2609120cbaf10afc49bf973bd9c20ea3d7cc573c4719a2e2e017e7f0d47adf3c0e5029831fbbcb4e74173f5390a088d42d422c798a11f16dee6c9a7bbf533fe29dbe9364184cc1743b9f3495bcddadcf2746f356134a0def740228c9987241d445235a26f3ea5c9e25fdb823addd35d6e4d6f5521bc1d66857878947e65e6d62131196ab549f02fc7e8b253496162e33d74e2ae391c92534678f81006c188666554364d04c623481fbe46d751652c040ed264b6c6e7c0a810b935c64930429957f0c1390f1d8a886f117ec8f6cc0e0d56c1402e585615d1d56422690ef2974dcd8c92b5bc7fa161136c844358bb5a259253745f52b0e5cc6fcebc65bb3f60389bdc34d40517da056d17067c28e31da11d6a6a60279066028a2a5d4f0ab24cef60cf94c40041bb35e29469a1fe271fe291ea133cb31836f8732afd228055239c80c7c72e5ed603234a9b7aafb72baad3fc0169e904688cb6073650b972bec4dee84bbcd80f7b0d872015516de2fe6f3ae07dfb9c40ec7c02f93a1c242a9bc42e63c3b24f2958501ea472bc1ee77c1e28f2aaf6da38298e113e52d7869d81624ab6623572791cda2bb27d3c71bf3a2d55153d88566efa4e1562bded2e69cafc831c4a7706796b466c8e70ba6516dd06ab22f735f2b01412c652f338e460c2438cb42b1b600ae3374bb737df88d833d6823bb28507791ba58de3c2ce52d84aeb5797c7e8f078a618e70c5874ae32168d2710ed991f65ce5397fa20c1740332d5a56a448496d4953bb6f24eb0853dc34c774bde3ef9a2991893d1ad54da3cff5dedc7f1092290a9c06731ba915626d75389e3456ca1c2abefd8cda3e6b9be5a65bc05687ccb0fa086ce1cccf66207415ae64f47a13bda850e42cf784f7148c6d07155836d48b71f066583d6987825677f7e6b125a69a5289ec2a61559d81ece8e9713248cce9a90736f136be340870aa4582c313ec7803d57c3c7b5ee0dceb7ac430d39f008092b90bb25d97013d9d77fa511e6fb53eab0a2985e021223e3c827642c2b89cf51a2e9240882ee1598473f4b0ee85ba7f9348e8897be0b320528e76a9b373ccecacd673300eb130d13e456a5a2a22de539fbf25cfcdf7c6d5487532f457ce3fac3bc981d282e40da8acd94f44f5bac62d0b27a3ae2eae58bcbdb7624cd6c0a0ae12aeb175399499f59de5d318a794f727f484b1fd6ac63ed3cb88e7a39d0decc2249ce5ef0ef832126a23bf909003b9e4f36585f21c6f6cbfeddaacb728513bc4fe7137aa3586ce971bc34c29ef09c9aa20d94d37a3622954d29a5120b137bce24f55ceaf441db264b53f6a836a2b64e5bac86da067c847e27804c2cff85dd1f7ea3e793bbb2eec7147fd01bc0ef8e709b07946e8e051fd73f34ae6a9faf1b3bc53aa74fcf4cec555bc9697c451b3f580849189eb36e4e9492de226a21bdb8846e1dbd58fb6ba5bd977f11d8cc189cb084e1cc14343b815cb30bcd0fe1ea7e1d60aad366fb0aadcffc447b1f1f01ebd4cb22ad9b63560f579ca42e46c844a0f7096a7be86e22afc6b944d73e3ce5ef347c7586e91938b221be866429eab076ce63d7b4f10aaca3e2ceeb0220ee47c311ea9dd15d00ec6cb2abb6c8ea421e09d732e778fca3410e00803adc2371401bcd923e61137182060206c3622810d5bdfb011525b9e23eba0be03900f6692b96b86cc3773b1143cf655904ed2142303aabdf126e21c409c7bb029237b726ea98d31d462edd48c1327e80485c3b294ad99f9af9fc70338df512d2de475dac709b108ba9a18cdf24ee83028fa3382ef0d51c88ac484b1274570d51343e7f69795ca8be9a21f08e4f57ce48095b6c2ded58dba07d3773c37046d2d31019258137b9153992f0a789b4ae6c5e4e3d1944b5ddabad1271686ca6a297ee99657b91070e182f6bd660ebf045cdba36d2d27ffdbb91679338dce603b15e22ae0952112e4faf63e92e0fa73005dce441a2d5088d3cd3c98db29aaf7a59aba84bee1ee27a230076315e5e3667930508e73876ebc2ac57a492fbb466af3eff55d4604fc9a1c2bfb3492f3027cbda67025aab9fe8e86eb88c14efc57d6039ab82428f50bbbf1f512f3a682f011ac588abbe91615d578452edab263202538f2ead86f4046d84ff4ec7d27fd770cea6c0ec4fe73077f49a22372b2a7069cfcb10bd55c64bec310de4c3aa6f6db0849b6715a862f9cd8577d616b3d7f3fd1aa73b30fca3db73cad465a6570964cac8c052b3f0abe7671100393491d423ec9a5945503442dde85dcb3f216321ca9e230c90e52148b2a48b5b1f3167e4d7e2221770c890f59b9a38739e5ba63d17b2f469521c24c9b85214c33457fe278ba86f61ae26afd17c8c8393879a746559a7ba1df566c23abbd6b386f21b07ce0f333d64928f3effa644970693b4d5d2723f73c14cd7f3715c02b9a8588d24c706131b0148c763223efca72f850e244ca73b7fb27249df11d60a93b2a6db4eccbf1b8dd5d6e42f3ce75241b89616ca441e1a3ece6c3b04283efe2fa6ebd7496d463182a4dbbc7cf332e831f4995ca3ef1e2b93f529f9de7a05ca6d262483bca8bc42bdbd4013b398234e53d9b65d4ddec1f217e126bc90c5268f8f9d706d17774ab81b120b253d926e5e467a6317ae3db588e52048034765ce26d7de2bd423935dd79286b65627a0c7cecefcad5303639f138f4eb209588d46cf8e8964e35c28279b1e0e27a0e7f28e09d8dd7715661ec4677a7019a6364c5ac1c12cf7249375f90d07ca00c8887abd239fac2fbcadeb3c2c35fab1b126e8e320b9da5e9012734b403b7b8a501a3c2ebe8460f62963f4dce7f6aa8211ed6f3ffee6c770efeab645437c21f0a4dc5fb58273ab5c03c01170e036b5a09b2ae36f6d6dfb92fb7eb65481d000e449aad99abfb97c8a89893f2b61ec82c3dfc76ac1363df91ecb75ae7dfaa07258f7295369251761836fc4080b3d21f5b772e73cd7bed9d44e5d9794c53ba2dd94d5ef57bb44d893c4eb8a261ce54ac847fb808344773e19cffa9093565d1112aed78427b2967fc168bbd8bcad1e13425c2899b90ebfe9338531983b1a01365ae53b233492f12ce0b031bfcc3ce71cc88a480916ab969200a693f35135ef758262dd6e1ef68402cf4505c16ef0306303dc43bfc633ed0b08eeeb1408c385e1cc7e0a28f989e9aa7eb9594ed42dfabeb676ffd844d54ef82a549594c142a1abd4fbe10cebee573e00c8804f46a4d1aa3cf56c25c910a3601ae5c5e0b49787ab3033e14fb2ff5b4d9d62589cb0fb865b7dd4b85dcb2fcca733d75c83898c12a110a9796d4403bbd0fa885fdbd2f67e87e5a6b4282aedf3311de84418b9ffbe6ba377872cb194f144505c120cb41b4920dfa67d2157e261fd8cdc68118f9686c9f2d0a7767889d34541b959ddce8c5d49efde9e01f3d0b07001268ede6ed7f4a8ac41ac2fd68f981c7d196929ee1f98239354dfd8f3ee4304d7b7945115a85185bf05f1cd40758b59388b354e0d9322fd5b9d637d7124a33b9172b4c5ffd79cd9d27a096e1c2b3d6ede74496fba5f99df868491702d71bda5396653249fa80cb6e101f7d47ac28092a602e64e4d3b0372b7753ca8c92a17884ababf352492e5fd25e0e977bcfc9419237da2a17c0e9efebc2ea9c107b328e23b9ff8eadd996af08fed30251e02e1a625dc99e3a6e0fe2134dac4a25afb724e3ad891d581aeebbb8981baf1063db69e909e74e15791ded6e50803826aadbc4195b64c5bc7e3584c3de51fdc0de74875495fafe838e359f8d95b08bed324f1e3d6732bd0b5f50b7f892850dc44051fe35cab826eaf1e476feaf61cc2c50359684801810983d8b0a02a274de26b79cef563c3ada7826338c53c73dc665f8127689ef17ebd41d1796ee9b8b50e0b88c633b11c096f9d83ea49baba69f4b9636c7e412669df5e6b2f2d8399d6cbd8598dc5c57d78d735424982d92c78e0eac607a254b3aaf0b9aa1e4c665c44ff52724a1fae85b67fef8d03d7c208b54da4aad3efeda6dfbaf86c34614592ca5b2c3d8cb3f19ff1f2d2bb6739b66d4352041f244613bc75b8a447d810ce85326f50ead94c7cc5e163194c7e704e3371dcb6801e210bf0b97fa371f0158c21d06630ed8fa08726a4897ab6fc0792f9d3018ff8cd5d3dabd96ebf23ddeeebeb859ed1012e879091b1a0fee9eaf6fcc08b6251f3b9801a4ec939a1c0a1e334987ca3ef740eb30eca044aadbcb11b3ff19f4e6383d23824cf0f46eab8669f9b4f79bc8adff9c2c7912b52e0bc9d88b07cc07d4d0bbdbcb2e4611a7616eb8993641999f02a7cf3ebeee069b74967eca336a193c437c8f0d8b7875e8d92bb0615f0feb9c5834296342525849b0c83c59f5b142309f95079139d2232f9e1091e67846e908face66aa41e35a9969cc460120b34a0317c3bd0c75c8f7bb91bb76363a1472448c1bbe7255165b43425293435ed567b27c0ea5ff8f18873bb08df8c4745265acd31ae56a234ae811f2576a6008800bc4bc52517a37692cb7b17654d2cbadf1eac5c808804fa61829c023efd30a43fab4510d68a4026ae023246a06afae0e8567e71048a3558dff783b378edb145906477e0c43624e98ff6df22c0168b042e46cffa6bb1ca398a8d150918f11114efcf31326fbc88368653376c51e7c187cddee3880a7a8cb0cbbcdc35f445aa9cfc0ce6c6b4363fbc2e26c07ea332f9fdd5357da602f77890c300a42e6eea88f5648f253d4b1224fc685706b8bec2cd27410235155b7a72678782959012ab4feb4d1998a89b5f4660c064664c99170156f65e302d92e0ba1b6aa0a97478f11abcdd82674b07b3029d29d09e17466a5847b58a6352c0a20b9e3d3c0bf37fee5690777fadab18c13758b916bc901ae54559689ae0560638f4cb9fc178cd141f375b1b5642939be29c557681d20a6f1def59c206920a929912f047f0c046c2e9ef93e3deae436c88c00eedddaedbe8d1d26393b92b7d4a0eabf0c988a42bcabd6dd4634810d03670cf6bc88046a15e07527fb27398d52a3158d27164d9b47ba7646505ae5e9bb2c11347d03e8b24447d7359107e693d8c6574d75c04ca8a2f05e3b4f43b799d135894e749c312144616b0c1dc3d4c37c0c9bfa4854c3d7f144edeb7cc9a9c3afc8f62ae03d86384fdf8ac3e17eae38821ba9d87e7ffc15f75dd028df9dafa6ddb911a6a4f21c2a00d05a7f41b017104b2e41b2184a673a214e9d3b681c34f54d328f41019e8b1885d9b8bd1967e887ab9d248a41b7977a662047e2a05472f6a75b651af7f8cf04a3429950d0410e36f4dcc76015822f9f885252d9c565871316066b556d77ed008a111a2d6902a7f3c526aff4878694c393f94ea3d2f887a68dfca6575a3b7dd7fac5a6c08d7f1213876409b17fce703085ed24db416eb6ef42adbe3611812932a0108d74c44412eafa1d67cb404000744d21fc8ca4f2e6ec5917104c9bc5e6a40fef62bf180293def96b11df7d491ca11c4fd6c4eae8c7d633e4c5ca2d2633131765bcef2be20c3522d2c9f9a851f35e74a7b9b3f05421f61f705758402ff4701dd3d94cef5539617cc581479c52cb9c0bbdef9e3794a8fd3edc17f0aedf69d870528b5d0030b943e1130636ce4ae719e17c65998b1b7acbd7233bf7e53baaaa8844c409c96bdf0dd9a293d91e14a2e875b3a8fab2d30b5cbc86d33767389f9d7ab1ebbc805b00f0e36aa671d99a48827815779df856edae70c2d95713bd58f7f6138f1e71d310d2cf25d58c803cb2ac9c89e07de8bd0f3e7ec4e07ba0339c113fe566e9475c72229ecf03b134c1664c42c8a071d152369f110fb76858bdb028c6a246ca12d3b67e747ced9ec9e5f6cb55e62d166221b47b4b032e52a24bb191cf714d4057dbcdfd1b08e1a2b2947a83a97da7989a9f658afb56c933ecd58a08585920bb25b2768fd5b918795d5c328ea3cff7866a548f1c3c250294341f6bb62bcb834d73f7b103c3f5261820609998e36d652204ebcb8b674f6566e53a2e58860a2d5c125dac4f89269d329bd5af76a40e2c042392e0b3fb62813f37514321a69dafcd92bac52e50c3038f6b4568bf47991d0dd2e33b1fca06d35d7f8c3ab59661bf121659524174844b8fdbe161d209a4c55b7249459764d31baf0b4461d36d5d85ef6082c09b28f6bf8803ec5f1888157378ded5c4fe53340778580278034e8d0a486b378093c795df09a5dd7c0fef0c706a63e74119ef04d7888e4b80ab1b185bfb85157cef753ec8dfd3082c8a612d90cf35d333bf885640ea57dbf8596512b1a13577feca3346150c3ddd34ebda5ef461712f19457fa42ef17e8781efaeccd2b5a407e2db8b85216697eb6fba14a356257d7cf2a860379d468ba15071ec067b05423e7310e26d0e117e27a6c4adb5cc9d827658c529dd38b1100b31cf080cecce3e7d3d02484e8c238c4ee0aa020dbc4f4a1c4fd4a7eba26a6b4dee50650aa66e1637450c22c43072e1864c9e3580716d8f205a43d3c25f30f330ee7f2443da79ff95492de433175c71cc43ade8e52fe4aa3265ba7f9a22738ef154376e563aaaa70a1f8bcc772ce4ed41356308d1088a32250f36a7fb853062ae3b982d000d2c0183fc94755a7e77d88b358a23c2bc31f0143010539e0d436e8ba822ba914d2b6a9f2b18c4449b405d3946ec31aa92a6999d87d6ded79bd75fb6c93fb1ab16a56c72f322a8464837a8a68e37f84849988c11168925b4d5747887b49afc95b67e3b24039b8a85a98820ed4eabe514914fd07824975104f6840932f266c71e8f0eaec9f3e88d3d4d42d404694ea52a86ecdf39766a4671804e4a45ab376644d41ab63c37bc4933181018c7ddbd25b26ad5b413f9ed3d02ce7e9359d887c62048e0f068eaf33a9cad43eac1639fa6fb2b4c127a30f84859225ad6a18515a9f1581ae6e2094dfc7b2ac3b7340e36499c75db6e0545c899801021983100b6a59e909a90f176c6b19f2b1de9c135f78d86b06dd117d84586d55fb9284d6029047485b8791a4e672aa5951d013c4f08559b7de681d1bf85e118553eac00180f28d01ad0dd8b7f250a791a9a00befb0ef3335fd9c009569e1d995bf5291d812a83d2996781ea4b43ef9c95da20efbebc528876854112336c27a489176ccababdd1619a756a0ad817214be606dfca655a4a9db0764727a9544ca336d990d337397ec5532946f01be48b780856a6142b078f01237273441630e7644c6a378733194f23de47ed6d142c78297ce72859aa4709330d8be766178aa762e1935968890b1dd6f86a4e010bd2f9ca9df6f74acfc519d9da735e19edc5565ab5a34d51f41eac0ea21e0f4df34270137bf658973c6968cc908c42fe7b81d875661b1c537bb0a1559d5b3386a22d07e31f13803e39fb23f44b7d0b71d988158e786ebf5b396888c36ea9e617847d0c3f865fee3ff9c8c52360f7167e4c1e6fb3256e4865d745a24b2688586ef8ad057342eb414dc6f8426e1ad936c60e28d2457b37f3bb9c56bf083dcf8a7e7e40c0e16025a3433b042d5e78575f69a134c8a6fdecd0bb3864dd92c08c5b7a251374c0928944b0c66b42f2c2307b9c35ab0be9c02a393ca485e978c9d906c248236c5f56589605689b236a738d843a188e5f8f7de4c15f47c6f5fa10907b3e32f964cd240d66d751a8841e53a7c93f046d8028d7b2b8d6c1ac681ab87bd938306a8ed3b1a23c019f9872bc0641b6ed430ee15f99104282885c73b1c00c49ac3dcde3c4f07b2329167e2bc21a68a8a2de8123662a2b23042262e183cd7fe1e16f8c6c95cc44cf4e43a7b90e1f8d7cb02fd6aa496fde59b6800c21fef060f8d03e7a5803a3febc67ea5e32e303b819803279b896be49ba0773f9a66239f3964e7c912028afa631488ec995300d8c6fb1111e0516d6ab34f24e05ab335bfd9a1dea3312bd4eb1de311b8a4b5cb303b1e66fc163c6d7d3ed4705a86de826ebe96e653de18ea15233dd456d4ee0102d3ae13f89115ab1848c4348723403531e4a2abfc2fbd9e6e03534f32af414c59449f88c0d9bc82bd2e2974b3d66a75768f8bf408a81af727532a7238438750b8794feebd23dd4045eecb20a21b83aa6ebdc2e858421cdfc18603d9828b19cd9b7997016e8dc6a120798c64358cc2b33a419558607be790766f612fd5833a1f99972063afb4e2d66f40ede2327d2298d0bb7d5539d41be4332e9132503999ba5b265eb292ef5aedbf11542350e5a0e5d577b7c4f112dcb5009d36f01f94dfa7285e457c809070c025dc68f18c107130d44e959332a5ff8d5fba1356e312d7ab0054b2f13d24df013dfb703930af23f325b45847c4301df7073d5d65cf3c5f071fbe5556235944b9761d4c6b10622a9caacbc7bde43eee328e452c6d08e28c11f5935f653581de05d7d2bf78cae450a96f3445351ae7157239bd2c99331df6c50be9a6c367fdd34a01c163fc97bc55aa1227c5450a439b029a133d7f1844f5324cd0f94fce43b6c417c1ebca37a31c70083fea6cec1f7aa627b7b11c85abd2b8587f6d58125ca5c5535df832bcc6d4404998e461e1506584b1d51c8db6a570ee35068a32a188f098df96af41222367e45362f896bf731c35348cf7df5bbd0a45a59826d094687dd19aef5c373f97f3e5216203e8c08a4415feac6f307b8586405ae33ab532e2c94158db45cab0add8b5e38edf0d830085036bde46bc6fe64d6dae6bb5df3e9804334977bcabe6c7ae513639cd944c5a6fb27d75803301570ee4fd91e4766762f7c5fb160adff7c036cdcc0701c0eb656d8e206dcb239a50e93fb33abbfa12d3a287bea0cc1beb2b1a741fdb4e292a72f439c55511a9ad84cb83596092500c6d446d90e02424cfaa16880b0b8f8e442e603e912b42b58e3b9f817d29d33b4273ade60c4959020c51044a8bacba7ba423227a593fa1c87a32a57ce0d80aebd0bfb2ef87c8b7da28d1f6f1b09f6152a673cccee9b0c39fd2c4f9377d364e33408a23aad65b087fdb13d7fa8538973052ad2b06fed64adf23a064ed6a7b8f27130b6287cf020964adb1fb097dd226cbfd1b27e147eefde0e610e077b7f4816e593c78c9fc241a8bbe33dd21399f477f3b55a2dc948ca20ae5ac76a3391850957e930faf7acb6af16951293a1b56a401e2039b41ace2e5c4d5ebf4a35d9773e66824049b0d692d7e50b2ca77e96705aa1c09d623102979c2546021954d09864c82a8071d8341c0571dd7e5e24d9efe1015628c5b4409bb5ff64d63c5ab42518ffdff97158c4d091ce012c302c6649629cc9a62b6623f196882d155e169026fc1e63d2d34d7104a32f22b2079293ccea12cb3bf53166bd3c4d942e9b60f7f7c608094a29d7df198ca07c6c88af028822ed12b63d52cc265a93e54d3d18788d407669e9391d6c416e54f083ed25619485287ff0dd1030d4ecbb4f907ac4d351ac15045ead4aaa3f9fdb2728c59403e2305cda111176dcbf47cfb2ece3996a9948b64b3ad8327926007b86c44292b36be9ef144ead4d1030c279fd243eb15b1a4b5314d892824d3571196fa93bcb9d8b8d4052fbda4085a9fbf02f8914997708890e498c71e5d1f0fcab2dc528ef89dab6ff1f6407ad8aaf3b39c2f0620f8706cef0e133cd856982826bfb0295b29cac13494aecb7ac2b20d0cf47eea0e8d35934d7260cdbfbb74e3194400a66ec5b04606fcd12cd494bb073b1653b74cdf8006c9fe94e914542be79b2ee6b1c0220ab421da872e3f10ede054278c8daddb75ae2202b68ce0a1d0e6de21058d8aee54128a76ff329ba476106799973ed5a35908180fe46cd94221cb36299ed0ac0b9b34f0b404f640aff5f5f492e051f3c591b64c130da7ad106568e9f65a050cb66c7dbe334d01bf634e1cbcc14d16c064f68589a4f86c5fd6ba5a6884de2dd0bc8ddc6179f353a9db10f4ad57f456898abafcbe07b352d51dc16eb9be60025e4fb4648c601026b835285c9858509e4ebdbca1b87bf52a0e03c1e762054f1ef959ff8158256265de43cf55bc59fa91de1f59cc6268b6376d465ec7bb5f47aa78c3cfa645859cd2540bdf95967fdfb32d56c789dd55e6b35f966d07758f26744d2dcff2b228a9e6674f6002a6f7eb256d0e075a603996cd53388f02a66565ebcdd8a4276bcbe1c04ce8e0b2283552ebee48a88b414d0a0f1ff1cae9489b7cc4e88f67bb9f3501279d6030a5cc751259a8304793b3b001046120f6bbd63f949f29e975354b4b10b493b738f571e23350552a7bbbe61e692591f3495b8acab67b737e7fdec5e231d94bc4d0fcf3af9b2ca9710f0c463340d33f3cbd564c368ffddc35a16321a6be7b1f600d4df7440a0402e4b8a46f64fede38481ab68f23ca1cd0b77c017deb1ace69d4cc0ce4fac521aaec9947543a392b29cbdccf2555c45cd803c88a9ef3837cf7e5fd9a22623055829877c3a30caf65ceb5276b514b7627a5092a471e12c8cd53dedf5145a6636b90172fa1bb74e02d980c0222ea79590f49e1b0ec291cb490d5bc6a21aca05490fd070d08d66fde53e82417d3577b967bcf86cc193bc19000acef97312bfa949849c297d8e10aeafd3f1ae78af27d3af6771378725686583a5da109f2d8647d157c8b36f978b8239d709b60e02f277eef44599d4dbb5c77eb76344fa9d4c3c645a509f39d0fb71dc31468e26ceabcae2105699f669ebb736bc1f67876944499adc0865e07b3a3688646dce02af080d7bc89e5ecd069667e181d2d796d5d33ba8a58a296f4abf4ac7b3c15bcd01e2d9f1bc32a6e7ce48f6234c0b89ca7feced1e5ec0bf6ba45cec4ca5cefaecddf4551e17deedd081eaf0ab41fb01a2f6563f3554980c744b438092bc2c1c112d55efa78dbb1b0c19649d8c29eabc9c3865e8dfbc3221787c49a69f264233fe708fca05c08907eedac57f79a9847e16876dd019364d23ec2e4541860afcf55a5a8faea44a9f33e3357df4e361ecd0f71106555fa99dd1da97e79325fabfcbd73ed6603c9148b4727b211e682c6282db7ff39633dca067853a557e1fda2c0cc29ec08123dc21fe82d0ba81fcc7d787c2e938a56fdc67fb6117b3ac0f4838ded25a55a09ee954542b3a2b164003b1f3c09cb925d220bfce704902e9953e3bd09d4b6576db722d0bd477b758985fbbfcbc5e1941ddc768b2911aa509d59e5b4fb75f0736528c79c1ef158ddd4baadf3e0c69170ce1a9161bb55d272f5c5e4f969b33138e8b88a31c602b8f1b8a5dd4b24b2e0e1b67077803eda96983ded7661353014c7f3749f73d37cdca93e172448eeb7b558d875458b0ba91416eeabea246a32cb32edc8dabed46345599950ffc1538a7c7729ce4f881402d9b592d3f1e76fa882688f866b768bd300da726e869da49cdcc87e9bce0ed10b5dc5da076d1c3e7a0630dae9ed17c297818493046d00c79a2cef165af0479052058ee3a7180f2c8aabbe6053c906167a848c03ce6a79057a889e05ac9fd4ccc6e75d8671a73fc13ef35a7f4b94600d3b4a182f51546be7e3030e1f9cb35ed89ad9e8ad5e2bbc3332a12214f655da5b11409c359489442ecb4b3cf5fd2fad7bbaef3059859ffc44535b33b2dc2680e49afde27c141bc01ed212f167ccf9c8602afcce3919bfd4994f9d9c3a4b75553bd1138faf1c22deced1e65a7d7ccae0666a6061138756a83417ea79f4a15840a08eb2a5edcf26e303f7b506d68bc685b07070a48f5073efb5cef86af32ce58b57430c76d06e957a1f4f2c7c4b8a31110d3434e6f68c098ec06433f9923526de318e5fea017bc47ab9d35bff48662433bfea622025a0f9d90d7b39447ffdca89baddca8af8eedb36b5446947452bb0781bbd54a6d10d714821bd64a695844a6271dc041b10d2993b24e178d8d4c929c7cee911fb2aab32066ebec2df7394f672faf7077acbe83707329c59a966b0fa1d0621c31e9f8a61b0f2f1a825833717abe52fdfde8fdeb72dd111d717197799a4e91c6906d08ea693875f94f4bb11fc8a76ed44ee52173734391b8090aee0761778517d3da6e112c627a9c42774c4c6a31d3aff6bc0c62fe573ad50dbfe31940d4435a06a610952cd9b71ed65eb985c0a55099f9286a4bb8172bb6d1ffc26d292119e6165fa6901f1170bc471a746aba3ec0963b5d0888730c87dda6e21f54346831d071f97e5bcdbf1567c2fae7614b58116dc8c9ad46882dd6d294d20c634951943a5edd9f4c4dbd4e350c5b10f2774087209b2358d9da2eed4fd7c09d1d3fb59984d3eb7e1c34703af2f65e70b3192362f65873dc7129353caf7ed61753b4dc215d43e4e0822e0b9ac98303e674d2fd9d573fcef5604e46abd66102a663e7286a219ab358d3b8392e16a4b535db324a5100eec37e42da99c57d81c6dd16510c3e6f3555dc3369a02873dfc3fc94ca70cfc06243cbfd3e63bd4993978cc35210fd75c789077e9bebeda9d36a2085bcf8cd4ff135838fa2114fc7c4f7a9cfceecd4276971767202a91c8c85e8f58b2cf6b0018144e9a86442cf8d60fbadd54263ed888ab80225f0dc99e41a11ebae0a6c55138ba3436735903583efc72ef78b2e2bb45ef9fab9fba18e7cabcc732036c33c95f13f46d810f3288323a6d2ee5f049269f323d8474d2e8d75081f6d9a0b31743fdaae1477e04cac0160bb8784de786cd713be5de136cf17bb15f1e200bbccb2bac28c04e43c5f39b58974469235c46d46f122673f0765c382a530b278ea6a202e09d6097d6871b1d567c3639a87c3b00aaf291361eb63f6a18ee499c70c32d2638b8eeef5b4dd1bf6add032723c4897124de1c01e25a8562cedd1ed0f8751d53ace8a5b440b225ab2345fccc46f6a8771dc3f84fc4fbf21f94b7582b5002d998b0f3497557876a19a0c22c7489457508ac828d078b72967053e300b049277120168ca164fb56edc2d4dcdd7d61792ddbd8bfea9c25f633eb68039c4b16857a30f26b544af9921552f8f6a8dd8e4ba280c5fc2cd707df1ef5cc3910ec51bd1412cae29facedeca8e23ec06b61ad4eb5683ebd8842a7414366e33a6d9a4f28cdbab4a47755f4a086ad16dbcebc4468a9676c3c978ff1d2592b1bfddbca964816bea094d3ba67ff6466856b42274ba1e4838f3f4045e1f95f3537df50cba4ec57fcc3cf518a1f64b415eed01f04d081e690d533988221fd7b0f05095c67678f8e24619656839ed5332792c2405164fe73fac1b93d7960f0a7f9256afd74207d9936ead5a9eccd68d290fa99f8737bd6774f819083b806e8c14ac6725d9b994a36449140a18ed4f6395e099ea438c5a241c4ba3162becd6b625296a5c3bd1093a764d5851a27da98a0f1a7d98ed429ff8f14c6a8e6a279225a617e1689defbfa457b5a65ad3fb3f1b34e53cb26111411e011987d6e55863b61c76219d0b06c48a6a7823dd87bc29bd053edcfafe52cfd9e2c66f924f5696880d2e6e242fd3fc4c993354ca12d85d740bbea871c152eed2fa67177c3a91843932c7101eed33c68d8126df27f2ad5ca3693d22490eccc4a2c1c12100ab9a36a275c9192bdb4050c663e281611038f169cb614f2a9e9cf3df9f82203ae7e3f96f5652f7fce6de0ade745e370ff08486e4e0caac3d8d5737df60d017714258937aa765da7ab80b127a98d437ab72207e88315e57eca4c3baa18e5ca60e172e3718cd3c0ec7c1a379f3cab1b800651c278ca5e7721cff930805794f2a2964797f88a23028887ef6c87477c86e14a1e59959fc67c7ca83ae22bcce1abbc49a86b7d30b48bd78fad9b779b4ca5ed4b0ad468c46509da0edf1ad5f7e574e632cbf7b849536bc371cc94c975d741630852c13cb29d429eab0408f880022483b7c80084acdde933d0363c97322942863513ceef62af4dca10ace245d9ee2cad4add41c426d86228a03ba7a0f48ad3bd4aa1155447541d98e96c7ee32a48ebaba8c423169dc99564eddaaabff8a255ee57fcb7fc3bb9368ff125698c4804eb139174976100b8c1745863c062f0222138b32c02a4f53bc86dcf0414bd604ce52778f5e03a88829721abea993aa462ab53585a024ebd7143b878ff661b6f41666efe579d42da22ad0b0279e2264fce33057b3b62026024d31ce055d306b348860d1533816ccbb066866dec54db66a2eef7fd002b473f49b74c4286eb589ff5a70deb11db10a03e81ec89c5928d79d12ff2510e9b8548a4a0839f8b594ee2f946fb202d1ab630c343277e842721471528a280978718eb9178dd3410a7285974048330a2cdbc1031d8689d8a7fdcf995d6a4095c510faa2d7eff20d69d8979e62ee50d151b4791fca694bea4c75fabc29ff27201f7602ea5e88a1d4412ec0d583c7429c7c2fc5c3ae40c55034a9e201a728b5d5958e672b383a14f9eef97c443d9fc74779d675f289611409b4eed72100dfecf2f3feae8a3e2b04a0fe578642e875e1d031ba38c957c75b856b97df81025f7da4d680594815c1cc5cb679bcd5a126d0c18a405104a33d32a59730cb13cef1619915b0affddf4bc6b7fff5c92b32e23fc686631544b147d5ff962d88919b94589dd5db84519395edea9a4fe81c304574ca07be0e13bde0ccefced918b9b27905ffd25f4492ec3c222e0046c68271df8e9b91d023a18727290aee7eafbda3b8cae05f7fcf57762ca4b6f646cb2343235d831905ad4a9ee035c68499d5e2b7d74f4f274a431df4b344e7ada3584c8b92b776b4c9ba1b691c452e4530870615e019adaaabf21990397192c04c73b3b642ccbf86c2737145a343b3567df7b01607d4433e8a1e0d058d8efd3eb8cd591abc7f27802671782b93605c016cc3c6ac1eeae5f16419984594dcfe6f44d18cba73649ee5a819ee86bec43adc3513d01afb8d0a00e88df0e4f18c0174d29a3abd22cd92611ed1500e45b209a89777cb6f499b0bb687efbe996b55d632176f24f48250ddcfdbb090d2683a992d4c43da799d076203812dbdffa1fe87626dd4ff47507b172670bb9b78a14f1f24b6bd0980f4b6487d5915a1f8ada162c012eefc8a6fe2bfb11ae0cd1ba085561fdaa5fb2673caa6b07453c2665bf2369910309c4848c30175d766153a8d3ebe697ed129a3619b6d56e846bf293374c3034b2c27663c846c568960cacfa56f1c1a79e83b59fa26fe887797db3a6783895adc09bf27b13bdd6a8235582477a47d57586c1b680ab2f2fa6bd5cf1a59cbdcb7d097c23a77abdfaf0f0aa422f1c11f044e057b2df38665aba40865f06be989ef3ce9655b2f577bab8e82fc44a2171ca4bcdcb7bcbf70587de0e35040b64547ffe393973ea54a5d1fa1cabe39a750c0a925fb09fa5ef7e858a38fc4b2ee405eb4d9851fef6378d87ad2e181324e32db052395bd89d5439d16d551642ae8e49cf881cf67f8f46c680cc847b3a761d43ce635df38961183a27243f9e82deb167c31e79ac379409c6a9fc5ae153f6c98a6e8980281c1f4137de6bd4f1031f54d700c3e1aa957f344ce7c4f880aabd9f5c5334995622c7092d516f160569e16ce5cb9f04cdf323973f431ea3e05b71283bd4dc472b89eac53aaf835a35f8d90905cce6c6eef564b58595a6767774ad9f467f7d42f0133db90ea19730c88c013bd1dbbbdac1b686636d9a267cef442b5ed0a8695370cad7ecf9dabb981c18a8dab2f743b31da71ea258051b2bff67e225aa400d0f0b41eaf80b1097479b6ccbc0fda6b42d2da873b76d361c5321885b2fd412d46d4e5472a281c23e46ca546c4dbd08669a2b30d7ce1b3c67d70cb730b3c60fbcf4c66b2b4bd132248025bd74ab84d2e042f4b0f3c1b2cebd240ee5758430cb214edafa514add6410631a6536ec8766b7e162d8547da1d3dc57203be7d7ab6ff54583de956ad1824629ee02dc1da9bdaccad68778c2240462986bdb41719383b32fce865451d379d154cdefaadc7677e083f0679026b173277793407bb4f27fa3ee26a4c58428a6247979fd40171d59966e46eb75a9da9a22ecae917d3b84c2caa6587e13e9a9a0d26dedcb4a0a6b4a6151fece64cdadfd5c2a172b39509e030eed43c58c05c75b3238aba488dbb7a853af2043f3357e496c120eefd11e39802f992a474e88ddd4a42d6769f91f5a641cebb6f21b643c916bd7a4091e54b969cacc45a6aa781dc3f78112dd640856af3b199d59f637e0e4d367e0b41c8631a21210fa3189b81b3ee7d60c39758a1781795f4b3925774961de5eb071ea6a19253d4e8f83f215050f715120658f031addba362924a7e243fe856486f55b05931dd85069c097d76d9ab9ccc93b1c3135f4b320e8129c9effe1eb727ccf96e499949cfb88b188d28d8e7fac07d135fb4f19ff39fed99e0d6eefa0d3d60c9e26889aebcd5b0e02c6760e2e4c1caa8b1eb33697e7b2080e79aaaabe793d1f2e72a40abe07d2a6636662af2f76726c1b1f8c13e755b36912c600eda4e5570fee49d418356f18f7e430c360b8f166b722dd5f4df79cde007b390238e9fbb7df2b49962ddd5b8a39a2ef74e9c8d3efe4d48933f0353c3880167345d82da50c99ba158bc9d71e9b99527842ff9dbef09513d1c2d6b73237bc24a9dda57bc44195af06891421d548d3d1aec8451875170eb0d551227a3ea3cad5f5d36b82edcabc6493b1b42c77508ed9c1e58f8b55d7b78b4aae4fb99944b0916409c76fc298bcc7321db9a55101c5b629dad126df596707e8264e8b3f014424eb63d2d8d8ef2e98ab00f0131b32c34092cd7ed20be4d9856343692ae9df8724722bf5e5b56347d7f7c24d9e81a119f27f52e81560a8924f9182e6c4b1c12592653e74e5f56314a2c3ff7b34cb930aae32b680a6566118efb4a9718e9e13395d83a7d575960414c559befc6ea7b6b90400619d18c4f5113d4b2342446ced999f5816e924ac81336aeb7710fd855730ee759ee909eeee9e251c05767226380300331f51f34209a1342a68793908cd070e1ac9ecb39cd77bd55b26cda0ed67ea16d2c4426298b4b0ba4a0931e796529269d7b2a4e8ea011a089c19f4f2348c48f464a99700d0fa5bccd8070b26e8384a085748971dec8f60756d630db8251fd339d5aff01c3319031054b89cd52175d404d18771a5454123f0cc488352c9dab493c1fd36045f39124fc73b1ebc1725763528a3c072fa4e93731bf6e402ce52a67188f56c0f8c8316765c179b7209819a311bcddd0efc8b86bb86e0eb7a32e8abe83c4a3ef33d5017869a7d303e454eb97fad18a118e181d3e63a4a4d28d856bc0d02e66552270e97c34558d8f6e1102ee6eb50ab2562be9e4d9dde3ec3226c51d9469c7c21e386e047597fc36c78fdd90574b512b010e7a2d33e5b49717b120c1a2d9635449d70bf3c3c0c445b120a2cc7d67213f770fa935493ec56553b2fe51a5ff2a66bcf0a8d42b736c443db76673e95e8038e12dd15ecfa5e3426f39f62e45a2c67686b061653046f1d22388916710fed28f6147e7d547b335284319af4dd40ffceddcfc4a8e683ce50c734dad643f7f71bea0c0e38feed49dec25f025ea585d9b576ddef95e4bdc94736baf245c20d553eac0a6408a52b836478c3430b1b0c1366b9825311f23b2139f4f12e32d0f2a0606524d77d5a801636e1b8c3ec568640367ee1bfe2e7f4d1118deac49f7853f6e98397791196d352b10dcb3de3d1d86de57aa9b3a69c075a2f13262d15d4b6139c6b7552edd927474c11379e31bbcd66a8a9ae105b320c973c46daf84b2da9ab03808435397e3b7abc289149f2659f1ac4a336c9f89d8799c93667baba5598184ca4b281fe20d4113cfb048de2ad30d0d7bc6ed2787dbda469cf4fae30bf6e6193e1ef1ef77508c59a8472af35edc5b1de89acd389ba92feee899f339d7e30bd0f2bc6aa72d440402a48b5e1eb401b9bf20c354a81f1a7660d88e8eaaa67d5a524efc0ae7404cfe94510a1054ab4637c7080c6b43cfbcbe6ad60d65f2ef25f9a76f6f10dfc90ee9e2f26a71e3c251863208248719a67d1fefbcbba6fa8c7cd2648e3d11dc7a9106bcc848b924972466a3122bed847f4b2f2a24c45f5433fe27bb19ecdbbff4f4e94e71f932a1fcc36c206ba222b784d7afb7da51aa2614ed030ec87c7450a0721c8d8d9361969fde64dd5884d9f2127fe57c1cf03ca84eea8c884389a9513a26f33476952c3446b10c06883450df8693d2051b7c5edbec814c69d763de4a6ecf71c863795818019ab57acb9bf8478e1eaf2149011d4eadd9a53bfe3897b44ff744b98f050757b604ba6f1904101096978b724b8561aacd169105495ed975907a5d8243523ee36e56ff4a4e829a87ee5a478d13d68c0f3e0e58e3dd3c60860224d809fa953f2be6c99c351fe4bacbbc51d7ad790e6fcc9a364cbb0507a14a943acf9a4558ee8881dbb158c110c6e28a940d017c169eed0e03a2356dd2c5a6d140e1cc42b8c47bf6509b536d316d45dcaad64607af53b0383a157c8fc92ef528aaece3693c384946ce8841bc823ac3d77a42b57a3e2bbd92a18261189408f39a23357569ea5e7d287fe8ac445cb6035ea3ef257f1a3f36cf0475e6cfbaa9ecab9a88065c3a8b95ef61d853ba423748627d6260ffeb74dcccbed7ec99fcd78364db8d4a570a5715c01d9401f3439d3799ce89fc3f4443012f173563af568e45f3378d0689e9143a2bf7ef8b78330e41a16612e64d6008300d415fc07e5366b90fb6d9c40653deb00e26321443a39743975bf9a3faa203d97b6d9728d1043c5b81a3dbd67a7b59c2243cd4629911b6a2a00ed008d427a77efe8b28c51b5dc8c3a9fc2f06fba963e2b04186220f2db2231b35f5830b96a03b12114998cb9a78a07ceadaef7ca5943f4356998c3125cb8a4c12027b40f42629546864b1e2a80f7425d300f9d61bc31ce1beb65c749ac9dd3281e500501882aef3422e8045593317c380b9b2ab580cdd6ccfb6b9e5c7d5e7a72837d887393241b35d8d46142b006ae97e48e51b852bfbf940062614bbe3c2569eea49a2f135ceace080c46636bb06068c8f910c66d413b080e3a55d1c57e68a327febce225fe1eceef6c572f9bc7fd9d68d13ca0eab72d62d1fff395117c8ab9a93b0e39deaa4c4483e1a6285634dc5d7e1074032e899008abaca809f2aebe306fa7648df99bc3f84a09e9aaeebe8768cf10194dc8f6e86477a853e0e86aced54c02c6d482dfbfe1cdfa320cd30ec4c4e12175c96f76eedb24e20be8988b2bbf89d6d81925e5d654fbd7ae158d5069e4e4e89dff0f5573e05319b41049055b619fa9f68fef524519f7bd016789cb4381f0f7e7853a26030fdf58f6eb7114770b605dbb71736ab190bf4f469ed23949d93792d9f9545903192263c294c6861c918e6271a89155297d1c703c954d6cd9ffae5f89923b3f402701d836c24888e25eae799fad149e191a86d595986532aee1a74b770a251d9f6e9ed4e0321ef38b1d843832baf27d06c08984341a3b3d9081330cb3e10bd7b0b5649956b0084792fabee9204fc7800faacf897ed232f979fc14c2428c872535245ff39cec7a5ce51bdec4b08c947cc27100ccf22626bfdddce7a80453b5eb41df37fb7e0a3f737bc35e85080037250756a7e7f63fc0fe7c73b0606c52c813ee32f456992d7c74f71e2f627b0f78f59c147080434cecc0ad3e34a2132485202a33fa2ca8456db0a96c35c04ad8fd708d92755a7f18338f07912d0d7711bc7733a651fb7728ed2cda9ddc7224f0bdfdf9e0cf7ac90ff395e75a0f291f5c74a2521e8996b746e27f3783edac625b7bdb36306d736458f44bff743f67f05f0e05a295a52d143e714cb1cc3d917da8d0d5f0cf9891eedfda497b0969a62af0f94838f9c3bf7015ad4e4271239d62c9b6c9cd5874641a6b66776d77258ec5be078e693f3eb751b12e6b151687235f4d0277e54c297386acff1211964bf54c5b0c1f3d8f009f385b6ec50d9addff6992e83df3d56c7f775caac1801bf3811a56bcf8e79dbca402f4f97413b35e29bf9a1d95bc8c15cec78902cbb9769c1fb94cf7fe1eb6ac732603c6bf7fc9c08451a499323fa1e6a6532814b45ee25095bfbea7d0a954bd8a87cb3c436436dbe7123c9e85dad5339fa13cc33f6a1fe2fb32799d190ab1f02900644e1896654945c0928d03588b414cd759f29480136bf3927573da89c7943213dac111483ee198089d707a50545b372d0096861d88ef9c0cd78283730e05a77697703de6a5317451d2ca5df29e4d2f6b3adc9b67c1d09976db3d61d5e214a24b961be34598dc1998def772810a48d2c07cd06bb49bc2edbba9535f0b065d3eeb4070db6bbfbe08593e231b31483b0477a88a23f1d271e6189a9798c39ca660e1f82431ad7d659d2b90ac79fb41a1c2c780f7f0a6ffd0db3b0e764344d9c044305b2483ffcfd1503846fb207efdbfdd964a76f6c5d4b42aac4c3df908365a3dbaf46056b68d03c0938aa19efde04c1d2f66de1f0449a2cb4ad31810ab2d99ce60f2f26760a79c9095acedbe8987cd17307b2e24bad6ddf827e0b15a682f2e67b2476bfa2b8e55fbe73b2c60eee3aa3589f872843681efc64a10652a2bdc31e8c1f5e28ec43c819bf9541e37e0980092cbb781abe518d9b0155966007e33345e547edd337bb7d57404da4f92f910e9a77e9d22ea08549edb31a34175e162966195d9b201620282fbe29e5d0f86accc81f805072ba5419d6698f1220874ef9dd6d31aa97990eca4d5957b5764e9acbd6a05248ecc159d4ad7dc56b7ebef15104ee29e73a2106273ca209388d2171455df8f1beeffe65d69ae763cfee2125bdc7f0fcb3bb19f0ca2c2e10da92d8fa79fbb4fd8074febcd4f1a4d02f2268f2ff608b76df73b6fa31a1dedba2839b41ca080aae042d75c06d2464d696ef46efe6ae570a3107f2a61e88e23cb46c3dbb0728ccfcf06c80c04d6e745ebdb68c75195a4ed0b818f0be2685cf9de250436a7796e206792f63f44dfa4df1697367efc1015dda8c18f0d6c81276e713678a3a612c285183528aeab0fb0b3aff55dd6d876546947a7c579f2cc9b3555964f8465e0a8b415c0f61b86cf78cc5372b359b866351c4d9ce7cb88b397461d892089f9f1878f34daeedb6977e96a0fb5ef6a146ed65d3f89c87797fed5a40d2010e3feb3dea5863c5e50d405bd0b8144efce4949468eb35981ef1cbdc32268a76fa65d52fbf6f4e298076398d70fd9c05cd9e08db7b1c9b82ca9aaa6efdf5a8c0ad1e73a623d68311b4d7c445ad06bdefe5b6c27692c833946e9098638771761c8aa8d4053f9a149f623bedfb72a7e8933e82b26d085b34efe8df31e05c9451fe2096ca91d5720f54d752d728dad794756b1bdb2b231eb87ee126590443eaac077716823df5f9630b24077ecae95c10d49e5dbde21d56647176bb6c1dfadad1ff205fe97ae26c8674d3447e101dd57c0db46651a255bc686a615aac4fa9aa5bd2784fb075f2d3bcd70723a7bd3c11801ca1559c157833d2b26ec3bc59aeddca8be039aa71ef028d62306658772bd7a79c2cfe431060275a8ea1822fbda049205a381996b8e2cc01f26832f031e6032764c2eee39fbc1c8c6b5d3ec29ba0c54dc86327135ed320ab0dd34db3091bc725efc41f9cb8425e8634cfd24cc9d76cced4ad019b56ef1c0689ba18dc3815777bb389b5b7c4b25584e7ae5706a3a3c899b9d1d57b81efccb7de65bf486bd2b9750568231918b8cfc1f55c65ac29767e25a40d05506996a8e74f43a56b18962edb35b277d11b49f9515875fbf1e7db55129b151fa24b28d78de861fb0888408dfb2bde7f770ec77ca08ec2c0d590c0fbb8e9cfcb7eae42eba5db34f667cb1b9956f1fef46e38c261de81b0fdb218e0eade568afbdd5b5f76fa7f7f0640ec63bf9e20399ef84bcee070d92d5ad53bb77eaff5a38b01a5957f9985992164b02fb13b4827e0785531853ce679369cdd4074c8e6d0aee662345f7e2dd3efd186077d65973c94c4e0d6c7c37c94c0fde9c7f5d76f3d273f57dd00eb5e3c299dd8b185929f732e57e66f19eb6ed0b8e35c2d58c99511b91c7f146cdd9f8a608c76dcc42592497148e1c96271012d496300e5494809382f31839c20d5695432342d5216028763e4983392a49bdf29dae61bf5bb11ed806734385e550ee87f0fb02aefba813b646c0539618092b818e7a2e6ca2a6359bb965dbf8a45a5581a1b1202dce712ec45b77af8379d1111d1187ae855f5db6eedad04d04ad14dd1950b5130ccf29e55883af1c7367f3882f38c319f039c1729421c0c574f31f098f58d182daf8042068c55820c60a404f13f4578221647202936258b7d467fa5c48a15e7c8d7070e6e3ccab3987dd444630a365013ccce48bc001c6e7a0b9882304a3bb04c79d19d10f6a08ad33be6143df28e703f38218cc3b07051a10f0a4b89f1f01d6a210d9d3f351336758efaa0931168f2874be13e303c0a05e33ff5c602015eada1334f1e126852ddd8fb3b5e18c4196537b1b1884f2fc9066119aab88fa3e35008edfbe48ce38bc1e9fa01e4b0d14c360cb6214005dbbc30e8352e950dd32906a1589ec27be4ba089e1340d6f999b65731ae9f1b91b7300eab910348573858e19f928fa46f0b00be2e421c9d55ced5b48f4d5baf0617a6d2f7597fb70cbb2d28a9c72b628abc66463420fb4224abb6725d8ee256ddb85ba457d2ab4b41acdc56003e0254faa327a8d0bea09ac264883b7c190b2ebd2de1e1a8f6fe41dc097389561296b0aa23fed1af560cdbdf2ab162e024dfdfb8e8c6e5adb6e9a4d6443ce817e6d6a97f503d97116a5ed1534de3b9444e65fd42eaa33206adeda33e8a5a1820bb8d384b75df560f57eaed661e316be8b7f72d530b5d91bde6335ab0f587794af6110d7abac6e17e881336aa0a8988961567d8daf7e6c470450bb49acdc2fb0727630ebd226221e1b0c1fb648a23d7ba31add5d067d90da6d88d26e0a22974a1d8159c6ac2a822f7b151057638728f2a10e4d5e42282ff08cba63aba7fec00312fb7df41771e0f47e1f1b82926285d730672d7897b1099ede6bf9ff10bebf45b69eebba55102d5a7e7c5cf38d570a8c471c7012637b0e039c1346a27dd8559c1a011be814abe32cb64bfef6eab98da50d66b5d5317a24c4f07aeafce5bc458e5b112de1dbccec9a2812135c54a7a76bb2a9b20dd959253555f041fc9157ab3fca84c15d55a7f700fdcaee6e62aff66f1ed5385586e118caba28213e68d9e16a3944528edd40f512b0167ff3fd8bda23f2458dbdfaeb54b0a68976f9ab70171c4d1d6f041374a692992214ce3376e05a57660ef0a5209de9f2de1662e773552e863d4e374df6840074ea02c9da97e8d8b70f4bfe78bf1fc52238424cfb6b425b85ba8eb878ed2d61c0f5eb70bdd8c3f72c10b06349b30af53af8ec9cf71967b095cbcde4538bd5c4c05bfbe5843cb287fd15a4d9a4d52742926062cfda689f8a29f279bf4825adaf82ba20ee627cda31c55112ecc2bf905c0a272da33a9903aa1309af31697b216312ad7f10feb25ab519852a933cad33e6c19562f4241768e3edc548398afb4b4044dda1caf78067dbf36e2b6d841820894a69bb637b7b5e67323ce3afba85734e1c1e5926385525b332e9b6be298f82f8b93b44ee2a75f7363154851e77912c47a93f58b2304e160efb4e96a2ea06b2e8d537aa3bb72dc0bcf16277f3f74eeb46bafe57f1605104b791ed3c0582dacf3729490c4485f0fba9cfdda4ee33d695f7bc04f5def820357174691670e6c95fbd247ef0af82a0a79a17bfa1827fee15a8dcf47db9151c18baeba399a3c972789b1530bcaf8b47bdc4f5f42acc702f30f7d6031e872df5f93a537af12beb5eca1b24f50943f55953ed39f137956d53bc5567df061c806b07a0fd9081da090d46b0a3d95cb2e7e63f305ec0ec415259ba5ba409eedd5574c78a9e7e329aa6c36c8165fe27487009b0e2b8fb220e4855afe34747b3ed4c98500b3f5a1a73285f55e7f1cef637fdd68a2aaaefa65a486404cced1bbff5407498c60bee84e85a20e559391fcb2d923d0cfe7e3cbb36dbd37774a06e981a73f0127087d4e7b69e35f237d6a45e0305781e12567d1382ceb3dc4dc8aefc05382951be4d0407484c974cfe27ace2f0ecb2fbf173c9a84f18b095a6021db1a24e97374865cbacb6f14d788fcca14db83023a5aa73d3abe894bb0306f11f17125d029bcf3f1e2464680327caf720fb2a382d098e0ca64833ca2cdfc27868e743f4365d2d7c90b9e3b9cddcc00687113fc3b0b80616e4ae125c5b72166d9e445c0d9d9e09de50933196e0153017a3614e3ef6464c6c0c0118fc0d991d2b4b6748c813f1bc6044ce4857b37a5b7fb9a17193da045838abf3bf9a44c6aea3742330ac5574b078f2641fc356264ed0f3b357876b01e948cf39a7080b3e63ec0b2ece9189df110c92ff10dcba4edb5137f39fa1915ee10ebe75942e7ff0d6718fb3cdfe72768cbba13f24ebcff503273aaafcfda978b83e7cb9a19e8d7c00e1a469c25cdc4046fc87639f3bf035c01179b38206bba999e308679fe2fd85ab90b72f19df08d8d60c59d46209763c4609cc5396500ed2c636adb42d7209d0745858780fb8c64961440ec6983c23950f997b23bfa2b7e2d39b139ff62217d20f5cb063d528c98658c43cdd16cf75ff4102be3ab7d28db0ac1dbc0c333ebe60b6bb592f01ade3785f4999c57315a192220e3a9f231af35db8dcbf67976e8aa36f74993449466c3b060a6268da6aee66cb53e04df7391e303b5721aef26101bfbf610ffe95d606b6b61e4e46229790d0ebc063c97098f259308cdac8df9ccd8d1ae615d69a8250423c823a41c5df328896367dda41c92f32423311483e6db8df42b6f147cda51dea6716bb7de4be402211bdb9e9da037e80778b206fb91265c613e8f83b7630d365abcf655aaa2b2ec04fc991d8d97849e482f5c92b04620dd5718270249e1134d4c83b38c28c27cb3cc552bc7aa6467ad3b867cf1e21a095c68ec1ed54e3824c9b6bb873a6b993a5e6a43d7e4b1a5053b09f16113ee376a2aa2b2625ae78de7ab05ec78dd577b509398d1c53c9f331f308b6c0aee0b536210c587a0e6ad811821721584de1710844728668bd7fa4f4a8d823028f6fcf089e1985b0e8328c33e43254314e53e03c778b905c8ead59417bf5fc8c797f61f51bd27bc77c66b024c97908d46853b2ab2b36f1b0118f314212e4de97bd3f514297498d3ab5947179134c1c002ec06825cf40f8afa928e0d03c14d0d53058e2f207781a9ea5cbc6c98af0aaa88ca4d27a7592986d293defbd874a9c38722edb13844135e46f142208d08194e2a6dcbc03a91b395a9dfcf523c6a8a8003cdbfea943e70b899bc6d96cff99c825488e221a192df8f9287d48f66c7960656557228f8b0e7f2a9236920155b632636f372a01178320e9d31b23d6c2b4122794547b0a608a122f5c2cfe32c00e8346177140afb065d30210ae1f73355fefbb83fc850be7b2485df73db42bbbbadb37902b6a6e20f08f3ea1f925a18583fc3888dcc71a9944723ff522df736603f4b4ef79b0351eb8acc76a94487f0ca6f5a9163dc09983ce10979c674c25472475e743c12ef3fd55c9fd96d2a9fdd3da2c21175ec8ae01b418a363dfc251a73825c5fa5162979385a5107f9e8c72a533bc54a94396f7eb882cb9469e0e9e844c89e365660db30d3ec6cea7587b42c12ec852e0355c7eeb5303633a1e28b17e85e67ac69eb3c5eaead896f21f272bddfe5a538bbbd2076c0e79099eb9a3d6ab77442514eba47b9eb1b5b437ab8c10195a39939f5f926e2365559f66bd8c824db9d7e8cc367adc1b9fc5177f4f61b0001bd5aeb187111fa635af857e57e9c8972f11da71dfc5484111e8da7be96d2194f8536bbcaff8d4fa45670ed92f9dfb9e60cbaf1ae3f65f0484a8ce081ed4c6f452f05101c4bc35cae4aa5fbca0380ee216ffcbc92c636682b4e0a0be3282633a5de5a821c43d2512e1490528462886f79832fa15b8341297b218dd533026592381de537299ec31e16e4c1a8df0a1e1a0047c97d01b8704571a31bcaff2fa32abac0d671642032b90c65f444a61441857eeb082f5a1ca0a5fcbbe2b17fe522d1558a01e969612d212ba4aea658d7a5085c3f7f57a5733dc6f7d9906cd7d6fde5112626fd2b1a67cb3371bb7e3685cbdc6db03aeedcc0a45166790c6e866cb01889ff874140d761935ac49353af93f16dd4d659da35af2d6ff4822433b89da086b3d46e651756031103179cfee6b4872a218018941d179e3962cc801064fcd731aeaa6d8962f90ac2c70b1b6cfe973cc404a11e60eaae42c075d47f73d9135dbc0085905d58cc67ee01c65633b01c8cd107c58475a97270c528c6eb1a54d86ca5bc24e3a116b4954550a92ecda9f66fc8d811a2eef001251d1e59af475d7ce0795f9be2b778b2ba98ddbfb966bf084a60688aade18eb48682aebeaaa4b2b8d872dac58a0c92ced94537bb7f715d9f33254d7cf8c2f25a1823b5772b8a69852c8f1e3554b109b1d91c07c0bb619db62e8f99ab4d9011d4e67adcdbb9cdd5d51a0bc99e77c1dae6b1bffc11cbc9c9d5af9d85f9e39f6c805215f83b44cb0908e22affa31b600267738a9df31fcc088c7a28fc4773f0d0b8333b4edb3e3f0162858b5395a166ca68e8d0950787323a17caccd3ee5406203b3a89818f918aa00fc9848ae96dc86f39b9120985fd1015748abde3b41e645aa6a115ab1c9c39ddb315bca58f5b17d28ba38bf05d2ac16a50c556d48a22af90fb9e8695c841fb428558e440d9085a11fa1a8b493e7b988a768a03bfb31f11d699a95ff51ba9cfaff61c285fd17de2af1b8034c77d3c5e13260bfaf163a69b3db31c910271877ea0a50943b0a7eed1ecb8c02c2f5ff1d0997e96c73df9bb04bf705fa976199d0934e8717a348258b383cb5276611f3ca45edc84e1e58e07801080bbf88b0bd1fd1d635fde3ca114813f0cb9b320c354e99c932f9c03b96f7c5f33d629e3dd40fc5e83d9e8c3b36645b9a232b64755b0e4ebd1e98b556d8713b5386f6f4cd4a4ee925399938bfbf61ddbc463413a90fa32f8c490ce3f1ee627f67c06d98d8039a670c68849249498614da7e2c26391063d65be914f8878a99b0fe5551a0841448192a8392bbcdeb878683b145df199ccd7c6922e4d13eb0658a74e81781506401f6ba25a720eed3e78ebc037ff9d7ef6c87e0fcf3a06eca0fa373ae557e098773e4fd78d10e10b82d2ac19d8f114319e8c5e19b228743561fb414c64216a167cd7f5411879abc96da798757dc9d3433a129f7c90b2da409133aadb6c74f1d979a72585f2282d4428f624da1feb5f6a330bd11c5ec0bd398ed7bb1339d69b0c7a145812e3534cd45333ddba6bcb5ac58f535eab079e8e633d00d9163c4a4daf0683714ac88b2c9de0b901974cd93d6d8bfef3f44d15c400d8e27e470af14afb1ec7ad9fcdc23148a0b75473051094d6121ffca539bfe5e1e8832c08100fd5c4d4c69a83d3d7f970fcd93f75ff8eece235571ee917cd39eac7e7e423cf3a263c11317366469f510c16a3bbe558af84fa477f82c5ceb689deb2e926e99fea68ad870d35c5310fa671f802473459fe29c183a897037474f44b3d5b616771fd45b79af340dea759c59ecde86626825d21504958df869a385378e04ea32e701f09c0c13f3c84fbafe7b2bcefdd509d396a90e7108ac5f8968ce16298ab333cac69aed2feaaec91e0b55c1959f2cfbb097ac91f618068a1df1a3b7c1a95a75be45fd1af98d5c00f6d5d518e1b543f0f31b4312957437a0a457d58051bedeef3934b809de16332cbe2e3912c559206b1ee627cdf018f66972b239365c5ad67ea1f45b7d3f0d1850903ddb85d8fc5ba87a151e381ba9a8fc6b1925d2e0630c96caef3dfb9f58c18bc15b597f9059ba0feb17cc01094ff51dd9cf212e96cc10217e16292da1a3f98de7458ecd80143fa4cd046051865a645085db8fbbc9dea349de045246e9e5e02acc08e654923e08db47475b0221463365346a629fd0009772039e42b78e2423148ed40a52bdf1a1246e0da25ac849274a055c83c3c29a0d9b9734270e41aa66a86bd6c9ac39b6a923ae9275b1600cb4ced3d20be4259fad0e09af07db23f3510c83c2b4f59815ee456a47f26997dee1c62f6ea24efe20d7d70a7f2a10c721d4a035b65c5bec3883d583d0ce576851bdabf3ea19156f4aa032eeec7e27f5a1934dc233ee014da8e4a71cd6786ee8f42a6e150746ceae5063946f90ea9a1c8631e769cebb44e31583f6047a33494da38600c7bec7dcacc867048f9bddc0196115d6bf11c90e0035ef435cc3e64e331712a36a54a631df843a6b7b26d241ed4c9ab1d105ca75aff6de41a4772990038d6ab43bd808f93a02bb230beaab9a6951fe08a81479bb3b22f6fbe295ed672629655c9f5837cf46ea3a6b90718d7f9853aa6b8b99e0903132e14cb5f789804bf165e4b066b1a6c4d2271114844b93335784c4c55b476dc64749abea5635c6941e0f09762e338b7d7d5bf73fc7fbb963fe3af4687a9d3439bc82dd7367b3935e46071115aa70150255855d8ae48b9368b4ba8e7b8f2fa389d73a7dc2deac1d313fcba589e6e3c5a61999906bd0fb0d7d5fd6ef390e50cc8f590e4e2767ad65e6c7cbd51bcd16e08a659931d9fd03ca19a6e09b4fc8ad379afd12cdd40b08031787d606039246de310f43862cdbf9fc969537162fa44abf131c886130b75b3b4aae6508af56046cacb396cb9a4521801f8e1f409002e1aa4f0edbc0aae25cde0f3c642597cc6a816c34da4ebea66bf1a584695eff60b96b7f71eaf7fd553fb85d7f93eae00f3f05756b76aad00de7f38213bb4d55c51b50a63618c97c0ec1fe97d87fde92b9f1f620ebb9d03e0cc8977e8ff1064110f4ceb97b64b9fcfeed226aa57d6be3f7445d7c3305029402782be1c097ff003390c7f3b7b84cb3ea01eaf63a6ea6db0cd6f24771e4b86908792d9f1f71671f2801c75867a2721f6d55bcf833edc17f40f43f09980dfb57acf2f1f0f4abc6b456b2261727b967f8a8c0bf83a33caf4eba99f8bc236a70526c0c1f04fee4797bbafe4db8e7a2ac61d08f79e001c9e75d457350a58444588b43e3ea1910d6032bbc2e0c3f011f25f3d695ab5e8e2b9c2211e2aa03210244bcef289a9590fa1392579e7e1deb23345c503e4ad0980e9ea89f93f4805847d0684e485fdc8763b88c0bbd81effbe2d5ecfcc508261f90cbeadf4234c5356eca2d47e784e0d52f08f7628521a913255ef3c602e1592dcdb29fdcdb0d862e3aad2760074c7b1e9f3ac8284de3c0b9273dfa3e8ba848e9d3c2fb8b4e85189b70cfe32ab8cfc095d2467ad0db9c02a40291e86a115e180f5c807758db59980ee064e902f97259dafc68622b727099af886f9ec60e848536854deb84b746c371bf2c30d57e5dd20995da517fb9286b2b857ebf6bceee9a06341e6527bc081ca0f964139b03cb7f751a4e0948b5ad24a67c9007a5c6cd0799190441ef9b12fba66973b30ff69f5dfa0fbc5a6576cc24b8c3d3e0eb88fd47bd2c6ef2c9ec661da51cb9a1e2c8f23837ad6be7d0aeaf060d7af0b5f744dd8add8f9c0f6e904475adf86620c896fd5ea183a67f78dfbaa8382f1cd6da4cfc8208ecb4cb418a867c7be0453e0b6b9233b08b03d77f91c5c6c795d2c1bc59f9fdb3c637b553a56659affa285c69ed8d4f2b301f66baad2afa4b8585718801a608e1691077798cb3016c23a4ad08c646bc1c2af713d27cda5b8c3031813a0d1231f7eef5fd40b13fe3ff356ac9c0c97836faa0e2f26501198e9778691bf0ae3db2c483e22579f6e726faabc57412f9cf4353ff84da0715c1937da44f33fec55db9764c6b3750bb92d3e22852fe9260f171cdcb4b940da790f91f1d4f39849dbc3b054190eea4a756761acd170945c34f7c090d99d9bdd7ca6f5d8588e9b54e3a203ba7d1ebc4ed2dff2e06680cceb1e74bbf6d5a17dc20f5d4ebf756f352fbdbf7fecbe80fb3b6695612b8d36ed342a24aa57fdde191928a4fffdd18c68925a19fc0bf16c4c311e328cba59f59bdce068ed7370257e1ddec89c334782a2c0fa3f61ba7c6430f0dd23b07714fcb67c16eff38e0e8d4c9dbd3925126818554d531215c1050c1e8463f20ce99a23558c19fb61addec079510c80b65f79ccada47888c268e36c4a8a46030e933ce75c4c4b3be95720c85b2b70de3db1d2100035ea238d9b6bb9f53cce7864feca2194ebeee93bf54589aee8ba8634d3a6bb4c028035d005d41c28d03036b7068f68953af90c2a2d35ba7946f3be8c3b2ef5e0f7ab2791d7c6a497d7fe1c68b995ec4648ca0d815e8685a400520f21d651c9bcbcd07456960370680788c0da2bd444a3f9a947e8ad17bde025618b2e86cad6ce7cc3211ab0c99d0f60e0166b60b4dd95641c10570d410d2de9ba1c84503e021f52a1eb72ca24d6e6346f9c88258df6dd8b9b5485d2be9f83a8529dbc13ee1df76f60c638f7f66905e85dfe1f11fd46fec7e2ae40e658b09a94567666ba79dab3b05f1b6a79bd6be513fd9cdb04401f6528ae4d28b2443765ca8825194ba5c0bff5b8ceb62ae5bf341dbb92208d35fd7f49cb3c56195df05597a8d453f828188d7739e098b29b32102ded951fcefac4c98e3d9421682dd7d67bdf642f31318ef0811612f2477885e5f364e1c779c574c2574d9c8dde27670844b1aab2ddfe613b5d846ff76d04a34344daf1ed203ec124a0900811731b9d140fd681826cc807e304ffe2597f679d47575f976b201282827128a106fe8e8c5d1191b0d90f6a7757ddb6a7f5d2f4e38f10cc63c3491d2f522e439b8f052883f1b92ece2777acb73d38efdb6afbe683bb7d70ab431470fb16797f79682ccc6b733c1255abded384c2a7fd7d7bb4be40ac2834f5b4be09ec9b04508e3ac0c2c86e3067284e90577245df963ac4bee918b4e72a8b6b272743f60d6c1fb051b3e00b5bb039e72ae54ea274f748134598f92f490d847eab1cb7f00f8425e2ddfa6157540ddb83254a46010eb9acce393c29daec30814ec759146e4699ca0cd0841c41c2635228e50f3c0a4dec56e61be417e5bd97ee9fc021872fae5f2a1ce63022c1df0df4d7e6b06f1b033ce9710e5b3cc2b602719760f7f5b75c6a6813fb74ac269053ff1570a69ff2e9410bee389a5cef4e90a1319f987a661bbf42c07e51355ff2244b6bc4515d612d68bb824ad489959e68c7e9fb69474d930ba6292f84f664ff57f0fac7e05a69da827886b3fc2dcb962280a55672d96b911e481884a9b361e270d890cd01404aad98151ce16f80d4805086c63544d0f2858165b60abfc57c5275638ec1858ec1ecc8382b708250943b319cae69eea985c0c432b117078a9c12a88d194023769ae8ed453181911aad0b42bd601bc6a127aab948af1f8dd4a64fa7011c58c005c424808ce7098314afab097e8a6b2a0fc6a635133ba84d8d680c631be16fe3b71aed83aee3f4111e07be7a03c65adcb33174121ea0770e119fe6003c1cc7c1801721c0b1f5b9a5949c6711c57d457fe392e6b7a441242d68a1f52f9e6668cc812920b304414ea818c41a12cdd496382c13019d22448b93f640066ba9c34ac95e702f9c02670ba081905f95694651ce29b4e4ae34ecd44c558a83c9671b48e5cace4ea59a0913b54364963a5c6c2b67133cb52f6e15f369fb4e2a0f850ac7cdae58b69efd49711499dac940b9213712deea92e11e5772344330eda26dd075fb120360bfca52346c366152d0b924334986f10b48c1d6608b9e8f6d1e93265031b258a7cd5061b00d708a11f4298a28eff124b1bec69acf57b596fc8d9803381f2bc10d9d26b0473d359c724d60cb1cd34fdb0739a3e0e447a03d09c2cd4ea4ce1c40b373477fc5e81e3df8436cfc6785c60ce453003619953e08b397911cc22ad766b53b5536202f14faf0a3e103a84166dca0d69e988c95bfbb71482cb206a0886a594b4d0c7bb30369cd450852726f8b4938386370786ec012d91c4333d38ec1518a35b3f426b2c64ba7b5353244bb794f2bb67e48fefd7854ff902114f105c732d84f89d9a71743e12476e840feab5e9e35fae9235d85fcb14249abd100cd05e1b8c42d31d468917a01f8bfb93be47c3af53449fa9cc87c6fd6a2715a63e363be7ffb2a4878252e6ee62dd472b58829a52b45c28028bffb17fe09840b115c46108d12f2beee10699f40ba6b4aa37fba2fef246da528fcf15a66b0f3b0d47a20d0bba2a3dc15d6a44af66e396aaa743ef69e66edcbb03134a50a3cb15de6f1f59df7db2b7c500d905efb460f65e182f666ab480b1ddc84a720170a7c8ba49849c733df49afe9841658ca5d4a9065096cbb7a3fa368766951cbc63939675d0e58f6a7af8841a6665766c70171d92f11fad0b3f16156627716dc846e4c85efbea42e0af44279a04557b4a89a848e3a33bbaaa0e10a91ea3b33108fe75e02a97b9c8d0137513cc7c7daa9ea7b7c245a6ebc088503f5bbe76cb2c216deae66ddc9a6b3976cadeb9890def92816d5f7a2a2e848d5e29a0ac0ef42e45a305eb6f58bcb10284e62d5f3324df03aeaf478b12e859b1c1741d2fba7d3f55907989369a146bc1dff07e87a24ac3ee0fa385897daee925606d5430c942b111db8a6acc5ca5831264c4205df9f78276f0af63c450b9199a322ccfe6cb95719f83f8ec1614ec835a7907cc863cdc973f4bd0e99b3d04a0bf1229fc827ac19888455ca6e27bd8e5ef2b3efbbe5bbe77b0ce911d3e4ab3cacacdf03a1a16f04806a1f422e4f254fade018e2379d8367131f5f098c9c442dce85ed4cf5ea15c818a1a1fa6fc13d9582561381a1385f033d9f49af1a40c81ff073fec2a0c2ad53c1787611a0dbb976ac93396af1a3af589bf8b9c3e47f0ec0390ea8978efada7da4deb08c7b956b7ad3f01f3deb7a6a38a57d613fe33cec89f368893cfa9074df1dbea977144a901b5b6e5637afad0823f1bc38f586ef0544b547634de32895b9e2e49589b6650fdffe8b32b2ddb691d1b1422a0bf690a9ffd4572782df4bf75c7ea1138ba19a69b0f9a4bfa73ef81b780077f243e4a5945fc02e85977ed1ff5b0856d0f1769b0b4c30b7174975f2a1f304c75e54425de41dec08acfdcd02a13abe6dd30dac1b39e7d62c220890588604d8d04685746838b5e0cc9833bb721f6c8925b354e4e886e312ff79e5758fc933daf7660c4ccbf2dfe0aa89c47b54c1bdc988e59200dd8b312f540f8766674527dd1030b22a8e0b364079686ab41b6e29e9a92a7831120aa244f659f7b16a8863557970ebae2ca9ae2193be326cb0e8728d94ba6f491e16d7eb124b3eac449ce1a408ca3776ab83e9e2e1499c340772524a2ddcfc664e1453e042bbbe397951f37a956da273b8261e163abf0ce424358c861dea732a197850b53d0954c460bb65b52232cd894c3851ecfdd87f9263ea8c4fa4b74aa995f8f3c3a8d594516f08c9b2aa0b47c99e2c9fd588d2e9b34a350425e6d5a6c4b0c7bab0022cc908ad82ebdceb6ba5c9ed330e211427111302971f1a3f9802b989d38d9ec90ea581aeac9d2bb4a8229004e4475f6ebaf7612bb07857fafe5146e004d7f3f4a68f30ed0076d4b5b62e38227248a4cf90c0f4858f0499d4198b808ca268b420ce9558597e99d871141a3402b11885aaf586510108c8ed0adcf164da5c8f8a5b1eed8b913dbd7b71a2ee50719b1a69a8a71e6225b19d592597d954fc6f8a97e6201948ad2a2fdcef8981d9c9406c00c0ecdfca0e29fdd95ac3f8395f8a82e03c03f2af553a1f5c78e920c7fba44f1c477a32d751e26c53b2c9210d84b013dc1cd06c8e9b50d19bf86b04beed57e969e7216b08aa59c6dd867884237cfaa46d95918b591085cbde698c80880f721caa519688e36c59fb531cf00d924f1e3abb3977bc7af9e911d55c82ab317e2e7a0ce7da0d95d1aa4a02388830f2f848e6df99251d447567b6728fa2f7ca334f406bf591b38ce9ebe4f3f80f01b8016355aef7c338394055d96c1cd883a0923253133af81d92958b14ac535d0791c4bb5f540f60ab699c6198b0fb31bb3ce26216accf7cd9464d075803312a3c19c1902a583ff0b0fd38ffb452d70bd59dea82cc91704e05caba19bae1bcb932b26b04485c1a875bd258f68543f83440c54dc9b8cdb023fcb355f8e5c1e004e5d0fd9c8d3b762529e19f2419f00996cb060c632160fc8e4b1fa396c9c389fb71c610e9a124f3d9702f2d0081d62b41a7c214e93bbe03b8df7f36e5678c4bacaf4c198060eb440640cb3f2c93e08378b85a934b4342fd866bfa8ce2a49701f59cc93b374ee2d7e1031d1757ad9428ff84193ec64591d97aa25f3bb24e3bc2e446fd485cf4540cbcbe5d7f180e1ecabcb98ba7a9c973170e832fc4acb0507d821ca1cee495df6d6559fc80044aea5e5f0973478a4c3934429893acc8f875d9e1752b4960a1eb755f4abeb7b7130ec0ca8f0718599c43566f44f63b0f5d37a0c7c668fa743e3f980ce1ca2c6be93c2c082e083e3d51907687a9ea91f0201f6f0bf29aafbfadca5e6ceee3134d104dcc6d18baaf91845f23478f09a004acc4900489776380bccc0894761fea7e5d4262f18b78214a0b010a20381304103c20f7993f83332fa32d61f5c0581df035297570a4309786af5f260871cbf25d6d6d6eb944b1369dae1ec519aa5386d67e4c5f799ad2c8bb8fb19bffdb9da820dacfd9815675af4c4ee738773e2a50b8b69b405f3b2fcc58adbc03c2f75559d456d097b8991b36882532c34f2f8338cbb7aa222de8d92de7cc37fb9e3cfaa593b4ea268baec860450e21a57e882c0ca9ea644d29b7f96795a2c364247974a38eb8cf83e58145df7f3398c38318207ec709ca46e70f1be0f1471c06086c53bda15368fb5a6a4fb8515c56f8d9139bdfbc78c767885b1c1d8d75e11f689c325782bff6032e3de36601d9c2ea56f6f75df0a12f957adbc54aeb82986cc04d112faa73b754aaad09d23d1f0db46594e24b0ea43643c0776423ef61faa57ec8f8d9be116fc9095b8c956d8eed71c219ee544fac898cc85247d81a48bfafa8322687eb30234f271c7bacf4b503886634f90b4155fba6a3ac4bb11e492e600bb6da6299c9d0d70f00") + require.NoError(t, err) + + message := []byte("i am a message") + require.True(t, pubKey.Verify(signature, message)) + +}